<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-29652</id>
	<title>Nabble - MuleForge Dev</title>
	<updated>2009-12-17T15:44:32Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/MuleForge-Dev-f29652.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/MuleForge-Dev-f29652.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26836982</id>
	<title>[galaxy-dev]  [2114] branches/product_cleanup/web/src/main/webapp: More reorg</title>
	<published>2009-12-17T15:44:32Z</published>
	<updated>2009-12-17T15:44:32Z</updated>
	<author>
		<name>dandiep-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt; [2114] branches/product_cleanup/web/src/main/webapp: More reorg&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;msg&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;Revision&lt;/dt&gt; &lt;dd&gt;&lt;a href=&quot;http://fisheye.muleforge.org/changelog/galaxy/?cs=2114&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;2114&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Author&lt;/dt&gt; &lt;dd&gt;dandiep&lt;/dd&gt;
&lt;dt&gt;Date&lt;/dt&gt; &lt;dd&gt;2009-12-17 17:44:32 -0600 (Thu, 17 Dec 2009)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Log Message&lt;/h3&gt;
&lt;pre&gt;More reorg&lt;/pre&gt;

&lt;h3&gt;Modified Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryModulejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserversrcmainresourcesMETAINFgalaxyapplicationContextxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainresourcesMETAINFapplicationContextwebxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrctestjavaorgmulegalaxywebMainjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/Main.java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Added Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminArtifactTypeFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminArtifactTypeListPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeListPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminIndexDeleteFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexDeleteForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminIndexFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminIndexListPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexListPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/web/src/main/webapp/css/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/web/src/main/webapp/css/classic/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicdatasourcetestcss&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/datasourcetest.css&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicdeploycss&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/deploy.css&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsanimated_resetgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/animated_reset.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_form_deletegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_delete.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_form_editgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_edit.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_form_magnifygif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_magnify.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_linkgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_link.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_view_listgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_view_list.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsarrow_rightgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/arrow_right.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsarrow_undogif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/arrow_undo.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbrickgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/brick.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbrick_deletegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/brick_delete.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbricksgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bricks.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbricks_greygif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bricks_grey.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbrowser_galeongif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/browser_galeon.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbug_editgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bug_edit.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbullet_arrow_downgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bullet_arrow_down.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbullet_gogif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bullet_go.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscomputergif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/computer.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_eject_bluegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_eject_blue.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_pause_bluegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_pause_blue.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_play_bluegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_play_blue.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_repeat_bluegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_repeat_blue.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_rewind_bluegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_rewind_blue.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_stop_bluegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_stop_blue.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscup_deletegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/cup_delete.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifscup_gogif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/cup_go.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsdatabase_keygif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_key.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsdatabase_lightninggif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_lightning.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsdatabase_tablegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_table.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsemoticon_winkgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/emoticon_wink.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsfolder_deletegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/folder_delete.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsfolder_exploregif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/folder_explore.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifslightbulbgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/lightbulb.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifslightninggif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/lightning.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsmagnifiergif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsmagnifier_zoom_ingif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier_zoom_in.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsmagnifier_zoom_outgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier_zoom_out.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifspackage_greengif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/package_green.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifspage_white_cgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_c.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifspage_white_cupgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_cup.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifspage_white_putgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_put.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifspage_worldgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_world.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifspillgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/pill.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsprogerssbar_editnplacegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/progerssbar_editnplace.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsprogressbar_indefinitegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/progressbar_indefinite.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_0gif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_0.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_1gif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_1.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_2gif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_2.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_3gif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_3.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_4gif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_4.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_5gif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_5.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_agif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_a.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_a0gif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_a0.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_bgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_b.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_b0gif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_b0.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsresetgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/reset.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscript_code_redgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_code_red.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscript_deletegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_delete.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscript_geargif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_gear.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscript_gogif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_go.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscroll_arrow_leftgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/scroll_arrow_left.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscroll_arrow_rightgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/scroll_arrow_right.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifstable_lightninggif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/table_lightning.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifstag_bluegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/tag_blue.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifstransmit_bluegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/transmit_blue.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifstransmit_errorgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/transmit_error.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifswrenchgif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/wrench.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappcssclassicgifswrench_orangegif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/css/classic/gifs/wrench_orange.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/web/src/main/webapp/js/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsTooltipjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/Tooltip.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsareascrollerjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/areascroller.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsbehaviourjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/behaviour.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsbuilderjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/builder.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjscontrolsjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/controls.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsdatasourcetestjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/datasourcetest.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsdragdropjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/dragdrop.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjseffectsjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/effects.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsfuncjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/func.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsprototypejs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/prototype.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjsscriptaculousjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/scriptaculous.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappjssliderjs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/js/slider.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;patch&quot;&gt;
&lt;h3&gt;Diff&lt;/h3&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java (2113 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java	2009-12-17 18:20:34 UTC (rev 2113)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -57,6 +57,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import com.google.gwt.user.client.DOM;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.rpc.ServiceDefTarget;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -71,6 +72,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  */
 public class Galaxy {
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private String firstPage = &amp;quot;browse&amp;quot;;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private SecurityServiceAsync securityService;
     private HeartbeatServiceAsync heartbeatService;
     private AdminServiceAsync adminService;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -165,11 +167,13 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         
         plugins = appInfo.getPluginTabs();
         userManagementSupported = appInfo.isUserManagementSupported();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        loadTabs(Galaxy.this);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        adminPanel = createAdministrationPanel();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         
         for (GalaxyModule module : modules) {
             module.initialize(Galaxy.this);
         }
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        
+        loadTabs(Galaxy.this);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         showFirstPage();
     }
     
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -289,7 +293,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected void loadAdminTab() {
         if (showAdminTab(user)) {
             adminTabIndex = pageManager.createTab(&amp;quot;Administration&amp;quot;, &amp;quot;admin&amp;quot;, administrationConstants.admin_TabTip());
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            adminPanel = createAdministrationPanel();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             pageManager.createPageInfo(&amp;quot;admin&amp;quot;, adminPanel, adminTabIndex);
         }
     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -325,6 +328,9 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void showFirstPage() {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        ///Remove the loading message
+        DOM.setInnerHTML(RootPanel.get(&amp;quot;loading-msg&amp;quot;).getElement(), &amp;quot;&amp;quot;);
+        
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         // Show the initial screen.
         String initToken = History.getToken();
         if (initToken.length() &amp;gt; 0) {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -335,8 +341,8 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private String getFirstPage() {
-        return &amp;quot;admin&amp;quot;;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    protected String getFirstPage() {
+        return firstPage;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     /**
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -419,4 +425,8 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public void setMessageAndGoto(String successToken, String successMessage) {
         pageManager.setMessageAndGoto(successToken, successMessage);
     }
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+
+    public void setFirstPage(String firstPage) {
+        this.firstPage = firstPage;
+    }
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; }
\ No newline at end of file
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryModulejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java (2113 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java	2009-12-17 18:20:34 UTC (rev 2113)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -21,17 +21,20 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.rpc.ServiceDefTarget;
 
 public class RepositoryModule implements GalaxyModule {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    protected Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private PropertyInterfaceManager propertyInterfaceManager = new PropertyInterfaceManager();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private RepositoryConstants repositoryConstants;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    protected RepositoryConstants repositoryConstants;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private RegistryServiceAsync registryService;
     private int repositoryTabIndex = 0;
     private boolean showTypeSystem = true;
     
     public void initialize(Galaxy galaxy) {
         this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.repositoryConstants = (RepositoryConstants) GWT.create(RepositoryConstants.class);
-
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        
+        if (repositoryConstants == null) {
+            this.repositoryConstants = (RepositoryConstants) GWT.create(RepositoryConstants.class);
+        }
+        
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         createService();
         loadRepositoryTab();
         addAdministrationMenuItems();
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminArtifactTypeFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeForm.java (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeForm.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeForm.java	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,111 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WArtifactType;
+import org.mule.galaxy.web.client.admin.AbstractAdministrationForm;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
+import org.mule.galaxy.web.client.util.QNameListBox;
+import org.mule.galaxy.web.client.util.StringListBox;
+
+import com.extjs.gxt.ui.client.event.Listener;
+import com.extjs.gxt.ui.client.event.MessageBoxEvent;
+import com.extjs.gxt.ui.client.widget.Dialog;
+import com.extjs.gxt.ui.client.widget.MessageBox;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.TextBox;
+
+public class ArtifactTypeForm extends AbstractAdministrationForm {
+
+    private WArtifactType artifactType;
+    private TextBox descriptionTB;
+    private QNameListBox docTypesLB;
+    private TextBox mediaTypeTB;
+    private StringListBox extsLB;
+    private final RegistryServiceAsync registryService;
+
+    public ArtifactTypeForm(AdministrationPanel adminPanel, RegistryServiceAsync registryService) {
+        super(adminPanel,
+                &amp;quot;artifact-types&amp;quot;,
+                &amp;quot;Artifact type was saved.&amp;quot;,
+                &amp;quot;Artifact type was deleted.&amp;quot;, null);
+        this.registryService = registryService;
+    }
+
+    protected void addFields(FlexTable table) {
+        table.setText(0, 0, &amp;quot;Description:&amp;quot;);
+        table.setText(1, 0, &amp;quot;Media Type:&amp;quot;);
+        table.setText(2, 0, &amp;quot;Document Types:&amp;quot;);
+        table.setText(3, 0, &amp;quot;File Extensions:&amp;quot;);
+
+        descriptionTB = new TextBox();
+        descriptionTB.setText(artifactType.getDescription());
+        table.setWidget(0, 1, descriptionTB);
+
+        mediaTypeTB = new TextBox();
+        mediaTypeTB.setText(artifactType.getMediaType());
+        table.setWidget(1, 1, mediaTypeTB);
+
+        docTypesLB = new QNameListBox(artifactType.getDocumentTypes());
+        table.setWidget(2, 1, docTypesLB);
+
+        extsLB = new StringListBox(artifactType.getFileExtensions());
+        table.setWidget(3, 1, extsLB);
+
+        styleHeaderColumn(table);
+    }
+
+    public String getTitle() {
+        if (newItem) {
+            return &amp;quot;Add Artifact Type&amp;quot;;
+        } else {
+            return &amp;quot;Edit Artifact Type&amp;quot;;
+        }
+    }
+
+    protected void fetchItem(String id) {
+        registryService.getArtifactType(id, getFetchCallback());
+    }
+
+    protected void initializeItem(Object o) {
+        this.artifactType = (WArtifactType) o;
+    }
+
+    protected void initializeNewItem() {
+        this.artifactType = new WArtifactType();
+    }
+
+    protected void save() {
+        super.save();
+
+        artifactType.setMediaType(mediaTypeTB.getText());
+        artifactType.setDocumentTypes(docTypesLB.getItems());
+        artifactType.setDescription(descriptionTB.getText());
+        artifactType.setFileExtensions(extsLB.getItems());
+
+        registryService.saveArtifactType(artifactType, getSaveCallback());
+    }
+
+    protected void delete() {
+
+        final Listener&amp;lt;MessageBoxEvent&amp;gt; l = new Listener&amp;lt;MessageBoxEvent&amp;gt;() {
+            public void handleEvent(MessageBoxEvent ce) {
+                com.extjs.gxt.ui.client.widget.button.Button btn = ce.getButtonClicked();
+
+                if (Dialog.YES.equals(btn.getItemId())) {
+                    ArtifactTypeForm.super.delete();
+                    registryService.deleteArtifactType(artifactType.getId(), getDeleteCallback());
+                }
+            }
+        };
+
+        MessageBox.confirm(&amp;quot;Confirm&amp;quot;, &amp;quot;Are you sure you want to delete artifact type &amp;quot; + artifactType.getDescription() + &amp;quot;?&amp;quot;, l);
+    }
+
+    public void setEnabled(boolean enabled) {
+        super.setEnabled(enabled);
+
+        docTypesLB.setEnabled(enabled);
+    }
+
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeForm.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminArtifactTypeListPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeListPanel.java (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeListPanel.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeListPanel.java	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,144 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WArtifactType;
+import org.mule.galaxy.web.client.admin.AbstractAdministrationComposite;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
+import org.mule.galaxy.web.client.util.FauxLinkRenderer;
+import org.mule.galaxy.web.client.util.ListCellRenderer;
+import org.mule.galaxy.web.rpc.AbstractCallback;
+
+import com.extjs.gxt.ui.client.data.BeanModel;
+import com.extjs.gxt.ui.client.data.BeanModelFactory;
+import com.extjs.gxt.ui.client.data.BeanModelLookup;
+import com.extjs.gxt.ui.client.event.BaseEvent;
+import com.extjs.gxt.ui.client.event.Events;
+import com.extjs.gxt.ui.client.event.GridEvent;
+import com.extjs.gxt.ui.client.event.Listener;
+import com.extjs.gxt.ui.client.store.ListStore;
+import com.extjs.gxt.ui.client.store.Store;
+import com.extjs.gxt.ui.client.widget.ContentPanel;
+import com.extjs.gxt.ui.client.widget.form.StoreFilterField;
+import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
+import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
+import com.extjs.gxt.ui.client.widget.grid.Grid;
+import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
+import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
+import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
+import com.google.gwt.user.client.History;
+
+public class ArtifactTypeListPanel extends AbstractAdministrationComposite {
+
+    private final RegistryServiceAsync registryService;
+
+    public ArtifactTypeListPanel(AdministrationPanel a, RegistryServiceAsync registryService) {
+        super(a);
+        this.registryService = registryService;
+    }
+
+    @Override
+    public void doShowPage() {
+        super.doShowPage();
+
+        registryService.getArtifactTypes(new AbstractCallback&amp;lt;Collection&amp;lt;WArtifactType&amp;gt;&amp;gt;(adminPanel) {
+
+            public void onSuccess(Collection&amp;lt;WArtifactType&amp;gt; artifactTypes) {
+                showArtifactTypes(artifactTypes);
+            }
+
+        });
+
+    }
+
+    protected void showArtifactTypes(Collection&amp;lt;WArtifactType&amp;gt; artifactTypes) {
+        ContentPanel cp = new ContentPanel();
+        cp.setHeading(&amp;quot;Artifact Types&amp;quot;);
+        cp.setBodyBorder(false);
+        cp.setStyleName(&amp;quot;x-panel-container-full&amp;quot;);
+        cp.setAutoWidth(true);
+
+        BeanModelFactory factory = BeanModelLookup.get().getFactory(WArtifactType.class);
+
+        List&amp;lt;BeanModel&amp;gt; list = factory.createModel(artifactTypes);
+        final ListStore&amp;lt;BeanModel&amp;gt; store = new ListStore&amp;lt;BeanModel&amp;gt;();
+        store.add(list);
+
+        RowNumberer r = new RowNumberer();
+        List&amp;lt;ColumnConfig&amp;gt; columns = new ArrayList&amp;lt;ColumnConfig&amp;gt;();
+        columns.add(r);
+
+        ColumnConfig dConfig = new ColumnConfig(&amp;quot;description&amp;quot;, &amp;quot;Description&amp;quot;, 200);
+        dConfig.setRenderer(new FauxLinkRenderer());
+        columns.add(dConfig);
+
+        columns.add(new ColumnConfig(&amp;quot;mediaType&amp;quot;, &amp;quot;Media Types&amp;quot;, 200));
+
+        ColumnConfig docConfig = new ColumnConfig(&amp;quot;documentTypes&amp;quot;, &amp;quot;Document Type&amp;quot;, 300);
+        docConfig.setRenderer(new ListCellRenderer(true));
+        columns.add(docConfig);
+
+        ColumnModel cm = new ColumnModel(columns);
+
+        Grid grid = new Grid&amp;lt;BeanModel&amp;gt;(store, cm);
+        grid.addPlugin(r);
+        grid.setAutoWidth(true);
+        grid.setAutoExpandColumn(&amp;quot;documentTypes&amp;quot;);
+        grid.addListener(Events.CellClick, new Listener&amp;lt;BaseEvent&amp;gt;() {
+            public void handleEvent(BaseEvent be) {
+                GridEvent ge = (GridEvent) be;
+                WArtifactType s = store.getAt(ge.getRowIndex()).getBean();
+
+                History.newItem(&amp;quot;artifact-types/&amp;quot; + s.getId());
+            }
+        });
+
+        cp.add(grid);
+
+        // search filter
+        StoreFilterField&amp;lt;BeanModel&amp;gt; filter = new StoreFilterField&amp;lt;BeanModel&amp;gt;() {
+            @Override
+            protected boolean doSelect(Store&amp;lt;BeanModel&amp;gt; store, BeanModel parent,
+                                       BeanModel record, String property, String filter) {
+
+                String description = record.get(&amp;quot;description&amp;quot;);
+                description = description.toLowerCase();
+
+                String mediaType = record.get(&amp;quot;mediaType&amp;quot;);
+                mediaType = mediaType.toLowerCase();
+
+                ArrayList dt = record.get(&amp;quot;documentTypes&amp;quot;);
+                String documentTypes = dt.toString();
+                documentTypes = documentTypes.toLowerCase();
+
+
+                if (description.indexOf(filter.toLowerCase()) != -1 ||
+                        mediaType.indexOf(filter.toLowerCase()) != -1 ||
+                        documentTypes.indexOf(filter.toLowerCase()) != -1) {
+                    return true;
+                }
+                return false;
+            }
+        };
+
+        filter.setName(&amp;quot;Search&amp;quot;);
+        filter.setFieldLabel(&amp;quot;Search&amp;quot;);
+        filter.setWidth(300);
+        filter.setTriggerStyle(&amp;quot;x-form-search-trigger&amp;quot;);
+        filter.setStyleName(&amp;quot;x-form-search-field&amp;quot;);
+        // Bind the filter field to your grid store (grid.getStore())
+        filter.bind(store);
+
+        ToolBar toolbar = new ToolBar();
+        toolbar.add(filter);
+        toolbar.add(new FillToolItem());
+        toolbar.add(createToolbarHistoryButton(&amp;quot;New&amp;quot;, &amp;quot;artifact-types/new&amp;quot;));
+        cp.setTopComponent(toolbar);
+
+        panel.add(cp);
+
+    }
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/ArtifactTypeListPanel.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminIndexDeleteFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexDeleteForm.java (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexDeleteForm.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexDeleteForm.java	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,102 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
+
+import java.util.List;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WIndex;
+import org.mule.galaxy.web.client.admin.AbstractAdministrationComposite;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
+import org.mule.galaxy.web.client.util.ConfirmDialog;
+import org.mule.galaxy.web.client.util.ConfirmDialogAdapter;
+import org.mule.galaxy.web.client.util.LightBox;
+import org.mule.galaxy.web.rpc.AbstractCallback;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.RadioButton;
+import com.google.gwt.user.client.ui.VerticalPanel;
+
+public class IndexDeleteForm extends AbstractAdministrationComposite {
+
+    private RadioButton yesButton;
+    private RadioButton noButton;
+    private final RegistryServiceAsync registryService;
+
+    public IndexDeleteForm(AdministrationPanel a, RegistryServiceAsync registryService) {
+        super(a);
+        this.registryService = registryService;
+    }
+
+    @Override
+    public void showPage(List params) {
+        String indexId = (String) params.get(0);
+        
+        registryService.getIndex(indexId, new AbstractCallback(adminPanel) {
+
+            public void onSuccess(Object index) {
+                showIndex((WIndex) index);
+            }
+            
+        });
+    }
+
+    protected void showIndex(final WIndex index) {
+        panel.clear();
+        panel.add(createPrimaryTitle(&amp;quot;Delete Index &amp;#39;&amp;quot; + index.getDescription() + &amp;quot;&amp;#39;&amp;quot;));
+        
+        VerticalPanel vertical = new VerticalPanel();
+        vertical.setStyleName(&amp;quot;deleteIndexPanel&amp;quot;);
+        
+        vertical.add(new Label(&amp;quot;Would you like to delete the properties on artifacts that are &amp;quot;
+                               + &amp;quot;associated with this index?&amp;quot;));
+           
+        yesButton = new RadioButton(&amp;quot;deleteIndex&amp;quot;, &amp;quot;Yes&amp;quot;);
+        vertical.add(yesButton);
+        
+        noButton = new RadioButton(&amp;quot;deleteIndex&amp;quot;, &amp;quot;No&amp;quot;);
+        vertical.add(noButton);
+        
+        Button deleteButton = new Button(&amp;quot;Delete&amp;quot;);
+        deleteButton.addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent w) {
+                delete(index);
+            }
+            
+        });
+        vertical.add(deleteButton);
+        
+        panel.add(vertical);
+    }
+
+    protected void delete(final WIndex index) {
+        adminPanel.clearErrorMessage();
+        
+        if (!yesButton.getValue() &amp;amp;&amp;amp; !noButton.getValue()) {
+            adminPanel.setMessage(&amp;quot;You must select either yes or no.&amp;quot;);
+            return;
+        }
+        
+        final ConfirmDialog dialog = new ConfirmDialog(new ConfirmDialogAdapter() {
+            public void onConfirm() {
+                registryService.deleteIndex(index.getId(), yesButton.getValue(), getDeleteCallback());
+            }
+        }, &amp;quot;Are you sure you want to delete Index &amp;quot; + index.getDescription() + &amp;quot;?&amp;quot;);
+        new LightBox(dialog).show();
+    }
+
+
+    protected AsyncCallback getDeleteCallback() {
+        return new AbstractCallback(adminPanel) {
+
+            public void onSuccess(Object arg0) {
+                adminPanel.getGalaxy().setMessageAndGoto(&amp;quot;indexes&amp;quot;, &amp;quot;Index was deleted.&amp;quot;);
+            }
+            
+        };
+    }
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexDeleteForm.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminIndexFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexForm.java (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexForm.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexForm.java	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,220 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WIndex;
+import org.mule.galaxy.web.client.admin.AbstractAdministrationForm;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
+import org.mule.galaxy.web.client.util.QNameListBox;
+
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.user.client.History;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.TextArea;
+import com.google.gwt.user.client.ui.TextBox;
+
+public class IndexForm extends AbstractAdministrationForm {
+
+    private WIndex index;
+    private TextBox mediaTypeTB;
+    private TextArea xqueryExpressionTA;
+    private TextBox propertyTB;
+    private ListBox languageList;
+    private TextBox xpathExpressionTB;
+    private ListBox resultTypeLB;
+    private QNameListBox docTypesLB;
+    private TextBox descriptionTB;
+    private RegistryServiceAsync registryService;
+
+    public IndexForm(AdministrationPanel adminPanel, RegistryServiceAsync registryService) {
+        super(adminPanel, &amp;quot;indexes&amp;quot;, &amp;quot;Index was saved.&amp;quot;, &amp;quot;Index was deleted.&amp;quot;, null);
+        this.registryService = registryService;
+    }
+    
+    protected void addFields(final FlexTable table) {
+        table.setText(0, 0, &amp;quot;Description:&amp;quot;);
+        table.setText(1, 0, &amp;quot;Result Type:&amp;quot;);
+        table.setText(2, 0, &amp;quot;Media Type:&amp;quot;);
+        table.setText(3, 0, &amp;quot;Document Types:&amp;quot;);
+        table.setText(4, 0, &amp;quot;Language:&amp;quot;);
+        
+        descriptionTB = new TextBox();
+        descriptionTB.setText(index.getDescription());
+        table.setWidget(0, 1, descriptionTB);
+        
+        resultTypeLB = new ListBox();
+        resultTypeLB.addItem(&amp;quot;String&amp;quot;);
+        resultTypeLB.addItem(&amp;quot;QName&amp;quot;);
+        table.setWidget(1, 1, resultTypeLB);
+        
+        if (index.getResultType() == null || index.getResultType().equals(&amp;quot;String&amp;quot;)) {
+            resultTypeLB.setSelectedIndex(0);
+        } else {
+            resultTypeLB.setSelectedIndex(1);
+        }
+        
+        mediaTypeTB = new TextBox();
+        mediaTypeTB.setText(index.getMediaType());
+        table.setWidget(2, 1, mediaTypeTB);
+        
+        docTypesLB = new QNameListBox(index.getDocumentTypes());
+
+        table.setWidget(3, 1, docTypesLB);
+        
+        languageList = new ListBox();
+        languageList.addItem(&amp;quot;XPath&amp;quot;);
+        languageList.addItem(&amp;quot;XQuery&amp;quot;);
+//        languageList.addItem(&amp;quot;Groovy&amp;quot;);
+
+        String indexer = index.getIndexer();
+        if (indexer == null || indexer.equalsIgnoreCase(&amp;quot;XPath&amp;quot;)) {
+            setupXPath(table);
+        } else if (indexer.equalsIgnoreCase(&amp;quot;Groovy&amp;quot;)) {
+            setupGroovy(table);
+        }  else {
+            setupXQuery(table);
+        }
+        
+        languageList.addChangeHandler(new ChangeHandler() {
+
+            public void onChange(ChangeEvent sender) {
+                String value = languageList.getValue(languageList.getSelectedIndex());
+                
+                if (value.equalsIgnoreCase(&amp;quot;XPath&amp;quot;)) {
+                    setupXPath(table);
+                } else if (value.equalsIgnoreCase(&amp;quot;Groovy&amp;quot;)) {
+                    setupGroovy(table);
+                }  else {
+                    setupXQuery(table);
+                }
+            }
+            
+        });
+        
+        table.setWidget(4, 1, languageList);
+
+        styleHeaderColumn(table);
+    }
+
+
+    protected void fetchItem(String id) {
+        registryService.getIndex(id, getFetchCallback());
+    }
+
+    public String getTitle() {
+        if (newItem) {
+            return &amp;quot;Add Index&amp;quot;;
+        } else {
+            return &amp;quot;Edit Index: &amp;quot; + index.getDescription();
+        }
+    }
+
+    protected void initializeItem(Object o) {
+        this.index = (WIndex) o;
+    }
+
+    protected void initializeNewItem() {
+        this.index = new WIndex();
+    }
+
+    protected void setupXQuery(FlexTable table) {
+        clearConfiguration(table);
+        
+        propertyTB = new TextBox();
+        propertyTB.setText(index.getProperty());
+        table.setText(5, 0, &amp;quot;Property Name:&amp;quot;);
+        table.setWidget(5, 1, propertyTB);
+        
+        xqueryExpressionTA = new TextArea();
+        xqueryExpressionTA.setVisibleLines(15);
+        xqueryExpressionTA.setCharacterWidth(80);
+        
+        languageList.setSelectedIndex(1);
+        xqueryExpressionTA.setText(index.getExpression());
+        table.setText(6, 0, &amp;quot;XQuery Expression:&amp;quot;);
+        table.setWidget(6, 1, xqueryExpressionTA);
+    }
+
+    private void clearConfiguration(FlexTable table) {
+        for (int i = 5; i &amp;lt; table.getRowCount(); i++) {
+            table.removeRow(i);
+        }
+    }
+
+    protected void setupGroovy(FlexTable table) {
+        TextArea groovyExpressionTA = new TextArea();
+        groovyExpressionTA.setVisibleLines(15);
+        groovyExpressionTA.setCharacterWidth(80);
+        xqueryExpressionTA.setText(index.getExpression());
+        table.setText(5, 0, &amp;quot;Groovy Script:&amp;quot;);
+        table.setWidget(5, 1, xqueryExpressionTA);
+    }
+
+    protected void setupXPath(FlexTable table) {
+        propertyTB = new TextBox();
+        propertyTB.setText(index.getProperty());
+        table.setText(5, 0, &amp;quot;Property Name:&amp;quot;);
+        table.setWidget(5, 1, propertyTB);
+
+        xpathExpressionTB = new TextBox();
+        xpathExpressionTB.setVisibleLength(80);
+        
+        languageList.setSelectedIndex(0);
+        xpathExpressionTB.setText(index.getExpression());
+        table.setText(6, 0, &amp;quot;XPath Expression:&amp;quot;);
+        table.setWidget(6, 1, xpathExpressionTB);
+    }
+
+    protected void save() {
+        super.save();
+        
+        RegistryServiceAsync svc = registryService;
+        
+        index.setProperty(propertyTB.getText());
+        index.setMediaType(mediaTypeTB.getText());
+        index.setDescription(descriptionTB.getText());
+        index.setResultType(resultTypeLB.getValue(resultTypeLB.getSelectedIndex()));
+        
+        String language = languageList.getValue(languageList.getSelectedIndex()).toLowerCase();
+        index.setIndexer(language);
+        if (&amp;quot;xpath&amp;quot;.equals(language)) {
+            index.setExpression(xpathExpressionTB.getText());
+        } else {
+            index.setExpression(xqueryExpressionTA.getText());
+        }
+        // TODO Groovy index
+        
+        
+        index.setDocumentTypes(docTypesLB.getItems());
+        
+        // validation
+        
+        if (!assertValid(index.getProperty(), &amp;quot;property name&amp;quot;)) return;
+        
+        if (index.getProperty().indexOf(&amp;#39; &amp;#39;) != -1) {
+            adminPanel.setMessage(&amp;quot;The index property name cannot contain spaces.&amp;quot;);
+            setEnabled(true);
+            return;
+        }
+
+        if (!assertValid(index.getDescription(), &amp;quot;name&amp;quot;)) return;
+        if (!assertValid(index.getExpression(), &amp;quot;expression&amp;quot;)) return;
+
+        svc.saveIndex(index, getSaveCallback());
+    }
+
+    private boolean assertValid(String value, String name) {
+        if (value == null || value.equals(&amp;quot;&amp;quot;) ) {
+            adminPanel.setMessage(&amp;quot;You must supply an index &amp;quot; + name + &amp;quot; .&amp;quot;);
+            setEnabled(true);
+            return false;
+        }
+        return true;
+    }
+
+    protected void delete() {
+        History.newItem(&amp;quot;index-delete_&amp;quot; + index.getId());
+    }
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexForm.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminIndexListPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexListPanel.java (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexListPanel.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexListPanel.java	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,164 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WIndex;
+import org.mule.galaxy.web.client.admin.AbstractAdministrationComposite;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
+import org.mule.galaxy.web.client.util.FauxLinkRenderer;
+import org.mule.galaxy.web.rpc.AbstractCallback;
+
+import com.extjs.gxt.ui.client.data.BeanModel;
+import com.extjs.gxt.ui.client.data.BeanModelFactory;
+import com.extjs.gxt.ui.client.data.BeanModelLookup;
+import com.extjs.gxt.ui.client.data.ModelData;
+import com.extjs.gxt.ui.client.event.BaseEvent;
+import com.extjs.gxt.ui.client.event.Events;
+import com.extjs.gxt.ui.client.event.GridEvent;
+import com.extjs.gxt.ui.client.event.Listener;
+import com.extjs.gxt.ui.client.store.ListStore;
+import com.extjs.gxt.ui.client.store.Store;
+import com.extjs.gxt.ui.client.widget.ContentPanel;
+import com.extjs.gxt.ui.client.widget.form.StoreFilterField;
+import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
+import com.extjs.gxt.ui.client.widget.grid.ColumnData;
+import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
+import com.extjs.gxt.ui.client.widget.grid.Grid;
+import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
+import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
+import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
+import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
+import com.google.gwt.user.client.History;
+
+public class IndexListPanel extends AbstractAdministrationComposite {
+
+    private final RegistryServiceAsync registryService;
+
+    public IndexListPanel(AdministrationPanel a, RegistryServiceAsync registryService) {
+        super(a);
+        this.registryService = registryService;
+    }
+
+    @Override
+    public void doShowPage() {
+        super.doShowPage();
+
+        registryService.getIndexes(new AbstractCallback&amp;lt;Collection&amp;lt;WIndex&amp;gt;&amp;gt;(adminPanel) {
+
+            public void onSuccess(Collection&amp;lt;WIndex&amp;gt; indexes) {
+                showIndexes(indexes);
+            }
+
+        });
+
+    }
+
+    private void showIndexes(Collection&amp;lt;WIndex&amp;gt; indexes) {
+
+        ContentPanel cp = new ContentPanel();
+        cp.setHeading(&amp;quot;Indexes&amp;quot;);
+        cp.setBodyBorder(false);
+        cp.setStyleName(&amp;quot;x-panel-container-full&amp;quot;);
+        cp.setAutoWidth(true);
+
+        BeanModelFactory factory = BeanModelLookup.get().getFactory(WIndex.class);
+
+        List&amp;lt;BeanModel&amp;gt; list = factory.createModel(indexes);
+        final ListStore&amp;lt;BeanModel&amp;gt; store = new ListStore&amp;lt;BeanModel&amp;gt;();
+        store.add(list);
+
+        RowNumberer r = new RowNumberer();
+        List&amp;lt;ColumnConfig&amp;gt; columns = new ArrayList&amp;lt;ColumnConfig&amp;gt;();
+        columns.add(r);
+
+        ColumnConfig dConfig = new ColumnConfig(&amp;quot;description&amp;quot;, &amp;quot;Index&amp;quot;, 300);
+        dConfig.setRenderer(new FauxLinkRenderer());
+        columns.add(dConfig);
+
+        ColumnConfig typeConfig = new ColumnConfig(&amp;quot;indexer&amp;quot;, &amp;quot;Language&amp;quot;, 300);
+        typeConfig.setRenderer(new GridCellRenderer&amp;lt;ModelData&amp;gt;() {
+            public Object render(ModelData model, String property, ColumnData config, int rowIndex, int colIndex, ListStore&amp;lt;ModelData&amp;gt; modelDataListStore, Grid&amp;lt;ModelData&amp;gt; modelDataGrid) {
+                String val = model.get(property);
+                if (&amp;quot;xpath&amp;quot;.equalsIgnoreCase(val)) {
+                    return &amp;quot;XPath&amp;quot;;
+                } else if (&amp;quot;xquery&amp;quot;.equalsIgnoreCase(val)) {
+                    return &amp;quot;XQuery&amp;quot;;
+
+                } else if (&amp;quot;groovy&amp;quot;.equalsIgnoreCase(val)) {
+                    return &amp;quot;Groovy&amp;quot;;
+                }
+                return val;
+            }
+        });
+        columns.add(typeConfig);
+        columns.add(new ColumnConfig(&amp;quot;resultType&amp;quot;, &amp;quot;Query Type&amp;quot;, 100));
+
+        ColumnModel cm = new ColumnModel(columns);
+
+        Grid grid = new Grid&amp;lt;BeanModel&amp;gt;(store, cm);
+        grid.setStripeRows(true);
+        grid.addPlugin(r);
+        grid.setAutoWidth(true);
+        grid.addListener(Events.CellClick, new Listener&amp;lt;BaseEvent&amp;gt;() {
+            public void handleEvent(BaseEvent be) {
+                GridEvent ge = (GridEvent) be;
+                WIndex s = store.getAt(ge.getRowIndex()).getBean();
+
+                // don&amp;#39;t link on this type
+                if (!(&amp;quot;org.mule.galaxy.impl.index.GroovyIndexer&amp;quot;.equalsIgnoreCase(s.getIndexer()))) {
+                    History.newItem(&amp;quot;indexes/&amp;quot; + s.getId());
+                }
+            }
+        });
+
+        cp.add(grid);
+
+        // search filter
+        StoreFilterField&amp;lt;BeanModel&amp;gt; filter = new StoreFilterField&amp;lt;BeanModel&amp;gt;() {
+            @Override
+            protected boolean doSelect(Store&amp;lt;BeanModel&amp;gt; store, BeanModel parent,
+                                       BeanModel record, String property, String filter) {
+
+                String description = record.get(&amp;quot;description&amp;quot;);
+                description = description.toLowerCase();
+
+                String resultType = record.get(&amp;quot;resultType&amp;quot;);
+                resultType = resultType.toLowerCase();
+
+                String indexer = record.get(&amp;quot;indexer&amp;quot;);
+                indexer = indexer.toLowerCase();
+
+                if (description.indexOf(filter.toLowerCase()) != -1 ||
+                        resultType.indexOf(filter.toLowerCase()) != -1 ||
+                        indexer.indexOf(filter.toLowerCase()) != -1) {
+                    return true;
+                }
+                return false;
+            }
+        };
+
+        filter.setName(&amp;quot;Search&amp;quot;);
+        filter.setFieldLabel(&amp;quot;Search&amp;quot;);
+        filter.setWidth(300);
+        filter.setTriggerStyle(&amp;quot;x-form-search-trigger&amp;quot;);
+        filter.setStyleName(&amp;quot;x-form-search-field&amp;quot;);
+        // Bind the filter field to your grid store (grid.getStore())
+        filter.bind(store);
+
+        ToolBar toolbar = new ToolBar();
+        toolbar.add(filter);
+        toolbar.add(new FillToolItem());
+        toolbar.add(createToolbarHistoryButton(&amp;quot;New&amp;quot;, &amp;quot;indexes/new&amp;quot;));
+        cp.setTopComponent(toolbar);
+
+        panel.add(cp);
+
+    }
+
+}
+
+
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/IndexListPanel.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserversrcmainresourcesMETAINFgalaxyapplicationContextxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml (2113 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml	2009-12-17 18:20:34 UTC (rev 2113)
+++ branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -8,22 +8,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
     http://abdera.apache.org http://abdera.apache.org/schemas/abdera-spring.xsd&amp;quot;&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    &amp;lt;bean id=&amp;quot;coreGwtModule&amp;quot; class=&amp;quot;org.mule.galaxy.web.GwtModule&amp;quot;&amp;gt;
-      &amp;lt;property name=&amp;quot;core&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
-      &amp;lt;property name=&amp;quot;name&amp;quot; value=&amp;quot;org.mule.galaxy.repository.Repository&amp;quot;/&amp;gt;
-      &amp;lt;property name=&amp;quot;rpcServices&amp;quot;&amp;gt;
-        &amp;lt;map&amp;gt;
-          &amp;lt;entry key=&amp;quot;/galaxyService.rpc&amp;quot; value-ref=&amp;quot;galaxyService&amp;quot; /&amp;gt;
-          &amp;lt;entry key=&amp;quot;/securityService.rpc&amp;quot; value-ref=&amp;quot;gwtSecurityService&amp;quot; /&amp;gt;
-          &amp;lt;entry key=&amp;quot;/heartbeat.rpc&amp;quot; value-ref=&amp;quot;heartbeatService&amp;quot;/&amp;gt;
-          &amp;lt;entry key=&amp;quot;/admin.rpc&amp;quot; value-ref=&amp;quot;adminService&amp;quot;/&amp;gt;
-          &amp;lt;entry key=&amp;quot;/registry.rpc&amp;quot; value-ref=&amp;quot;gwtRegistry&amp;quot; /&amp;gt;
-        &amp;lt;/map&amp;gt;
-      &amp;lt;/property&amp;gt;
-    &amp;lt;/bean&amp;gt;
-    
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     &amp;lt;bean id=&amp;quot;gwtRegistry&amp;quot; class=&amp;quot;org.mule.galaxy.repository.RegistryServiceImpl&amp;quot;&amp;gt;
       &amp;lt;property name=&amp;quot;registry&amp;quot; ref=&amp;quot;registry&amp;quot;/&amp;gt;
       &amp;lt;property name=&amp;quot;artifactTypeDao&amp;quot; ref=&amp;quot;artifactTypeDao&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainresourcesMETAINFapplicationContextwebxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml (2113 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml	2009-12-17 18:20:34 UTC (rev 2113)
+++ branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -23,6 +23,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;           &amp;lt;entry key=&amp;quot;/securityService.rpc&amp;quot; value-ref=&amp;quot;gwtSecurityService&amp;quot; /&amp;gt;
           &amp;lt;entry key=&amp;quot;/heartbeat.rpc&amp;quot; value-ref=&amp;quot;heartbeatService&amp;quot;/&amp;gt;
           &amp;lt;entry key=&amp;quot;/admin.rpc&amp;quot; value-ref=&amp;quot;adminService&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+          &amp;lt;entry key=&amp;quot;/registry.rpc&amp;quot; value-ref=&amp;quot;gwtRegistry&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         &amp;lt;/map&amp;gt;
       &amp;lt;/property&amp;gt;
     &amp;lt;/bean&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicdatasourcetestcss&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/datasourcetest.css (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/css/classic/datasourcetest.css	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/css/classic/datasourcetest.css	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,279 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+div.dataSourceTestMenu, div.dataSourceTestContent {
+    clear: both;
+}
+
+li#connect {
+    float: left;
+    background: url( &amp;quot;gifs/database_key.gif&amp;quot; ) top left no-repeat;
+}
+
+li#executeSql {
+    float: left;
+    background: url( &amp;quot;gifs/database_lightning.gif&amp;quot; ) top left no-repeat;
+}
+
+li#showHistory {
+    float: left;
+    background: url( &amp;quot;gifs/script_go.gif&amp;quot; ) top left no-repeat;
+}
+
+li#hideHistory {
+    float: left;
+    background: url( &amp;quot;gifs/script_delete.gif&amp;quot; ) top left no-repeat;
+}
+
+li#showOptions {
+    float: left;
+    background: url( &amp;quot;gifs/application_form_edit.gif&amp;quot; ) top left no-repeat;
+}
+
+li#hideOptions {
+    float: left;
+    background: url( &amp;quot;gifs/application_form_delete.gif&amp;quot; ) top left no-repeat;
+}
+
+li#wrap {
+    float: right;
+    padding-top: 10px;
+    background: url( &amp;quot;gifs/arrow_undo.gif&amp;quot; ) center left no-repeat;
+}
+
+li#nowrap {
+    float: right;
+    padding-top: 10px;
+    background: url( &amp;quot;gifs/arrow_right.gif&amp;quot; ) center left no-repeat;
+}
+
+#sqlForm {
+    margin: 0;
+    padding: 0;
+}
+
+#sql {
+    font-family: &amp;#39;Lucida Sans Typewriter&amp;#39;, &amp;#39;Courier New&amp;#39;, monospace;
+    font-size: 100%;
+    width: 99%;
+    border: none;
+    overflow: auto;
+    margin: 0;
+    padding: 2px 0px 2px 5px;
+    height: 100px;
+    background-color: #fff;
+}
+
+div#sqlDragHandle {
+    background: #ddd;
+    cursor: n-resize;
+    height: 3px;
+    margin-top: 0px; /* for IE */
+    font-size: 0px;
+    line-height: 0px;
+}
+
+div#sqlDragHandle:hover {
+    background: #000;
+}
+
+h3 {
+    float: left;
+    height: 2em;
+    margin: 0;
+    padding: 10px 0 5px 2px;
+}
+
+div#outputHolder {
+    padding: 0;
+    margin: 0;
+}
+
+#sqlResultsWrapper {
+    clear: both;
+}
+
+#sqlResultsContainer {
+    margin: 0;
+    padding: 0;
+    width: 99%;
+    overflow: hidden;
+}
+
+#rowsAffected {
+    margin: 0 0 5px 0;
+    padding: 0;
+    float: left;
+    color: #4f6b72;
+    text-align: left;
+}
+
+#sqlResultTbl {
+    border-left: 1px solid #C1DAD7;
+    padding: 0;
+    margin: 0;
+    clear: both;
+}
+
+#sqlResultTbl td {
+    white-space: nowrap;
+}
+
+#pagebanner {
+    color: #4f6b72;
+    float: left;
+    padding: 0 0 0 5px;
+    margin: 0;
+}
+
+#pagelinks {
+    color: #4f6b72;
+    float: left;
+    padding: 0 0 0 5px;
+    margin: 0;
+}
+
+#pagelinks a:link, #pagelinks a:visited {
+    color: #40659B;
+    border-bottom: 1px none;
+}
+
+#pagelinks td a:hover, #pagelinks td:hover a {
+    color: #003366;
+    border-bottom: 1px dashed #bbb;
+}
+
+.ajax_activity {
+    float: right;
+    width: 50%;
+    height: 2em;
+    padding: 0px 20px 5px 20px;
+    margin: 0;
+    background-position: left center;
+    font-size: 95%;
+}
+
+#rs_rowsAffected, #rs_pagebanner, #rs_pagelinks {
+    display: none;
+}
+
+#queryHistoryContainer {
+    margin: 5px 0 0 0;
+    clear: both;
+    width: 100%;
+}
+
+#queryHistoryBorder {
+    margin: 0;
+    padding: 0;
+    border: 1px solid #ccc;
+    clear: both;
+}
+
+#queryHistoryHolder {
+    margin: 0;
+    padding: 0;
+    clear: both;
+    overflow: auto;
+    width: 100%;
+}
+
+#queryHistoryHolder ul {
+    margin: 5px 5px 5px 5px;
+    padding: 0;
+    list-style: none;
+    /*overflow: hidden;*/
+    width: 99%;
+}
+
+#queryHistoryHolder ul li {
+    padding: 0;
+    margin: 5px 0;
+}
+
+#queryHistoryHolder ul a {
+    display: block;
+}
+
+#queryHistoryHolder ul a:link, #queryHistoryHolder ul a:visited {
+    color: #40659B;
+    text-decoration: none;
+    padding-left: 10px;
+    padding-right: 10px;
+    border: 1px solid #fff;
+}
+
+#queryHistoryHolder ul a:hover, #queryHistoryHolder ul a:hover a {
+    background-color: #F0F8FF;
+    color: #000;
+    border: 1px solid #ccc;
+}
+
+#historyEmpty {
+    margin: 5px 5px 5px 10px;;
+    padding: 0;
+}
+
+div#historyDragHandle {
+    background: #ddd;
+    cursor: n-resize;
+    height: 3px;
+    margin-top: 0px; /* for IE */
+    font-size: 0px;
+    line-height: 0px;
+}
+
+div#historyDragHandle:hover {
+    background: #000;
+}
+
+.txtInput {
+    border: 1px solid #ccc;
+    padding: 0 0 0 3px;
+    font-family: &amp;quot;Trebuchet MS&amp;quot;, Arial, Helvetica, sans-serif;
+}
+
+dl#optionsDL {
+    clear: both;
+    padding: 10px 0 0 0;
+    margin: 0;
+    list-style: none;
+}
+
+dl#optionsDL dt {
+    margin: 0;
+    padding: 0 5px 0 0;
+    float: left;
+}
+
+dl#optionsDL dd {
+    margin: 0;
+    padding: 0 10px 0 0;
+    float: left;
+}
+
+dl#sqlDL {
+    clear: both;
+    padding: 0;
+    margin: 0;
+    list-style: none;
+}
+
+dl#sqlDL dt {
+    margin: 0;
+    padding: 0;
+}
+
+dl#sqlDL dd {
+    margin: 0;
+    padding: 0;
+}
+
+#sqlContainer {
+    border: 1px solid #ccc;
+}
+
+#h3Container {
+    clear: both;
+}
+
+#sqlResultsHeader {
+    clear: both;
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/datasourcetest.css
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicdeploycss&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/deploy.css (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/css/classic/deploy.css	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/css/classic/deploy.css	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,56 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+div.deploy {
+    padding: 10px 10px 10px 10px;
+    margin: 0 0 10 0;
+    border: 1px solid #ccc;
+    vertical-align: middle;
+    min-width: 700px;
+}
+
+div.deploy div.deployDescription {
+    padding: 5px 50px 15px 0px;
+}
+
+div.deploy .deployLabel {
+    border: 1px dashed white;
+    padding: 0px 5px 0px 5px;
+    background: darkorange;
+    color: white;
+    font-weight: bold;
+
+}
+
+div.deploy .submit {
+    text-align: right;
+    padding-top: 15px;
+    padding-right: 30px;
+}
+
+div.deploy .submit input.b {
+    font-size: 90%;
+    font-weight: bold;
+    padding: 2 4 2 4;
+    border: 1px solid darkorange;
+    background: white;
+    color: rgb( 230, 44, 0 );
+}
+
+div#deployScenario1 {
+    background-color: #FFFFE0;
+    margin-bottom: 10px;
+}
+
+.cb input {
+    margin-left: 0;
+}
+
+em {
+    color: rgb( 204, 0, 0 );
+    font-weight: bold;
+    font-style: normal;
+}
+
+.deploy dl dd {
+    margin: 0;
+    padding: 0 0 1em 0;
+    line-height: 1.5em;
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/deploy.css
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsanimated_resetgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/animated_reset.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/animated_reset.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_form_deletegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_delete.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_delete.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_form_editgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_edit.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_edit.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_form_magnifygif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_magnify.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_form_magnify.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_linkgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_link.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_link.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsapplication_view_listgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_view_list.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/application_view_list.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsarrow_rightgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/arrow_right.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/arrow_right.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsarrow_undogif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/arrow_undo.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/arrow_undo.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbrickgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/brick.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/brick.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbrick_deletegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/brick_delete.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/brick_delete.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbricksgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bricks.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bricks.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbricks_greygif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bricks_grey.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bricks_grey.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbrowser_galeongif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/browser_galeon.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/browser_galeon.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbug_editgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bug_edit.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bug_edit.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbullet_arrow_downgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bullet_arrow_down.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bullet_arrow_down.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsbullet_gogif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bullet_go.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/bullet_go.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscomputergif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/computer.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/computer.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_eject_bluegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_eject_blue.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_eject_blue.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_pause_bluegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_pause_blue.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_pause_blue.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_play_bluegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_play_blue.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_play_blue.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_repeat_bluegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_repeat_blue.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_repeat_blue.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_rewind_bluegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_rewind_blue.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_rewind_blue.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscontrol_stop_bluegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_stop_blue.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/control_stop_blue.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscup_deletegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/cup_delete.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/cup_delete.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifscup_gogif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/cup_go.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/cup_go.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsdatabase_keygif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_key.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_key.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsdatabase_lightninggif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_lightning.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_lightning.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsdatabase_tablegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_table.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/database_table.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsemoticon_winkgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/emoticon_wink.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/emoticon_wink.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsfolder_deletegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/folder_delete.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/folder_delete.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsfolder_exploregif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/folder_explore.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/folder_explore.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifslightbulbgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/lightbulb.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/lightbulb.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifslightninggif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/lightning.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/lightning.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsmagnifiergif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsmagnifier_zoom_ingif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier_zoom_in.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier_zoom_in.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsmagnifier_zoom_outgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier_zoom_out.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/magnifier_zoom_out.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifspackage_greengif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/package_green.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/package_green.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifspage_white_cgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_c.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_c.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifspage_white_cupgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_cup.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_cup.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifspage_white_putgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_put.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_white_put.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifspage_worldgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_world.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/page_world.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifspillgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/pill.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/pill.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsprogerssbar_editnplacegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/progerssbar_editnplace.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/progerssbar_editnplace.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsprogressbar_indefinitegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/progressbar_indefinite.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/progressbar_indefinite.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_0gif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_0.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_0.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_1gif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_1.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_1.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_2gif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_2.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_2.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_3gif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_3.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_3.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_4gif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_4.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_4.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_5gif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_5.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_5.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_agif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_a.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_a.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_a0gif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_a0.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_a0.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_bgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_b.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_b.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsrb_b0gif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_b0.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/rb_b0.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsresetgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/reset.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/reset.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscript_code_redgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_code_red.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_code_red.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscript_deletegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_delete.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_delete.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscript_geargif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_gear.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_gear.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscript_gogif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_go.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/script_go.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscroll_arrow_leftgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/scroll_arrow_left.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/scroll_arrow_left.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifsscroll_arrow_rightgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/scroll_arrow_right.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/scroll_arrow_right.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifstable_lightninggif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/table_lightning.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/table_lightning.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifstag_bluegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/tag_blue.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/tag_blue.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifstransmit_bluegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/transmit_blue.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/transmit_blue.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifstransmit_errorgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/transmit_error.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/transmit_error.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifswrenchgif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/wrench.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/wrench.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappcssclassicgifswrench_orangegif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/wrench_orange.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/css/classic/gifs/wrench_orange.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsTooltipjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/Tooltip.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/Tooltip.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/Tooltip.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,589 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+/**
+ * Tooltip.js
+ *
+ * Advanced Tooltip class
+ *
+ * WARNING: Due to an IE bug, Tooltips will NOT display on top of a &amp;lt;select&amp;gt; element.
+ *
+ * @copyright Davey Shafik (c) 2005 All Rights Reserved
+ * @authors Davey Shafik &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26836982&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;davey@...&lt;/a&gt;&amp;gt;
+ * @version 0.6.0
+ * @license MIT-style &amp;lt;http://tooltip.crtx.org/LICENSE&amp;gt;
+ * @todo Fix accessibility, make it possible to tab in/out of tooltips, and look into CSS Voice stuff
+ * @todo Add ability to change the events *per* Tooltip
+ */
+
+/**
+ * Add an Array.contains() method, mimics PHPs in_array() function
+ */
+
+Array.prototype.contains = function (value)
+{
+    for (var i = 0; i &amp;lt; this.length; i++) {
+        if (this[i] == value) {
+            return true;
+        }
+    }
+    return false;
+}
+
+/**
+ * Tooltip Object definition
+ */
+var Tooltip = {
+    /**
+     * @var string|Array An event name or an array of event names on which to trigger showing the Tooltip
+     */
+    showEvent: &amp;quot;click&amp;quot;,
+
+    /**
+     * @var string|Array An event name or an array of event names on which to trigger hiding the Tooltip
+     */
+    hideEvent: &amp;quot;click&amp;quot;,
+
+    /**
+     * @var float Duration of the fade events, in seconds
+     * @author Idea contributed by Richard Thomas &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26836982&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;cyberlot@...&lt;/a&gt;&amp;gt;
+     */
+    fade: 0.5,
+
+    /**
+     * @var string Close Link Text
+     */
+    closeText: &amp;quot;Close&amp;quot;,
+
+    /**
+     * @var function Set the method which will be called for showing the tooltip
+     */
+    showMethod: Effect.Appear,
+
+    /**
+     * @var function Set the method which will be called for hiding the tooltip
+     */
+    hideMethod: Effect.Fade,
+
+    /**
+     * @var boolean Whether the Tooltip should follow the mouse or not. Warning: Cheesy!
+     */
+    autoFollowMouse: false,
+
+    /**
+     * @var integer If set, the Tooltip will automatically hide after X seconds
+     *
+     * When followMouse is true, the mouseout event does not trigger the hide callback
+     * till X has passed. This is to allow the user to move a little off the element -
+     * which is especially useful when it&amp;#39;s an inline element such as a link.
+     */
+    autoHideTimeout: 40,
+
+    /**
+     * @var boolean Allow user to click anywhere to hide current tooltip
+     */
+    autoHideClick: true,
+
+    /**
+     * @var boolean If set to true, the Tooltip will be displayed (static) at the current Mouse Cursor location.
+     */
+    autoMoveToCursor: true,
+
+    /**
+     * @const int Indicate that the current tooltip should be used
+     */
+    CURRENT_TOOLTIP: 1,
+
+    /**
+     * @var object Currently shown Tooltip
+     */
+    _current: false,
+
+    /**
+     * Initial Setup
+     *
+     * Find all standard tooltips and auto-initialize them
+     *
+     * @return void
+     */
+    setup: function ()
+    {
+        match_class = new RegExp(&amp;quot;^(.*)\s?tooltip\s?(.*)$&amp;quot;, &amp;#39;i&amp;#39;);
+        match_for = new RegExp(&amp;quot;^.*\s?for_(.*)\s?.*$&amp;quot;, &amp;#39;i&amp;#39;);
+        var divs = document.getElementsByTagName(&amp;#39;div&amp;#39;);
+        var for_result;
+        if (divs.length &amp;gt; 0) {
+            // Automatically register the mouseout event if followMouse = true and autoHideTimeout is being used
+            if (Tooltip.autoFollowMouse &amp;amp;&amp;amp; Tooltip.autoHideTimeout) {
+                Tooltip.hideEvent[Tooltip.hideEvent.length] = &amp;quot;mouseout&amp;quot;;
+            }
+
+            if (Tooltip.autoHideClick) {
+                Tooltip._attachEvent(document.getElementsByTagName(&amp;quot;body&amp;quot;).item(0), &amp;quot;clickanywhere&amp;quot;);
+            }
+
+            for (var i = 0; i &amp;lt; divs.length; i++) {
+                if (divs.item(i).className.match(match_class)) {
+                    for_result = divs.item(i).className.match(match_for);
+                    if (for_result &amp;amp;&amp;amp; for_result.length &amp;gt; 0) {
+                        if (document.getElementById(for_result[1])) {
+                            var activator = document.getElementById(for_result[1]);
+                        }
+                    } else {
+                        var foundPrevious = false;
+                        var activator = divs.item(i);
+                        while (foundPrevious == false &amp;amp;&amp;amp; activator) {
+                            activator = activator.previousSibling;
+                            if (activator &amp;amp;&amp;amp; activator.tagName) {
+                                foundPrevious = true;
+                                break;
+                            }
+                        }
+                    }
+                    if (activator) {
+                        activator.Tooltip = divs.item(i);
+                        if (!activator.id) {
+                            activator.id = &amp;quot;tt&amp;quot; + i;
+                        }
+                        activator.Tooltip.activator = activator.id;
+                        Tooltip.init(activator);
+                        // Just in case you need to access the activator from the Tooltip (i.e. a &amp;quot;Close&amp;quot; button)
+                    }
+
+
+
+                }
+            }
+        }
+    },
+
+
+    /**
+     * Initiate an Activator/Tooltip for events and display
+     *
+     * @param activator DomElement The element to which the Tooltip show/hide events are attached
+     * @return void
+     */
+    init: function (activator)
+    {
+        var tooltip = activator.Tooltip;
+        activator.Tooltip.style.visibility = &amp;quot;hidden&amp;quot;;
+
+        Tooltip._attachEvent(activator, &amp;quot;toggle&amp;quot;);
+
+
+        // Remove Link Hrefs
+        if (activator.tagName.toLowerCase() == &amp;quot;a&amp;quot;) {
+            try {
+                activator.removeAttribute(&amp;quot;href&amp;quot;);
+                activator.style.cursor = (document.links[0].style.cursor.length &amp;gt; 0) ? document.links[0].style.cursor : &amp;quot;pointer&amp;quot;;
+            }
+            catch (e) {
+                //DEBUG alert(e.message);
+            }
+        }
+
+        // Make sure the Tooltip is on top, only works if the element has position: absolute; in the CSS
+        tooltip.style.zIndex = &amp;quot;1000&amp;quot;;
+
+        if (Tooltip.autoFollowMouse != true &amp;amp;&amp;amp; Tooltip.closeText ) {
+            // Create the &amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Close&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt; and add it to the Tooltip
+
+            // &amp;lt;p&amp;gt; element
+            var p = document.createElement(&amp;#39;p&amp;#39;);
+
+            // &amp;lt;p&amp;gt; styles
+            p.style.textAlign = &amp;quot;right&amp;quot;;
+            p.style.padding.padding = &amp;quot;0&amp;quot;;
+            p.style.margin = &amp;quot;0&amp;quot;;
+
+            // &amp;lt;p&amp;gt; class name
+            p.className = &amp;quot;close&amp;quot;;
+
+            // &amp;lt;a&amp;gt; element
+            var link = document.createElement(&amp;#39;a&amp;#39;);
+
+            // Set the Tooltip var to the tooltip element
+            link.Tooltip = tooltip;
+
+            link.style.cursor = &amp;quot;pointer&amp;quot;;
+
+            // Add the click handler
+            Tooltip._attachEvent(link, &amp;quot;click&amp;quot;);
+
+            // &amp;quot;Close&amp;quot; text node
+            var close = document.createTextNode(Tooltip.closeText);
+
+            // Append the text to the &amp;lt;a&amp;gt; element
+            link.appendChild(close);
+
+            // Append the &amp;lt;a&amp;gt; to the &amp;lt;p&amp;gt; element
+            p.appendChild(link);
+
+            // Stick the entire thing on the end of the Tooltip
+            tooltip.appendChild(p, tooltip.firstChild);
+        }
+    },
+
+    /**
+     * Manually add a Tooltip
+     *
+     * When passed an Activator and Tooltip element or ID, it is setup as a Tooltip
+     *
+     * @param activator Activator Element or ID, this is the element that activates the Tooltip
+     * @param tooltip Tooltip Element or ID, this is the Tooltip element itself that is shown/hidden
+     */
+    add: function (activator, tooltip)
+    {
+        if (typeof activator == &amp;#39;string&amp;#39;) {
+            activator = document.getElementById(activator);
+        }
+        if (typeof tooltip == &amp;#39;string&amp;#39;) {
+            tooltip = document.getElementById(tooltip);
+        }
+
+        activator.Tooltip = tooltip;
+        Tooltip.init(activator);
+    },
+
+    /**
+     * Toggle the Tooltip
+         *
+         * Shows or Hides the Tooltip
+         *
+         * @param activator Activator Element
+         * @return void
+     */
+
+    toggle: function (activator, event, directHit)
+    {
+        try {
+            if (activator == 1) {
+                activator = document.getElementById(window._currentTT);
+            }
+        }
+        catch (e) { }
+
+        if (Tooltip.autoHideClick &amp;amp;&amp;amp; event.type == &amp;quot;click&amp;quot;) {
+            var close_class = new RegExp(&amp;quot;^(.*)\s?close\s?(.*)$&amp;quot;, &amp;#39;i&amp;#39;);
+            var tooltip_class = new RegExp(&amp;quot;^(.*)\s?tooltip\s?(.*)$&amp;quot;, &amp;#39;i&amp;#39;);
+            if (event.srcElement) {
+                var node = event.srcElement;
+            } else if (event.fromElement) {
+                var node = event.fromElement;
+            } else if (event.target) {
+                var node = event.target;
+            }
+            if (node.className == null  || !node.className.match(close_class)) {
+                var isWithinTooltip = false;
+                while (!isWithinTooltip &amp;amp;&amp;amp; node.parentNode) {
+                    // Check if the parent is a close element first, if so, we can break
+                    // and we still want to close the tooltip
+                    if (node.className &amp;amp;&amp;amp; node.className.match(close_class)) {
+                        break;
+                    }
+                    if (node.className &amp;amp;&amp;amp; node.className != null &amp;amp;&amp;amp; node.className.match(tooltip_class)) {
+                        isWithinTooltip = true;
+                        break;
+                    }
+                    node = node.parentNode;
+                }
+            }
+
+            if (isWithinTooltip) {
+                return false;
+            }
+        }
+
+        try {
+            if (directHit &amp;amp;&amp;amp; (activator.Tooltip.style.visibility == &amp;#39;hidden&amp;#39; || activator.Tooltip.style.display == &amp;#39;none&amp;#39;)) {
+                Tooltip._show(activator, event);
+            } else {
+                Tooltip._hide(activator, event);
+            }
+        }
+        catch (e) {
+            try {
+                Tooltip._hide(activator, event);
+            }
+            catch (e) { }
+        }
+        event.cancelBubble = true;
+        try {
+            event.stopPropagation();
+        }
+        catch (e) { }
+
+        return false;
+    },
+
+    /**
+     * Show the Tooltip
+     *
+     * Displays the Tooltip and sets the hide events up. You should never need to call this manually.
+     *
+     * @param activator Activator Element
+    * @private
+     * @return void
+     */
+    _show: function (activator, event, ignore_event)
+    {
+        if (Tooltip.autoHideClick &amp;amp;&amp;amp; window._currentTT ) {
+            Tooltip._hide(document.getElementById(window._currentTT), event, true);
+        }
+
+        window._currentTT = activator.id;
+
+        if (ignore_event == true || typeof Tooltip.showEvent == &amp;quot;string&amp;quot; || Tooltip.showEvent.constructor &amp;amp;&amp;amp; Tooltip.showEvent.constructor == Array &amp;amp;&amp;amp; Tooltip.showEvent.contains(event.type)) {
+            activator.Tooltip.isVisible = true;
+         if (Tooltip.autoFollowMouse || Tooltip.autoMoveToCursor) {
+            Tooltip._follow(activator, event);
+         }
+            try {
+                if (typeof Effect) {
+                    Element.setOpacity(activator.Tooltip, 0.1);
+                    activator.Tooltip.style.visibility = &amp;quot;visible&amp;quot;;
+                    Tooltip.showMethod(activator.Tooltip, {duration:Tooltip.fade});
+                } else {
+                    activator.Tooltip.style.visibility = &amp;quot;visible&amp;quot;;
+                }
+            }
+            catch (e) {
+                try {
+                    activator.Tooltip.style.visibility = &amp;quot;visible&amp;quot;;
+                }
+                catch (e) {
+                    //DEBUG alert(tooltip.id);
+                }
+            }
+            if (Tooltip.autoFollowMouse) {
+                Tooltip._attachEvent(activator, &amp;quot;follow&amp;quot;);
+            }
+
+            if (Tooltip.autoHideTimeout &amp;amp;&amp;amp; !Tooltip.autoFollowMouse) {
+                activator.timer = setTimeout(function () {
+                                            try {
+                                                Tooltip.hideMethod(activator.Tooltip, {duration:Tooltip.fade});
+                                            }
+                                            catch (e) {
+                                                activator.Tooltip.style.visibility = &amp;quot;hidden&amp;quot;; }
+                                            }, Tooltip.autoHideTimeout * 1000);
+            }
+
+            return;
+        }
+    },
+
+    /**
+     * Hide the Tooltip
+     *
+     * Hides the Tooltip and sets the show events up. You should never need to call this manually.
+     *
+     * @param activator Activator Element
+         * @private
+     * @return void
+     */
+    _hide: function (activator, event, ignore_event)
+    {
+        if (!activator) {
+            return;
+        }
+
+        event = event.type;
+
+        var tooltip = activator.Tooltip;
+        // We need to defer this
+        if (event == &amp;quot;mouseout&amp;quot; &amp;amp;&amp;amp; Tooltip.autoFollowMouse) {
+            activator.timer = setTimeout(function () {
+                                            try {
+                                                Tooltip.hideMethod(tooltip, {duration:Tooltip.fade});
+                                            }
+                                            catch (e) {
+                                                activator.Tooltip.style.visibility = &amp;quot;hidden&amp;quot;; }
+                                            }, Tooltip.autoHideTimeout * 1000);
+        } else if (ignore_event == true || ((typeof Tooltip.hideEvent == &amp;quot;string&amp;quot; &amp;amp;&amp;amp; Tooltip.hideEvent == event) || Tooltip.hideEvent.constructor &amp;amp;&amp;amp; Tooltip.hideEvent.constructor == Array &amp;amp;&amp;amp; Tooltip.hideEvent.contains(event))) {
+            activator.Tooltip.isVisible = false;
+            if( tooltip.style.visibility == &amp;#39;vidible&amp;#39; || activator.Tooltip.style.display != &amp;#39;none&amp;#39;) {
+                try {
+                    Tooltip.hideMethod(tooltip, {duration:Tooltip.fade});
+                }
+                catch (e) {
+                    activator.Tooltip.style.visibility = &amp;quot;hidden&amp;quot;;
+                }
+
+                if (Tooltip.autoFollowMouse) {
+                    Tooltip._removeEvent(activator, &amp;quot;follow&amp;quot;);
+                }
+            }
+
+            if (activator.timer) {
+                clearTimeout(activator.timer);
+            }
+            window._currentTT = false;
+
+            return;
+        }
+    },
+
+    _follow: function (activator, event)
+    {
+      if (activator.timer) {
+          try {
+             clearTimeout(activator.timer);
+         }
+         catch (e) { }
+      }
+
+        var winWidth, winHeight, d=document;
+        if (typeof window.innerWidth!=&amp;#39;undefined&amp;#39;) {
+            winWidth = window.innerWidth;
+            winHeight = window.innerHeight;
+        } else {
+            if (d.documentElement &amp;amp;&amp;amp; typeof d.documentElement.clientWidth!=&amp;#39;undefined&amp;#39; &amp;amp;&amp;amp; d.documentElement.clientWidth!=0) {
+                winWidth = d.documentElement.clientWidth
+                winHeight = d.documentElement.clientHeight
+            } else {
+                if (d.body &amp;amp;&amp;amp; typeof d.body.clientWidth!=&amp;#39;undefined&amp;#39;) {
+                    winWidth = d.body.clientWidth
+                    winHeight = d.body.clientHeight
+                }
+            }
+        }
+
+        var tooltipWidth, tooltipHeight;
+        if (activator.Tooltip.currentStyle) {
+            tooltipWidth = activator.Tooltip.currentStyle.width;
+            tooltipHeight = activator.Tooltip.currentStyle.height;
+        } else if (window.getComputedStyle) {
+            tooltipWidth = window.getComputedStyle(activator.Tooltip, null).width;
+            tooltipHeight = window.getComputedStyle(activator.Tooltip, null).height;
+        }
+
+      activator.Tooltip.style.position = &amp;quot;absolute&amp;quot;;
+
+        if (event.pageY) {
+            var top = event.pageY;
+            var left = event.pageX;
+        } else if (event.clientY) {
+            // put an If here instead, ?: doesn&amp;#39;t seem to work
+            if (document.body.scrollTop &amp;gt; document.documentElement.scrollTop) {
+                var top = event.clientY + document.body.scrollTop;
+            } else {
+                var top = event.clientY + document.documentElement.scrollTop;
+            }
+
+            if (document.body.scrollLeft &amp;gt; document.documentElement.scrollLeft) {
+                var left = event.clientX + document.body.scrollLeft;
+            } else {
+                var left = event.clientX + document.documentElement.scrollLeft;
+            }
+        }
+
+        // Make sure the Tooltip doesn&amp;#39;t go off the page. The 1.2 comes from Trial and error.
+        // We don&amp;#39;t track the height, its possible (and much more common) that the height of an item will be more than the browser pane
+        if ((left + parseInt(tooltipWidth)) &amp;gt; winWidth) {
+            left = winWidth - parseInt(tooltipWidth) * 1.2;
+        }
+
+        activator.Tooltip.style.top = top + &amp;quot;px&amp;quot;;
+        activator.Tooltip.style.left = left + &amp;quot;px&amp;quot;;
+    },
+
+    /**
+     * Attach show/hide/load events
+     *
+     * This method removes any existing events first
+     * in case show/hide are the same.
+     *
+     * @param element Element to which events should be attached
+     * @param event Event for which events are being registered. One of show/hide/load/click.
+     */
+
+    _attachEvent: function (element, event)
+    {
+        var i;
+        var events = new Array();
+        if (event == &amp;quot;toggle&amp;quot;) {
+            if (Tooltip.showEvent.constructor &amp;amp;&amp;amp; Tooltip.showEvent.constructor == Array) {
+                for (i = 0; i &amp;lt; Tooltip.showEvent.length; i++) {
+                    events.push(Tooltip.showEvent[i]);
+                    if (element.addEventListener) {
+                        element.addEventListener(Tooltip.showEvent[i], function (e) { Tooltip.toggle(element, e, true); return false; }, false);
+                    } else if (element.attachEvent) {
+                        element.attachEvent(&amp;#39;on&amp;#39; + Tooltip.showEvent[i], function (e) { Tooltip.toggle(element, e, true); return false; });
+                    }
+                }
+            } else {
+                events.push(Tooltip.showEvent);
+                if (element.addEventListener) {
+                    element.addEventListener(Tooltip.showEvent, function (e) { Tooltip.toggle(element, e, true); return false; }, false);
+                } else if (element.attachEvent) {
+                    element.attachEvent(&amp;#39;on&amp;#39; + Tooltip.showEvent, function (e) { Tooltip.toggle(element, e, true); return false; });
+                }
+            }
+
+            if (Tooltip.hideEvent.constructor &amp;amp;&amp;amp; Tooltip.hideEvent.constructor == Array) {
+                for (i = 0; i &amp;lt; Tooltip.hideEvent.length; i++) {
+                    if (!events.contains(Tooltip.hideEvent[i])) {
+                        events.push(Tooltip.hideEvent[i]);
+                        if (element.addEventListener) {
+                            element.addEventListener(Tooltip.hideEvent[i], function (e) { Tooltip.toggle(element, e, true); return false; }, false);
+                        } else if (element.attachEvent) {
+                            element.attachEvent(&amp;#39;on&amp;#39; + Tooltip.hideEvent[i], function (e) { Tooltip.toggle(element, e, true); return false; });
+                        }
+                    }
+                }
+            } else {
+                if (!events.contains(Tooltip.hideEvent)) {
+                    events.push(Tooltip.hideEvent);
+                    if (element.addEventListener) {
+                        element.addEventListener(Tooltip.hideEvent, function (e) { Tooltip.toggle(element, e, false); return false; }, false);
+                    } else if (element.attachEvent) {
+                        element.attachEvent(&amp;#39;on&amp;#39; + Tooltip.hideEvent, function (e) { Tooltip.toggle(element, e, false); return false; });
+                    }
+                }
+            }
+        } else if (event == &amp;quot;load&amp;quot;) {
+            if (element.addEventListener) {
+                element.addEventListener(&amp;quot;load&amp;quot;, function () { Tooltip.setup(); }, false);
+            } else if (element.attachEvent) {
+                element.attachEvent(&amp;#39;on&amp;#39; + &amp;quot;load&amp;quot;, function () { Tooltip.setup(); });
+            }
+        } else if (event == &amp;quot;click&amp;quot;) {
+            if (element.addEventListener) {
+                element.addEventListener(&amp;quot;click&amp;quot;, function (e) { Tooltip.toggle(element, e, true); }, false);
+            } else if (element.attachEvent) {
+                element.attachEvent(&amp;#39;on&amp;#39; + &amp;quot;click&amp;quot;, function (e) { Tooltip.toggle(element, e, true); });
+            }
+        } else if (event == &amp;quot;follow&amp;quot;) {
+            if (element.addEventListener) {
+                element.addEventListener(&amp;quot;mousemove&amp;quot;, function (e) { Tooltip._follow(element, e); }, false);
+            }  else {
+                element.attachEvent(&amp;#39;onmousemove&amp;#39;, function (e) { Tooltip._follow(element, e);  });
+            }
+        } else if (event == &amp;quot;clickanywhere&amp;quot;) {
+            if (element.addEventListener) {
+                element.addEventListener(&amp;quot;click&amp;quot;, function (e) { Tooltip.toggle(Tooltip.CURRENT_TOOLTIP, e, false); }, false);
+            }  else {
+                element.attachEvent(&amp;#39;onclick&amp;#39;, function (e) { Tooltip.toggle(Tooltip.CURRENT_TOOLTIP, e, false);  });
+            }
+        }
+    },
+
+    _removeEvent: function (element, event)
+    {
+        try {
+            if (event == &amp;quot;follow&amp;quot;) {
+                if (element.addEventListener) {
+                    element.removeEventListener(&amp;quot;mousemove&amp;quot;, function (e) { Tooltip._follow(element, e); }, false);
+                } else {
+                    element.dettachEvent(&amp;#39;onmousemove&amp;#39;, function (e) { Tooltip._follow(element, e); });
+                }
+            }
+        }
+        catch (e) {}
+    }
+}
+
+// Start the Tooltips in motion
+try {
+    Tooltip._attachEvent(window, &amp;#39;load&amp;#39;);
+}
+catch (e) { }
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/js/Tooltip.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsareascrollerjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/areascroller.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/areascroller.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/areascroller.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,75 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+Effect.Scroll = Class.create();
+Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
+    initialize: function(element, options) {
+        this.element = $(element);
+        this.direction = options &amp;amp;&amp;amp; options.direction ? options.direction : &amp;#39;right&amp;#39;;
+        this.pps = options &amp;amp;&amp;amp; options.pps ? options.pps : 100;
+
+        var options = Object.extend({
+            duration: (this.element.scrollWidth - this.element.scrollLeft) / this.pps
+        }, arguments[1] || {});
+
+
+        this.start(options);
+    },
+    setup: function() {
+        this.scrollStart = this.element.scrollLeft;
+        this.delta = this.element.scrollWidth;
+    },
+    update: function(position) {
+        if (this.direction == &amp;#39;right&amp;#39;)
+            this.element.scrollLeft = this.scrollStart + (position * this.delta);
+        else
+            this.element.scrollLeft = this.scrollStart - (position * this.delta);
+    }
+});
+
+
+var rightScroller;
+var leftScroller;
+
+function setupScrollers(container) {
+    var containerID = container;
+    var r = {
+        &amp;#39;#right_scroller&amp;#39;: function(e) {
+            e.onmouseover = function(e) {
+                if (leftScroller) leftScroller.cancel();
+                rightScroller = new Effect.Scroll(containerID, {pps: 100, direction: &amp;#39;right&amp;#39;});
+            }
+            e.onmouseout = function(e) {
+                if (rightScroller) {
+                    rightScroller.cancel();
+                }
+            }
+            e.onmousedown = function(e) {
+                if (rightScroller) rightScroller.cancel();
+                rightScroller = new Effect.Scroll(containerID, {pps: 1000, direction: &amp;#39;right&amp;#39;});
+            }
+            e.onmouseup = function(e) {
+                if (rightScroller) rightScroller.cancel();
+                rightScroller = new Effect.Scroll(containerID, {pps: 100, direction: &amp;#39;right&amp;#39;});
+            }
+        },
+        &amp;#39;#left_scroller&amp;#39;: function(e) {
+            e.onmouseover = function(e) {
+                if (rightScroller) rightScroller.cancel();
+                leftScroller = new Effect.Scroll(containerID, {pps: 100, direction: &amp;#39;left&amp;#39;});
+            }
+            e.onmouseout = function(e) {
+                if (leftScroller) {
+                    leftScroller.cancel();
+                }
+            }
+            e.onmousedown = function(e) {
+                if (leftScroller) leftScroller.cancel();
+                leftScroller = new Effect.Scroll(containerID, {pps: 1000, direction: &amp;#39;left&amp;#39;});
+            }
+            e.onmouseup = function(e) {
+                if (leftScroller) leftScroller.cancel();
+                leftScroller = new Effect.Scroll(containerID, {pps: 100, direction: &amp;#39;left&amp;#39;});
+            }
+        }
+    }
+
+    Behaviour.register(r);
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/js/areascroller.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsbehaviourjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/behaviour.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/behaviour.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/behaviour.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,254 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+/*
+   Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the work
+   of Simon Willison (see comments by Simon below).
+
+   Description:
+
+       Uses css selectors to apply javascript behaviours to enable
+       unobtrusive javascript in html documents.
+
+   Usage:   
+   
+    var myrules = {
+        &amp;#39;b.someclass&amp;#39; : function(element){
+            element.onclick = function(){
+                alert(this.innerHTML);
+            }
+        },
+        &amp;#39;#someid u&amp;#39; : function(element){
+            element.onmouseover = function(){
+                this.innerHTML = &amp;quot;BLAH!&amp;quot;;
+            }
+        }
+    };
+
+    Behaviour.register(myrules);
+
+    // Call Behaviour.apply() to re-apply the rules (if you
+    // update the dom, etc).
+
+   License:
+   
+       This file is entirely BSD licensed.
+
+   More information:
+
+       http://ripcord.co.nz/behaviour/
+   
+*/   
+
+var Behaviour = {
+    list : new Array,
+
+    register : function(sheet){
+        Behaviour.list.push(sheet);
+    },
+
+    start : function(){
+        Behaviour.addLoadEvent(function(){
+            Behaviour.apply();
+        });
+    },
+
+    apply : function(){
+        for (h=0;sheet=Behaviour.list[h];h++){
+            for (selector in sheet){
+                list = document.getElementsBySelector(selector);
+
+                if (!list){
+                    continue;
+                }
+
+                for (i=0;element=list[i];i++){
+                    sheet[selector](element);
+                }
+            }
+        }
+    },
+
+    addLoadEvent : function(func){
+        var oldonload = window.onload;
+
+        if (typeof window.onload != &amp;#39;function&amp;#39;) {
+            window.onload = func;
+        } else {
+            window.onload = function() {
+                oldonload();
+                func();
+            }
+        }
+    }
+}
+
+Behaviour.start();
+
+/*
+   The following code is Copyright (C) Simon Willison 2004.
+
+   document.getElementsBySelector(selector)
+   - returns an array of element objects from the current document
+     matching the CSS selector. Selectors can contain element names, 
+     class names and ids and can be nested. For example:
+     
+       elements = document.getElementsBySelect(&amp;#39;div#main p a.external&amp;#39;)
+     
+     Will return an array of all &amp;#39;a&amp;#39; elements with &amp;#39;external&amp;#39; in their 
+     class attribute that are contained inside &amp;#39;p&amp;#39; elements that are 
+     contained inside the &amp;#39;div&amp;#39; element which has id=&amp;quot;main&amp;quot;
+
+   New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
+   See http://www.w3.org/TR/css3-selectors/#attribute-selectors
+
+   Version 0.4 - Simon Willison, March 25th 2003
+   -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
+   -- Opera 7 fails 
+*/
+
+function getAllChildren(e) {
+  // Returns all children of element. Workaround required for IE5/Windows. Ugh.
+  return e.all ? e.all : e.getElementsByTagName(&amp;#39;*&amp;#39;);
+}
+
+document.getElementsBySelector = function(selector) {
+  // Attempt to fail gracefully in lesser browsers
+  if (!document.getElementsByTagName) {
+    return new Array();
+  }
+  // Split selector in to tokens
+  var tokens = selector.split(&amp;#39; &amp;#39;);
+  var currentContext = new Array(document);
+  for (var i = 0; i &amp;lt; tokens.length; i++) {
+    token = tokens[i].replace(/^\s+/,&amp;#39;&amp;#39;).replace(/\s+$/,&amp;#39;&amp;#39;);;
+    if (token.indexOf(&amp;#39;#&amp;#39;) &amp;gt; -1) {
+      // Token is an ID selector
+      var bits = token.split(&amp;#39;#&amp;#39;);
+      var tagName = bits[0];
+      var id = bits[1];
+      var element = document.getElementById(id);
+      if (tagName &amp;amp;&amp;amp; element.nodeName.toLowerCase() != tagName) {
+        // tag with that ID not found, return false
+        return new Array();
+      }
+      // Set currentContext to contain just this element
+      currentContext = new Array(element);
+      continue; // Skip to next token
+    }
+    if (token.indexOf(&amp;#39;.&amp;#39;) &amp;gt; -1) {
+      // Token contains a class selector
+      var bits = token.split(&amp;#39;.&amp;#39;);
+      var tagName = bits[0];
+      var className = bits[1];
+      if (!tagName) {
+        tagName = &amp;#39;*&amp;#39;;
+      }
+      // Get elements matching tag, filter them for class selector
+      var found = new Array;
+      var foundCount = 0;
+      for (var h = 0; h &amp;lt; currentContext.length; h++) {
+        var elements;
+        if (tagName == &amp;#39;*&amp;#39;) {
+            elements = getAllChildren(currentContext[h]);
+        } else {
+            elements = currentContext[h].getElementsByTagName(tagName);
+        }
+        for (var j = 0; j &amp;lt; elements.length; j++) {
+          found[foundCount++] = elements[j];
+        }
+      }
+      currentContext = new Array;
+      var currentContextIndex = 0;
+      for (var k = 0; k &amp;lt; found.length; k++) {
+        if (found[k].className &amp;amp;&amp;amp; found[k].className.match(new RegExp(&amp;#39;\\b&amp;#39;+className+&amp;#39;\\b&amp;#39;))) {
+          currentContext[currentContextIndex++] = found[k];
+        }
+      }
+      continue; // Skip to next token
+    }
+    // Code to deal with attribute selectors
+    if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?&amp;quot;?([^\]&amp;quot;]*)&amp;quot;?\]$/)) {
+      var tagName = RegExp.$1;
+      var attrName = RegExp.$2;
+      var attrOperator = RegExp.$3;
+      var attrValue = RegExp.$4;
+      if (!tagName) {
+        tagName = &amp;#39;*&amp;#39;;
+      }
+      // Grab all of the tagName elements within current context
+      var found = new Array;
+      var foundCount = 0;
+      for (var h = 0; h &amp;lt; currentContext.length; h++) {
+        var elements;
+        if (tagName == &amp;#39;*&amp;#39;) {
+            elements = getAllChildren(currentContext[h]);
+        } else {
+            elements = currentContext[h].getElementsByTagName(tagName);
+        }
+        for (var j = 0; j &amp;lt; elements.length; j++) {
+          found[foundCount++] = elements[j];
+        }
+      }
+      currentContext = new Array;
+      var currentContextIndex = 0;
+      var checkFunction; // This function will be used to filter the elements
+      switch (attrOperator) {
+        case &amp;#39;=&amp;#39;: // Equality
+          checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
+          break;
+        case &amp;#39;~&amp;#39;: // Match one of space seperated words 
+          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp(&amp;#39;\\b&amp;#39;+attrValue+&amp;#39;\\b&amp;#39;))); };
+          break;
+        case &amp;#39;|&amp;#39;: // Match start with value followed by optional hyphen
+          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp(&amp;#39;^&amp;#39;+attrValue+&amp;#39;-?&amp;#39;))); };
+          break;
+        case &amp;#39;^&amp;#39;: // Match starts with value
+          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
+          break;
+        case &amp;#39;$&amp;#39;: // Match ends with value - fails with &amp;quot;Warning&amp;quot; in Opera 7
+          checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
+          break;
+        case &amp;#39;*&amp;#39;: // Match ends with value
+          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) &amp;gt; -1); };
+          break;
+        default :
+          // Just test for existence of attribute
+          checkFunction = function(e) { return e.getAttribute(attrName); };
+      }
+      currentContext = new Array;
+      var currentContextIndex = 0;
+      for (var k = 0; k &amp;lt; found.length; k++) {
+        if (checkFunction(found[k])) {
+          currentContext[currentContextIndex++] = found[k];
+        }
+      }
+      // alert(&amp;#39;Attribute Selector: &amp;#39;+tagName+&amp;#39; &amp;#39;+attrName+&amp;#39; &amp;#39;+attrOperator+&amp;#39; &amp;#39;+attrValue);
+      continue; // Skip to next token
+    }
+    
+    if (!currentContext[0]){
+        return;
+    }
+    
+    // If we get here, token is JUST an element (not a class or ID selector)
+    tagName = token;
+    var found = new Array;
+    var foundCount = 0;
+    for (var h = 0; h &amp;lt; currentContext.length; h++) {
+      var elements = currentContext[h].getElementsByTagName(tagName);
+      for (var j = 0; j &amp;lt; elements.length; j++) {
+        found[foundCount++] = elements[j];
+      }
+    }
+    currentContext = found;
+  }
+  return currentContext;
+}
+
+/* That revolting regular expression explained 
+/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?&amp;quot;?([^\]&amp;quot;]*)&amp;quot;?\]$/
+  \---/  \---/\-------------/    \-------/
+    |      |         |               |
+    |      |         |           The value
+    |      |    ~,|,^,$,* or =
+    |   Attribute 
+   Tag
+*/
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/js/behaviour.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsbuilderjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/builder.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/builder.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/builder.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,136 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+// script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Builder = {
+  NODEMAP: {
+    AREA: &amp;#39;map&amp;#39;,
+    CAPTION: &amp;#39;table&amp;#39;,
+    COL: &amp;#39;table&amp;#39;,
+    COLGROUP: &amp;#39;table&amp;#39;,
+    LEGEND: &amp;#39;fieldset&amp;#39;,
+    OPTGROUP: &amp;#39;select&amp;#39;,
+    OPTION: &amp;#39;select&amp;#39;,
+    PARAM: &amp;#39;object&amp;#39;,
+    TBODY: &amp;#39;table&amp;#39;,
+    TD: &amp;#39;table&amp;#39;,
+    TFOOT: &amp;#39;table&amp;#39;,
+    TH: &amp;#39;table&amp;#39;,
+    THEAD: &amp;#39;table&amp;#39;,
+    TR: &amp;#39;table&amp;#39;
+  },
+  // note: For Firefox &amp;lt; 1.5, OPTION and OPTGROUP tags are currently broken,
+  //       due to a Firefox bug
+  node: function(elementName) {
+    elementName = elementName.toUpperCase();
+
+    // try innerHTML approach
+    var parentTag = this.NODEMAP[elementName] || &amp;#39;div&amp;#39;;
+    var parentElement = document.createElement(parentTag);
+    try { // prevent IE &amp;quot;feature&amp;quot;: http://dev.rubyonrails.org/ticket/2707
+      parentElement.innerHTML = &amp;quot;&amp;lt;&amp;quot; + elementName + &amp;quot;&amp;gt;&amp;lt;/&amp;quot; + elementName + &amp;quot;&amp;gt;&amp;quot;;
+    } catch(e) {}
+    var element = parentElement.firstChild || null;
+
+    // see if browser added wrapping tags
+    if(element &amp;amp;&amp;amp; (element.tagName.toUpperCase() != elementName))
+      element = element.getElementsByTagName(elementName)[0];
+
+    // fallback to createElement approach
+    if(!element) element = document.createElement(elementName);
+
+    // abort if nothing could be created
+    if(!element) return;
+
+    // attributes (or text)
+    if(arguments[1])
+      if(this._isStringOrNumber(arguments[1]) ||
+        (arguments[1] instanceof Array) ||
+        arguments[1].tagName) {
+          this._children(element, arguments[1]);
+        } else {
+          var attrs = this._attributes(arguments[1]);
+          if(attrs.length) {
+            try { // prevent IE &amp;quot;feature&amp;quot;: http://dev.rubyonrails.org/ticket/2707
+              parentElement.innerHTML = &amp;quot;&amp;lt;&amp;quot; +elementName + &amp;quot; &amp;quot; +
+                attrs + &amp;quot;&amp;gt;&amp;lt;/&amp;quot; + elementName + &amp;quot;&amp;gt;&amp;quot;;
+            } catch(e) {}
+            element = parentElement.firstChild || null;
+            // workaround firefox 1.0.X bug
+            if(!element) {
+              element = document.createElement(elementName);
+              for(attr in arguments[1])
+                element[attr == &amp;#39;class&amp;#39; ? &amp;#39;className&amp;#39; : attr] = arguments[1][attr];
+            }
+            if(element.tagName.toUpperCase() != elementName)
+              element = parentElement.getElementsByTagName(elementName)[0];
+          }
+        }
+
+    // text, or array of children
+    if(arguments[2])
+      this._children(element, arguments[2]);
+
+     return $(element);
+  },
+  _text: function(text) {
+     return document.createTextNode(text);
+  },
+
+  ATTR_MAP: {
+    &amp;#39;className&amp;#39;: &amp;#39;class&amp;#39;,
+    &amp;#39;htmlFor&amp;#39;: &amp;#39;for&amp;#39;
+  },
+
+  _attributes: function(attributes) {
+    var attrs = [];
+    for(attribute in attributes)
+      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
+          &amp;#39;=&amp;quot;&amp;#39; + attributes[attribute].toString().escapeHTML().gsub(/&amp;quot;/,&amp;#39;&amp;amp;quot;&amp;#39;) + &amp;#39;&amp;quot;&amp;#39;);
+    return attrs.join(&amp;quot; &amp;quot;);
+  },
+  _children: function(element, children) {
+    if(children.tagName) {
+      element.appendChild(children);
+      return;
+    }
+    if(typeof children==&amp;#39;object&amp;#39;) { // array can hold nodes and text
+      children.flatten().each( function(e) {
+        if(typeof e==&amp;#39;object&amp;#39;)
+          element.appendChild(e);
+        else
+          if(Builder._isStringOrNumber(e))
+            element.appendChild(Builder._text(e));
+      });
+    } else
+      if(Builder._isStringOrNumber(children))
+        element.appendChild(Builder._text(children));
+  },
+  _isStringOrNumber: function(param) {
+    return(typeof param==&amp;#39;string&amp;#39; || typeof param==&amp;#39;number&amp;#39;);
+  },
+  build: function(html) {
+    var element = this.node(&amp;#39;div&amp;#39;);
+    $(element).update(html.strip());
+    return element.down();
+  },
+  dump: function(scope) {
+    if(typeof scope != &amp;#39;object&amp;#39; &amp;amp;&amp;amp; typeof scope != &amp;#39;function&amp;#39;) scope = window; //global scope
+
+    var tags = (&amp;quot;A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY &amp;quot; +
+      &amp;quot;BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET &amp;quot; +
+      &amp;quot;FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX &amp;quot;+
+      &amp;quot;KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P &amp;quot;+
+      &amp;quot;PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD &amp;quot;+
+      &amp;quot;TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR&amp;quot;).split(/\s+/);
+
+    tags.each( function(tag){
+      scope[tag] = function() {
+        return Builder.node.apply(Builder, [tag].concat($A(arguments)));
+      };
+    });
+  }
+};
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/web/src/main/webapp/js/builder.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjscontrolsjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/controls.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/controls.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/controls.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,965 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+// script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//           (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+//  Richard Livsey
+//  Rahul Bhargava
+//  Rob Wills
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that&amp;#39;s independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the &amp;#39;tokens&amp;#39; option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter(&amp;#39;id&amp;#39;,&amp;#39;upd&amp;#39;, &amp;#39;/url/&amp;#39;, { tokens: &amp;#39;,&amp;#39; });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, &amp;#39;,&amp;#39; in the above example can be replaced with
+// a token array, e.g. { tokens: [&amp;#39;,&amp;#39;, &amp;#39;\n&amp;#39;] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+if(typeof Effect == &amp;#39;undefined&amp;#39;)
+  throw(&amp;quot;controls.js requires including script.aculo.us&amp;#39; effects.js library&amp;quot;);
+
+var Autocompleter = { };
+Autocompleter.Base = Class.create({
+  baseInitialize: function(element, update, options) {
+    element          = $(element);
+    this.element     = element;
+    this.update      = $(update);
+    this.hasFocus    = false;
+    this.changed     = false;
+    this.active      = false;
+    this.index       = 0;
+    this.entryCount  = 0;
+    this.oldElementValue = this.element.value;
+
+    if(this.setOptions)
+      this.setOptions(options);
+    else
+      this.options = options || { };
+
+    this.options.paramName    = this.options.paramName || this.element.name;
+    this.options.tokens       = this.options.tokens || [];
+    this.options.frequency    = this.options.frequency || 0.4;
+    this.options.minChars     = this.options.minChars || 1;
+    this.options.onShow       = this.options.onShow ||
+      function(element, update){
+        if(!update.style.position || update.style.position==&amp;#39;absolute&amp;#39;) {
+          update.style.position = &amp;#39;absolute&amp;#39;;
+          Position.clone(element, update, {
+            setHeight: false,
+            offsetTop: element.offsetHeight
+          });
+        }
+        Effect.Appear(update,{duration:0.15});
+      };
+    this.options.onHide = this.options.onHide ||
+      function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+
+    if(typeof(this.options.tokens) == &amp;#39;string&amp;#39;)
+      this.options.tokens = new Array(this.options.tokens);
+    // Force carriage returns as token delimiters anyway
+    if (!this.options.tokens.include(&amp;#39;\n&amp;#39;))
+      this.options.tokens.push(&amp;#39;\n&amp;#39;);
+
+    this.observer = null;
+
+    this.element.setAttribute(&amp;#39;autocomplete&amp;#39;,&amp;#39;off&amp;#39;);
+
+    Element.hide(this.update);
+
+    Event.observe(this.element, &amp;#39;blur&amp;#39;, this.onBlur.bindAsEventListener(this));
+    Event.observe(this.element, &amp;#39;keydown&amp;#39;, this.onKeyPress.bindAsEventListener(this));
+  },
+
+  show: function() {
+    if(Element.getStyle(this.update, &amp;#39;display&amp;#39;)==&amp;#39;none&amp;#39;) this.options.onShow(this.element, this.update);
+    if(!this.iefix &amp;amp;&amp;amp;
+      (Prototype.Browser.IE) &amp;amp;&amp;amp;
+      (Element.getStyle(this.update, &amp;#39;position&amp;#39;)==&amp;#39;absolute&amp;#39;)) {
+      new Insertion.After(this.update,
+       &amp;#39;&amp;lt;iframe id=&amp;quot;&amp;#39; + this.update.id + &amp;#39;_iefix&amp;quot; &amp;#39;+
+       &amp;#39;style=&amp;quot;display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);&amp;quot; &amp;#39; +
+       &amp;#39;src=&amp;quot;javascript:false;&amp;quot; frameborder=&amp;quot;0&amp;quot; scrolling=&amp;quot;no&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;#39;);
+      this.iefix = $(this.update.id+&amp;#39;_iefix&amp;#39;);
+    }
+    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+  },
+
+  fixIEOverlapping: function() {
+    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
+    this.iefix.style.zIndex = 1;
+    this.update.style.zIndex = 2;
+    Element.show(this.iefix);
+  },
+
+  hide: function() {
+    this.stopIndicator();
+    if(Element.getStyle(this.update, &amp;#39;display&amp;#39;)!=&amp;#39;none&amp;#39;) this.options.onHide(this.element, this.update);
+    if(this.iefix) Element.hide(this.iefix);
+  },
+
+  startIndicator: function() {
+    if(this.options.indicator) Element.show(this.options.indicator);
+  },
+
+  stopIndicator: function() {
+    if(this.options.indicator) Element.hide(this.options.indicator);
+  },
+
+  onKeyPress: function(event) {
+    if(this.active)
+      switch(event.keyCode) {
+       case Event.KEY_TAB:
+       case Event.KEY_RETURN:
+         this.selectEntry();
+         Event.stop(event);
+       case Event.KEY_ESC:
+         this.hide();
+         this.active = false;
+         Event.stop(event);
+         return;
+       case Event.KEY_LEFT:
+       case Event.KEY_RIGHT:
+         return;
+       case Event.KEY_UP:
+         this.markPrevious();
+         this.render();
+         Event.stop(event);
+         return;
+       case Event.KEY_DOWN:
+         this.markNext();
+         this.render();
+         Event.stop(event);
+         return;
+      }
+     else
+       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+         (Prototype.Browser.WebKit &amp;gt; 0 &amp;amp;&amp;amp; event.keyCode == 0)) return;
+
+    this.changed = true;
+    this.hasFocus = true;
+
+    if(this.observer) clearTimeout(this.observer);
+      this.observer =
+        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+  },
+
+  activate: function() {
+    this.changed = false;
+    this.hasFocus = true;
+    this.getUpdatedChoices();
+  },
+
+  onHover: function(event) {
+    var element = Event.findElement(event, &amp;#39;LI&amp;#39;);
+    if(this.index != element.autocompleteIndex)
+    {
+        this.index = element.autocompleteIndex;
+        this.render();
+    }
+    Event.stop(event);
+  },
+
+  onClick: function(event) {
+    var element = Event.findElement(event, &amp;#39;LI&amp;#39;);
+    this.index = element.autocompleteIndex;
+    this.selectEntry();
+    this.hide();
+  },
+
+  onBlur: function(event) {
+    // needed to make click events working
+    setTimeout(this.hide.bind(this), 250);
+    this.hasFocus = false;
+    this.active = false;
+  },
+
+  render: function() {
+    if(this.entryCount &amp;gt; 0) {
+      for (var i = 0; i &amp;lt; this.entryCount; i++)
+        this.index==i ?
+          Element.addClassName(this.getEntry(i),&amp;quot;selected&amp;quot;) :
+          Element.removeClassName(this.getEntry(i),&amp;quot;selected&amp;quot;);
+      if(this.hasFocus) {
+        this.show();
+        this.active = true;
+      }
+    } else {
+      this.active = false;
+      this.hide();
+    }
+  },
+
+  markPrevious: function() {
+    if(this.index &amp;gt; 0) this.index--;
+      else this.index = this.entryCount-1;
+    this.getEntry(this.index).scrollIntoView(true);
+  },
+
+  markNext: function() {
+    if(this.index &amp;lt; this.entryCount-1) this.index++;
+      else this.index = 0;
+    this.getEntry(this.index).scrollIntoView(false);
+  },
+
+  getEntry: function(index) {
+    return this.update.firstChild.childNodes[index];
+  },
+
+  getCurrentEntry: function() {
+    return this.getEntry(this.index);
+  },
+
+  selectEntry: function() {
+    this.active = false;
+    this.updateElement(this.getCurrentEntry());
+  },
+
+  updateElement: function(selectedElement) {
+    if (this.options.updateElement) {
+      this.options.updateElement(selectedElement);
+      return;
+    }
+    var value = &amp;#39;&amp;#39;;
+    if (this.options.select) {
+      var nodes = $(selectedElement).select(&amp;#39;.&amp;#39; + this.options.select) || [];
+      if(nodes.length&amp;gt;0) value = Element.collectTextNodes(nodes[0], this.options.select);
+    } else
+      value = Element.collectTextNodesIgnoreClass(selectedElement, &amp;#39;informal&amp;#39;);
+
+    var bounds = this.getTokenBounds();
+    if (bounds[0] != -1) {
+      var newValue = this.element.value.substr(0, bounds[0]);
+      var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+      if (whitespace)
+        newValue += whitespace[0];
+      this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+    } else {
+      this.element.value = value;
+    }
+    this.oldElementValue = this.element.value;
+    this.element.focus();
+
+    if (this.options.afterUpdateElement)
+      this.options.afterUpdateElement(this.element, selectedElement);
+  },
+
+  updateChoices: function(choices) {
+    if(!this.changed &amp;amp;&amp;amp; this.hasFocus) {
+      this.update.innerHTML = choices;
+      Element.cleanWhitespace(this.update);
+      Element.cleanWhitespace(this.update.down());
+
+      if(this.update.firstChild &amp;amp;&amp;amp; this.update.down().childNodes) {
+        this.entryCount =
+          this.update.down().childNodes.length;
+        for (var i = 0; i &amp;lt; this.entryCount; i++) {
+          var entry = this.getEntry(i);
+          entry.autocompleteIndex = i;
+          this.addObservers(entry);
+        }
+      } else {
+        this.entryCount = 0;
+      }
+
+      this.stopIndicator();
+      this.index = 0;
+
+      if(this.entryCount==1 &amp;amp;&amp;amp; this.options.autoSelect) {
+        this.selectEntry();
+        this.hide();
+      } else {
+        this.render();
+      }
+    }
+  },
+
+  addObservers: function(element) {
+    Event.observe(element, &amp;quot;mouseover&amp;quot;, this.onHover.bindAsEventListener(this));
+    Event.observe(element, &amp;quot;click&amp;quot;, this.onClick.bindAsEventListener(this));
+  },
+
+  onObserverEvent: function() {
+    this.changed = false;
+    this.tokenBounds = null;
+    if(this.getToken().length&amp;gt;=this.options.minChars) {
+      this.getUpdatedChoices();
+    } else {
+      this.active = false;
+      this.hide();
+    }
+    this.oldElementValue = this.element.value;
+  },
+
+  getToken: function() {
+    var bounds = this.getTokenBounds();
+    return this.element.value.substring(bounds[0], bounds[1]).strip();
+  },
+
+  getTokenBounds: function() {
+    if (null != this.tokenBounds) return this.tokenBounds;
+    var value = this.element.value;
+    if (value.strip().empty()) return [-1, 0];
+    var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
+    var offset = (diff == this.oldElementValue.length ? 1 : 0);
+    var prevTokenPos = -1, nextTokenPos = value.length;
+    var tp;
+    for (var index = 0, l = this.options.tokens.length; index &amp;lt; l; ++index) {
+      tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
+      if (tp &amp;gt; prevTokenPos) prevTokenPos = tp;
+      tp = value.indexOf(this.options.tokens[index], diff + offset);
+      if (-1 != tp &amp;amp;&amp;amp; tp &amp;lt; nextTokenPos) nextTokenPos = tp;
+    }
+    return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+  }
+});
+
+Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
+  var boundary = Math.min(newS.length, oldS.length);
+  for (var index = 0; index &amp;lt; boundary; ++index)
+    if (newS[index] != oldS[index])
+      return index;
+  return boundary;
+};
+
+Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+  initialize: function(element, update, url, options) {
+    this.baseInitialize(element, update, options);
+    this.options.asynchronous  = true;
+    this.options.onComplete    = this.onComplete.bind(this);
+    this.options.defaultParams = this.options.parameters || null;
+    this.url                   = url;
+  },
+
+  getUpdatedChoices: function() {
+    this.startIndicator();
+
+    var entry = encodeURIComponent(this.options.paramName) + &amp;#39;=&amp;#39; +
+      encodeURIComponent(this.getToken());
+
+    this.options.parameters = this.options.callback ?
+      this.options.callback(this.element, entry) : entry;
+
+    if(this.options.defaultParams)
+      this.options.parameters += &amp;#39;&amp;amp;&amp;#39; + this.options.defaultParams;
+
+    new Ajax.Request(this.url, this.options);
+  },
+
+  onComplete: function(request) {
+    this.updateChoices(request.responseText);
+  }
+});
+
+// The local array autocompleter. Used when you&amp;#39;d prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+//                    text only at the beginning of strings in the
+//                    autocomplete array. Defaults to true, which will
+//                    match text at the beginning of any *word* in the
+//                    strings in the autocomplete array. If you want to
+//                    search anywhere in the string, additionally set
+//                    the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+//                   a partial match (unlike minChars, which defines
+//                   how many characters are required to do any match
+//                   at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+//                 Defaults to true.
+//
+// It&amp;#39;s possible to pass in a custom function as the &amp;#39;selector&amp;#39;
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create(Autocompleter.Base, {
+  initialize: function(element, update, array, options) {
+    this.baseInitialize(element, update, options);
+    this.options.array = array;
+  },
+
+  getUpdatedChoices: function() {
+    this.updateChoices(this.options.selector(this));
+  },
+
+  setOptions: function(options) {
+    this.options = Object.extend({
+      choices: 10,
+      partialSearch: true,
+      partialChars: 2,
+      ignoreCase: true,
+      fullSearch: false,
+      selector: function(instance) {
+        var ret       = []; // Beginning matches
+        var partial   = []; // Inside matches
+        var entry     = instance.getToken();
+        var count     = 0;
+
+        for (var i = 0; i &amp;lt; instance.options.array.length &amp;amp;&amp;amp;
+          ret.length &amp;lt; instance.options.choices ; i++) {
+
+          var elem = instance.options.array[i];
+          var foundPos = instance.options.ignoreCase ?
+            elem.toLowerCase().indexOf(entry.toLowerCase()) :
+            elem.indexOf(entry);
+
+          while (foundPos != -1) {
+            if (foundPos == 0 &amp;amp;&amp;amp; elem.length != entry.length) {
+              ret.push(&amp;quot;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&amp;quot; + elem.substr(0, entry.length) + &amp;quot;&amp;lt;/strong&amp;gt;&amp;quot; +
+                elem.substr(entry.length) + &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;);
+              break;
+            } else if (entry.length &amp;gt;= instance.options.partialChars &amp;amp;&amp;amp;
+              instance.options.partialSearch &amp;amp;&amp;amp; foundPos != -1) {
+              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+                partial.push(&amp;quot;&amp;lt;li&amp;gt;&amp;quot; + elem.substr(0, foundPos) + &amp;quot;&amp;lt;strong&amp;gt;&amp;quot; +
+                  elem.substr(foundPos, entry.length) + &amp;quot;&amp;lt;/strong&amp;gt;&amp;quot; + elem.substr(
+                  foundPos + entry.length) + &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;);
+                break;
+              }
+            }
+
+            foundPos = instance.options.ignoreCase ?
+              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+              elem.indexOf(entry, foundPos + 1);
+
+          }
+        }
+        if (partial.length)
+          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
+        return &amp;quot;&amp;lt;ul&amp;gt;&amp;quot; + ret.join(&amp;#39;&amp;#39;) + &amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;;
+      }
+    }, options || { });
+  }
+});
+
+// AJAX in-place editor and collection editor
+// Full rewrite by Christophe Porteneuve &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26836982&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;tdd@...&lt;/a&gt;&amp;gt; (April 2007).
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+  setTimeout(function() {
+    Field.activate(field);
+  }, 1);
+};
+
+Ajax.InPlaceEditor = Class.create({
+  initialize: function(element, url, options) {
+    this.url = url;
+    this.element = element = $(element);
+    this.prepareOptions();
+    this._controls = { };
+    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
+    Object.extend(this.options, options || { });
+    if (!this.options.formId &amp;amp;&amp;amp; this.element.id) {
+      this.options.formId = this.element.id + &amp;#39;-inplaceeditor&amp;#39;;
+      if ($(this.options.formId))
+        this.options.formId = &amp;#39;&amp;#39;;
+    }
+    if (this.options.externalControl)
+      this.options.externalControl = $(this.options.externalControl);
+    if (!this.options.externalControl)
+      this.options.externalControlOnly = false;
+    this._originalBackground = this.element.getStyle(&amp;#39;background-color&amp;#39;) || &amp;#39;transparent&amp;#39;;
+    this.element.title = this.options.clickToEditText;
+    this._boundCancelHandler = this.handleFormCancellation.bind(this);
+    this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
+    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
+    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
+    this._boundWrapperHandler = this.wrapUp.bind(this);
+    this.registerListeners();
+  },
+  checkForEscapeOrReturn: function(e) {
+    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
+    if (Event.KEY_ESC == e.keyCode)
+      this.handleFormCancellation(e);
+    else if (Event.KEY_RETURN == e.keyCode)
+      this.handleFormSubmission(e);
+  },
+  createControl: function(mode, handler, extraClasses) {
+    var control = this.options[mode + &amp;#39;Control&amp;#39;];
+    var text = this.options[mode + &amp;#39;Text&amp;#39;];
+    if (&amp;#39;button&amp;#39; == control) {
+      var btn = document.createElement(&amp;#39;input&amp;#39;);
+      btn.type = &amp;#39;submit&amp;#39;;
+      btn.value = text;
+      btn.className = &amp;#39;editor_&amp;#39; + mode + &amp;#39;_button&amp;#39;;
+      if (&amp;#39;cancel&amp;#39; == mode)
+        btn.onclick = this._boundCancelHandler;
+      this._form.appendChild(btn);
+      this._controls[mode] = btn;
+    } else if (&amp;#39;link&amp;#39; == control) {
+      var link = document.createElement(&amp;#39;a&amp;#39;);
+      link.href = &amp;#39;#&amp;#39;;
+      link.appendChild(document.createTextNode(text));
+      link.onclick = &amp;#39;cancel&amp;#39; == mode ? this._boundCancelHandler : this._boundSubmitHandler;
+      link.className = &amp;#39;editor_&amp;#39; + mode + &amp;#39;_link&amp;#39;;
+      if (extraClasses)
+        link.className += &amp;#39; &amp;#39; + extraClasses;
+      this._form.appendChild(link);
+      this._controls[mode] = link;
+    }
+  },
+  createEditField: function() {
+    var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
+    var fld;
+    if (1 &amp;gt;= this.options.rows &amp;amp;&amp;amp; !/\r|\n/.test(this.getText())) {
+      fld = document.createElement(&amp;#39;input&amp;#39;);
+      fld.type = &amp;#39;text&amp;#39;;
+      var size = this.options.size || this.options.cols || 0;
+      if (0 &amp;lt; size) fld.size = size;
+    } else {
+      fld = document.createElement(&amp;#39;textarea&amp;#39;);
+      fld.rows = (1 &amp;gt;= this.options.rows ? this.options.autoRows : this.options.rows);
+      fld.cols = this.options.cols || 40;
+    }
+    fld.name = this.options.paramName;
+    fld.value = text; // No HTML breaks conversion anymore
+    fld.className = &amp;#39;editor_field&amp;#39;;
+    if (this.options.submitOnBlur)
+      fld.onblur = this._boundSubmitHandler;
+    this._controls.editor = fld;
+    if (this.options.loadTextURL)
+      this.loadExternalText();
+    this._form.appendChild(this._controls.editor);
+  },
+  createForm: function() {
+    var ipe = this;
+    function addText(mode, condition) {
+      var text = ipe.options[&amp;#39;text&amp;#39; + mode + &amp;#39;Controls&amp;#39;];
+      if (!text || condition === false) return;
+      ipe._form.appendChild(document.createTextNode(text));
+    };
+    this._form = $(document.createElement(&amp;#39;form&amp;#39;));
+    this._form.id = this.options.formId;
+    this._form.addClassName(this.options.formClassName);
+    this._form.onsubmit = this._boundSubmitHandler;
+    this.createEditField();
+    if (&amp;#39;textarea&amp;#39; == this._controls.editor.tagName.toLowerCase())
+      this._form.appendChild(document.createElement(&amp;#39;br&amp;#39;));
+    if (this.options.onFormCustomization)
+      this.options.onFormCustomization(this, this._form);
+    addText(&amp;#39;Before&amp;#39;, this.options.okControl || this.options.cancelControl);
+    this.createControl(&amp;#39;ok&amp;#39;, this._boundSubmitHandler);
+    addText(&amp;#39;Between&amp;#39;, this.options.okControl &amp;amp;&amp;amp; this.options.cancelControl);
+    this.createControl(&amp;#39;cancel&amp;#39;, this._boundCancelHandler, &amp;#39;editor_cancel&amp;#39;);
+    addText(&amp;#39;After&amp;#39;, this.options.okControl || this.options.cancelControl);
+  },
+  destroy: function() {
+    if (this._oldInnerHTML)
+      this.element.innerHTML = this._oldInnerHTML;
+    this.leaveEditMode();
+    this.unregisterListeners();
+  },
+  enterEditMode: function(e) {
+    if (this._saving || this._editing) return;
+    this._editing = true;
+    this.triggerCallback(&amp;#39;onEnterEditMode&amp;#39;);
+    if (this.options.externalControl)
+      this.options.externalControl.hide();
+    this.element.hide();
+    this.createForm();
+    this.element.parentNode.insertBefore(this._form, this.element);
+    if (!this.options.loadTextURL)
+      this.postProcessEditField();
+    if (e) Event.stop(e);
+  },
+  enterHover: function(e) {
+    if (this.options.hoverClassName)
+      this.element.addClassName(this.options.hoverClassName);
+    if (this._saving) return;
+    this.triggerCallback(&amp;#39;onEnterHover&amp;#39;);
+  },
+  getText: function() {
+    return this.element.innerHTML.unescapeHTML();
+  },
+  handleAJAXFailure: function(transport) {
+    this.triggerCallback(&amp;#39;onFailure&amp;#39;, transport);
+    if (this._oldInnerHTML) {
+      this.element.innerHTML = this._oldInnerHTML;
+      this._oldInnerHTML = null;
+    }
+  },
+  handleFormCancellation: function(e) {
+    this.wrapUp();
+    if (e) Event.stop(e);
+  },
+  handleFormSubmission: function(e) {
+    var form = this._form;
+    var value = $F(this._controls.editor);
+    this.prepareSubmission();
+    var params = this.options.callback(form, value) || &amp;#39;&amp;#39;;
+    if (Object.isString(params))
+      params = params.toQueryParams();
+    params.editorId = this.element.id;
+    if (this.options.htmlResponse) {
+      var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
+      Object.extend(options, {
+        parameters: params,
+        onComplete: this._boundWrapperHandler,
+        onFailure: this._boundFailureHandler
+      });
+      new Ajax.Updater({ success: this.element }, this.url, options);
+    } else {
+      var options = Object.extend({ method: &amp;#39;get&amp;#39; }, this.options.ajaxOptions);
+      Object.extend(options, {
+        parameters: params,
+        onComplete: this._boundWrapperHandler,
+        onFailure: this._boundFailureHandler
+      });
+      new Ajax.Request(this.url, options);
+    }
+    if (e) Event.stop(e);
+  },
+  leaveEditMode: function() {
+    this.element.removeClassName(this.options.savingClassName);
+    this.removeForm();
+    this.leaveHover();
+    this.element.style.backgroundColor = this._originalBackground;
+    this.element.show();
+    if (this.options.externalControl)
+      this.options.externalControl.show();
+    this._saving = false;
+    this._editing = false;
+    this._oldInnerHTML = null;
+    this.triggerCallback(&amp;#39;onLeaveEditMode&amp;#39;);
+  },
+  leaveHover: function(e) {
+    if (this.options.hoverClassName)
+      this.element.removeClassName(this.options.hoverClassName);
+    if (this._saving) return;
+    this.triggerCallback(&amp;#39;onLeaveHover&amp;#39;);
+  },
+  loadExternalText: function() {
+    this._form.addClassName(this.options.loadingClassName);
+    this._controls.editor.disabled = true;
+    var options = Object.extend({ method: &amp;#39;get&amp;#39; }, this.options.ajaxOptions);
+    Object.extend(options, {
+      parameters: &amp;#39;editorId=&amp;#39; + encodeURIComponent(this.element.id),
+      onComplete: Prototype.emptyFunction,
+      onSuccess: function(transport) {
+        this._form.removeClassName(this.options.loadingClassName);
+        var text = transport.responseText;
+        if (this.options.stripLoadedTextTags)
+          text = text.stripTags();
+        this._controls.editor.value = text;
+        this._controls.editor.disabled = false;
+        this.postProcessEditField();
+      }.bind(this),
+      onFailure: this._boundFailureHandler
+    });
+    new Ajax.Request(this.options.loadTextURL, options);
+  },
+  postProcessEditField: function() {
+    var fpc = this.options.fieldPostCreation;
+    if (fpc)
+      $(this._controls.editor)[&amp;#39;focus&amp;#39; == fpc ? &amp;#39;focus&amp;#39; : &amp;#39;activate&amp;#39;]();
+  },
+  prepareOptions: function() {
+    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
+    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
+    [this._extraDefaultOptions].flatten().compact().each(function(defs) {
+      Object.extend(this.options, defs);
+    }.bind(this));
+  },
+  prepareSubmission: function() {
+    this._saving = true;
+    this.removeForm();
+    this.leaveHover();
+    this.showSaving();
+  },
+  registerListeners: function() {
+    this._listeners = { };
+    var listener;
+    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
+      listener = this[pair.value].bind(this);
+      this._listeners[pair.key] = listener;
+      if (!this.options.externalControlOnly)
+        this.element.observe(pair.key, listener);
+      if (this.options.externalControl)
+        this.options.externalControl.observe(pair.key, listener);
+    }.bind(this));
+  },
+  removeForm: function() {
+    if (!this._form) return;
+    this._form.remove();
+    this._form = null;
+    this._controls = { };
+  },
+  showSaving: function() {
+    this._oldInnerHTML = this.element.innerHTML;
+    this.element.innerHTML = this.options.savingText;
+    this.element.addClassName(this.options.savingClassName);
+    this.element.style.backgroundColor = this._originalBackground;
+    this.element.show();
+  },
+  triggerCallback: function(cbName, arg) {
+    if (&amp;#39;function&amp;#39; == typeof this.options[cbName]) {
+      this.options[cbName](this, arg);
+    }
+  },
+  unregisterListeners: function() {
+    $H(this._listeners).each(function(pair) {
+      if (!this.options.externalControlOnly)
+        this.element.stopObserving(pair.key, pair.value);
+      if (this.options.externalControl)
+        this.options.externalControl.stopObserving(pair.key, pair.value);
+    }.bind(this));
+  },
+  wrapUp: function(transport) {
+    this.leaveEditMode();
+    // Can&amp;#39;t use triggerCallback due to backward compatibility: requires
+    // binding + direct element
+    this._boundComplete(transport, this.element);
+  }
+});
+
+Object.extend(Ajax.InPlaceEditor.prototype, {
+  dispose: Ajax.InPlaceEditor.prototype.destroy
+});
+
+Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
+  initialize: function($super, element, url, options) {
+    this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
+    $super(element, url, options);
+  },
+
+  createEditField: function() {
+    var list = document.createElement(&amp;#39;select&amp;#39;);
+    list.name = this.options.paramName;
+    list.size = 1;
+    this._controls.editor = list;
+    this._collection = this.options.collection || [];
+    if (this.options.loadCollectionURL)
+      this.loadCollection();
+    else
+      this.checkForExternalText();
+    this._form.appendChild(this._controls.editor);
+  },
+
+  loadCollection: function() {
+    this._form.addClassName(this.options.loadingClassName);
+    this.showLoadingText(this.options.loadingCollectionText);
+    var options = Object.extend({ method: &amp;#39;get&amp;#39; }, this.options.ajaxOptions);
+    Object.extend(options, {
+      parameters: &amp;#39;editorId=&amp;#39; + encodeURIComponent(this.element.id),
+      onComplete: Prototype.emptyFunction,
+      onSuccess: function(transport) {
+        var js = transport.responseText.strip();
+        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
+          throw(&amp;#39;Server returned an invalid collection representation.&amp;#39;);
+        this._collection = eval(js);
+        this.checkForExternalText();
+      }.bind(this),
+      onFailure: this.onFailure
+    });
+    new Ajax.Request(this.options.loadCollectionURL, options);
+  },
+
+  showLoadingText: function(text) {
+    this._controls.editor.disabled = true;
+    var tempOption = this._controls.editor.firstChild;
+    if (!tempOption) {
+      tempOption = document.createElement(&amp;#39;option&amp;#39;);
+      tempOption.value = &amp;#39;&amp;#39;;
+      this._controls.editor.appendChild(tempOption);
+      tempOption.selected = true;
+    }
+    tempOption.update((text || &amp;#39;&amp;#39;).stripScripts().stripTags());
+  },
+
+  checkForExternalText: function() {
+    this._text = this.getText();
+    if (this.options.loadTextURL)
+      this.loadExternalText();
+    else
+      this.buildOptionList();
+  },
+
+  loadExternalText: function() {
+    this.showLoadingText(this.options.loadingText);
+    var options = Object.extend({ method: &amp;#39;get&amp;#39; }, this.options.ajaxOptions);
+    Object.extend(options, {
+      parameters: &amp;#39;editorId=&amp;#39; + encodeURIComponent(this.element.id),
+      onComplete: Prototype.emptyFunction,
+      onSuccess: function(transport) {
+        this._text = transport.responseText.strip();
+        this.buildOptionList();
+      }.bind(this),
+      onFailure: this.onFailure
+    });
+    new Ajax.Request(this.options.loadTextURL, options);
+  },
+
+  buildOptionList: function() {
+    this._form.removeClassName(this.options.loadingClassName);
+    this._collection = this._collection.map(function(entry) {
+      return 2 === entry.length ? entry : [entry, entry].flatten();
+    });
+    var marker = (&amp;#39;value&amp;#39; in this.options) ? this.options.value : this._text;
+    var textFound = this._collection.any(function(entry) {
+      return entry[0] == marker;
+    }.bind(this));
+    this._controls.editor.update(&amp;#39;&amp;#39;);
+    var option;
+    this._collection.each(function(entry, index) {
+      option = document.createElement(&amp;#39;option&amp;#39;);
+      option.value = entry[0];
+      option.selected = textFound ? entry[0] == marker : 0 == index;
+      option.appendChild(document.createTextNode(entry[1]));
+      this._controls.editor.appendChild(option);
+    }.bind(this));
+    this._controls.editor.disabled = false;
+    Field.scrollFreeActivate(this._controls.editor);
+  }
+});
+
+//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
+//**** This only  exists for a while,  in order to  let ****
+//**** users adapt to  the new API.  Read up on the new ****
+//**** API and convert your code to it ASAP!            ****
+
+Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
+  if (!options) return;
+  function fallback(name, expr) {
+    if (name in options || expr === undefined) return;
+    options[name] = expr;
+  };
+  fallback(&amp;#39;cancelControl&amp;#39;, (options.cancelLink ? &amp;#39;link&amp;#39; : (options.cancelButton ? &amp;#39;button&amp;#39; :
+    options.cancelLink == options.cancelButton == false ? false : undefined)));
+  fallback(&amp;#39;okControl&amp;#39;, (options.okLink ? &amp;#39;link&amp;#39; : (options.okButton ? &amp;#39;button&amp;#39; :
+    options.okLink == options.okButton == false ? false : undefined)));
+  fallback(&amp;#39;highlightColor&amp;#39;, options.highlightcolor);
+  fallback(&amp;#39;highlightEndColor&amp;#39;, options.highlightendcolor);
+};
+
+Object.extend(Ajax.InPlaceEditor, {
+  DefaultOptions: {
+    ajaxOptions: { },
+    autoRows: 3,                                // Use when multi-line w/ rows == 1
+    cancelControl: &amp;#39;link&amp;#39;,                      // &amp;#39;link&amp;#39;|&amp;#39;button&amp;#39;|false
+    cancelText: &amp;#39;cancel&amp;#39;,
+    clickToEditText: &amp;#39;Click to edit&amp;#39;,
+    externalControl: null,                      // id|elt
+    externalControlOnly: false,
+    fieldPostCreation: &amp;#39;activate&amp;#39;,              // &amp;#39;activate&amp;#39;|&amp;#39;focus&amp;#39;|false
+    formClassName: &amp;#39;inplaceeditor-form&amp;#39;,
+    formId: null,                               // id|elt
+    highlightColor: &amp;#39;#ffff99&amp;#39;,
+    highlightEndColor: &amp;#39;#ffffff&amp;#39;,
+    hoverClassName: &amp;#39;&amp;#39;,
+    htmlResponse: true,
+    loadingClassName: &amp;#39;inplaceeditor-loading&amp;#39;,
+    loadingText: &amp;#39;Loading...&amp;#39;,
+    okControl: &amp;#39;button&amp;#39;,                        // &amp;#39;link&amp;#39;|&amp;#39;button&amp;#39;|false
+    okText: &amp;#39;ok&amp;#39;,
+    paramName: &amp;#39;value&amp;#39;,
+    rows: 1,                                    // If 1 and multi-line, uses autoRows
+    savingClassName: &amp;#39;inplaceeditor-saving&amp;#39;,
+    savingText: &amp;#39;Saving...&amp;#39;,
+    size: 0,
+    stripLoadedTextTags: false,
+    submitOnBlur: false,
+    textAfterControls: &amp;#39;&amp;#39;,
+    textBeforeControls: &amp;#39;&amp;#39;,
+    textBetweenControls: &amp;#39;&amp;#39;
+  },
+  DefaultCallbacks: {
+    callback: function(form) {
+      return Form.serialize(form);
+    },
+    onComplete: function(transport, element) {
+      // For backward compatibility, this one is bound to the IPE, and passes
+      // the element directly.  It was too often customized, so we don&amp;#39;t break it.
+      new Effect.Highlight(element, {
+        startcolor: this.options.highlightColor, keepBackgroundImage: true });
+    },
+    onEnterEditMode: null,
+    onEnterHover: function(ipe) {
+      ipe.element.style.backgroundColor = ipe.options.highlightColor;
+      if (ipe._effect)
+        ipe._effect.cancel();
+    },
+    onFailure: function(transport, ipe) {
+      alert(&amp;#39;Error communication with the server: &amp;#39; + transport.responseText.stripTags());
+    },
+    onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
+    onLeaveEditMode: null,
+    onLeaveHover: function(ipe) {
+      ipe._effect = new Effect.Highlight(ipe.element, {
+        startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
+        restorecolor: ipe._originalBackground, keepBackgroundImage: true
+      });
+    }
+  },
+  Listeners: {
+    click: &amp;#39;enterEditMode&amp;#39;,
+    keydown: &amp;#39;checkForEscapeOrReturn&amp;#39;,
+    mouseover: &amp;#39;enterHover&amp;#39;,
+    mouseout: &amp;#39;leaveHover&amp;#39;
+  }
+});
+
+Ajax.InPlaceCollectionEditor.DefaultOptions = {
+  loadingCollectionText: &amp;#39;Loading options...&amp;#39;
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create({
+  initialize: function(element, delay, callback) {
+    this.delay     = delay || 0.5;
+    this.element   = $(element);
+    this.callback  = callback;
+    this.timer     = null;
+    this.lastValue = $F(this.element);
+    Event.observe(this.element,&amp;#39;keyup&amp;#39;,this.delayedListener.bindAsEventListener(this));
+  },
+  delayedListener: function(event) {
+    if(this.lastValue == $F(this.element)) return;
+    if(this.timer) clearTimeout(this.timer);
+    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+    this.lastValue = $F(this.element);
+  },
+  onTimerEvent: function() {
+    this.timer = null;
+    this.callback(this.element, $F(this.element));
+  }
+});
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/web/src/main/webapp/js/controls.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsdatasourcetestjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/datasourcetest.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/datasourcetest.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/datasourcetest.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,285 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+var connectUrl = &amp;#39;&amp;#39;;
+var recordsetUrl = &amp;#39;&amp;#39;;
+var queryHistoryUrl = &amp;#39;&amp;#39;;
+var sqlOutputDivId = &amp;#39;outputHolder&amp;#39;;
+var formId = &amp;#39;sqlForm&amp;#39;;
+var ajaxActivityId = &amp;#39;ajaxActivity&amp;#39;;
+var metaDataH3Id = &amp;#39;metaDataH3&amp;#39;;
+var resultsH3Id = &amp;quot;resultsH3&amp;quot;;
+var historyContainerDivId = &amp;quot;queryHistoryContainer&amp;quot;;
+var historyOutputDivId = &amp;#39;queryHistoryHolder&amp;#39;;
+var historyVisible = false;
+var historyWrapped = true;
+var historyHeight = 150;
+var optionsDivId = &amp;#39;optionsDL&amp;#39;;
+var optionsVisible = false;
+var ajaxActivityTimer;
+
+function setupAjaxActions(aConnectUrl, aRecordsetUrl, aQueryHistoryUrl) {
+    connectUrl = aConnectUrl;
+    recordsetUrl = aRecordsetUrl;
+    queryHistoryUrl = aQueryHistoryUrl;
+
+    var rules = {
+        &amp;#39;li#connect&amp;#39;: function(element) {
+            element.onclick = function() {
+                testConnction();
+                $(&amp;#39;sql&amp;#39;).focus();
+                return false;
+            }
+        },
+        &amp;#39;li#executeSql&amp;#39;: function(element) {
+            element.onclick = function() {
+                executeSql();
+                $(&amp;#39;sql&amp;#39;).focus();
+                return false;
+            }
+        },
+        &amp;#39;li#showHistory&amp;#39;: function(element) {
+            element.onclick = function() {
+                showQueryHistory();
+                $(&amp;#39;sql&amp;#39;).focus();
+                return false;
+            }
+        },
+        &amp;#39;li#hideHistory&amp;#39;: function(element) {
+            element.onclick = function() {
+                hideQueryHistory();
+                $(&amp;#39;sql&amp;#39;).focus();
+                return false;
+            }
+        },
+        &amp;#39;li#showOptions&amp;#39;: function(element) {
+            element.onclick = function() {
+                showOptions();
+                $(&amp;#39;sql&amp;#39;).focus();
+                return false;
+            }
+        },
+        &amp;#39;li#hideOptions&amp;#39;: function(element) {
+            element.onclick = function() {
+                hideOptions();
+                $(&amp;#39;sql&amp;#39;).focus();
+                return false;
+            }
+        },
+        &amp;#39;li#wrap&amp;#39;: function(element) {
+            element.onclick = function() {
+                wrapQueryHistory();
+                $(&amp;#39;sql&amp;#39;).focus();
+                return false;
+            }
+        },
+        &amp;#39;li#nowrap&amp;#39;: function(element) {
+            element.onclick = function() {
+                nowrapQueryHistory();
+                $(&amp;#39;sql&amp;#39;).focus();
+                return false;
+            }
+        }
+    }
+
+    Behaviour.register(rules);
+}
+
+function testConnction() {
+    hideQueryHistory();
+    Element.show(ajaxActivityId);
+    Element.hide(resultsH3Id);
+    Element.show(metaDataH3Id);
+    $(&amp;#39;rowsAffected&amp;#39;).innerHTML = &amp;quot;&amp;quot;;
+    $(&amp;#39;pagebanner&amp;#39;).innerHTML = &amp;quot;&amp;quot;;
+    $(&amp;#39;pagelinks&amp;#39;).innerHTML = &amp;quot;&amp;quot;;
+    var params = Form.serialize(formId);
+    new Ajax.Updater(sqlOutputDivId, connectUrl, {method: &amp;#39;post&amp;#39;, postBody: params, onComplete: function(req, obj) {
+        if (ajaxActivityTimer) clearTimeout(ajaxActivityTimer);
+        ajaxActivityTimer = setTimeout(&amp;#39;Element.hide(&amp;quot;&amp;#39; + ajaxActivityId + &amp;#39;&amp;quot;)&amp;#39;, 250);
+        $(&amp;#39;sqlResultsWrapper&amp;#39;).show();
+    }});
+}
+
+function executeSql() {
+    hideQueryHistory();
+    Element.show(ajaxActivityId);
+    Element.hide(metaDataH3Id);
+    Element.show(resultsH3Id);
+    var params = Form.serialize(formId);
+    new Ajax.Updater(sqlOutputDivId, recordsetUrl, {method: &amp;#39;post&amp;#39;, postBody: params}).onComplete = function() {
+        setupPaginationLinks();
+        if ($(&amp;#39;rs_empty&amp;#39;) || $(&amp;#39;rs_error&amp;#39;)) {
+            $(&amp;#39;left_scroller&amp;#39;).hide();
+            $(&amp;#39;right_scroller&amp;#39;).hide();
+            $(&amp;#39;separator&amp;#39;).hide();
+        } else {
+            $(&amp;#39;left_scroller&amp;#39;).show();
+            $(&amp;#39;right_scroller&amp;#39;).show();
+            $(&amp;#39;separator&amp;#39;).show();
+        }
+        $(&amp;#39;sqlResultsWrapper&amp;#39;).show();
+    };
+}
+
+function setupPaginationLinks(req, obj) {
+    if ($(&amp;#39;rs_rowsAffected&amp;#39;) &amp;amp;&amp;amp; $(&amp;#39;rs_pagebanner&amp;#39;) &amp;amp;&amp;amp; $(&amp;#39;rs_pagelinks&amp;#39;)) {
+        $(&amp;#39;rowsAffected&amp;#39;).innerHTML = $(&amp;#39;rs_rowsAffected&amp;#39;).innerHTML;
+        $(&amp;#39;pagebanner&amp;#39;).innerHTML = $(&amp;#39;rs_pagebanner&amp;#39;).innerHTML;
+        $(&amp;#39;pagelinks&amp;#39;).innerHTML = $(&amp;#39;rs_pagelinks&amp;#39;).innerHTML;
+    } else {
+        $(&amp;#39;rowsAffected&amp;#39;).innerHTML = &amp;quot;&amp;quot;;
+        $(&amp;#39;pagebanner&amp;#39;).innerHTML = &amp;quot;&amp;quot;;
+        $(&amp;#39;pagelinks&amp;#39;).innerHTML = &amp;quot;&amp;quot;;
+    }
+
+    var links = $$(&amp;#39;#pagelinks a&amp;#39;);
+
+    links.each(function(lnk) {
+        lnk.onclick = function() {
+            Element.show(ajaxActivityId);
+            Element.show(resultsH3Id);
+            var p = Form.serialize(formId);
+            new Ajax.Updater(sqlOutputDivId, lnk.href, {method: &amp;#39;post&amp;#39;, postBody: p, onComplete: setupPaginationLinks});
+            return false;
+        }
+    });
+
+    if (ajaxActivityTimer) clearTimeout(ajaxActivityTimer);
+    ajaxActivityTimer = setTimeout(&amp;#39;Element.hide(&amp;quot;&amp;#39; + ajaxActivityId + &amp;#39;&amp;quot;)&amp;#39;, 250);
+}
+
+/*
+    event handlers to display a query history list
+*/
+
+function showQueryHistory() {
+    new Ajax.Updater(historyOutputDivId, queryHistoryUrl, {method: &amp;#39;post&amp;#39;, onComplete: function(req, obj) {
+        Element.hide(&amp;#39;showHistory&amp;#39;);
+        Element.show(&amp;#39;hideHistory&amp;#39;);
+        Element.setStyle(historyOutputDivId, {height: historyHeight + &amp;#39;px&amp;#39;});
+        Effect.Appear(historyContainerDivId, {duration:0.20});
+
+        if (historyWrapped) {
+            wrapQueryHistory();
+        } else {
+            nowrapQueryHistory();
+        }
+
+        historyVisible = true;
+    }});
+}
+
+function getQueryHistoryItem(lnk) {
+    new Ajax.Request(lnk.href, {method: &amp;#39;get&amp;#39;, onComplete: function(lnkReq) {
+        $(&amp;#39;sql&amp;#39;).value = lnkReq.responseText;
+    }});
+
+    hideQueryHistory();
+    $(&amp;#39;sql&amp;#39;).focus();
+}
+
+function hideQueryHistory() {
+    Element.hide(&amp;#39;hideHistory&amp;#39;);
+    Element.show(&amp;#39;showHistory&amp;#39;);
+    Effect.Fade(historyContainerDivId, {duration:0.20});
+    historyVisible = false;
+}
+
+function wrapQueryHistory() {
+    Element.setStyle(historyOutputDivId, {&amp;quot;white-space&amp;quot;: &amp;quot;normal&amp;quot;});
+    Element.hide(&amp;#39;wrap&amp;#39;);
+    Element.show(&amp;#39;nowrap&amp;#39;);
+    historyWrapped = true;
+}
+
+function nowrapQueryHistory() {
+    Element.setStyle(historyOutputDivId, {&amp;quot;white-space&amp;quot;: &amp;quot;nowrap&amp;quot;});
+    Element.hide(&amp;#39;nowrap&amp;#39;);
+    Element.show(&amp;#39;wrap&amp;#39;);
+    historyWrapped = false;
+}
+
+/*
+    event handlers to display an option entry form
+*/
+
+function showOptions() {
+    Element.hide(&amp;#39;showOptions&amp;#39;);
+    Element.show(&amp;#39;hideOptions&amp;#39;);
+    Effect.Appear(optionsDivId, {duration:0.20});
+    optionsVisible = true;
+}
+
+function hideOptions() {
+    Element.hide(&amp;#39;hideOptions&amp;#39;);
+    Element.show(&amp;#39;showOptions&amp;#39;);
+    Effect.Fade(optionsDivId, {duration:0.20});
+    optionsVisible = false;
+}
+
+/*
+    event handlers to provide keyboard shortcuts for major form actions
+*/
+
+function setupShortcuts() {
+    var rules = {
+        &amp;#39;body&amp;#39;: function(element) {
+            element.onkeydown = function() {
+                var sUserAgent = navigator.userAgent;
+                var isIE = sUserAgent.indexOf(&amp;#39;compatible&amp;#39;) &amp;gt; -1 &amp;amp;&amp;amp; sUserAgent.indexOf(&amp;#39;MSIE&amp;#39;) &amp;gt; -1
+                var e;
+
+                if (isIE) {
+                    e = window.event;
+                } else {
+                    e = arguments[0];
+                }
+
+                if (e.keyCode == 13 &amp;amp;&amp;amp; e.ctrlKey &amp;amp;&amp;amp; ! e.altKey &amp;amp;&amp;amp; ! e.shiftKey) {
+                    executeSql();
+                    $(&amp;#39;sql&amp;#39;).focus();
+                } else if (e.keyCode == 40 &amp;amp;&amp;amp; e.ctrlKey &amp;amp;&amp;amp; ! e.altKey &amp;amp;&amp;amp; ! e.shiftKey) {
+                    if (historyVisible) {
+                        hideQueryHistory();
+                    } else {
+                        showQueryHistory();
+                    }
+                    $(&amp;#39;sql&amp;#39;).focus();
+                } else if (e.keyCode == 38 &amp;amp;&amp;amp; e.ctrlKey &amp;amp;&amp;amp; ! e.altKey &amp;amp;&amp;amp; ! e.shiftKey) {
+                    if (optionsVisible) {
+                        hideOptions();
+                        $(&amp;#39;sql&amp;#39;).focus();
+                    } else {
+                        showOptions();
+                        $(&amp;#39;sql&amp;#39;).focus();
+                    }
+                }
+            }
+        }
+    };
+
+    Behaviour.register(rules);
+}
+
+/*
+   event handlers for sql textarea and query history div resizing
+*/
+
+function resizeTextArea(drag) {
+    var deltaY = drag.currentDelta()[1];
+    var h = (Element.getDimensions(&amp;#39;sql&amp;#39;).height + deltaY);
+    h = Math.max(h, 100);
+    Element.setStyle(&amp;#39;sql&amp;#39;, {height: h + &amp;#39;px&amp;#39;});
+}
+
+function resizeQueryHistory(drag) {
+    var deltaY = drag.currentDelta()[1];
+    var h = (Element.getDimensions(historyOutputDivId).height + deltaY);
+    h = Math.max(h, 20);
+    historyHeight = h;
+    Element.setStyle(historyOutputDivId, {height: h + &amp;#39;px&amp;#39;});
+}
+
+function revertDragHandle(handle) {
+    handle.style.top = 0;
+    handle.style.position = &amp;#39;relative&amp;#39;;
+    $(&amp;#39;sql&amp;#39;).focus();
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/js/datasourcetest.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsdragdropjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/dragdrop.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/dragdrop.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/dragdrop.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,975 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+// script.aculo.us dragdrop.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//           (c) 2005-2008 Sammi Williams (http://www.oriontransfer.co.nz, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26836982&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sammi@...&lt;/a&gt;)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(Object.isUndefined(Effect))
+  throw(&amp;quot;dragdrop.js requires including script.aculo.us&amp;#39; effects.js library&amp;quot;);
+
+var Droppables = {
+  drops: [],
+
+  remove: function(element) {
+    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
+  },
+
+  add: function(element) {
+    element = $(element);
+    var options = Object.extend({
+      greedy:     true,
+      hoverclass: null,
+      tree:       false
+    }, arguments[1] || { });
+
+    // cache containers
+    if(options.containment) {
+      options._containers = [];
+      var containment = options.containment;
+      if(Object.isArray(containment)) {
+        containment.each( function(c) { options._containers.push($(c)) });
+      } else {
+        options._containers.push($(containment));
+      }
+    }
+
+    if(options.accept) options.accept = [options.accept].flatten();
+
+    Element.makePositioned(element); // fix IE
+    options.element = element;
+
+    this.drops.push(options);
+  },
+
+  findDeepestChild: function(drops) {
+    deepest = drops[0];
+
+    for (i = 1; i &amp;lt; drops.length; ++i)
+      if (Element.isParent(drops[i].element, deepest.element))
+        deepest = drops[i];
+
+    return deepest;
+  },
+
+  isContained: function(element, drop) {
+    var containmentNode;
+    if(drop.tree) {
+      containmentNode = element.treeNode;
+    } else {
+      containmentNode = element.parentNode;
+    }
+    return drop._containers.detect(function(c) { return containmentNode == c });
+  },
+
+  isAffected: function(point, element, drop) {
+    return (
+      (drop.element!=element) &amp;amp;&amp;amp;
+      ((!drop._containers) ||
+        this.isContained(element, drop)) &amp;amp;&amp;amp;
+      ((!drop.accept) ||
+        (Element.classNames(element).detect(
+          function(v) { return drop.accept.include(v) } ) )) &amp;amp;&amp;amp;
+      Position.within(drop.element, point[0], point[1]) );
+  },
+
+  deactivate: function(drop) {
+    if(drop.hoverclass)
+      Element.removeClassName(drop.element, drop.hoverclass);
+    this.last_active = null;
+  },
+
+  activate: function(drop) {
+    if(drop.hoverclass)
+      Element.addClassName(drop.element, drop.hoverclass);
+    this.last_active = drop;
+  },
+
+  show: function(point, element) {
+    if(!this.drops.length) return;
+    var drop, affected = [];
+
+    this.drops.each( function(drop) {
+      if(Droppables.isAffected(point, element, drop))
+        affected.push(drop);
+    });
+
+    if(affected.length&amp;gt;0)
+      drop = Droppables.findDeepestChild(affected);
+
+    if(this.last_active &amp;amp;&amp;amp; this.last_active != drop) this.deactivate(this.last_active);
+    if (drop) {
+      Position.within(drop.element, point[0], point[1]);
+      if(drop.onHover)
+        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+
+      if (drop != this.last_active) Droppables.activate(drop);
+    }
+  },
+
+  fire: function(event, element) {
+    if(!this.last_active) return;
+    Position.prepare();
+
+    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+      if (this.last_active.onDrop) {
+        this.last_active.onDrop(element, this.last_active.element, event);
+        return true;
+      }
+  },
+
+  reset: function() {
+    if(this.last_active)
+      this.deactivate(this.last_active);
+  }
+};
+
+var Draggables = {
+  drags: [],
+  observers: [],
+
+  register: function(draggable) {
+    if(this.drags.length == 0) {
+      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
+      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
+
+      Event.observe(document, &amp;quot;mouseup&amp;quot;, this.eventMouseUp);
+      Event.observe(document, &amp;quot;mousemove&amp;quot;, this.eventMouseMove);
+      Event.observe(document, &amp;quot;keypress&amp;quot;, this.eventKeypress);
+    }
+    this.drags.push(draggable);
+  },
+
+  unregister: function(draggable) {
+    this.drags = this.drags.reject(function(d) { return d==draggable });
+    if(this.drags.length == 0) {
+      Event.stopObserving(document, &amp;quot;mouseup&amp;quot;, this.eventMouseUp);
+      Event.stopObserving(document, &amp;quot;mousemove&amp;quot;, this.eventMouseMove);
+      Event.stopObserving(document, &amp;quot;keypress&amp;quot;, this.eventKeypress);
+    }
+  },
+
+  activate: function(draggable) {
+    if(draggable.options.delay) {
+      this._timeout = setTimeout(function() {
+        Draggables._timeout = null;
+        window.focus();
+        Draggables.activeDraggable = draggable;
+      }.bind(this), draggable.options.delay);
+    } else {
+      window.focus(); // allows keypress events if window isn&amp;#39;t currently focused, fails for Safari
+      this.activeDraggable = draggable;
+    }
+  },
+
+  deactivate: function() {
+    this.activeDraggable = null;
+  },
+
+  updateDrag: function(event) {
+    if(!this.activeDraggable) return;
+    var pointer = [Event.pointerX(event), Event.pointerY(event)];
+    // Mozilla-based browsers fire successive mousemove events with
+    // the same coordinates, prevent needless redrawing (moz bug?)
+    if(this._lastPointer &amp;amp;&amp;amp; (this._lastPointer.inspect() == pointer.inspect())) return;
+    this._lastPointer = pointer;
+
+    this.activeDraggable.updateDrag(event, pointer);
+  },
+
+  endDrag: function(event) {
+    if(this._timeout) {
+      clearTimeout(this._timeout);
+      this._timeout = null;
+    }
+    if(!this.activeDraggable) return;
+    this._lastPointer = null;
+    this.activeDraggable.endDrag(event);
+    this.activeDraggable = null;
+  },
+
+  keyPress: function(event) {
+    if(this.activeDraggable)
+      this.activeDraggable.keyPress(event);
+  },
+
+  addObserver: function(observer) {
+    this.observers.push(observer);
+    this._cacheObserverCallbacks();
+  },
+
+  removeObserver: function(element) {  // element instead of observer fixes mem leaks
+    this.observers = this.observers.reject( function(o) { return o.element==element });
+    this._cacheObserverCallbacks();
+  },
+
+  notify: function(eventName, draggable, event) {  // &amp;#39;onStart&amp;#39;, &amp;#39;onEnd&amp;#39;, &amp;#39;onDrag&amp;#39;
+    if(this[eventName+&amp;#39;Count&amp;#39;] &amp;gt; 0)
+      this.observers.each( function(o) {
+        if(o[eventName]) o[eventName](eventName, draggable, event);
+      });
+    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
+  },
+
+  _cacheObserverCallbacks: function() {
+    [&amp;#39;onStart&amp;#39;,&amp;#39;onEnd&amp;#39;,&amp;#39;onDrag&amp;#39;].each( function(eventName) {
+      Draggables[eventName+&amp;#39;Count&amp;#39;] = Draggables.observers.select(
+        function(o) { return o[eventName]; }
+      ).length;
+    });
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create({
+  initialize: function(element) {
+    var defaults = {
+      handle: false,
+      reverteffect: function(element, top_offset, left_offset) {
+        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
+          queue: {scope:&amp;#39;_draggable&amp;#39;, position:&amp;#39;end&amp;#39;}
+        });
+      },
+      endeffect: function(element) {
+        var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
+        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
+          queue: {scope:&amp;#39;_draggable&amp;#39;, position:&amp;#39;end&amp;#39;},
+          afterFinish: function(){
+            Draggable._dragging[element] = false
+          }
+        });
+      },
+      zindex: 1000,
+      revert: false,
+      quiet: false,
+      scroll: false,
+      scrollSensitivity: 20,
+      scrollSpeed: 15,
+      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
+      delay: 0
+    };
+
+    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
+      Object.extend(defaults, {
+        starteffect: function(element) {
+          element._opacity = Element.getOpacity(element);
+          Draggable._dragging[element] = true;
+          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+        }
+      });
+
+    var options = Object.extend(defaults, arguments[1] || { });
+
+    this.element = $(element);
+
+    if(options.handle &amp;amp;&amp;amp; Object.isString(options.handle))
+      this.handle = this.element.down(&amp;#39;.&amp;#39;+options.handle, 0);
+
+    if(!this.handle) this.handle = $(options.handle);
+    if(!this.handle) this.handle = this.element;
+
+    if(options.scroll &amp;amp;&amp;amp; !options.scroll.scrollTo &amp;amp;&amp;amp; !options.scroll.outerHTML) {
+      options.scroll = $(options.scroll);
+      this._isScrollChild = Element.childOf(this.element, options.scroll);
+    }
+
+    Element.makePositioned(this.element); // fix IE
+
+    this.options  = options;
+    this.dragging = false;
+
+    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+    Event.observe(this.handle, &amp;quot;mousedown&amp;quot;, this.eventMouseDown);
+
+    Draggables.register(this);
+  },
+
+  destroy: function() {
+    Event.stopObserving(this.handle, &amp;quot;mousedown&amp;quot;, this.eventMouseDown);
+    Draggables.unregister(this);
+  },
+
+  currentDelta: function() {
+    return([
+      parseInt(Element.getStyle(this.element,&amp;#39;left&amp;#39;) || &amp;#39;0&amp;#39;),
+      parseInt(Element.getStyle(this.element,&amp;#39;top&amp;#39;) || &amp;#39;0&amp;#39;)]);
+  },
+
+  initDrag: function(event) {
+    if(!Object.isUndefined(Draggable._dragging[this.element]) &amp;amp;&amp;amp;
+      Draggable._dragging[this.element]) return;
+    if(Event.isLeftClick(event)) {
+      // abort on form elements, fixes a Firefox issue
+      var src = Event.element(event);
+      if((tag_name = src.tagName.toUpperCase()) &amp;amp;&amp;amp; (
+        tag_name==&amp;#39;INPUT&amp;#39; ||
+        tag_name==&amp;#39;SELECT&amp;#39; ||
+        tag_name==&amp;#39;OPTION&amp;#39; ||
+        tag_name==&amp;#39;BUTTON&amp;#39; ||
+        tag_name==&amp;#39;TEXTAREA&amp;#39;)) return;
+
+      var pointer = [Event.pointerX(event), Event.pointerY(event)];
+      var pos     = Position.cumulativeOffset(this.element);
+      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
+
+      Draggables.activate(this);
+      Event.stop(event);
+    }
+  },
+
+  startDrag: function(event) {
+    this.dragging = true;
+    if(!this.delta)
+      this.delta = this.currentDelta();
+
+    if(this.options.zindex) {
+      this.originalZ = parseInt(Element.getStyle(this.element,&amp;#39;z-index&amp;#39;) || 0);
+      this.element.style.zIndex = this.options.zindex;
+    }
+
+    if(this.options.ghosting) {
+      this._clone = this.element.cloneNode(true);
+      this._originallyAbsolute = (this.element.getStyle(&amp;#39;position&amp;#39;) == &amp;#39;absolute&amp;#39;);
+      if (!this._originallyAbsolute)
+        Position.absolutize(this.element);
+      this.element.parentNode.insertBefore(this._clone, this.element);
+    }
+
+    if(this.options.scroll) {
+      if (this.options.scroll == window) {
+        var where = this._getWindowScroll(this.options.scroll);
+        this.originalScrollLeft = where.left;
+        this.originalScrollTop = where.top;
+      } else {
+        this.originalScrollLeft = this.options.scroll.scrollLeft;
+        this.originalScrollTop = this.options.scroll.scrollTop;
+      }
+    }
+
+    Draggables.notify(&amp;#39;onStart&amp;#39;, this, event);
+
+    if(this.options.starteffect) this.options.starteffect(this.element);
+  },
+
+  updateDrag: function(event, pointer) {
+    if(!this.dragging) this.startDrag(event);
+
+    if(!this.options.quiet){
+      Position.prepare();
+      Droppables.show(pointer, this.element);
+    }
+
+    Draggables.notify(&amp;#39;onDrag&amp;#39;, this, event);
+
+    this.draw(pointer);
+    if(this.options.change) this.options.change(this);
+
+    if(this.options.scroll) {
+      this.stopScrolling();
+
+      var p;
+      if (this.options.scroll == window) {
+        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+      } else {
+        p = Position.page(this.options.scroll);
+        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
+        p[1] += this.options.scroll.scrollTop + Position.deltaY;
+        p.push(p[0]+this.options.scroll.offsetWidth);
+        p.push(p[1]+this.options.scroll.offsetHeight);
+      }
+      var speed = [0,0];
+      if(pointer[0] &amp;lt; (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+      if(pointer[1] &amp;lt; (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+      if(pointer[0] &amp;gt; (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+      if(pointer[1] &amp;gt; (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+      this.startScrolling(speed);
+    }
+
+    // fix AppleWebKit rendering
+    if(Prototype.Browser.WebKit) window.scrollBy(0,0);
+
+    Event.stop(event);
+  },
+
+  finishDrag: function(event, success) {
+    this.dragging = false;
+
+    if(this.options.quiet){
+      Position.prepare();
+      var pointer = [Event.pointerX(event), Event.pointerY(event)];
+      Droppables.show(pointer, this.element);
+    }
+
+    if(this.options.ghosting) {
+      if (!this._originallyAbsolute)
+        Position.relativize(this.element);
+      delete this._originallyAbsolute;
+      Element.remove(this._clone);
+      this._clone = null;
+    }
+
+    var dropped = false;
+    if(success) {
+      dropped = Droppables.fire(event, this.element);
+      if (!dropped) dropped = false;
+    }
+    if(dropped &amp;amp;&amp;amp; this.options.onDropped) this.options.onDropped(this.element);
+    Draggables.notify(&amp;#39;onEnd&amp;#39;, this, event);
+
+    var revert = this.options.revert;
+    if(revert &amp;amp;&amp;amp; Object.isFunction(revert)) revert = revert(this.element);
+
+    var d = this.currentDelta();
+    if(revert &amp;amp;&amp;amp; this.options.reverteffect) {
+      if (dropped == 0 || revert != &amp;#39;failure&amp;#39;)
+        this.options.reverteffect(this.element,
+          d[1]-this.delta[1], d[0]-this.delta[0]);
+    } else {
+      this.delta = d;
+    }
+
+    if(this.options.zindex)
+      this.element.style.zIndex = this.originalZ;
+
+    if(this.options.endeffect)
+      this.options.endeffect(this.element);
+
+    Draggables.deactivate(this);
+    Droppables.reset();
+  },
+
+  keyPress: function(event) {
+    if(event.keyCode!=Event.KEY_ESC) return;
+    this.finishDrag(event, false);
+    Event.stop(event);
+  },
+
+  endDrag: function(event) {
+    if(!this.dragging) return;
+    this.stopScrolling();
+    this.finishDrag(event, true);
+    Event.stop(event);
+  },
+
+  draw: function(point) {
+    var pos = Position.cumulativeOffset(this.element);
+    if(this.options.ghosting) {
+      var r   = Position.realOffset(this.element);
+      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
+    }
+
+    var d = this.currentDelta();
+    pos[0] -= d[0]; pos[1] -= d[1];
+
+    if(this.options.scroll &amp;amp;&amp;amp; (this.options.scroll != window &amp;amp;&amp;amp; this._isScrollChild)) {
+      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+    }
+
+    var p = [0,1].map(function(i){
+      return (point[i]-pos[i]-this.offset[i])
+    }.bind(this));
+
+    if(this.options.snap) {
+      if(Object.isFunction(this.options.snap)) {
+        p = this.options.snap(p[0],p[1],this);
+      } else {
+      if(Object.isArray(this.options.snap)) {
+        p = p.map( function(v, i) {
+          return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
+      } else {
+        p = p.map( function(v) {
+          return (v/this.options.snap).round()*this.options.snap }.bind(this));
+      }
+    }}
+
+    var style = this.element.style;
+    if((!this.options.constraint) || (this.options.constraint==&amp;#39;horizontal&amp;#39;))
+      style.left = p[0] + &amp;quot;px&amp;quot;;
+    if((!this.options.constraint) || (this.options.constraint==&amp;#39;vertical&amp;#39;))
+      style.top  = p[1] + &amp;quot;px&amp;quot;;
+
+    if(style.visibility==&amp;quot;hidden&amp;quot;) style.visibility = &amp;quot;&amp;quot;; // fix gecko rendering
+  },
+
+  stopScrolling: function() {
+    if(this.scrollInterval) {
+      clearInterval(this.scrollInterval);
+      this.scrollInterval = null;
+      Draggables._lastScrollPointer = null;
+    }
+  },
+
+  startScrolling: function(speed) {
+    if(!(speed[0] || speed[1])) return;
+    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+    this.lastScrolled = new Date();
+    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+  },
+
+  scroll: function() {
+    var current = new Date();
+    var delta = current - this.lastScrolled;
+    this.lastScrolled = current;
+    if(this.options.scroll == window) {
+      with (this._getWindowScroll(this.options.scroll)) {
+        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+          var d = delta / 1000;
+          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+        }
+      }
+    } else {
+      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
+    }
+
+    Position.prepare();
+    Droppables.show(Draggables._lastPointer, this.element);
+    Draggables.notify(&amp;#39;onDrag&amp;#39;, this);
+    if (this._isScrollChild) {
+      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+      if (Draggables._lastScrollPointer[0] &amp;lt; 0)
+        Draggables._lastScrollPointer[0] = 0;
+      if (Draggables._lastScrollPointer[1] &amp;lt; 0)
+        Draggables._lastScrollPointer[1] = 0;
+      this.draw(Draggables._lastScrollPointer);
+    }
+
+    if(this.options.change) this.options.change(this);
+  },
+
+  _getWindowScroll: function(w) {
+    var T, L, W, H;
+    with (w.document) {
+      if (w.document.documentElement &amp;amp;&amp;amp; documentElement.scrollTop) {
+        T = documentElement.scrollTop;
+        L = documentElement.scrollLeft;
+      } else if (w.document.body) {
+        T = body.scrollTop;
+        L = body.scrollLeft;
+      }
+      if (w.innerWidth) {
+        W = w.innerWidth;
+        H = w.innerHeight;
+      } else if (w.document.documentElement &amp;amp;&amp;amp; documentElement.clientWidth) {
+        W = documentElement.clientWidth;
+        H = documentElement.clientHeight;
+      } else {
+        W = body.offsetWidth;
+        H = body.offsetHeight;
+      }
+    }
+    return { top: T, left: L, width: W, height: H };
+  }
+});
+
+Draggable._dragging = { };
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create({
+  initialize: function(element, observer) {
+    this.element   = $(element);
+    this.observer  = observer;
+    this.lastValue = Sortable.serialize(this.element);
+  },
+
+  onStart: function() {
+    this.lastValue = Sortable.serialize(this.element);
+  },
+
+  onEnd: function() {
+    Sortable.unmark();
+    if(this.lastValue != Sortable.serialize(this.element))
+      this.observer(this.element)
+  }
+});
+
+var Sortable = {
+  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
+
+  sortables: { },
+
+  _findRootElement: function(element) {
+    while (element.tagName.toUpperCase() != &amp;quot;BODY&amp;quot;) {
+      if(element.id &amp;amp;&amp;amp; Sortable.sortables[element.id]) return element;
+      element = element.parentNode;
+    }
+  },
+
+  options: function(element) {
+    element = Sortable._findRootElement($(element));
+    if(!element) return;
+    return Sortable.sortables[element.id];
+  },
+
+  destroy: function(element){
+    element = $(element);
+    var s = Sortable.sortables[element.id];
+
+    if(s) {
+      Draggables.removeObserver(s.element);
+      s.droppables.each(function(d){ Droppables.remove(d) });
+      s.draggables.invoke(&amp;#39;destroy&amp;#39;);
+
+      delete Sortable.sortables[s.element.id];
+    }
+  },
+
+  create: function(element) {
+    element = $(element);
+    var options = Object.extend({
+      element:     element,
+      tag:         &amp;#39;li&amp;#39;,       // assumes li children, override with tag: &amp;#39;tagname&amp;#39;
+      dropOnEmpty: false,
+      tree:        false,
+      treeTag:     &amp;#39;ul&amp;#39;,
+      overlap:     &amp;#39;vertical&amp;#39;, // one of &amp;#39;vertical&amp;#39;, &amp;#39;horizontal&amp;#39;
+      constraint:  &amp;#39;vertical&amp;#39;, // one of &amp;#39;vertical&amp;#39;, &amp;#39;horizontal&amp;#39;, false
+      containment: element,    // also takes array of elements (or id&amp;#39;s); or false
+      handle:      false,      // or a CSS class
+      only:        false,
+      delay:       0,
+      hoverclass:  null,
+      ghosting:    false,
+      quiet:       false,
+      scroll:      false,
+      scrollSensitivity: 20,
+      scrollSpeed: 15,
+      format:      this.SERIALIZE_RULE,
+
+      // these take arrays of elements or ids and can be
+      // used for better initialization performance
+      elements:    false,
+      handles:     false,
+
+      onChange:    Prototype.emptyFunction,
+      onUpdate:    Prototype.emptyFunction
+    }, arguments[1] || { });
+
+    // clear any old sortable with same element
+    this.destroy(element);
+
+    // build options for the draggables
+    var options_for_draggable = {
+      revert:      true,
+      quiet:       options.quiet,
+      scroll:      options.scroll,
+      scrollSpeed: options.scrollSpeed,
+      scrollSensitivity: options.scrollSensitivity,
+      delay:       options.delay,
+      ghosting:    options.ghosting,
+      constraint:  options.constraint,
+      handle:      options.handle };
+
+    if(options.starteffect)
+      options_for_draggable.starteffect = options.starteffect;
+
+    if(options.reverteffect)
+      options_for_draggable.reverteffect = options.reverteffect;
+    else
+      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+        element.style.top  = 0;
+        element.style.left = 0;
+      };
+
+    if(options.endeffect)
+      options_for_draggable.endeffect = options.endeffect;
+
+    if(options.zindex)
+      options_for_draggable.zindex = options.zindex;
+
+    // build options for the droppables
+    var options_for_droppable = {
+      overlap:     options.overlap,
+      containment: options.containment,
+      tree:        options.tree,
+      hoverclass:  options.hoverclass,
+      onHover:     Sortable.onHover
+    };
+
+    var options_for_tree = {
+      onHover:      Sortable.onEmptyHover,
+      overlap:      options.overlap,
+      containment:  options.containment,
+      hoverclass:   options.hoverclass
+    };
+
+    // fix for gecko engine
+    Element.cleanWhitespace(element);
+
+    options.draggables = [];
+    options.droppables = [];
+
+    // drop on empty handling
+    if(options.dropOnEmpty || options.tree) {
+      Droppables.add(element, options_for_tree);
+      options.droppables.push(element);
+    }
+
+    (options.elements || this.findElements(element, options) || []).each( function(e,i) {
+      var handle = options.handles ? $(options.handles[i]) :
+        (options.handle ? $(e).select(&amp;#39;.&amp;#39; + options.handle)[0] : e);
+      options.draggables.push(
+        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+      Droppables.add(e, options_for_droppable);
+      if(options.tree) e.treeNode = element;
+      options.droppables.push(e);
+    });
+
+    if(options.tree) {
+      (Sortable.findTreeElements(element, options) || []).each( function(e) {
+        Droppables.add(e, options_for_tree);
+        e.treeNode = element;
+        options.droppables.push(e);
+      });
+    }
+
+    // keep reference
+    this.sortables[element.id] = options;
+
+    // for onupdate
+    Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+  },
+
+  // return all suitable-for-sortable elements in a guaranteed order
+  findElements: function(element, options) {
+    return Element.findChildren(
+      element, options.only, options.tree ? true : false, options.tag);
+  },
+
+  findTreeElements: function(element, options) {
+    return Element.findChildren(
+      element, options.only, options.tree ? true : false, options.treeTag);
+  },
+
+  onHover: function(element, dropon, overlap) {
+    if(Element.isParent(dropon, element)) return;
+
+    if(overlap &amp;gt; .33 &amp;amp;&amp;amp; overlap &amp;lt; .66 &amp;amp;&amp;amp; Sortable.options(dropon).tree) {
+      return;
+    } else if(overlap&amp;gt;0.5) {
+      Sortable.mark(dropon, &amp;#39;before&amp;#39;);
+      if(dropon.previousSibling != element) {
+        var oldParentNode = element.parentNode;
+        element.style.visibility = &amp;quot;hidden&amp;quot;; // fix gecko rendering
+        dropon.parentNode.insertBefore(element, dropon);
+        if(dropon.parentNode!=oldParentNode)
+          Sortable.options(oldParentNode).onChange(element);
+        Sortable.options(dropon.parentNode).onChange(element);
+      }
+    } else {
+      Sortable.mark(dropon, &amp;#39;after&amp;#39;);
+      var nextElement = dropon.nextSibling || null;
+      if(nextElement != element) {
+        var oldParentNode = element.parentNode;
+        element.style.visibility = &amp;quot;hidden&amp;quot;; // fix gecko rendering
+        dropon.parentNode.insertBefore(element, nextElement);
+        if(dropon.parentNode!=oldParentNode)
+          Sortable.options(oldParentNode).onChange(element);
+        Sortable.options(dropon.parentNode).onChange(element);
+      }
+    }
+  },
+
+  onEmptyHover: function(element, dropon, overlap) {
+    var oldParentNode = element.parentNode;
+    var droponOptions = Sortable.options(dropon);
+
+    if(!Element.isParent(dropon, element)) {
+      var index;
+
+      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
+      var child = null;
+
+      if(children) {
+        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+
+        for (index = 0; index &amp;lt; children.length; index += 1) {
+          if (offset - Element.offsetSize (children[index], droponOptions.overlap) &amp;gt;= 0) {
+            offset -= Element.offsetSize (children[index], droponOptions.overlap);
+          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) &amp;gt;= 0) {
+            child = index + 1 &amp;lt; children.length ? children[index + 1] : null;
+            break;
+          } else {
+            child = children[index];
+            break;
+          }
+        }
+      }
+
+      dropon.insertBefore(element, child);
+
+      Sortable.options(oldParentNode).onChange(element);
+      droponOptions.onChange(element);
+    }
+  },
+
+  unmark: function() {
+    if(Sortable._marker) Sortable._marker.hide();
+  },
+
+  mark: function(dropon, position) {
+    // mark on ghosting only
+    var sortable = Sortable.options(dropon.parentNode);
+    if(sortable &amp;amp;&amp;amp; !sortable.ghosting) return;
+
+    if(!Sortable._marker) {
+      Sortable._marker =
+        ($(&amp;#39;dropmarker&amp;#39;) || Element.extend(document.createElement(&amp;#39;DIV&amp;#39;))).
+          hide().addClassName(&amp;#39;dropmarker&amp;#39;).setStyle({position:&amp;#39;absolute&amp;#39;});
+      document.getElementsByTagName(&amp;quot;body&amp;quot;).item(0).appendChild(Sortable._marker);
+    }
+    var offsets = Position.cumulativeOffset(dropon);
+    Sortable._marker.setStyle({left: offsets[0]+&amp;#39;px&amp;#39;, top: offsets[1] + &amp;#39;px&amp;#39;});
+
+    if(position==&amp;#39;after&amp;#39;)
+      if(sortable.overlap == &amp;#39;horizontal&amp;#39;)
+        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + &amp;#39;px&amp;#39;});
+      else
+        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + &amp;#39;px&amp;#39;});
+
+    Sortable._marker.show();
+  },
+
+  _tree: function(element, options, parent) {
+    var children = Sortable.findElements(element, options) || [];
+
+    for (var i = 0; i &amp;lt; children.length; ++i) {
+      var match = children[i].id.match(options.format);
+
+      if (!match) continue;
+
+      var child = {
+        id: encodeURIComponent(match ? match[1] : null),
+        element: element,
+        parent: parent,
+        children: [],
+        position: parent.children.length,
+        container: $(children[i]).down(options.treeTag)
+      };
+
+      /* Get the element containing the children and recurse over it */
+      if (child.container)
+        this._tree(child.container, options, child);
+
+      parent.children.push (child);
+    }
+
+    return parent;
+  },
+
+  tree: function(element) {
+    element = $(element);
+    var sortableOptions = this.options(element);
+    var options = Object.extend({
+      tag: sortableOptions.tag,
+      treeTag: sortableOptions.treeTag,
+      only: sortableOptions.only,
+      name: element.id,
+      format: sortableOptions.format
+    }, arguments[1] || { });
+
+    var root = {
+      id: null,
+      parent: null,
+      children: [],
+      container: element,
+      position: 0
+    };
+
+    return Sortable._tree(element, options, root);
+  },
+
+  /* Construct a [i] index for a particular node */
+  _constructIndex: function(node) {
+    var index = &amp;#39;&amp;#39;;
+    do {
+      if (node.id) index = &amp;#39;[&amp;#39; + node.position + &amp;#39;]&amp;#39; + index;
+    } while ((node = node.parent) != null);
+    return index;
+  },
+
+  sequence: function(element) {
+    element = $(element);
+    var options = Object.extend(this.options(element), arguments[1] || { });
+
+    return $(this.findElements(element, options) || []).map( function(item) {
+      return item.id.match(options.format) ? item.id.match(options.format)[1] : &amp;#39;&amp;#39;;
+    });
+  },
+
+  setSequence: function(element, new_sequence) {
+    element = $(element);
+    var options = Object.extend(this.options(element), arguments[2] || { });
+
+    var nodeMap = { };
+    this.findElements(element, options).each( function(n) {
+        if (n.id.match(options.format))
+            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+        n.parentNode.removeChild(n);
+    });
+
+    new_sequence.each(function(ident) {
+      var n = nodeMap[ident];
+      if (n) {
+        n[1].appendChild(n[0]);
+        delete nodeMap[ident];
+      }
+    });
+  },
+
+  serialize: function(element) {
+    element = $(element);
+    var options = Object.extend(Sortable.options(element), arguments[1] || { });
+    var name = encodeURIComponent(
+      (arguments[1] &amp;amp;&amp;amp; arguments[1].name) ? arguments[1].name : element.id);
+
+    if (options.tree) {
+      return Sortable.tree(element, arguments[1]).children.map( function (item) {
+        return [name + Sortable._constructIndex(item) + &amp;quot;[id]=&amp;quot; +
+                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+      }).flatten().join(&amp;#39;&amp;amp;&amp;#39;);
+    } else {
+      return Sortable.sequence(element, arguments[1]).map( function(item) {
+        return name + &amp;quot;[]=&amp;quot; + encodeURIComponent(item);
+      }).join(&amp;#39;&amp;amp;&amp;#39;);
+    }
+  }
+};
+
+// Returns true if child is contained within element
+Element.isParent = function(child, element) {
+  if (!child.parentNode || child == element) return false;
+  if (child.parentNode == element) return true;
+  return Element.isParent(child.parentNode, element);
+};
+
+Element.findChildren = function(element, only, recursive, tagName) {
+  if(!element.hasChildNodes()) return null;
+  tagName = tagName.toUpperCase();
+  if(only) only = [only].flatten();
+  var elements = [];
+  $A(element.childNodes).each( function(e) {
+    if(e.tagName &amp;amp;&amp;amp; e.tagName.toUpperCase()==tagName &amp;amp;&amp;amp;
+      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
+        elements.push(e);
+    if(recursive) {
+      var grandchildren = Element.findChildren(e, only, recursive, tagName);
+      if(grandchildren) elements.push(grandchildren);
+    }
+  });
+
+  return (elements.length&amp;gt;0 ? elements.flatten() : []);
+};
+
+Element.offsetSize = function (element, type) {
+  return element[&amp;#39;offset&amp;#39; + ((type==&amp;#39;vertical&amp;#39; || type==&amp;#39;height&amp;#39;) ? &amp;#39;Height&amp;#39; : &amp;#39;Width&amp;#39;)];
+};
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/web/src/main/webapp/js/dragdrop.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjseffectsjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/effects.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/effects.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/effects.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,1130 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+// script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+//  Justin Palmer (http://encytemedia.com/)
+//  Mark Pilgrim (http://diveintomark.org/)
+//  Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+  var color = &amp;#39;#&amp;#39;;
+  if (this.slice(0,4) == &amp;#39;rgb(&amp;#39;) {
+    var cols = this.slice(4,this.length-1).split(&amp;#39;,&amp;#39;);
+    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i&amp;lt;3);
+  } else {
+    if (this.slice(0,1) == &amp;#39;#&amp;#39;) {
+      if (this.length==4) for(var i=1;i&amp;lt;4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+      if (this.length==7) color = this.toLowerCase();
+    }
+  }
+  return (color.length==7 ? color : (arguments[0] || this));
+};
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+  return $A($(element).childNodes).collect( function(node) {
+    return (node.nodeType==3 ? node.nodeValue :
+      (node.hasChildNodes() ? Element.collectTextNodes(node) : &amp;#39;&amp;#39;));
+  }).flatten().join(&amp;#39;&amp;#39;);
+};
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+  return $A($(element).childNodes).collect( function(node) {
+    return (node.nodeType==3 ? node.nodeValue :
+      ((node.hasChildNodes() &amp;amp;&amp;amp; !Element.hasClassName(node,className)) ?
+        Element.collectTextNodesIgnoreClass(node, className) : &amp;#39;&amp;#39;));
+  }).flatten().join(&amp;#39;&amp;#39;);
+};
+
+Element.setContentZoom = function(element, percent) {
+  element = $(element);
+  element.setStyle({fontSize: (percent/100) + &amp;#39;em&amp;#39;});
+  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+  return element;
+};
+
+Element.getInlineOpacity = function(element){
+  return $(element).style.opacity || &amp;#39;&amp;#39;;
+};
+
+Element.forceRerendering = function(element) {
+  try {
+    element = $(element);
+    var n = document.createTextNode(&amp;#39; &amp;#39;);
+    element.appendChild(n);
+    element.removeChild(n);
+  } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+  _elementDoesNotExistError: {
+    name: &amp;#39;ElementDoesNotExistError&amp;#39;,
+    message: &amp;#39;The specified DOM element does not exist, but is required for this effect to operate&amp;#39;
+  },
+  Transitions: {
+    linear: Prototype.K,
+    sinoidal: function(pos) {
+      return (-Math.cos(pos*Math.PI)/2) + .5;
+    },
+    reverse: function(pos) {
+      return 1-pos;
+    },
+    flicker: function(pos) {
+      var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
+      return pos &amp;gt; 1 ? 1 : pos;
+    },
+    wobble: function(pos) {
+      return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
+    },
+    pulse: function(pos, pulses) {
+      return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
+    },
+    spring: function(pos) {
+      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+    },
+    none: function(pos) {
+      return 0;
+    },
+    full: function(pos) {
+      return 1;
+    }
+  },
+  DefaultOptions: {
+    duration:   1.0,   // seconds
+    fps:        100,   // 100= assume 66fps max.
+    sync:       false, // true for combining
+    from:       0.0,
+    to:         1.0,
+    delay:      0.0,
+    queue:      &amp;#39;parallel&amp;#39;
+  },
+  tagifyText: function(element) {
+    var tagifyStyle = &amp;#39;position:relative&amp;#39;;
+    if (Prototype.Browser.IE) tagifyStyle += &amp;#39;;zoom:1&amp;#39;;
+
+    element = $(element);
+    $A(element.childNodes).each( function(child) {
+      if (child.nodeType==3) {
+        child.nodeValue.toArray().each( function(character) {
+          element.insertBefore(
+            new Element(&amp;#39;span&amp;#39;, {style: tagifyStyle}).update(
+              character == &amp;#39; &amp;#39; ? String.fromCharCode(160) : character),
+              child);
+        });
+        Element.remove(child);
+      }
+    });
+  },
+  multiple: function(element, effect) {
+    var elements;
+    if (((typeof element == &amp;#39;object&amp;#39;) ||
+        Object.isFunction(element)) &amp;amp;&amp;amp;
+       (element.length))
+      elements = element;
+    else
+      elements = $(element).childNodes;
+
+    var options = Object.extend({
+      speed: 0.1,
+      delay: 0.0
+    }, arguments[2] || { });
+    var masterDelay = options.delay;
+
+    $A(elements).each( function(element, index) {
+      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+    });
+  },
+  PAIRS: {
+    &amp;#39;slide&amp;#39;:  [&amp;#39;SlideDown&amp;#39;,&amp;#39;SlideUp&amp;#39;],
+    &amp;#39;blind&amp;#39;:  [&amp;#39;BlindDown&amp;#39;,&amp;#39;BlindUp&amp;#39;],
+    &amp;#39;appear&amp;#39;: [&amp;#39;Appear&amp;#39;,&amp;#39;Fade&amp;#39;]
+  },
+  toggle: function(element, effect) {
+    element = $(element);
+    effect = (effect || &amp;#39;appear&amp;#39;).toLowerCase();
+    var options = Object.extend({
+      queue: { position:&amp;#39;end&amp;#39;, scope:(element.id || &amp;#39;global&amp;#39;), limit: 1 }
+    }, arguments[2] || { });
+    Effect[element.visible() ?
+      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
+  }
+};
+
+Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create(Enumerable, {
+  initialize: function() {
+    this.effects  = [];
+    this.interval = null;
+  },
+  _each: function(iterator) {
+    this.effects._each(iterator);
+  },
+  add: function(effect) {
+    var timestamp = new Date().getTime();
+
+    var position = Object.isString(effect.options.queue) ?
+      effect.options.queue : effect.options.queue.position;
+
+    switch(position) {
+      case &amp;#39;front&amp;#39;:
+        // move unstarted effects after this effect
+        this.effects.findAll(function(e){ return e.state==&amp;#39;idle&amp;#39; }).each( function(e) {
+            e.startOn  += effect.finishOn;
+            e.finishOn += effect.finishOn;
+          });
+        break;
+      case &amp;#39;with-last&amp;#39;:
+        timestamp = this.effects.pluck(&amp;#39;startOn&amp;#39;).max() || timestamp;
+        break;
+      case &amp;#39;end&amp;#39;:
+        // start effect after last queued effect has finished
+        timestamp = this.effects.pluck(&amp;#39;finishOn&amp;#39;).max() || timestamp;
+        break;
+    }
+
+    effect.startOn  += timestamp;
+    effect.finishOn += timestamp;
+
+    if (!effect.options.queue.limit || (this.effects.length &amp;lt; effect.options.queue.limit))
+      this.effects.push(effect);
+
+    if (!this.interval)
+      this.interval = setInterval(this.loop.bind(this), 15);
+  },
+  remove: function(effect) {
+    this.effects = this.effects.reject(function(e) { return e==effect });
+    if (this.effects.length == 0) {
+      clearInterval(this.interval);
+      this.interval = null;
+    }
+  },
+  loop: function() {
+    var timePos = new Date().getTime();
+    for(var i=0, len=this.effects.length;i&amp;lt;len;i++)
+      this.effects[i] &amp;amp;&amp;amp; this.effects[i].loop(timePos);
+  }
+});
+
+Effect.Queues = {
+  instances: $H(),
+  get: function(queueName) {
+    if (!Object.isString(queueName)) return queueName;
+
+    return this.instances.get(queueName) ||
+      this.instances.set(queueName, new Effect.ScopedQueue());
+  }
+};
+Effect.Queue = Effect.Queues.get(&amp;#39;global&amp;#39;);
+
+Effect.Base = Class.create({
+  position: null,
+  start: function(options) {
+    function codeForEvent(options,eventName){
+      return (
+        (options[eventName+&amp;#39;Internal&amp;#39;] ? &amp;#39;this.options.&amp;#39;+eventName+&amp;#39;Internal(this);&amp;#39; : &amp;#39;&amp;#39;) +
+        (options[eventName] ? &amp;#39;this.options.&amp;#39;+eventName+&amp;#39;(this);&amp;#39; : &amp;#39;&amp;#39;)
+      );
+    }
+    if (options &amp;amp;&amp;amp; options.transition === false) options.transition = Effect.Transitions.linear;
+    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+    this.currentFrame = 0;
+    this.state        = &amp;#39;idle&amp;#39;;
+    this.startOn      = this.options.delay*1000;
+    this.finishOn     = this.startOn+(this.options.duration*1000);
+    this.fromToDelta  = this.options.to-this.options.from;
+    this.totalTime    = this.finishOn-this.startOn;
+    this.totalFrames  = this.options.fps*this.options.duration;
+
+    this.render = (function() {
+      function dispatch(effect, eventName) {
+        if (effect.options[eventName + &amp;#39;Internal&amp;#39;])
+          effect.options[eventName + &amp;#39;Internal&amp;#39;](effect);
+        if (effect.options[eventName])
+          effect.options[eventName](effect);
+      }
+
+      return function(pos) {
+        if (this.state === &amp;quot;idle&amp;quot;) {
+          this.state = &amp;quot;running&amp;quot;;
+          dispatch(this, &amp;#39;beforeSetup&amp;#39;);
+          if (this.setup) this.setup();
+          dispatch(this, &amp;#39;afterSetup&amp;#39;);
+        }
+        if (this.state === &amp;quot;running&amp;quot;) {
+          pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
+          this.position = pos;
+          dispatch(this, &amp;#39;beforeUpdate&amp;#39;);
+          if (this.update) this.update(pos);
+          dispatch(this, &amp;#39;afterUpdate&amp;#39;);
+        }
+      };
+    })();
+
+    this.event(&amp;#39;beforeStart&amp;#39;);
+    if (!this.options.sync)
+      Effect.Queues.get(Object.isString(this.options.queue) ?
+        &amp;#39;global&amp;#39; : this.options.queue.scope).add(this);
+  },
+  loop: function(timePos) {
+    if (timePos &amp;gt;= this.startOn) {
+      if (timePos &amp;gt;= this.finishOn) {
+        this.render(1.0);
+        this.cancel();
+        this.event(&amp;#39;beforeFinish&amp;#39;);
+        if (this.finish) this.finish();
+        this.event(&amp;#39;afterFinish&amp;#39;);
+        return;
+      }
+      var pos   = (timePos - this.startOn) / this.totalTime,
+          frame = (pos * this.totalFrames).round();
+      if (frame &amp;gt; this.currentFrame) {
+        this.render(pos);
+        this.currentFrame = frame;
+      }
+    }
+  },
+  cancel: function() {
+    if (!this.options.sync)
+      Effect.Queues.get(Object.isString(this.options.queue) ?
+        &amp;#39;global&amp;#39; : this.options.queue.scope).remove(this);
+    this.state = &amp;#39;finished&amp;#39;;
+  },
+  event: function(eventName) {
+    if (this.options[eventName + &amp;#39;Internal&amp;#39;]) this.options[eventName + &amp;#39;Internal&amp;#39;](this);
+    if (this.options[eventName]) this.options[eventName](this);
+  },
+  inspect: function() {
+    var data = $H();
+    for(property in this)
+      if (!Object.isFunction(this[property])) data.set(property, this[property]);
+    return &amp;#39;#&amp;lt;Effect:&amp;#39; + data.inspect() + &amp;#39;,options:&amp;#39; + $H(this.options).inspect() + &amp;#39;&amp;gt;&amp;#39;;
+  }
+});
+
+Effect.Parallel = Class.create(Effect.Base, {
+  initialize: function(effects) {
+    this.effects = effects || [];
+    this.start(arguments[1]);
+  },
+  update: function(position) {
+    this.effects.invoke(&amp;#39;render&amp;#39;, position);
+  },
+  finish: function(position) {
+    this.effects.each( function(effect) {
+      effect.render(1.0);
+      effect.cancel();
+      effect.event(&amp;#39;beforeFinish&amp;#39;);
+      if (effect.finish) effect.finish(position);
+      effect.event(&amp;#39;afterFinish&amp;#39;);
+    });
+  }
+});
+
+Effect.Tween = Class.create(Effect.Base, {
+  initialize: function(object, from, to) {
+    object = Object.isString(object) ? $(object) : object;
+    var args = $A(arguments), method = args.last(),
+      options = args.length == 5 ? args[3] : null;
+    this.method = Object.isFunction(method) ? method.bind(object) :
+      Object.isFunction(object[method]) ? object[method].bind(object) :
+      function(value) { object[method] = value };
+    this.start(Object.extend({ from: from, to: to }, options || { }));
+  },
+  update: function(position) {
+    this.method(position);
+  }
+});
+
+Effect.Event = Class.create(Effect.Base, {
+  initialize: function() {
+    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+  },
+  update: Prototype.emptyFunction
+});
+
+Effect.Opacity = Class.create(Effect.Base, {
+  initialize: function(element) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    // make this work on IE on elements without &amp;#39;layout&amp;#39;
+    if (Prototype.Browser.IE &amp;amp;&amp;amp; (!this.element.currentStyle.hasLayout))
+      this.element.setStyle({zoom: 1});
+    var options = Object.extend({
+      from: this.element.getOpacity() || 0.0,
+      to:   1.0
+    }, arguments[1] || { });
+    this.start(options);
+  },
+  update: function(position) {
+    this.element.setOpacity(position);
+  }
+});
+
+Effect.Move = Class.create(Effect.Base, {
+  initialize: function(element) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    var options = Object.extend({
+      x:    0,
+      y:    0,
+      mode: &amp;#39;relative&amp;#39;
+    }, arguments[1] || { });
+    this.start(options);
+  },
+  setup: function() {
+    this.element.makePositioned();
+    this.originalLeft = parseFloat(this.element.getStyle(&amp;#39;left&amp;#39;) || &amp;#39;0&amp;#39;);
+    this.originalTop  = parseFloat(this.element.getStyle(&amp;#39;top&amp;#39;)  || &amp;#39;0&amp;#39;);
+    if (this.options.mode == &amp;#39;absolute&amp;#39;) {
+      this.options.x = this.options.x - this.originalLeft;
+      this.options.y = this.options.y - this.originalTop;
+    }
+  },
+  update: function(position) {
+    this.element.setStyle({
+      left: (this.options.x  * position + this.originalLeft).round() + &amp;#39;px&amp;#39;,
+      top:  (this.options.y  * position + this.originalTop).round()  + &amp;#39;px&amp;#39;
+    });
+  }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+  return new Effect.Move(element,
+    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+};
+
+Effect.Scale = Class.create(Effect.Base, {
+  initialize: function(element, percent) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    var options = Object.extend({
+      scaleX: true,
+      scaleY: true,
+      scaleContent: true,
+      scaleFromCenter: false,
+      scaleMode: &amp;#39;box&amp;#39;,        // &amp;#39;box&amp;#39; or &amp;#39;contents&amp;#39; or { } with provided values
+      scaleFrom: 100.0,
+      scaleTo:   percent
+    }, arguments[2] || { });
+    this.start(options);
+  },
+  setup: function() {
+    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+    this.elementPositioning = this.element.getStyle(&amp;#39;position&amp;#39;);
+
+    this.originalStyle = { };
+    [&amp;#39;top&amp;#39;,&amp;#39;left&amp;#39;,&amp;#39;width&amp;#39;,&amp;#39;height&amp;#39;,&amp;#39;fontSize&amp;#39;].each( function(k) {
+      this.originalStyle[k] = this.element.style[k];
+    }.bind(this));
+
+    this.originalTop  = this.element.offsetTop;
+    this.originalLeft = this.element.offsetLeft;
+
+    var fontSize = this.element.getStyle(&amp;#39;font-size&amp;#39;) || &amp;#39;100%&amp;#39;;
+    [&amp;#39;em&amp;#39;,&amp;#39;px&amp;#39;,&amp;#39;%&amp;#39;,&amp;#39;pt&amp;#39;].each( function(fontSizeType) {
+      if (fontSize.indexOf(fontSizeType)&amp;gt;0) {
+        this.fontSize     = parseFloat(fontSize);
+        this.fontSizeType = fontSizeType;
+      }
+    }.bind(this));
+
+    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+    this.dims = null;
+    if (this.options.scaleMode==&amp;#39;box&amp;#39;)
+      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+    if (/^content/.test(this.options.scaleMode))
+      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+    if (!this.dims)
+      this.dims = [this.options.scaleMode.originalHeight,
+                   this.options.scaleMode.originalWidth];
+  },
+  update: function(position) {
+    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+    if (this.options.scaleContent &amp;amp;&amp;amp; this.fontSize)
+      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+  },
+  finish: function(position) {
+    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+  },
+  setDimensions: function(height, width) {
+    var d = { };
+    if (this.options.scaleX) d.width = width.round() + &amp;#39;px&amp;#39;;
+    if (this.options.scaleY) d.height = height.round() + &amp;#39;px&amp;#39;;
+    if (this.options.scaleFromCenter) {
+      var topd  = (height - this.dims[0])/2;
+      var leftd = (width  - this.dims[1])/2;
+      if (this.elementPositioning == &amp;#39;absolute&amp;#39;) {
+        if (this.options.scaleY) d.top = this.originalTop-topd + &amp;#39;px&amp;#39;;
+        if (this.options.scaleX) d.left = this.originalLeft-leftd + &amp;#39;px&amp;#39;;
+      } else {
+        if (this.options.scaleY) d.top = -topd + &amp;#39;px&amp;#39;;
+        if (this.options.scaleX) d.left = -leftd + &amp;#39;px&amp;#39;;
+      }
+    }
+    this.element.setStyle(d);
+  }
+});
+
+Effect.Highlight = Class.create(Effect.Base, {
+  initialize: function(element) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    var options = Object.extend({ startcolor: &amp;#39;#ffff99&amp;#39; }, arguments[1] || { });
+    this.start(options);
+  },
+  setup: function() {
+    // Prevent executing on elements not in the layout flow
+    if (this.element.getStyle(&amp;#39;display&amp;#39;)==&amp;#39;none&amp;#39;) { this.cancel(); return; }
+    // Disable background image during the effect
+    this.oldStyle = { };
+    if (!this.options.keepBackgroundImage) {
+      this.oldStyle.backgroundImage = this.element.getStyle(&amp;#39;background-image&amp;#39;);
+      this.element.setStyle({backgroundImage: &amp;#39;none&amp;#39;});
+    }
+    if (!this.options.endcolor)
+      this.options.endcolor = this.element.getStyle(&amp;#39;background-color&amp;#39;).parseColor(&amp;#39;#ffffff&amp;#39;);
+    if (!this.options.restorecolor)
+      this.options.restorecolor = this.element.getStyle(&amp;#39;background-color&amp;#39;);
+    // init color calculations
+    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+  },
+  update: function(position) {
+    this.element.setStyle({backgroundColor: $R(0,2).inject(&amp;#39;#&amp;#39;,function(m,v,i){
+      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+  },
+  finish: function() {
+    this.element.setStyle(Object.extend(this.oldStyle, {
+      backgroundColor: this.options.restorecolor
+    }));
+  }
+});
+
+Effect.ScrollTo = function(element) {
+  var options = arguments[1] || { },
+  scrollOffsets = document.viewport.getScrollOffsets(),
+  elementOffsets = $(element).cumulativeOffset();
+
+  if (options.offset) elementOffsets[1] += options.offset;
+
+  return new Effect.Tween(null,
+    scrollOffsets.top,
+    elementOffsets[1],
+    options,
+    function(p){ scrollTo(scrollOffsets.left, p.round()); }
+  );
+};
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+  element = $(element);
+  var oldOpacity = element.getInlineOpacity();
+  var options = Object.extend({
+    from: element.getOpacity() || 1.0,
+    to:   0.0,
+    afterFinishInternal: function(effect) {
+      if (effect.options.to!=0) return;
+      effect.element.hide().setStyle({opacity: oldOpacity});
+    }
+  }, arguments[1] || { });
+  return new Effect.Opacity(element,options);
+};
+
+Effect.Appear = function(element) {
+  element = $(element);
+  var options = Object.extend({
+  from: (element.getStyle(&amp;#39;display&amp;#39;) == &amp;#39;none&amp;#39; ? 0.0 : element.getOpacity() || 0.0),
+  to:   1.0,
+  // force Safari to render floated elements properly
+  afterFinishInternal: function(effect) {
+    effect.element.forceRerendering();
+  },
+  beforeSetup: function(effect) {
+    effect.element.setOpacity(effect.options.from).show();
+  }}, arguments[1] || { });
+  return new Effect.Opacity(element,options);
+};
+
+Effect.Puff = function(element) {
+  element = $(element);
+  var oldStyle = {
+    opacity: element.getInlineOpacity(),
+    position: element.getStyle(&amp;#39;position&amp;#39;),
+    top:  element.style.top,
+    left: element.style.left,
+    width: element.style.width,
+    height: element.style.height
+  };
+  return new Effect.Parallel(
+   [ new Effect.Scale(element, 200,
+      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+     Object.extend({ duration: 1.0,
+      beforeSetupInternal: function(effect) {
+        Position.absolutize(effect.effects[0].element);
+      },
+      afterFinishInternal: function(effect) {
+         effect.effects[0].element.hide().setStyle(oldStyle); }
+     }, arguments[1] || { })
+   );
+};
+
+Effect.BlindUp = function(element) {
+  element = $(element);
+  element.makeClipping();
+  return new Effect.Scale(element, 0,
+    Object.extend({ scaleContent: false,
+      scaleX: false,
+      restoreAfterFinish: true,
+      afterFinishInternal: function(effect) {
+        effect.element.hide().undoClipping();
+      }
+    }, arguments[1] || { })
+  );
+};
+
+Effect.BlindDown = function(element) {
+  element = $(element);
+  var elementDimensions = element.getDimensions();
+  return new Effect.Scale(element, 100, Object.extend({
+    scaleContent: false,
+    scaleX: false,
+    scaleFrom: 0,
+    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+    restoreAfterFinish: true,
+    afterSetup: function(effect) {
+      effect.element.makeClipping().setStyle({height: &amp;#39;0px&amp;#39;}).show();
+    },
+    afterFinishInternal: function(effect) {
+      effect.element.undoClipping();
+    }
+  }, arguments[1] || { }));
+};
+
+Effect.SwitchOff = function(element) {
+  element = $(element);
+  var oldOpacity = element.getInlineOpacity();
+  return new Effect.Appear(element, Object.extend({
+    duration: 0.4,
+    from: 0,
+    transition: Effect.Transitions.flicker,
+    afterFinishInternal: function(effect) {
+      new Effect.Scale(effect.element, 1, {
+        duration: 0.3, scaleFromCenter: true,
+        scaleX: false, scaleContent: false, restoreAfterFinish: true,
+        beforeSetup: function(effect) {
+          effect.element.makePositioned().makeClipping();
+        },
+        afterFinishInternal: function(effect) {
+          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
+        }
+      });
+    }
+  }, arguments[1] || { }));
+};
+
+Effect.DropOut = function(element) {
+  element = $(element);
+  var oldStyle = {
+    top: element.getStyle(&amp;#39;top&amp;#39;),
+    left: element.getStyle(&amp;#39;left&amp;#39;),
+    opacity: element.getInlineOpacity() };
+  return new Effect.Parallel(
+    [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+    Object.extend(
+      { duration: 0.5,
+        beforeSetup: function(effect) {
+          effect.effects[0].element.makePositioned();
+        },
+        afterFinishInternal: function(effect) {
+          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
+        }
+      }, arguments[1] || { }));
+};
+
+Effect.Shake = function(element) {
+  element = $(element);
+  var options = Object.extend({
+    distance: 20,
+    duration: 0.5
+  }, arguments[1] || {});
+  var distance = parseFloat(options.distance);
+  var split = parseFloat(options.duration) / 10.0;
+  var oldStyle = {
+    top: element.getStyle(&amp;#39;top&amp;#39;),
+    left: element.getStyle(&amp;#39;left&amp;#39;) };
+    return new Effect.Move(element,
+      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+        effect.element.undoPositioned().setStyle(oldStyle);
+  }}); }}); }}); }}); }}); }});
+};
+
+Effect.SlideDown = function(element) {
+  element = $(element).cleanWhitespace();
+  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+  var oldInnerBottom = element.down().getStyle(&amp;#39;bottom&amp;#39;);
+  var elementDimensions = element.getDimensions();
+  return new Effect.Scale(element, 100, Object.extend({
+    scaleContent: false,
+    scaleX: false,
+    scaleFrom: window.opera ? 0 : 1,
+    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+    restoreAfterFinish: true,
+    afterSetup: function(effect) {
+      effect.element.makePositioned();
+      effect.element.down().makePositioned();
+      if (window.opera) effect.element.setStyle({top: &amp;#39;&amp;#39;});
+      effect.element.makeClipping().setStyle({height: &amp;#39;0px&amp;#39;}).show();
+    },
+    afterUpdateInternal: function(effect) {
+      effect.element.down().setStyle({bottom:
+        (effect.dims[0] - effect.element.clientHeight) + &amp;#39;px&amp;#39; });
+    },
+    afterFinishInternal: function(effect) {
+      effect.element.undoClipping().undoPositioned();
+      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
+    }, arguments[1] || { })
+  );
+};
+
+Effect.SlideUp = function(element) {
+  element = $(element).cleanWhitespace();
+  var oldInnerBottom = element.down().getStyle(&amp;#39;bottom&amp;#39;);
+  var elementDimensions = element.getDimensions();
+  return new Effect.Scale(element, window.opera ? 0 : 1,
+   Object.extend({ scaleContent: false,
+    scaleX: false,
+    scaleMode: &amp;#39;box&amp;#39;,
+    scaleFrom: 100,
+    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+    restoreAfterFinish: true,
+    afterSetup: function(effect) {
+      effect.element.makePositioned();
+      effect.element.down().makePositioned();
+      if (window.opera) effect.element.setStyle({top: &amp;#39;&amp;#39;});
+      effect.element.makeClipping().show();
+    },
+    afterUpdateInternal: function(effect) {
+      effect.element.down().setStyle({bottom:
+        (effect.dims[0] - effect.element.clientHeight) + &amp;#39;px&amp;#39; });
+    },
+    afterFinishInternal: function(effect) {
+      effect.element.hide().undoClipping().undoPositioned();
+      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+    }
+   }, arguments[1] || { })
+  );
+};
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+  return new Effect.Scale(element, window.opera ? 1 : 0, {
+    restoreAfterFinish: true,
+    beforeSetup: function(effect) {
+      effect.element.makeClipping();
+    },
+    afterFinishInternal: function(effect) {
+      effect.element.hide().undoClipping();
+    }
+  });
+};
+
+Effect.Grow = function(element) {
+  element = $(element);
+  var options = Object.extend({
+    direction: &amp;#39;center&amp;#39;,
+    moveTransition: Effect.Transitions.sinoidal,
+    scaleTransition: Effect.Transitions.sinoidal,
+    opacityTransition: Effect.Transitions.full
+  }, arguments[1] || { });
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    height: element.style.height,
+    width: element.style.width,
+    opacity: element.getInlineOpacity() };
+
+  var dims = element.getDimensions();
+  var initialMoveX, initialMoveY;
+  var moveX, moveY;
+
+  switch (options.direction) {
+    case &amp;#39;top-left&amp;#39;:
+      initialMoveX = initialMoveY = moveX = moveY = 0;
+      break;
+    case &amp;#39;top-right&amp;#39;:
+      initialMoveX = dims.width;
+      initialMoveY = moveY = 0;
+      moveX = -dims.width;
+      break;
+    case &amp;#39;bottom-left&amp;#39;:
+      initialMoveX = moveX = 0;
+      initialMoveY = dims.height;
+      moveY = -dims.height;
+      break;
+    case &amp;#39;bottom-right&amp;#39;:
+      initialMoveX = dims.width;
+      initialMoveY = dims.height;
+      moveX = -dims.width;
+      moveY = -dims.height;
+      break;
+    case &amp;#39;center&amp;#39;:
+      initialMoveX = dims.width / 2;
+      initialMoveY = dims.height / 2;
+      moveX = -dims.width / 2;
+      moveY = -dims.height / 2;
+      break;
+  }
+
+  return new Effect.Move(element, {
+    x: initialMoveX,
+    y: initialMoveY,
+    duration: 0.01,
+    beforeSetup: function(effect) {
+      effect.element.hide().makeClipping().makePositioned();
+    },
+    afterFinishInternal: function(effect) {
+      new Effect.Parallel(
+        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+          new Effect.Scale(effect.element, 100, {
+            scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+        ], Object.extend({
+             beforeSetup: function(effect) {
+               effect.effects[0].element.setStyle({height: &amp;#39;0px&amp;#39;}).show();
+             },
+             afterFinishInternal: function(effect) {
+               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
+             }
+           }, options)
+      );
+    }
+  });
+};
+
+Effect.Shrink = function(element) {
+  element = $(element);
+  var options = Object.extend({
+    direction: &amp;#39;center&amp;#39;,
+    moveTransition: Effect.Transitions.sinoidal,
+    scaleTransition: Effect.Transitions.sinoidal,
+    opacityTransition: Effect.Transitions.none
+  }, arguments[1] || { });
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    height: element.style.height,
+    width: element.style.width,
+    opacity: element.getInlineOpacity() };
+
+  var dims = element.getDimensions();
+  var moveX, moveY;
+
+  switch (options.direction) {
+    case &amp;#39;top-left&amp;#39;:
+      moveX = moveY = 0;
+      break;
+    case &amp;#39;top-right&amp;#39;:
+      moveX = dims.width;
+      moveY = 0;
+      break;
+    case &amp;#39;bottom-left&amp;#39;:
+      moveX = 0;
+      moveY = dims.height;
+      break;
+    case &amp;#39;bottom-right&amp;#39;:
+      moveX = dims.width;
+      moveY = dims.height;
+      break;
+    case &amp;#39;center&amp;#39;:
+      moveX = dims.width / 2;
+      moveY = dims.height / 2;
+      break;
+  }
+
+  return new Effect.Parallel(
+    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+    ], Object.extend({
+         beforeStartInternal: function(effect) {
+           effect.effects[0].element.makePositioned().makeClipping();
+         },
+         afterFinishInternal: function(effect) {
+           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
+       }, options)
+  );
+};
+
+Effect.Pulsate = function(element) {
+  element = $(element);
+  var options    = arguments[1] || { },
+    oldOpacity = element.getInlineOpacity(),
+    transition = options.transition || Effect.Transitions.linear,
+    reverser   = function(pos){
+      return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
+    };
+
+  return new Effect.Opacity(element,
+    Object.extend(Object.extend({  duration: 2.0, from: 0,
+      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+    }, options), {transition: reverser}));
+};
+
+Effect.Fold = function(element) {
+  element = $(element);
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    width: element.style.width,
+    height: element.style.height };
+  element.makeClipping();
+  return new Effect.Scale(element, 5, Object.extend({
+    scaleContent: false,
+    scaleX: false,
+    afterFinishInternal: function(effect) {
+    new Effect.Scale(element, 1, {
+      scaleContent: false,
+      scaleY: false,
+      afterFinishInternal: function(effect) {
+        effect.element.hide().undoClipping().setStyle(oldStyle);
+      } });
+  }}, arguments[1] || { }));
+};
+
+Effect.Morph = Class.create(Effect.Base, {
+  initialize: function(element) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    var options = Object.extend({
+      style: { }
+    }, arguments[1] || { });
+
+    if (!Object.isString(options.style)) this.style = $H(options.style);
+    else {
+      if (options.style.include(&amp;#39;:&amp;#39;))
+        this.style = options.style.parseStyle();
+      else {
+        this.element.addClassName(options.style);
+        this.style = $H(this.element.getStyles());
+        this.element.removeClassName(options.style);
+        var css = this.element.getStyles();
+        this.style = this.style.reject(function(style) {
+          return style.value == css[style.key];
+        });
+        options.afterFinishInternal = function(effect) {
+          effect.element.addClassName(effect.options.style);
+          effect.transforms.each(function(transform) {
+            effect.element.style[transform.style] = &amp;#39;&amp;#39;;
+          });
+        };
+      }
+    }
+    this.start(options);
+  },
+
+  setup: function(){
+    function parseColor(color){
+      if (!color || [&amp;#39;rgba(0, 0, 0, 0)&amp;#39;,&amp;#39;transparent&amp;#39;].include(color)) color = &amp;#39;#ffffff&amp;#39;;
+      color = color.parseColor();
+      return $R(0,2).map(function(i){
+        return parseInt( color.slice(i*2+1,i*2+3), 16 );
+      });
+    }
+    this.transforms = this.style.map(function(pair){
+      var property = pair[0], value = pair[1], unit = null;
+
+      if (value.parseColor(&amp;#39;#zzzzzz&amp;#39;) != &amp;#39;#zzzzzz&amp;#39;) {
+        value = value.parseColor();
+        unit  = &amp;#39;color&amp;#39;;
+      } else if (property == &amp;#39;opacity&amp;#39;) {
+        value = parseFloat(value);
+        if (Prototype.Browser.IE &amp;amp;&amp;amp; (!this.element.currentStyle.hasLayout))
+          this.element.setStyle({zoom: 1});
+      } else if (Element.CSS_LENGTH.test(value)) {
+          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
+          value = parseFloat(components[1]);
+          unit = (components.length == 3) ? components[2] : null;
+      }
+
+      var originalValue = this.element.getStyle(property);
+      return {
+        style: property.camelize(),
+        originalValue: unit==&amp;#39;color&amp;#39; ? parseColor(originalValue) : parseFloat(originalValue || 0),
+        targetValue: unit==&amp;#39;color&amp;#39; ? parseColor(value) : value,
+        unit: unit
+      };
+    }.bind(this)).reject(function(transform){
+      return (
+        (transform.originalValue == transform.targetValue) ||
+        (
+          transform.unit != &amp;#39;color&amp;#39; &amp;amp;&amp;amp;
+          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
+        )
+      );
+    });
+  },
+  update: function(position) {
+    var style = { }, transform, i = this.transforms.length;
+    while(i--)
+      style[(transform = this.transforms[i]).style] =
+        transform.unit==&amp;#39;color&amp;#39; ? &amp;#39;#&amp;#39;+
+          (Math.round(transform.originalValue[0]+
+            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
+          (Math.round(transform.originalValue[1]+
+            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
+          (Math.round(transform.originalValue[2]+
+            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
+        (transform.originalValue +
+          (transform.targetValue - transform.originalValue) * position).toFixed(3) +
+            (transform.unit === null ? &amp;#39;&amp;#39; : transform.unit);
+    this.element.setStyle(style, true);
+  }
+});
+
+Effect.Transform = Class.create({
+  initialize: function(tracks){
+    this.tracks  = [];
+    this.options = arguments[1] || { };
+    this.addTracks(tracks);
+  },
+  addTracks: function(tracks){
+    tracks.each(function(track){
+      track = $H(track);
+      var data = track.values().first();
+      this.tracks.push($H({
+        ids:     track.keys().first(),
+        effect:  Effect.Morph,
+        options: { style: data }
+      }));
+    }.bind(this));
+    return this;
+  },
+  play: function(){
+    return new Effect.Parallel(
+      this.tracks.map(function(track){
+        var ids = track.get(&amp;#39;ids&amp;#39;), effect = track.get(&amp;#39;effect&amp;#39;), options = track.get(&amp;#39;options&amp;#39;);
+        var elements = [$(ids) || $$(ids)].flatten();
+        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
+      }).flatten(),
+      this.options
+    );
+  }
+});
+
+Element.CSS_PROPERTIES = $w(
+  &amp;#39;backgroundColor backgroundPosition borderBottomColor borderBottomStyle &amp;#39; +
+  &amp;#39;borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth &amp;#39; +
+  &amp;#39;borderRightColor borderRightStyle borderRightWidth borderSpacing &amp;#39; +
+  &amp;#39;borderTopColor borderTopStyle borderTopWidth bottom clip color &amp;#39; +
+  &amp;#39;fontSize fontWeight height left letterSpacing lineHeight &amp;#39; +
+  &amp;#39;marginBottom marginLeft marginRight marginTop markerOffset maxHeight &amp;#39;+
+  &amp;#39;maxWidth minHeight minWidth opacity outlineColor outlineOffset &amp;#39; +
+  &amp;#39;outlineWidth paddingBottom paddingLeft paddingRight paddingTop &amp;#39; +
+  &amp;#39;right textIndent top width wordSpacing zIndex&amp;#39;);
+
+Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
+
+String.__parseStyleElement = document.createElement(&amp;#39;div&amp;#39;);
+String.prototype.parseStyle = function(){
+  var style, styleRules = $H();
+  if (Prototype.Browser.WebKit)
+    style = new Element(&amp;#39;div&amp;#39;,{style:this}).style;
+  else {
+    String.__parseStyleElement.innerHTML = &amp;#39;&amp;lt;div style=&amp;quot;&amp;#39; + this + &amp;#39;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;;
+    style = String.__parseStyleElement.childNodes[0].style;
+  }
+
+  Element.CSS_PROPERTIES.each(function(property){
+    if (style[property]) styleRules.set(property, style[property]);
+  });
+
+  if (Prototype.Browser.IE &amp;amp;&amp;amp; this.include(&amp;#39;opacity&amp;#39;))
+    styleRules.set(&amp;#39;opacity&amp;#39;, this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
+
+  return styleRules;
+};
+
+if (document.defaultView &amp;amp;&amp;amp; document.defaultView.getComputedStyle) {
+  Element.getStyles = function(element) {
+    var css = document.defaultView.getComputedStyle($(element), null);
+    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
+      styles[property] = css[property];
+      return styles;
+    });
+  };
+} else {
+  Element.getStyles = function(element) {
+    element = $(element);
+    var css = element.currentStyle, styles;
+    styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
+      results[property] = css[property];
+      return results;
+    });
+    if (!styles.opacity) styles.opacity = element.getOpacity();
+    return styles;
+  };
+}
+
+Effect.Methods = {
+  morph: function(element, style) {
+    element = $(element);
+    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
+    return element;
+  },
+  visualEffect: function(element, effect, options) {
+    element = $(element);
+    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
+    new Effect[klass](element, options);
+    return element;
+  },
+  highlight: function(element, options) {
+    element = $(element);
+    new Effect.Highlight(element, options);
+    return element;
+  }
+};
+
+$w(&amp;#39;fade appear grow shrink fold blindUp blindDown slideUp slideDown &amp;#39;+
+  &amp;#39;pulsate shake puff squish switchOff dropOut&amp;#39;).each(
+  function(effect) {
+    Effect.Methods[effect] = function(element, options){
+      element = $(element);
+      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
+      return element;
+    };
+  }
+);
+
+$w(&amp;#39;getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles&amp;#39;).each(
+  function(f) { Effect.Methods[f] = Element[f]; }
+);
+
+Element.addMethods(Effect.Methods);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/web/src/main/webapp/js/effects.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsfuncjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/func.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/func.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/func.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,189 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+function inverse($f) {
+    for ($i = 0; $i &amp;lt; $f.elements.length; $i++) {
+        if ($f.elements[$i].type == &amp;quot;checkbox&amp;quot;) {
+            $f.elements[$i].checked = !$f.elements[$i].checked;
+        }
+    }
+    return false;
+}
+
+function checkAll($f) {
+    for ($i = 0; $i &amp;lt; $f.elements.length; $i++) {
+        if ($f.elements[$i].type == &amp;quot;checkbox&amp;quot;) {
+            $f.elements[$i].checked = true;
+        }
+    }
+    return false;
+}
+
+/**
+ * Requires prototype.js (http://prototype.conio.net/)
+ */
+Ajax.ImgUpdater = Class.create();
+Ajax.ImgUpdater.prototype = {
+    initialize: function(imgID, timeout, newSrc) {
+        this.img = document.getElementById(imgID);
+        if (newSrc) {
+            this.src = newSrc;
+        } else {
+            this.src = this.img.src;
+        }
+        this.timeout = timeout;
+        this.start();
+    },
+
+    start: function() {
+        var now = new Date();
+        this.img.src = this.src + &amp;#39;&amp;amp;t=&amp;#39; + now.getTime();
+        this.timer = setTimeout(this.start.bind(this), this.timeout * 1000);
+    },
+
+    stop: function() {
+        if (this.timer) clearTimeout(this.timer);
+    }
+}
+
+function togglePanel(container, remember_url) {
+    if (Element.getStyle(container, &amp;quot;display&amp;quot;) == &amp;#39;none&amp;#39;) {
+        if (remember_url) {
+            new Ajax.Request(remember_url, {method:&amp;#39;get&amp;#39;,asynchronous:true, parameters: &amp;#39;state=on&amp;#39;});
+        }
+        if (document.getElementById(&amp;#39;invisible_&amp;#39; + container)) {
+            Element.hide(&amp;#39;invisible_&amp;#39; + container);
+        }
+        if (document.getElementById(&amp;#39;visible_&amp;#39; + container)) {
+            Element.show(&amp;#39;visible_&amp;#39; + container);
+        }
+
+        Effect.Grow(container);
+    } else {
+        if (remember_url) {
+            new Ajax.Request(remember_url, {method:&amp;#39;get&amp;#39;,asynchronous:true, parameters: &amp;#39;state=off&amp;#39;});
+        }
+        if (document.getElementById(&amp;#39;visible_&amp;#39; + container)) {
+            Element.hide(&amp;#39;visible_&amp;#39; + container);
+        }
+        if (document.getElementById(&amp;#39;invisible_&amp;#39; + container)) {
+            Element.show(&amp;#39;invisible_&amp;#39; + container);
+        }
+        Effect.Shrink(container);
+    }
+    return false;
+}
+
+function scaleImage(v, min, max) {
+    var images = document.getElementsByClassName(&amp;#39;scale-image&amp;#39;);
+    w = (max - min) * v + min;
+    for (i = 0; i &amp;lt; images.length; i++) {
+        images[i].style.width = w + &amp;#39;px&amp;#39;;
+    }
+}
+
+function toggleAndReloadPanel(container, url) {
+    if (Element.getStyle(container, &amp;quot;display&amp;quot;) == &amp;#39;none&amp;#39;) {
+        new Ajax.Updater(container, url);
+        Effect.BlindDown(container);
+    } else {
+        Effect.Shrink(container);
+    }
+}
+
+function getWindowHeight() {
+    var myHeight = 0;
+    if (typeof( window.innerHeight ) == &amp;#39;number&amp;#39;) {
+        //Non-IE
+        myHeight = window.innerHeight;
+    } else if (document.documentElement &amp;amp;&amp;amp; document.documentElement.clientHeight) {
+        //IE 6+ in &amp;#39;standards compliant mode&amp;#39;
+        myHeight = document.documentElement.clientHeight;
+    } else if (document.body &amp;amp;&amp;amp; document.body.clientHeight) {
+        //IE 4 compatible
+        myHeight = document.body.clientHeight;
+    }
+    return myHeight;
+}
+
+function getWindowWidth() {
+    var myWidth = 0;
+    if (typeof( window.innerWidth ) == &amp;#39;number&amp;#39;) {
+        //Non-IE
+        myWidth = window.innerWidth;
+    } else if (document.documentElement &amp;amp;&amp;amp; document.documentElement.clientWidth) {
+        //IE 6+ in &amp;#39;standards compliant mode&amp;#39;
+        myWidth = document.documentElement.clientWidth;
+    } else if (document.body &amp;amp;&amp;amp; document.body.clientWidth) {
+        //IE 4 compatible
+        myWidth = document.body.clientWidth;
+    }
+    return myWidth;
+}
+
+var helpTimerID;
+
+function setupHelpToggle(url, element) {
+    element.onclick = function() {
+        help_container = &amp;#39;help&amp;#39;;
+        if (Element.getStyle(help_container, &amp;quot;display&amp;quot;) == &amp;#39;none&amp;#39;) {
+            new Ajax.Updater(help_container, url);
+        }
+        Effect.toggle(help_container, &amp;#39;appear&amp;#39;);
+        if (helpTimerID) {
+            clearTimeout(helpTimerID);
+        }
+        helpTimerID = setTimeout(&amp;#39;Effect.Fade(&amp;quot;&amp;#39; + help_container + &amp;#39;&amp;quot;)&amp;#39;, 15000);
+        return false;
+    };
+}
+
+function addAjaxTooltip(activator, tooltip, url) {
+    Tooltip.closeText = null;
+    Tooltip.autoHideTimeout = null;
+    Tooltip.showMethod = function(e) {
+        Effect.Appear(e, {to: 0.9});
+    };
+
+    Tooltip.add(activator, tooltip);
+    tt_container = $$(&amp;#39;#&amp;#39; + tooltip + &amp;#39; .tt_content&amp;#39;)[0];
+    Event.observe(activator, &amp;#39;click&amp;#39;, function(e) {
+
+        t_title = $(&amp;#39;tt_title&amp;#39;);
+
+        if (t_title) t_title.hide();
+
+        tt_container.style.width = &amp;#39;300px&amp;#39;;
+
+        tt_container.innerHTML = &amp;#39;&amp;lt;div class=&amp;quot;ajax_activity&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&amp;#39;;
+        new Ajax.Updater(tt_container, url, {method: &amp;#39;get&amp;#39;}).onComplete = function () {
+            tt_container.style.width = null;
+            the_title = $(&amp;#39;tooltip_title&amp;#39;);
+            t_title = $(&amp;#39;tt_title&amp;#39;);
+
+            if (the_title &amp;amp;&amp;amp; t_title) {
+                the_title.hide();
+                t_title.innerHTML = the_title.innerHTML;
+                t_title.show();
+            }
+        };
+    });
+}
+
+/**
+ * @return form action and parameters as url
+ */
+function interceptFormSubmit(form) {
+    var s = form.action;
+
+    for (i = 0; i &amp;lt; form.elements.length; i++) {
+        var e = form.elements[i];
+        if (e.type == &amp;quot;checkbox&amp;quot;) {
+            s += &amp;quot;&amp;amp;&amp;quot; + escape(e.name) + &amp;quot;=&amp;quot; + (e.checked ? &amp;quot;on&amp;quot; : &amp;quot;off&amp;quot;);
+        } else {
+            s += &amp;quot;&amp;amp;&amp;quot; + escape(e.name) + &amp;quot;=&amp;quot; + escape(e.value);
+        }
+    }
+
+    //alert(s);
+
+    return s;
+}
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/js/func.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsprototypejs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/prototype.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/prototype.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/prototype.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,4320 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+/*  Prototype JavaScript framework, version 1.6.0.3
+ *  (c) 2005-2008 Sam Stephenson
+ *
+ *  Prototype is freely distributable under the terms of an MIT-style license.
+ *  For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+  Version: &amp;#39;1.6.0.3&amp;#39;,
+
+  Browser: {
+    IE:     !!(window.attachEvent &amp;amp;&amp;amp;
+      navigator.userAgent.indexOf(&amp;#39;Opera&amp;#39;) === -1),
+    Opera:  navigator.userAgent.indexOf(&amp;#39;Opera&amp;#39;) &amp;gt; -1,
+    WebKit: navigator.userAgent.indexOf(&amp;#39;AppleWebKit/&amp;#39;) &amp;gt; -1,
+    Gecko:  navigator.userAgent.indexOf(&amp;#39;Gecko&amp;#39;) &amp;gt; -1 &amp;amp;&amp;amp;
+      navigator.userAgent.indexOf(&amp;#39;KHTML&amp;#39;) === -1,
+    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+  },
+
+  BrowserFeatures: {
+    XPath: !!document.evaluate,
+    SelectorsAPI: !!document.querySelector,
+    ElementExtensions: !!window.HTMLElement,
+    SpecificElementExtensions:
+      document.createElement(&amp;#39;div&amp;#39;)[&amp;#39;__proto__&amp;#39;] &amp;amp;&amp;amp;
+      document.createElement(&amp;#39;div&amp;#39;)[&amp;#39;__proto__&amp;#39;] !==
+        document.createElement(&amp;#39;form&amp;#39;)[&amp;#39;__proto__&amp;#39;]
+  },
+
+  ScriptFragment: &amp;#39;&amp;lt;script[^&amp;gt;]*&amp;gt;([\\S\\s]*?)&amp;lt;\/script&amp;gt;&amp;#39;,
+  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+  emptyFunction: function() { },
+  K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+  Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+/* Based on Alex Arnell&amp;#39;s inheritance implementation. */
+var Class = {
+  create: function() {
+    var parent = null, properties = $A(arguments);
+    if (Object.isFunction(properties[0]))
+      parent = properties.shift();
+
+    function klass() {
+      this.initialize.apply(this, arguments);
+    }
+
+    Object.extend(klass, Class.Methods);
+    klass.superclass = parent;
+    klass.subclasses = [];
+
+    if (parent) {
+      var subclass = function() { };
+      subclass.prototype = parent.prototype;
+      klass.prototype = new subclass;
+      parent.subclasses.push(klass);
+    }
+
+    for (var i = 0; i &amp;lt; properties.length; i++)
+      klass.addMethods(properties[i]);
+
+    if (!klass.prototype.initialize)
+      klass.prototype.initialize = Prototype.emptyFunction;
+
+    klass.prototype.constructor = klass;
+
+    return klass;
+  }
+};
+
+Class.Methods = {
+  addMethods: function(source) {
+    var ancestor   = this.superclass &amp;amp;&amp;amp; this.superclass.prototype;
+    var properties = Object.keys(source);
+
+    if (!Object.keys({ toString: true }).length)
+      properties.push(&amp;quot;toString&amp;quot;, &amp;quot;valueOf&amp;quot;);
+
+    for (var i = 0, length = properties.length; i &amp;lt; length; i++) {
+      var property = properties[i], value = source[property];
+      if (ancestor &amp;amp;&amp;amp; Object.isFunction(value) &amp;amp;&amp;amp;
+          value.argumentNames().first() == &amp;quot;$super&amp;quot;) {
+        var method = value;
+        value = (function(m) {
+          return function() { return ancestor[m].apply(this, arguments) };
+        })(property).wrap(method);
+
+        value.valueOf = method.valueOf.bind(method);
+        value.toString = method.toString.bind(method);
+      }
+      this.prototype[property] = value;
+    }
+
+    return this;
+  }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+  for (var property in source)
+    destination[property] = source[property];
+  return destination;
+};
+
+Object.extend(Object, {
+  inspect: function(object) {
+    try {
+      if (Object.isUndefined(object)) return &amp;#39;undefined&amp;#39;;
+      if (object === null) return &amp;#39;null&amp;#39;;
+      return object.inspect ? object.inspect() : String(object);
+    } catch (e) {
+      if (e instanceof RangeError) return &amp;#39;...&amp;#39;;
+      throw e;
+    }
+  },
+
+  toJSON: function(object) {
+    var type = typeof object;
+    switch (type) {
+      case &amp;#39;undefined&amp;#39;:
+      case &amp;#39;function&amp;#39;:
+      case &amp;#39;unknown&amp;#39;: return;
+      case &amp;#39;boolean&amp;#39;: return object.toString();
+    }
+
+    if (object === null) return &amp;#39;null&amp;#39;;
+    if (object.toJSON) return object.toJSON();
+    if (Object.isElement(object)) return;
+
+    var results = [];
+    for (var property in object) {
+      var value = Object.toJSON(object[property]);
+      if (!Object.isUndefined(value))
+        results.push(property.toJSON() + &amp;#39;: &amp;#39; + value);
+    }
+
+    return &amp;#39;{&amp;#39; + results.join(&amp;#39;, &amp;#39;) + &amp;#39;}&amp;#39;;
+  },
+
+  toQueryString: function(object) {
+    return $H(object).toQueryString();
+  },
+
+  toHTML: function(object) {
+    return object &amp;amp;&amp;amp; object.toHTML ? object.toHTML() : String.interpret(object);
+  },
+
+  keys: function(object) {
+    var keys = [];
+    for (var property in object)
+      keys.push(property);
+    return keys;
+  },
+
+  values: function(object) {
+    var values = [];
+    for (var property in object)
+      values.push(object[property]);
+    return values;
+  },
+
+  clone: function(object) {
+    return Object.extend({ }, object);
+  },
+
+  isElement: function(object) {
+    return !!(object &amp;amp;&amp;amp; object.nodeType == 1);
+  },
+
+  isArray: function(object) {
+    return object != null &amp;amp;&amp;amp; typeof object == &amp;quot;object&amp;quot; &amp;amp;&amp;amp;
+      &amp;#39;splice&amp;#39; in object &amp;amp;&amp;amp; &amp;#39;join&amp;#39; in object;
+  },
+
+  isHash: function(object) {
+    return object instanceof Hash;
+  },
+
+  isFunction: function(object) {
+    return typeof object == &amp;quot;function&amp;quot;;
+  },
+
+  isString: function(object) {
+    return typeof object == &amp;quot;string&amp;quot;;
+  },
+
+  isNumber: function(object) {
+    return typeof object == &amp;quot;number&amp;quot;;
+  },
+
+  isUndefined: function(object) {
+    return typeof object == &amp;quot;undefined&amp;quot;;
+  }
+});
+
+Object.extend(Function.prototype, {
+  argumentNames: function() {
+    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
+      .replace(/\s+/g, &amp;#39;&amp;#39;).split(&amp;#39;,&amp;#39;);
+    return names.length == 1 &amp;amp;&amp;amp; !names[0] ? [] : names;
+  },
+
+  bind: function() {
+    if (arguments.length &amp;lt; 2 &amp;amp;&amp;amp; Object.isUndefined(arguments[0])) return this;
+    var __method = this, args = $A(arguments), object = args.shift();
+    return function() {
+      return __method.apply(object, args.concat($A(arguments)));
+    }
+  },
+
+  bindAsEventListener: function() {
+    var __method = this, args = $A(arguments), object = args.shift();
+    return function(event) {
+      return __method.apply(object, [event || window.event].concat(args));
+    }
+  },
+
+  curry: function() {
+    if (!arguments.length) return this;
+    var __method = this, args = $A(arguments);
+    return function() {
+      return __method.apply(this, args.concat($A(arguments)));
+    }
+  },
+
+  delay: function() {
+    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+    return window.setTimeout(function() {
+      return __method.apply(__method, args);
+    }, timeout);
+  },
+
+  defer: function() {
+    var args = [0.01].concat($A(arguments));
+    return this.delay.apply(this, args);
+  },
+
+  wrap: function(wrapper) {
+    var __method = this;
+    return function() {
+      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+    }
+  },
+
+  methodize: function() {
+    if (this._methodized) return this._methodized;
+    var __method = this;
+    return this._methodized = function() {
+      return __method.apply(null, [this].concat($A(arguments)));
+    };
+  }
+});
+
+Date.prototype.toJSON = function() {
+  return &amp;#39;&amp;quot;&amp;#39; + this.getUTCFullYear() + &amp;#39;-&amp;#39; +
+    (this.getUTCMonth() + 1).toPaddedString(2) + &amp;#39;-&amp;#39; +
+    this.getUTCDate().toPaddedString(2) + &amp;#39;T&amp;#39; +
+    this.getUTCHours().toPaddedString(2) + &amp;#39;:&amp;#39; +
+    this.getUTCMinutes().toPaddedString(2) + &amp;#39;:&amp;#39; +
+    this.getUTCSeconds().toPaddedString(2) + &amp;#39;Z&amp;quot;&amp;#39;;
+};
+
+var Try = {
+  these: function() {
+    var returnValue;
+
+    for (var i = 0, length = arguments.length; i &amp;lt; length; i++) {
+      var lambda = arguments[i];
+      try {
+        returnValue = lambda();
+        break;
+      } catch (e) { }
+    }
+
+    return returnValue;
+  }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, &amp;#39;\\$1&amp;#39;);
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+  initialize: function(callback, frequency) {
+    this.callback = callback;
+    this.frequency = frequency;
+    this.currentlyExecuting = false;
+
+    this.registerCallback();
+  },
+
+  registerCallback: function() {
+    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+  },
+
+  execute: function() {
+    this.callback(this);
+  },
+
+  stop: function() {
+    if (!this.timer) return;
+    clearInterval(this.timer);
+    this.timer = null;
+  },
+
+  onTimerEvent: function() {
+    if (!this.currentlyExecuting) {
+      try {
+        this.currentlyExecuting = true;
+        this.execute();
+      } finally {
+        this.currentlyExecuting = false;
+      }
+    }
+  }
+});
+Object.extend(String, {
+  interpret: function(value) {
+    return value == null ? &amp;#39;&amp;#39; : String(value);
+  },
+  specialChar: {
+    &amp;#39;\b&amp;#39;: &amp;#39;\\b&amp;#39;,
+    &amp;#39;\t&amp;#39;: &amp;#39;\\t&amp;#39;,
+    &amp;#39;\n&amp;#39;: &amp;#39;\\n&amp;#39;,
+    &amp;#39;\f&amp;#39;: &amp;#39;\\f&amp;#39;,
+    &amp;#39;\r&amp;#39;: &amp;#39;\\r&amp;#39;,
+    &amp;#39;\\&amp;#39;: &amp;#39;\\\\&amp;#39;
+  }
+});
+
+Object.extend(String.prototype, {
+  gsub: function(pattern, replacement) {
+    var result = &amp;#39;&amp;#39;, source = this, match;
+    replacement = arguments.callee.prepareReplacement(replacement);
+
+    while (source.length &amp;gt; 0) {
+      if (match = source.match(pattern)) {
+        result += source.slice(0, match.index);
+        result += String.interpret(replacement(match));
+        source  = source.slice(match.index + match[0].length);
+      } else {
+        result += source, source = &amp;#39;&amp;#39;;
+      }
+    }
+    return result;
+  },
+
+  sub: function(pattern, replacement, count) {
+    replacement = this.gsub.prepareReplacement(replacement);
+    count = Object.isUndefined(count) ? 1 : count;
+
+    return this.gsub(pattern, function(match) {
+      if (--count &amp;lt; 0) return match[0];
+      return replacement(match);
+    });
+  },
+
+  scan: function(pattern, iterator) {
+    this.gsub(pattern, iterator);
+    return String(this);
+  },
+
+  truncate: function(length, truncation) {
+    length = length || 30;
+    truncation = Object.isUndefined(truncation) ? &amp;#39;...&amp;#39; : truncation;
+    return this.length &amp;gt; length ?
+      this.slice(0, length - truncation.length) + truncation : String(this);
+  },
+
+  strip: function() {
+    return this.replace(/^\s+/, &amp;#39;&amp;#39;).replace(/\s+$/, &amp;#39;&amp;#39;);
+  },
+
+  stripTags: function() {
+    return this.replace(/&amp;lt;\/?[^&amp;gt;]+&amp;gt;/gi, &amp;#39;&amp;#39;);
+  },
+
+  stripScripts: function() {
+    return this.replace(new RegExp(Prototype.ScriptFragment, &amp;#39;img&amp;#39;), &amp;#39;&amp;#39;);
+  },
+
+  extractScripts: function() {
+    var matchAll = new RegExp(Prototype.ScriptFragment, &amp;#39;img&amp;#39;);
+    var matchOne = new RegExp(Prototype.ScriptFragment, &amp;#39;im&amp;#39;);
+    return (this.match(matchAll) || []).map(function(scriptTag) {
+      return (scriptTag.match(matchOne) || [&amp;#39;&amp;#39;, &amp;#39;&amp;#39;])[1];
+    });
+  },
+
+  evalScripts: function() {
+    return this.extractScripts().map(function(script) { return eval(script) });
+  },
+
+  escapeHTML: function() {
+    var self = arguments.callee;
+    self.text.data = this;
+    return self.div.innerHTML;
+  },
+
+  unescapeHTML: function() {
+    var div = new Element(&amp;#39;div&amp;#39;);
+    div.innerHTML = this.stripTags();
+    return div.childNodes[0] ? (div.childNodes.length &amp;gt; 1 ?
+      $A(div.childNodes).inject(&amp;#39;&amp;#39;, function(memo, node) { return memo+node.nodeValue }) :
+      div.childNodes[0].nodeValue) : &amp;#39;&amp;#39;;
+  },
+
+  toQueryParams: function(separator) {
+    var match = this.strip().match(/([^?#]*)(#.*)?$/);
+    if (!match) return { };
+
+    return match[1].split(separator || &amp;#39;&amp;amp;&amp;#39;).inject({ }, function(hash, pair) {
+      if ((pair = pair.split(&amp;#39;=&amp;#39;))[0]) {
+        var key = decodeURIComponent(pair.shift());
+        var value = pair.length &amp;gt; 1 ? pair.join(&amp;#39;=&amp;#39;) : pair[0];
+        if (value != undefined) value = decodeURIComponent(value);
+
+        if (key in hash) {
+          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+          hash[key].push(value);
+        }
+        else hash[key] = value;
+      }
+      return hash;
+    });
+  },
+
+  toArray: function() {
+    return this.split(&amp;#39;&amp;#39;);
+  },
+
+  succ: function() {
+    return this.slice(0, this.length - 1) +
+      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+  },
+
+  times: function(count) {
+    return count &amp;lt; 1 ? &amp;#39;&amp;#39; : new Array(count + 1).join(this);
+  },
+
+  camelize: function() {
+    var parts = this.split(&amp;#39;-&amp;#39;), len = parts.length;
+    if (len == 1) return parts[0];
+
+    var camelized = this.charAt(0) == &amp;#39;-&amp;#39;
+      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+      : parts[0];
+
+    for (var i = 1; i &amp;lt; len; i++)
+      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+    return camelized;
+  },
+
+  capitalize: function() {
+    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+  },
+
+  underscore: function() {
+    return this.gsub(/::/, &amp;#39;/&amp;#39;).gsub(/([A-Z]+)([A-Z][a-z])/,&amp;#39;#{1}_#{2}&amp;#39;).gsub(/([a-z\d])([A-Z])/,&amp;#39;#{1}_#{2}&amp;#39;).gsub(/-/,&amp;#39;_&amp;#39;).toLowerCase();
+  },
+
+  dasherize: function() {
+    return this.gsub(/_/,&amp;#39;-&amp;#39;);
+  },
+
+  inspect: function(useDoubleQuotes) {
+    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+      var character = String.specialChar[match[0]];
+      return character ? character : &amp;#39;\\u00&amp;#39; + match[0].charCodeAt().toPaddedString(2, 16);
+    });
+    if (useDoubleQuotes) return &amp;#39;&amp;quot;&amp;#39; + escapedString.replace(/&amp;quot;/g, &amp;#39;\\&amp;quot;&amp;#39;) + &amp;#39;&amp;quot;&amp;#39;;
+    return &amp;quot;&amp;#39;&amp;quot; + escapedString.replace(/&amp;#39;/g, &amp;#39;\\\&amp;#39;&amp;#39;) + &amp;quot;&amp;#39;&amp;quot;;
+  },
+
+  toJSON: function() {
+    return this.inspect(true);
+  },
+
+  unfilterJSON: function(filter) {
+    return this.sub(filter || Prototype.JSONFilter, &amp;#39;#{1}&amp;#39;);
+  },
+
+  isJSON: function() {
+    var str = this;
+    if (str.blank()) return false;
+    str = this.replace(/\\./g, &amp;#39;@&amp;#39;).replace(/&amp;quot;[^&amp;quot;\\\n\r]*&amp;quot;/g, &amp;#39;&amp;#39;);
+    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+  },
+
+  evalJSON: function(sanitize) {
+    var json = this.unfilterJSON();
+    try {
+      if (!sanitize || json.isJSON()) return eval(&amp;#39;(&amp;#39; + json + &amp;#39;)&amp;#39;);
+    } catch (e) { }
+    throw new SyntaxError(&amp;#39;Badly formed JSON string: &amp;#39; + this.inspect());
+  },
+
+  include: function(pattern) {
+    return this.indexOf(pattern) &amp;gt; -1;
+  },
+
+  startsWith: function(pattern) {
+    return this.indexOf(pattern) === 0;
+  },
+
+  endsWith: function(pattern) {
+    var d = this.length - pattern.length;
+    return d &amp;gt;= 0 &amp;amp;&amp;amp; this.lastIndexOf(pattern) === d;
+  },
+
+  empty: function() {
+    return this == &amp;#39;&amp;#39;;
+  },
+
+  blank: function() {
+    return /^\s*$/.test(this);
+  },
+
+  interpolate: function(object, pattern) {
+    return new Template(this, pattern).evaluate(object);
+  }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+  escapeHTML: function() {
+    return this.replace(/&amp;amp;/g,&amp;#39;&amp;amp;amp;&amp;#39;).replace(/&amp;lt;/g,&amp;#39;&amp;amp;lt;&amp;#39;).replace(/&amp;gt;/g,&amp;#39;&amp;amp;gt;&amp;#39;);
+  },
+  unescapeHTML: function() {
+    return this.stripTags().replace(/&amp;amp;amp;/g,&amp;#39;&amp;amp;&amp;#39;).replace(/&amp;amp;lt;/g,&amp;#39;&amp;lt;&amp;#39;).replace(/&amp;amp;gt;/g,&amp;#39;&amp;gt;&amp;#39;);
+  }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+  if (Object.isFunction(replacement)) return replacement;
+  var template = new Template(replacement);
+  return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+  div:  document.createElement(&amp;#39;div&amp;#39;),
+  text: document.createTextNode(&amp;#39;&amp;#39;)
+});
+
+String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
+
+var Template = Class.create({
+  initialize: function(template, pattern) {
+    this.template = template.toString();
+    this.pattern = pattern || Template.Pattern;
+  },
+
+  evaluate: function(object) {
+    if (Object.isFunction(object.toTemplateReplacements))
+      object = object.toTemplateReplacements();
+
+    return this.template.gsub(this.pattern, function(match) {
+      if (object == null) return &amp;#39;&amp;#39;;
+
+      var before = match[1] || &amp;#39;&amp;#39;;
+      if (before == &amp;#39;\\&amp;#39;) return match[2];
+
+      var ctx = object, expr = match[3];
+      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+      match = pattern.exec(expr);
+      if (match == null) return before;
+
+      while (match != null) {
+        var comp = match[1].startsWith(&amp;#39;[&amp;#39;) ? match[2].gsub(&amp;#39;\\\\]&amp;#39;, &amp;#39;]&amp;#39;) : match[1];
+        ctx = ctx[comp];
+        if (null == ctx || &amp;#39;&amp;#39; == match[3]) break;
+        expr = expr.substring(&amp;#39;[&amp;#39; == match[3] ? match[1].length : match[0].length);
+        match = pattern.exec(expr);
+      }
+
+      return before + String.interpret(ctx);
+    });
+  }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+  each: function(iterator, context) {
+    var index = 0;
+    try {
+      this._each(function(value) {
+        iterator.call(context, value, index++);
+      });
+    } catch (e) {
+      if (e != $break) throw e;
+    }
+    return this;
+  },
+
+  eachSlice: function(number, iterator, context) {
+    var index = -number, slices = [], array = this.toArray();
+    if (number &amp;lt; 1) return array;
+    while ((index += number) &amp;lt; array.length)
+      slices.push(array.slice(index, index+number));
+    return slices.collect(iterator, context);
+  },
+
+  all: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result = true;
+    this.each(function(value, index) {
+      result = result &amp;amp;&amp;amp; !!iterator.call(context, value, index);
+      if (!result) throw $break;
+    });
+    return result;
+  },
+
+  any: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result = false;
+    this.each(function(value, index) {
+      if (result = !!iterator.call(context, value, index))
+        throw $break;
+    });
+    return result;
+  },
+
+  collect: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var results = [];
+    this.each(function(value, index) {
+      results.push(iterator.call(context, value, index));
+    });
+    return results;
+  },
+
+  detect: function(iterator, context) {
+    var result;
+    this.each(function(value, index) {
+      if (iterator.call(context, value, index)) {
+        result = value;
+        throw $break;
+      }
+    });
+    return result;
+  },
+
+  findAll: function(iterator, context) {
+    var results = [];
+    this.each(function(value, index) {
+      if (iterator.call(context, value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  grep: function(filter, iterator, context) {
+    iterator = iterator || Prototype.K;
+    var results = [];
+
+    if (Object.isString(filter))
+      filter = new RegExp(filter);
+
+    this.each(function(value, index) {
+      if (filter.match(value))
+        results.push(iterator.call(context, value, index));
+    });
+    return results;
+  },
+
+  include: function(object) {
+    if (Object.isFunction(this.indexOf))
+      if (this.indexOf(object) != -1) return true;
+
+    var found = false;
+    this.each(function(value) {
+      if (value == object) {
+        found = true;
+        throw $break;
+      }
+    });
+    return found;
+  },
+
+  inGroupsOf: function(number, fillWith) {
+    fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+    return this.eachSlice(number, function(slice) {
+      while(slice.length &amp;lt; number) slice.push(fillWith);
+      return slice;
+    });
+  },
+
+  inject: function(memo, iterator, context) {
+    this.each(function(value, index) {
+      memo = iterator.call(context, memo, value, index);
+    });
+    return memo;
+  },
+
+  invoke: function(method) {
+    var args = $A(arguments).slice(1);
+    return this.map(function(value) {
+      return value[method].apply(value, args);
+    });
+  },
+
+  max: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result;
+    this.each(function(value, index) {
+      value = iterator.call(context, value, index);
+      if (result == null || value &amp;gt;= result)
+        result = value;
+    });
+    return result;
+  },
+
+  min: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result;
+    this.each(function(value, index) {
+      value = iterator.call(context, value, index);
+      if (result == null || value &amp;lt; result)
+        result = value;
+    });
+    return result;
+  },
+
+  partition: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var trues = [], falses = [];
+    this.each(function(value, index) {
+      (iterator.call(context, value, index) ?
+        trues : falses).push(value);
+    });
+    return [trues, falses];
+  },
+
+  pluck: function(property) {
+    var results = [];
+    this.each(function(value) {
+      results.push(value[property]);
+    });
+    return results;
+  },
+
+  reject: function(iterator, context) {
+    var results = [];
+    this.each(function(value, index) {
+      if (!iterator.call(context, value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  sortBy: function(iterator, context) {
+    return this.map(function(value, index) {
+      return {
+        value: value,
+        criteria: iterator.call(context, value, index)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria, b = right.criteria;
+      return a &amp;lt; b ? -1 : a &amp;gt; b ? 1 : 0;
+    }).pluck(&amp;#39;value&amp;#39;);
+  },
+
+  toArray: function() {
+    return this.map();
+  },
+
+  zip: function() {
+    var iterator = Prototype.K, args = $A(arguments);
+    if (Object.isFunction(args.last()))
+      iterator = args.pop();
+
+    var collections = [this].concat(args).map($A);
+    return this.map(function(value, index) {
+      return iterator(collections.pluck(index));
+    });
+  },
+
+  size: function() {
+    return this.toArray().length;
+  },
+
+  inspect: function() {
+    return &amp;#39;#&amp;lt;Enumerable:&amp;#39; + this.toArray().inspect() + &amp;#39;&amp;gt;&amp;#39;;
+  }
+};
+
+Object.extend(Enumerable, {
+  map:     Enumerable.collect,
+  find:    Enumerable.detect,
+  select:  Enumerable.findAll,
+  filter:  Enumerable.findAll,
+  member:  Enumerable.include,
+  entries: Enumerable.toArray,
+  every:   Enumerable.all,
+  some:    Enumerable.any
+});
+function $A(iterable) {
+  if (!iterable) return [];
+  if (iterable.toArray) return iterable.toArray();
+  var length = iterable.length || 0, results = new Array(length);
+  while (length--) results[length] = iterable[length];
+  return results;
+}
+
+if (Prototype.Browser.WebKit) {
+  $A = function(iterable) {
+    if (!iterable) return [];
+    // In Safari, only use the `toArray` method if it&amp;#39;s not a NodeList.
+    // A NodeList is a function, has an function `item` property, and a numeric
+    // `length` property. Adapted from Google Doctype.
+    if (!(typeof iterable === &amp;#39;function&amp;#39; &amp;amp;&amp;amp; typeof iterable.length ===
+        &amp;#39;number&amp;#39; &amp;amp;&amp;amp; typeof iterable.item === &amp;#39;function&amp;#39;) &amp;amp;&amp;amp; iterable.toArray)
+      return iterable.toArray();
+    var length = iterable.length || 0, results = new Array(length);
+    while (length--) results[length] = iterable[length];
+    return results;
+  };
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+  _each: function(iterator) {
+    for (var i = 0, length = this.length; i &amp;lt; length; i++)
+      iterator(this[i]);
+  },
+
+  clear: function() {
+    this.length = 0;
+    return this;
+  },
+
+  first: function() {
+    return this[0];
+  },
+
+  last: function() {
+    return this[this.length - 1];
+  },
+
+  compact: function() {
+    return this.select(function(value) {
+      return value != null;
+    });
+  },
+
+  flatten: function() {
+    return this.inject([], function(array, value) {
+      return array.concat(Object.isArray(value) ?
+        value.flatten() : [value]);
+    });
+  },
+
+  without: function() {
+    var values = $A(arguments);
+    return this.select(function(value) {
+      return !values.include(value);
+    });
+  },
+
+  reverse: function(inline) {
+    return (inline !== false ? this : this.toArray())._reverse();
+  },
+
+  reduce: function() {
+    return this.length &amp;gt; 1 ? this : this[0];
+  },
+
+  uniq: function(sorted) {
+    return this.inject([], function(array, value, index) {
+      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+        array.push(value);
+      return array;
+    });
+  },
+
+  intersect: function(array) {
+    return this.uniq().findAll(function(item) {
+      return array.detect(function(value) { return item === value });
+    });
+  },
+
+  clone: function() {
+    return [].concat(this);
+  },
+
+  size: function() {
+    return this.length;
+  },
+
+  inspect: function() {
+    return &amp;#39;[&amp;#39; + this.map(Object.inspect).join(&amp;#39;, &amp;#39;) + &amp;#39;]&amp;#39;;
+  },
+
+  toJSON: function() {
+    var results = [];
+    this.each(function(object) {
+      var value = Object.toJSON(object);
+      if (!Object.isUndefined(value)) results.push(value);
+    });
+    return &amp;#39;[&amp;#39; + results.join(&amp;#39;, &amp;#39;) + &amp;#39;]&amp;#39;;
+  }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+  Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+  i || (i = 0);
+  var length = this.length;
+  if (i &amp;lt; 0) i = length + i;
+  for (; i &amp;lt; length; i++)
+    if (this[i] === item) return i;
+  return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+  i = isNaN(i) ? this.length : (i &amp;lt; 0 ? this.length + i : i) + 1;
+  var n = this.slice(0, i).reverse().indexOf(item);
+  return (n &amp;lt; 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+  if (!Object.isString(string)) return [];
+  string = string.strip();
+  return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+  Array.prototype.concat = function() {
+    var array = [];
+    for (var i = 0, length = this.length; i &amp;lt; length; i++) array.push(this[i]);
+    for (var i = 0, length = arguments.length; i &amp;lt; length; i++) {
+      if (Object.isArray(arguments[i])) {
+        for (var j = 0, arrayLength = arguments[i].length; j &amp;lt; arrayLength; j++)
+          array.push(arguments[i][j]);
+      } else {
+        array.push(arguments[i]);
+      }
+    }
+    return array;
+  };
+}
+Object.extend(Number.prototype, {
+  toColorPart: function() {
+    return this.toPaddedString(2, 16);
+  },
+
+  succ: function() {
+    return this + 1;
+  },
+
+  times: function(iterator, context) {
+    $R(0, this, true).each(iterator, context);
+    return this;
+  },
+
+  toPaddedString: function(length, radix) {
+    var string = this.toString(radix || 10);
+    return &amp;#39;0&amp;#39;.times(length - string.length) + string;
+  },
+
+  toJSON: function() {
+    return isFinite(this) ? this.toString() : &amp;#39;null&amp;#39;;
+  }
+});
+
+$w(&amp;#39;abs round ceil floor&amp;#39;).each(function(method){
+  Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+  return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+
+  function toQueryPair(key, value) {
+    if (Object.isUndefined(value)) return key;
+    return key + &amp;#39;=&amp;#39; + encodeURIComponent(String.interpret(value));
+  }
+
+  return {
+    initialize: function(object) {
+      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+    },
+
+    _each: function(iterator) {
+      for (var key in this._object) {
+        var value = this._object[key], pair = [key, value];
+        pair.key = key;
+        pair.value = value;
+        iterator(pair);
+      }
+    },
+
+    set: function(key, value) {
+      return this._object[key] = value;
+    },
+
+    get: function(key) {
+      // simulating poorly supported hasOwnProperty
+      if (this._object[key] !== Object.prototype[key])
+        return this._object[key];
+    },
+
+    unset: function(key) {
+      var value = this._object[key];
+      delete this._object[key];
+      return value;
+    },
+
+    toObject: function() {
+      return Object.clone(this._object);
+    },
+
+    keys: function() {
+      return this.pluck(&amp;#39;key&amp;#39;);
+    },
+
+    values: function() {
+      return this.pluck(&amp;#39;value&amp;#39;);
+    },
+
+    index: function(value) {
+      var match = this.detect(function(pair) {
+        return pair.value === value;
+      });
+      return match &amp;amp;&amp;amp; match.key;
+    },
+
+    merge: function(object) {
+      return this.clone().update(object);
+    },
+
+    update: function(object) {
+      return new Hash(object).inject(this, function(result, pair) {
+        result.set(pair.key, pair.value);
+        return result;
+      });
+    },
+
+    toQueryString: function() {
+      return this.inject([], function(results, pair) {
+        var key = encodeURIComponent(pair.key), values = pair.value;
+
+        if (values &amp;amp;&amp;amp; typeof values == &amp;#39;object&amp;#39;) {
+          if (Object.isArray(values))
+            return results.concat(values.map(toQueryPair.curry(key)));
+        } else results.push(toQueryPair(key, values));
+        return results;
+      }).join(&amp;#39;&amp;amp;&amp;#39;);
+    },
+
+    inspect: function() {
+      return &amp;#39;#&amp;lt;Hash:{&amp;#39; + this.map(function(pair) {
+        return pair.map(Object.inspect).join(&amp;#39;: &amp;#39;);
+      }).join(&amp;#39;, &amp;#39;) + &amp;#39;}&amp;gt;&amp;#39;;
+    },
+
+    toJSON: function() {
+      return Object.toJSON(this.toObject());
+    },
+
+    clone: function() {
+      return new Hash(this);
+    }
+  }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+  initialize: function(start, end, exclusive) {
+    this.start = start;
+    this.end = end;
+    this.exclusive = exclusive;
+  },
+
+  _each: function(iterator) {
+    var value = this.start;
+    while (this.include(value)) {
+      iterator(value);
+      value = value.succ();
+    }
+  },
+
+  include: function(value) {
+    if (value &amp;lt; this.start)
+      return false;
+    if (this.exclusive)
+      return value &amp;lt; this.end;
+    return value &amp;lt;= this.end;
+  }
+});
+
+var $R = function(start, end, exclusive) {
+  return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+  getTransport: function() {
+    return Try.these(
+      function() {return new XMLHttpRequest()},
+      function() {return new ActiveXObject(&amp;#39;Msxml2.XMLHTTP&amp;#39;)},
+      function() {return new ActiveXObject(&amp;#39;Microsoft.XMLHTTP&amp;#39;)}
+    ) || false;
+  },
+
+  activeRequestCount: 0
+};
+
+Ajax.Responders = {
+  responders: [],
+
+  _each: function(iterator) {
+    this.responders._each(iterator);
+  },
+
+  register: function(responder) {
+    if (!this.include(responder))
+      this.responders.push(responder);
+  },
+
+  unregister: function(responder) {
+    this.responders = this.responders.without(responder);
+  },
+
+  dispatch: function(callback, request, transport, json) {
+    this.each(function(responder) {
+      if (Object.isFunction(responder[callback])) {
+        try {
+          responder[callback].apply(responder, [request, transport, json]);
+        } catch (e) { }
+      }
+    });
+  }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+  onCreate:   function() { Ajax.activeRequestCount++ },
+  onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+  initialize: function(options) {
+    this.options = {
+      method:       &amp;#39;post&amp;#39;,
+      asynchronous: true,
+      contentType:  &amp;#39;application/x-www-form-urlencoded&amp;#39;,
+      encoding:     &amp;#39;UTF-8&amp;#39;,
+      parameters:   &amp;#39;&amp;#39;,
+      evalJSON:     true,
+      evalJS:       true
+    };
+    Object.extend(this.options, options || { });
+
+    this.options.method = this.options.method.toLowerCase();
+
+    if (Object.isString(this.options.parameters))
+      this.options.parameters = this.options.parameters.toQueryParams();
+    else if (Object.isHash(this.options.parameters))
+      this.options.parameters = this.options.parameters.toObject();
+  }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+  _complete: false,
+
+  initialize: function($super, url, options) {
+    $super(options);
+    this.transport = Ajax.getTransport();
+    this.request(url);
+  },
+
+  request: function(url) {
+    this.url = url;
+    this.method = this.options.method;
+    var params = Object.clone(this.options.parameters);
+
+    if (![&amp;#39;get&amp;#39;, &amp;#39;post&amp;#39;].include(this.method)) {
+      // simulate other verbs over post
+      params[&amp;#39;_method&amp;#39;] = this.method;
+      this.method = &amp;#39;post&amp;#39;;
+    }
+
+    this.parameters = params;
+
+    if (params = Object.toQueryString(params)) {
+      // when GET, append parameters to URL
+      if (this.method == &amp;#39;get&amp;#39;)
+        this.url += (this.url.include(&amp;#39;?&amp;#39;) ? &amp;#39;&amp;amp;&amp;#39; : &amp;#39;?&amp;#39;) + params;
+      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+        params += &amp;#39;&amp;amp;_=&amp;#39;;
+    }
+
+    try {
+      var response = new Ajax.Response(this);
+      if (this.options.onCreate) this.options.onCreate(response);
+      Ajax.Responders.dispatch(&amp;#39;onCreate&amp;#39;, this, response);
+
+      this.transport.open(this.method.toUpperCase(), this.url,
+        this.options.asynchronous);
+
+      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+      this.transport.onreadystatechange = this.onStateChange.bind(this);
+      this.setRequestHeaders();
+
+      this.body = this.method == &amp;#39;post&amp;#39; ? (this.options.postBody || params) : null;
+      this.transport.send(this.body);
+
+      /* Force Firefox to handle ready state 4 for synchronous requests */
+      if (!this.options.asynchronous &amp;amp;&amp;amp; this.transport.overrideMimeType)
+        this.onStateChange();
+
+    }
+    catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  onStateChange: function() {
+    var readyState = this.transport.readyState;
+    if (readyState &amp;gt; 1 &amp;amp;&amp;amp; !((readyState == 4) &amp;amp;&amp;amp; this._complete))
+      this.respondToReadyState(this.transport.readyState);
+  },
+
+  setRequestHeaders: function() {
+    var headers = {
+      &amp;#39;X-Requested-With&amp;#39;: &amp;#39;XMLHttpRequest&amp;#39;,
+      &amp;#39;X-Prototype-Version&amp;#39;: Prototype.Version,
+      &amp;#39;Accept&amp;#39;: &amp;#39;text/javascript, text/html, application/xml, text/xml, */*&amp;#39;
+    };
+
+    if (this.method == &amp;#39;post&amp;#39;) {
+      headers[&amp;#39;Content-type&amp;#39;] = this.options.contentType +
+        (this.options.encoding ? &amp;#39;; charset=&amp;#39; + this.options.encoding : &amp;#39;&amp;#39;);
+
+      /* Force &amp;quot;Connection: close&amp;quot; for older Mozilla browsers to work
+       * around a bug where XMLHttpRequest sends an incorrect
+       * Content-length header. See Mozilla Bugzilla #246651.
+       */
+      if (this.transport.overrideMimeType &amp;amp;&amp;amp;
+          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] &amp;lt; 2005)
+            headers[&amp;#39;Connection&amp;#39;] = &amp;#39;close&amp;#39;;
+    }
+
+    // user-defined headers
+    if (typeof this.options.requestHeaders == &amp;#39;object&amp;#39;) {
+      var extras = this.options.requestHeaders;
+
+      if (Object.isFunction(extras.push))
+        for (var i = 0, length = extras.length; i &amp;lt; length; i += 2)
+          headers[extras[i]] = extras[i+1];
+      else
+        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+    }
+
+    for (var name in headers)
+      this.transport.setRequestHeader(name, headers[name]);
+  },
+
+  success: function() {
+    var status = this.getStatus();
+    return !status || (status &amp;gt;= 200 &amp;amp;&amp;amp; status &amp;lt; 300);
+  },
+
+  getStatus: function() {
+    try {
+      return this.transport.status || 0;
+    } catch (e) { return 0 }
+  },
+
+  respondToReadyState: function(readyState) {
+    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+    if (state == &amp;#39;Complete&amp;#39;) {
+      try {
+        this._complete = true;
+        (this.options[&amp;#39;on&amp;#39; + response.status]
+         || this.options[&amp;#39;on&amp;#39; + (this.success() ? &amp;#39;Success&amp;#39; : &amp;#39;Failure&amp;#39;)]
+         || Prototype.emptyFunction)(response, response.headerJSON);
+      } catch (e) {
+        this.dispatchException(e);
+      }
+
+      var contentType = response.getHeader(&amp;#39;Content-type&amp;#39;);
+      if (this.options.evalJS == &amp;#39;force&amp;#39;
+          || (this.options.evalJS &amp;amp;&amp;amp; this.isSameOrigin() &amp;amp;&amp;amp; contentType
+          &amp;amp;&amp;amp; contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+        this.evalResponse();
+    }
+
+    try {
+      (this.options[&amp;#39;on&amp;#39; + state] || Prototype.emptyFunction)(response, response.headerJSON);
+      Ajax.Responders.dispatch(&amp;#39;on&amp;#39; + state, this, response, response.headerJSON);
+    } catch (e) {
+      this.dispatchException(e);
+    }
+
+    if (state == &amp;#39;Complete&amp;#39;) {
+      // avoid memory leak in MSIE: clean up
+      this.transport.onreadystatechange = Prototype.emptyFunction;
+    }
+  },
+
+  isSameOrigin: function() {
+    var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+    return !m || (m[0] == &amp;#39;#{protocol}//#{domain}#{port}&amp;#39;.interpolate({
+      protocol: location.protocol,
+      domain: document.domain,
+      port: location.port ? &amp;#39;:&amp;#39; + location.port : &amp;#39;&amp;#39;
+    }));
+  },
+
+  getHeader: function(name) {
+    try {
+      return this.transport.getResponseHeader(name) || null;
+    } catch (e) { return null }
+  },
+
+  evalResponse: function() {
+    try {
+      return eval((this.transport.responseText || &amp;#39;&amp;#39;).unfilterJSON());
+    } catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  dispatchException: function(exception) {
+    (this.options.onException || Prototype.emptyFunction)(this, exception);
+    Ajax.Responders.dispatch(&amp;#39;onException&amp;#39;, this, exception);
+  }
+});
+
+Ajax.Request.Events =
+  [&amp;#39;Uninitialized&amp;#39;, &amp;#39;Loading&amp;#39;, &amp;#39;Loaded&amp;#39;, &amp;#39;Interactive&amp;#39;, &amp;#39;Complete&amp;#39;];
+
+Ajax.Response = Class.create({
+  initialize: function(request){
+    this.request = request;
+    var transport  = this.transport  = request.transport,
+        readyState = this.readyState = transport.readyState;
+
+    if((readyState &amp;gt; 2 &amp;amp;&amp;amp; !Prototype.Browser.IE) || readyState == 4) {
+      this.status       = this.getStatus();
+      this.statusText   = this.getStatusText();
+      this.responseText = String.interpret(transport.responseText);
+      this.headerJSON   = this._getHeaderJSON();
+    }
+
+    if(readyState == 4) {
+      var xml = transport.responseXML;
+      this.responseXML  = Object.isUndefined(xml) ? null : xml;
+      this.responseJSON = this._getResponseJSON();
+    }
+  },
+
+  status:      0,
+  statusText: &amp;#39;&amp;#39;,
+
+  getStatus: Ajax.Request.prototype.getStatus,
+
+  getStatusText: function() {
+    try {
+      return this.transport.statusText || &amp;#39;&amp;#39;;
+    } catch (e) { return &amp;#39;&amp;#39; }
+  },
+
+  getHeader: Ajax.Request.prototype.getHeader,
+
+  getAllHeaders: function() {
+    try {
+      return this.getAllResponseHeaders();
+    } catch (e) { return null }
+  },
+
+  getResponseHeader: function(name) {
+    return this.transport.getResponseHeader(name);
+  },
+
+  getAllResponseHeaders: function() {
+    return this.transport.getAllResponseHeaders();
+  },
+
+  _getHeaderJSON: function() {
+    var json = this.getHeader(&amp;#39;X-JSON&amp;#39;);
+    if (!json) return null;
+    json = decodeURIComponent(escape(json));
+    try {
+      return json.evalJSON(this.request.options.sanitizeJSON ||
+        !this.request.isSameOrigin());
+    } catch (e) {
+      this.request.dispatchException(e);
+    }
+  },
+
+  _getResponseJSON: function() {
+    var options = this.request.options;
+    if (!options.evalJSON || (options.evalJSON != &amp;#39;force&amp;#39; &amp;amp;&amp;amp;
+      !(this.getHeader(&amp;#39;Content-type&amp;#39;) || &amp;#39;&amp;#39;).include(&amp;#39;application/json&amp;#39;)) ||
+        this.responseText.blank())
+          return null;
+    try {
+      return this.responseText.evalJSON(options.sanitizeJSON ||
+        !this.request.isSameOrigin());
+    } catch (e) {
+      this.request.dispatchException(e);
+    }
+  }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+  initialize: function($super, container, url, options) {
+    this.container = {
+      success: (container.success || container),
+      failure: (container.failure || (container.success ? null : container))
+    };
+
+    options = Object.clone(options);
+    var onComplete = options.onComplete;
+    options.onComplete = (function(response, json) {
+      this.updateContent(response.responseText);
+      if (Object.isFunction(onComplete)) onComplete(response, json);
+    }).bind(this);
+
+    $super(url, options);
+  },
+
+  updateContent: function(responseText) {
+    var receiver = this.container[this.success() ? &amp;#39;success&amp;#39; : &amp;#39;failure&amp;#39;],
+        options = this.options;
+
+    if (!options.evalScripts) responseText = responseText.stripScripts();
+
+    if (receiver = $(receiver)) {
+      if (options.insertion) {
+        if (Object.isString(options.insertion)) {
+          var insertion = { }; insertion[options.insertion] = responseText;
+          receiver.insert(insertion);
+        }
+        else options.insertion(receiver, responseText);
+      }
+      else receiver.update(responseText);
+    }
+  }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+  initialize: function($super, container, url, options) {
+    $super(options);
+    this.onComplete = this.options.onComplete;
+
+    this.frequency = (this.options.frequency || 2);
+    this.decay = (this.options.decay || 1);
+
+    this.updater = { };
+    this.container = container;
+    this.url = url;
+
+    this.start();
+  },
+
+  start: function() {
+    this.options.onComplete = this.updateComplete.bind(this);
+    this.onTimerEvent();
+  },
+
+  stop: function() {
+    this.updater.options.onComplete = undefined;
+    clearTimeout(this.timer);
+    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+  },
+
+  updateComplete: function(response) {
+    if (this.options.decay) {
+      this.decay = (response.responseText == this.lastText ?
+        this.decay * this.options.decay : 1);
+
+      this.lastText = response.responseText;
+    }
+    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+  },
+
+  onTimerEvent: function() {
+    this.updater = new Ajax.Updater(this.container, this.url, this.options);
+  }
+});
+function $(element) {
+  if (arguments.length &amp;gt; 1) {
+    for (var i = 0, elements = [], length = arguments.length; i &amp;lt; length; i++)
+      elements.push($(arguments[i]));
+    return elements;
+  }
+  if (Object.isString(element))
+    element = document.getElementById(element);
+  return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+  document._getElementsByXPath = function(expression, parentElement) {
+    var results = [];
+    var query = document.evaluate(expression, $(parentElement) || document,
+      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+    for (var i = 0, length = query.snapshotLength; i &amp;lt; length; i++)
+      results.push(Element.extend(query.snapshotItem(i)));
+    return results;
+  };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+  // DOM level 2 ECMAScript Language Binding
+  Object.extend(Node, {
+    ELEMENT_NODE: 1,
+    ATTRIBUTE_NODE: 2,
+    TEXT_NODE: 3,
+    CDATA_SECTION_NODE: 4,
+    ENTITY_REFERENCE_NODE: 5,
+    ENTITY_NODE: 6,
+    PROCESSING_INSTRUCTION_NODE: 7,
+    COMMENT_NODE: 8,
+    DOCUMENT_NODE: 9,
+    DOCUMENT_TYPE_NODE: 10,
+    DOCUMENT_FRAGMENT_NODE: 11,
+    NOTATION_NODE: 12
+  });
+}
+
+(function() {
+  var element = this.Element;
+  this.Element = function(tagName, attributes) {
+    attributes = attributes || { };
+    tagName = tagName.toLowerCase();
+    var cache = Element.cache;
+    if (Prototype.Browser.IE &amp;amp;&amp;amp; attributes.name) {
+      tagName = &amp;#39;&amp;lt;&amp;#39; + tagName + &amp;#39; name=&amp;quot;&amp;#39; + attributes.name + &amp;#39;&amp;quot;&amp;gt;&amp;#39;;
+      delete attributes.name;
+      return Element.writeAttribute(document.createElement(tagName), attributes);
+    }
+    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+  };
+  Object.extend(this.Element, element || { });
+  if (element) this.Element.prototype = element.prototype;
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+  visible: function(element) {
+    return $(element).style.display != &amp;#39;none&amp;#39;;
+  },
+
+  toggle: function(element) {
+    element = $(element);
+    Element[Element.visible(element) ? &amp;#39;hide&amp;#39; : &amp;#39;show&amp;#39;](element);
+    return element;
+  },
+
+  hide: function(element) {
+    element = $(element);
+    element.style.display = &amp;#39;none&amp;#39;;
+    return element;
+  },
+
+  show: function(element) {
+    element = $(element);
+    element.style.display = &amp;#39;&amp;#39;;
+    return element;
+  },
+
+  remove: function(element) {
+    element = $(element);
+    element.parentNode.removeChild(element);
+    return element;
+  },
+
+  update: function(element, content) {
+    element = $(element);
+    if (content &amp;amp;&amp;amp; content.toElement) content = content.toElement();
+    if (Object.isElement(content)) return element.update().insert(content);
+    content = Object.toHTML(content);
+    element.innerHTML = content.stripScripts();
+    content.evalScripts.bind(content).defer();
+    return element;
+  },
+
+  replace: function(element, content) {
+    element = $(element);
+    if (content &amp;amp;&amp;amp; content.toElement) content = content.toElement();
+    else if (!Object.isElement(content)) {
+      content = Object.toHTML(content);
+      var range = element.ownerDocument.createRange();
+      range.selectNode(element);
+      content.evalScripts.bind(content).defer();
+      content = range.createContextualFragment(content.stripScripts());
+    }
+    element.parentNode.replaceChild(content, element);
+    return element;
+  },
+
+  insert: function(element, insertions) {
+    element = $(element);
+
+    if (Object.isString(insertions) || Object.isNumber(insertions) ||
+        Object.isElement(insertions) || (insertions &amp;amp;&amp;amp; (insertions.toElement || insertions.toHTML)))
+          insertions = {bottom:insertions};
+
+    var content, insert, tagName, childNodes;
+
+    for (var position in insertions) {
+      content  = insertions[position];
+      position = position.toLowerCase();
+      insert = Element._insertionTranslations[position];
+
+      if (content &amp;amp;&amp;amp; content.toElement) content = content.toElement();
+      if (Object.isElement(content)) {
+        insert(element, content);
+        continue;
+      }
+
+      content = Object.toHTML(content);
+
+      tagName = ((position == &amp;#39;before&amp;#39; || position == &amp;#39;after&amp;#39;)
+        ? element.parentNode : element).tagName.toUpperCase();
+
+      childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+      if (position == &amp;#39;top&amp;#39; || position == &amp;#39;after&amp;#39;) childNodes.reverse();
+      childNodes.each(insert.curry(element));
+
+      content.evalScripts.bind(content).defer();
+    }
+
+    return element;
+  },
+
+  wrap: function(element, wrapper, attributes) {
+    element = $(element);
+    if (Object.isElement(wrapper))
+      $(wrapper).writeAttribute(attributes || { });
+    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+    else wrapper = new Element(&amp;#39;div&amp;#39;, wrapper);
+    if (element.parentNode)
+      element.parentNode.replaceChild(wrapper, element);
+    wrapper.appendChild(element);
+    return wrapper;
+  },
+
+  inspect: function(element) {
+    element = $(element);
+    var result = &amp;#39;&amp;lt;&amp;#39; + element.tagName.toLowerCase();
+    $H({&amp;#39;id&amp;#39;: &amp;#39;id&amp;#39;, &amp;#39;className&amp;#39;: &amp;#39;class&amp;#39;}).each(function(pair) {
+      var property = pair.first(), attribute = pair.last();
+      var value = (element[property] || &amp;#39;&amp;#39;).toString();
+      if (value) result += &amp;#39; &amp;#39; + attribute + &amp;#39;=&amp;#39; + value.inspect(true);
+    });
+    return result + &amp;#39;&amp;gt;&amp;#39;;
+  },
+
+  recursivelyCollect: function(element, property) {
+    element = $(element);
+    var elements = [];
+    while (element = element[property])
+      if (element.nodeType == 1)
+        elements.push(Element.extend(element));
+    return elements;
+  },
+
+  ancestors: function(element) {
+    return $(element).recursivelyCollect(&amp;#39;parentNode&amp;#39;);
+  },
+
+  descendants: function(element) {
+    return $(element).select(&amp;quot;*&amp;quot;);
+  },
+
+  firstDescendant: function(element) {
+    element = $(element).firstChild;
+    while (element &amp;amp;&amp;amp; element.nodeType != 1) element = element.nextSibling;
+    return $(element);
+  },
+
+  immediateDescendants: function(element) {
+    if (!(element = $(element).firstChild)) return [];
+    while (element &amp;amp;&amp;amp; element.nodeType != 1) element = element.nextSibling;
+    if (element) return [element].concat($(element).nextSiblings());
+    return [];
+  },
+
+  previousSiblings: function(element) {
+    return $(element).recursivelyCollect(&amp;#39;previousSibling&amp;#39;);
+  },
+
+  nextSiblings: function(element) {
+    return $(element).recursivelyCollect(&amp;#39;nextSibling&amp;#39;);
+  },
+
+  siblings: function(element) {
+    element = $(element);
+    return element.previousSiblings().reverse().concat(element.nextSiblings());
+  },
+
+  match: function(element, selector) {
+    if (Object.isString(selector))
+      selector = new Selector(selector);
+    return selector.match($(element));
+  },
+
+  up: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(element.parentNode);
+    var ancestors = element.ancestors();
+    return Object.isNumber(expression) ? ancestors[expression] :
+      Selector.findElement(ancestors, expression, index);
+  },
+
+  down: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return element.firstDescendant();
+    return Object.isNumber(expression) ? element.descendants()[expression] :
+      Element.select(element, expression)[index || 0];
+  },
+
+  previous: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+    var previousSiblings = element.previousSiblings();
+    return Object.isNumber(expression) ? previousSiblings[expression] :
+      Selector.findElement(previousSiblings, expression, index);
+  },
+
+  next: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+    var nextSiblings = element.nextSiblings();
+    return Object.isNumber(expression) ? nextSiblings[expression] :
+      Selector.findElement(nextSiblings, expression, index);
+  },
+
+  select: function() {
+    var args = $A(arguments), element = $(args.shift());
+    return Selector.findChildElements(element, args);
+  },
+
+  adjacent: function() {
+    var args = $A(arguments), element = $(args.shift());
+    return Selector.findChildElements(element.parentNode, args).without(element);
+  },
+
+  identify: function(element) {
+    element = $(element);
+    var id = element.readAttribute(&amp;#39;id&amp;#39;), self = arguments.callee;
+    if (id) return id;
+    do { id = &amp;#39;anonymous_element_&amp;#39; + self.counter++ } while ($(id));
+    element.writeAttribute(&amp;#39;id&amp;#39;, id);
+    return id;
+  },
+
+  readAttribute: function(element, name) {
+    element = $(element);
+    if (Prototype.Browser.IE) {
+      var t = Element._attributeTranslations.read;
+      if (t.values[name]) return t.values[name](element, name);
+      if (t.names[name]) name = t.names[name];
+      if (name.include(&amp;#39;:&amp;#39;)) {
+        return (!element.attributes || !element.attributes[name]) ? null :
+         element.attributes[name].value;
+      }
+    }
+    return element.getAttribute(name);
+  },
+
+  writeAttribute: function(element, name, value) {
+    element = $(element);
+    var attributes = { }, t = Element._attributeTranslations.write;
+
+    if (typeof name == &amp;#39;object&amp;#39;) attributes = name;
+    else attributes[name] = Object.isUndefined(value) ? true : value;
+
+    for (var attr in attributes) {
+      name = t.names[attr] || attr;
+      value = attributes[attr];
+      if (t.values[attr]) name = t.values[attr](element, value);
+      if (value === false || value === null)
+        element.removeAttribute(name);
+      else if (value === true)
+        element.setAttribute(name, name);
+      else element.setAttribute(name, value);
+    }
+    return element;
+  },
+
+  getHeight: function(element) {
+    return $(element).getDimensions().height;
+  },
+
+  getWidth: function(element) {
+    return $(element).getDimensions().width;
+  },
+
+  classNames: function(element) {
+    return new Element.ClassNames(element);
+  },
+
+  hasClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    var elementClassName = element.className;
+    return (elementClassName.length &amp;gt; 0 &amp;amp;&amp;amp; (elementClassName == className ||
+      new RegExp(&amp;quot;(^|\\s)&amp;quot; + className + &amp;quot;(\\s|$)&amp;quot;).test(elementClassName)));
+  },
+
+  addClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    if (!element.hasClassName(className))
+      element.className += (element.className ? &amp;#39; &amp;#39; : &amp;#39;&amp;#39;) + className;
+    return element;
+  },
+
+  removeClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    element.className = element.className.replace(
+      new RegExp(&amp;quot;(^|\\s+)&amp;quot; + className + &amp;quot;(\\s+|$)&amp;quot;), &amp;#39; &amp;#39;).strip();
+    return element;
+  },
+
+  toggleClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    return element[element.hasClassName(className) ?
+      &amp;#39;removeClassName&amp;#39; : &amp;#39;addClassName&amp;#39;](className);
+  },
+
+  // removes whitespace-only text node children
+  cleanWhitespace: function(element) {
+    element = $(element);
+    var node = element.firstChild;
+    while (node) {
+      var nextNode = node.nextSibling;
+      if (node.nodeType == 3 &amp;amp;&amp;amp; !/\S/.test(node.nodeValue))
+        element.removeChild(node);
+      node = nextNode;
+    }
+    return element;
+  },
+
+  empty: function(element) {
+    return $(element).innerHTML.blank();
+  },
+
+  descendantOf: function(element, ancestor) {
+    element = $(element), ancestor = $(ancestor);
+
+    if (element.compareDocumentPosition)
+      return (element.compareDocumentPosition(ancestor) &amp;amp; 8) === 8;
+
+    if (ancestor.contains)
+      return ancestor.contains(element) &amp;amp;&amp;amp; ancestor !== element;
+
+    while (element = element.parentNode)
+      if (element == ancestor) return true;
+
+    return false;
+  },
+
+  scrollTo: function(element) {
+    element = $(element);
+    var pos = element.cumulativeOffset();
+    window.scrollTo(pos[0], pos[1]);
+    return element;
+  },
+
+  getStyle: function(element, style) {
+    element = $(element);
+    style = style == &amp;#39;float&amp;#39; ? &amp;#39;cssFloat&amp;#39; : style.camelize();
+    var value = element.style[style];
+    if (!value || value == &amp;#39;auto&amp;#39;) {
+      var css = document.defaultView.getComputedStyle(element, null);
+      value = css ? css[style] : null;
+    }
+    if (style == &amp;#39;opacity&amp;#39;) return value ? parseFloat(value) : 1.0;
+    return value == &amp;#39;auto&amp;#39; ? null : value;
+  },
+
+  getOpacity: function(element) {
+    return $(element).getStyle(&amp;#39;opacity&amp;#39;);
+  },
+
+  setStyle: function(element, styles) {
+    element = $(element);
+    var elementStyle = element.style, match;
+    if (Object.isString(styles)) {
+      element.style.cssText += &amp;#39;;&amp;#39; + styles;
+      return styles.include(&amp;#39;opacity&amp;#39;) ?
+        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+    }
+    for (var property in styles)
+      if (property == &amp;#39;opacity&amp;#39;) element.setOpacity(styles[property]);
+      else
+        elementStyle[(property == &amp;#39;float&amp;#39; || property == &amp;#39;cssFloat&amp;#39;) ?
+          (Object.isUndefined(elementStyle.styleFloat) ? &amp;#39;cssFloat&amp;#39; : &amp;#39;styleFloat&amp;#39;) :
+            property] = styles[property];
+
+    return element;
+  },
+
+  setOpacity: function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1 || value === &amp;#39;&amp;#39;) ? &amp;#39;&amp;#39; :
+      (value &amp;lt; 0.00001) ? 0 : value;
+    return element;
+  },
+
+  getDimensions: function(element) {
+    element = $(element);
+    var display = element.getStyle(&amp;#39;display&amp;#39;);
+    if (display != &amp;#39;none&amp;#39; &amp;amp;&amp;amp; display != null) // Safari bug
+      return {width: element.offsetWidth, height: element.offsetHeight};
+
+    // All *Width and *Height properties give 0 on elements with display none,
+    // so enable the element temporarily
+    var els = element.style;
+    var originalVisibility = els.visibility;
+    var originalPosition = els.position;
+    var originalDisplay = els.display;
+    els.visibility = &amp;#39;hidden&amp;#39;;
+    els.position = &amp;#39;absolute&amp;#39;;
+    els.display = &amp;#39;block&amp;#39;;
+    var originalWidth = element.clientWidth;
+    var originalHeight = element.clientHeight;
+    els.display = originalDisplay;
+    els.position = originalPosition;
+    els.visibility = originalVisibility;
+    return {width: originalWidth, height: originalHeight};
+  },
+
+  makePositioned: function(element) {
+    element = $(element);
+    var pos = Element.getStyle(element, &amp;#39;position&amp;#39;);
+    if (pos == &amp;#39;static&amp;#39; || !pos) {
+      element._madePositioned = true;
+      element.style.position = &amp;#39;relative&amp;#39;;
+      // Opera returns the offset relative to the positioning context, when an
+      // element is position relative but top and left have not been defined
+      if (Prototype.Browser.Opera) {
+        element.style.top = 0;
+        element.style.left = 0;
+      }
+    }
+    return element;
+  },
+
+  undoPositioned: function(element) {
+    element = $(element);
+    if (element._madePositioned) {
+      element._madePositioned = undefined;
+      element.style.position =
+        element.style.top =
+        element.style.left =
+        element.style.bottom =
+        element.style.right = &amp;#39;&amp;#39;;
+    }
+    return element;
+  },
+
+  makeClipping: function(element) {
+    element = $(element);
+    if (element._overflow) return element;
+    element._overflow = Element.getStyle(element, &amp;#39;overflow&amp;#39;) || &amp;#39;auto&amp;#39;;
+    if (element._overflow !== &amp;#39;hidden&amp;#39;)
+      element.style.overflow = &amp;#39;hidden&amp;#39;;
+    return element;
+  },
+
+  undoClipping: function(element) {
+    element = $(element);
+    if (!element._overflow) return element;
+    element.style.overflow = element._overflow == &amp;#39;auto&amp;#39; ? &amp;#39;&amp;#39; : element._overflow;
+    element._overflow = null;
+    return element;
+  },
+
+  cumulativeOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  positionedOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        if (element.tagName.toUpperCase() == &amp;#39;BODY&amp;#39;) break;
+        var p = Element.getStyle(element, &amp;#39;position&amp;#39;);
+        if (p !== &amp;#39;static&amp;#39;) break;
+      }
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  absolutize: function(element) {
+    element = $(element);
+    if (element.getStyle(&amp;#39;position&amp;#39;) == &amp;#39;absolute&amp;#39;) return element;
+    // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+    var offsets = element.positionedOffset();
+    var top     = offsets[1];
+    var left    = offsets[0];
+    var width   = element.clientWidth;
+    var height  = element.clientHeight;
+
+    element._originalLeft   = left - parseFloat(element.style.left  || 0);
+    element._originalTop    = top  - parseFloat(element.style.top || 0);
+    element._originalWidth  = element.style.width;
+    element._originalHeight = element.style.height;
+
+    element.style.position = &amp;#39;absolute&amp;#39;;
+    element.style.top    = top + &amp;#39;px&amp;#39;;
+    element.style.left   = left + &amp;#39;px&amp;#39;;
+    element.style.width  = width + &amp;#39;px&amp;#39;;
+    element.style.height = height + &amp;#39;px&amp;#39;;
+    return element;
+  },
+
+  relativize: function(element) {
+    element = $(element);
+    if (element.getStyle(&amp;#39;position&amp;#39;) == &amp;#39;relative&amp;#39;) return element;
+    // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+    element.style.position = &amp;#39;relative&amp;#39;;
+    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
+    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+    element.style.top    = top + &amp;#39;px&amp;#39;;
+    element.style.left   = left + &amp;#39;px&amp;#39;;
+    element.style.height = element._originalHeight;
+    element.style.width  = element._originalWidth;
+    return element;
+  },
+
+  cumulativeScrollOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.scrollTop  || 0;
+      valueL += element.scrollLeft || 0;
+      element = element.parentNode;
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  getOffsetParent: function(element) {
+    if (element.offsetParent) return $(element.offsetParent);
+    if (element == document.body) return $(element);
+
+    while ((element = element.parentNode) &amp;amp;&amp;amp; element != document.body)
+      if (Element.getStyle(element, &amp;#39;position&amp;#39;) != &amp;#39;static&amp;#39;)
+        return $(element);
+
+    return $(document.body);
+  },
+
+  viewportOffset: function(forElement) {
+    var valueT = 0, valueL = 0;
+
+    var element = forElement;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+
+      // Safari fix
+      if (element.offsetParent == document.body &amp;amp;&amp;amp;
+        Element.getStyle(element, &amp;#39;position&amp;#39;) == &amp;#39;absolute&amp;#39;) break;
+
+    } while (element = element.offsetParent);
+
+    element = forElement;
+    do {
+      if (!Prototype.Browser.Opera || (element.tagName &amp;amp;&amp;amp; (element.tagName.toUpperCase() == &amp;#39;BODY&amp;#39;))) {
+        valueT -= element.scrollTop  || 0;
+        valueL -= element.scrollLeft || 0;
+      }
+    } while (element = element.parentNode);
+
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  clonePosition: function(element, source) {
+    var options = Object.extend({
+      setLeft:    true,
+      setTop:     true,
+      setWidth:   true,
+      setHeight:  true,
+      offsetTop:  0,
+      offsetLeft: 0
+    }, arguments[2] || { });
+
+    // find page position of source
+    source = $(source);
+    var p = source.viewportOffset();
+
+    // find coordinate system to use
+    element = $(element);
+    var delta = [0, 0];
+    var parent = null;
+    // delta [0,0] will do fine with position: fixed elements,
+    // position:absolute needs offsetParent deltas
+    if (Element.getStyle(element, &amp;#39;position&amp;#39;) == &amp;#39;absolute&amp;#39;) {
+      parent = element.getOffsetParent();
+      delta = parent.viewportOffset();
+    }
+
+    // correct by body offsets (fixes Safari)
+    if (parent == document.body) {
+      delta[0] -= document.body.offsetLeft;
+      delta[1] -= document.body.offsetTop;
+    }
+
+    // set position
+    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + &amp;#39;px&amp;#39;;
+    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + &amp;#39;px&amp;#39;;
+    if (options.setWidth)  element.style.width = source.offsetWidth + &amp;#39;px&amp;#39;;
+    if (options.setHeight) element.style.height = source.offsetHeight + &amp;#39;px&amp;#39;;
+    return element;
+  }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+  getElementsBySelector: Element.Methods.select,
+  childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+  write: {
+    names: {
+      className: &amp;#39;class&amp;#39;,
+      htmlFor:   &amp;#39;for&amp;#39;
+    },
+    values: { }
+  }
+};
+
+if (Prototype.Browser.Opera) {
+  Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+    function(proceed, element, style) {
+      switch (style) {
+        case &amp;#39;left&amp;#39;: case &amp;#39;top&amp;#39;: case &amp;#39;right&amp;#39;: case &amp;#39;bottom&amp;#39;:
+          if (proceed(element, &amp;#39;position&amp;#39;) === &amp;#39;static&amp;#39;) return null;
+        case &amp;#39;height&amp;#39;: case &amp;#39;width&amp;#39;:
+          // returns &amp;#39;0px&amp;#39; for hidden elements; we want it to return null
+          if (!Element.visible(element)) return null;
+
+          // returns the border-box dimensions rather than the content-box
+          // dimensions, so we subtract padding and borders from the value
+          var dim = parseInt(proceed(element, style), 10);
+
+          if (dim !== element[&amp;#39;offset&amp;#39; + style.capitalize()])
+            return dim + &amp;#39;px&amp;#39;;
+
+          var properties;
+          if (style === &amp;#39;height&amp;#39;) {
+            properties = [&amp;#39;border-top-width&amp;#39;, &amp;#39;padding-top&amp;#39;,
+             &amp;#39;padding-bottom&amp;#39;, &amp;#39;border-bottom-width&amp;#39;];
+          }
+          else {
+            properties = [&amp;#39;border-left-width&amp;#39;, &amp;#39;padding-left&amp;#39;,
+             &amp;#39;padding-right&amp;#39;, &amp;#39;border-right-width&amp;#39;];
+          }
+          return properties.inject(dim, function(memo, property) {
+            var val = proceed(element, property);
+            return val === null ? memo : memo - parseInt(val, 10);
+          }) + &amp;#39;px&amp;#39;;
+        default: return proceed(element, style);
+      }
+    }
+  );
+
+  Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+    function(proceed, element, attribute) {
+      if (attribute === &amp;#39;title&amp;#39;) return element.title;
+      return proceed(element, attribute);
+    }
+  );
+}
+
+else if (Prototype.Browser.IE) {
+  // IE doesn&amp;#39;t report offsets correctly for static elements, so we change them
+  // to &amp;quot;relative&amp;quot; to get the values, then change them back.
+  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+    function(proceed, element) {
+      element = $(element);
+      // IE throws an error if element is not in document
+      try { element.offsetParent }
+      catch(e) { return $(document.body) }
+      var position = element.getStyle(&amp;#39;position&amp;#39;);
+      if (position !== &amp;#39;static&amp;#39;) return proceed(element);
+      element.setStyle({ position: &amp;#39;relative&amp;#39; });
+      var value = proceed(element);
+      element.setStyle({ position: position });
+      return value;
+    }
+  );
+
+  $w(&amp;#39;positionedOffset viewportOffset&amp;#39;).each(function(method) {
+    Element.Methods[method] = Element.Methods[method].wrap(
+      function(proceed, element) {
+        element = $(element);
+        try { element.offsetParent }
+        catch(e) { return Element._returnOffset(0,0) }
+        var position = element.getStyle(&amp;#39;position&amp;#39;);
+        if (position !== &amp;#39;static&amp;#39;) return proceed(element);
+        // Trigger hasLayout on the offset parent so that IE6 reports
+        // accurate offsetTop and offsetLeft values for position: fixed.
+        var offsetParent = element.getOffsetParent();
+        if (offsetParent &amp;amp;&amp;amp; offsetParent.getStyle(&amp;#39;position&amp;#39;) === &amp;#39;fixed&amp;#39;)
+          offsetParent.setStyle({ zoom: 1 });
+        element.setStyle({ position: &amp;#39;relative&amp;#39; });
+        var value = proceed(element);
+        element.setStyle({ position: position });
+        return value;
+      }
+    );
+  });
+
+  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+    function(proceed, element) {
+      try { element.offsetParent }
+      catch(e) { return Element._returnOffset(0,0) }
+      return proceed(element);
+    }
+  );
+
+  Element.Methods.getStyle = function(element, style) {
+    element = $(element);
+    style = (style == &amp;#39;float&amp;#39; || style == &amp;#39;cssFloat&amp;#39;) ? &amp;#39;styleFloat&amp;#39; : style.camelize();
+    var value = element.style[style];
+    if (!value &amp;amp;&amp;amp; element.currentStyle) value = element.currentStyle[style];
+
+    if (style == &amp;#39;opacity&amp;#39;) {
+      if (value = (element.getStyle(&amp;#39;filter&amp;#39;) || &amp;#39;&amp;#39;).match(/alpha\(opacity=(.*)\)/))
+        if (value[1]) return parseFloat(value[1]) / 100;
+      return 1.0;
+    }
+
+    if (value == &amp;#39;auto&amp;#39;) {
+      if ((style == &amp;#39;width&amp;#39; || style == &amp;#39;height&amp;#39;) &amp;amp;&amp;amp; (element.getStyle(&amp;#39;display&amp;#39;) != &amp;#39;none&amp;#39;))
+        return element[&amp;#39;offset&amp;#39; + style.capitalize()] + &amp;#39;px&amp;#39;;
+      return null;
+    }
+    return value;
+  };
+
+  Element.Methods.setOpacity = function(element, value) {
+    function stripAlpha(filter){
+      return filter.replace(/alpha\([^\)]*\)/gi,&amp;#39;&amp;#39;);
+    }
+    element = $(element);
+    var currentStyle = element.currentStyle;
+    if ((currentStyle &amp;amp;&amp;amp; !currentStyle.hasLayout) ||
+      (!currentStyle &amp;amp;&amp;amp; element.style.zoom == &amp;#39;normal&amp;#39;))
+        element.style.zoom = 1;
+
+    var filter = element.getStyle(&amp;#39;filter&amp;#39;), style = element.style;
+    if (value == 1 || value === &amp;#39;&amp;#39;) {
+      (filter = stripAlpha(filter)) ?
+        style.filter = filter : style.removeAttribute(&amp;#39;filter&amp;#39;);
+      return element;
+    } else if (value &amp;lt; 0.00001) value = 0;
+    style.filter = stripAlpha(filter) +
+      &amp;#39;alpha(opacity=&amp;#39; + (value * 100) + &amp;#39;)&amp;#39;;
+    return element;
+  };
+
+  Element._attributeTranslations = {
+    read: {
+      names: {
+        &amp;#39;class&amp;#39;: &amp;#39;className&amp;#39;,
+        &amp;#39;for&amp;#39;:   &amp;#39;htmlFor&amp;#39;
+      },
+      values: {
+        _getAttr: function(element, attribute) {
+          return element.getAttribute(attribute, 2);
+        },
+        _getAttrNode: function(element, attribute) {
+          var node = element.getAttributeNode(attribute);
+          return node ? node.value : &amp;quot;&amp;quot;;
+        },
+        _getEv: function(element, attribute) {
+          attribute = element.getAttribute(attribute);
+          return attribute ? attribute.toString().slice(23, -2) : null;
+        },
+        _flag: function(element, attribute) {
+          return $(element).hasAttribute(attribute) ? attribute : null;
+        },
+        style: function(element) {
+          return element.style.cssText.toLowerCase();
+        },
+        title: function(element) {
+          return element.title;
+        }
+      }
+    }
+  };
+
+  Element._attributeTranslations.write = {
+    names: Object.extend({
+      cellpadding: &amp;#39;cellPadding&amp;#39;,
+      cellspacing: &amp;#39;cellSpacing&amp;#39;
+    }, Element._attributeTranslations.read.names),
+    values: {
+      checked: function(element, value) {
+        element.checked = !!value;
+      },
+
+      style: function(element, value) {
+        element.style.cssText = value ? value : &amp;#39;&amp;#39;;
+      }
+    }
+  };
+
+  Element._attributeTranslations.has = {};
+
+  $w(&amp;#39;colSpan rowSpan vAlign dateTime accessKey tabIndex &amp;#39; +
+      &amp;#39;encType maxLength readOnly longDesc frameBorder&amp;#39;).each(function(attr) {
+    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+  });
+
+  (function(v) {
+    Object.extend(v, {
+      href:        v._getAttr,
+      src:         v._getAttr,
+      type:        v._getAttr,
+      action:      v._getAttrNode,
+      disabled:    v._flag,
+      checked:     v._flag,
+      readonly:    v._flag,
+      multiple:    v._flag,
+      onload:      v._getEv,
+      onunload:    v._getEv,
+      onclick:     v._getEv,
+      ondblclick:  v._getEv,
+      onmousedown: v._getEv,
+      onmouseup:   v._getEv,
+      onmouseover: v._getEv,
+      onmousemove: v._getEv,
+      onmouseout:  v._getEv,
+      onfocus:     v._getEv,
+      onblur:      v._getEv,
+      onkeypress:  v._getEv,
+      onkeydown:   v._getEv,
+      onkeyup:     v._getEv,
+      onsubmit:    v._getEv,
+      onreset:     v._getEv,
+      onselect:    v._getEv,
+      onchange:    v._getEv
+    });
+  })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko &amp;amp;&amp;amp; /rv:1\.8\.0/.test(navigator.userAgent)) {
+  Element.Methods.setOpacity = function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1) ? 0.999999 :
+      (value === &amp;#39;&amp;#39;) ? &amp;#39;&amp;#39; : (value &amp;lt; 0.00001) ? 0 : value;
+    return element;
+  };
+}
+
+else if (Prototype.Browser.WebKit) {
+  Element.Methods.setOpacity = function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1 || value === &amp;#39;&amp;#39;) ? &amp;#39;&amp;#39; :
+      (value &amp;lt; 0.00001) ? 0 : value;
+
+    if (value == 1)
+      if(element.tagName.toUpperCase() == &amp;#39;IMG&amp;#39; &amp;amp;&amp;amp; element.width) {
+        element.width++; element.width--;
+      } else try {
+        var n = document.createTextNode(&amp;#39; &amp;#39;);
+        element.appendChild(n);
+        element.removeChild(n);
+      } catch (e) { }
+
+    return element;
+  };
+
+  // Safari returns margins on body which is incorrect if the child is absolutely
+  // positioned.  For performance reasons, redefine Element#cumulativeOffset for
+  // KHTML/WebKit only.
+  Element.Methods.cumulativeOffset = function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      if (element.offsetParent == document.body)
+        if (Element.getStyle(element, &amp;#39;position&amp;#39;) == &amp;#39;absolute&amp;#39;) break;
+
+      element = element.offsetParent;
+    } while (element);
+
+    return Element._returnOffset(valueL, valueT);
+  };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+  Element.Methods.update = function(element, content) {
+    element = $(element);
+
+    if (content &amp;amp;&amp;amp; content.toElement) content = content.toElement();
+    if (Object.isElement(content)) return element.update().insert(content);
+
+    content = Object.toHTML(content);
+    var tagName = element.tagName.toUpperCase();
+
+    if (tagName in Element._insertionTranslations.tags) {
+      $A(element.childNodes).each(function(node) { element.removeChild(node) });
+      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+        .each(function(node) { element.appendChild(node) });
+    }
+    else element.innerHTML = content.stripScripts();
+
+    content.evalScripts.bind(content).defer();
+    return element;
+  };
+}
+
+if (&amp;#39;outerHTML&amp;#39; in document.createElement(&amp;#39;div&amp;#39;)) {
+  Element.Methods.replace = function(element, content) {
+    element = $(element);
+
+    if (content &amp;amp;&amp;amp; content.toElement) content = content.toElement();
+    if (Object.isElement(content)) {
+      element.parentNode.replaceChild(content, element);
+      return element;
+    }
+
+    content = Object.toHTML(content);
+    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+    if (Element._insertionTranslations.tags[tagName]) {
+      var nextSibling = element.next();
+      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+      parent.removeChild(element);
+      if (nextSibling)
+        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+      else
+        fragments.each(function(node) { parent.appendChild(node) });
+    }
+    else element.outerHTML = content.stripScripts();
+
+    content.evalScripts.bind(content).defer();
+    return element;
+  };
+}
+
+Element._returnOffset = function(l, t) {
+  var result = [l, t];
+  result.left = l;
+  result.top = t;
+  return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+  var div = new Element(&amp;#39;div&amp;#39;), t = Element._insertionTranslations.tags[tagName];
+  if (t) {
+    div.innerHTML = t[0] + html + t[1];
+    t[2].times(function() { div = div.firstChild });
+  } else div.innerHTML = html;
+  return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+  before: function(element, node) {
+    element.parentNode.insertBefore(node, element);
+  },
+  top: function(element, node) {
+    element.insertBefore(node, element.firstChild);
+  },
+  bottom: function(element, node) {
+    element.appendChild(node);
+  },
+  after: function(element, node) {
+    element.parentNode.insertBefore(node, element.nextSibling);
+  },
+  tags: {
+    TABLE:  [&amp;#39;&amp;lt;table&amp;gt;&amp;#39;,                &amp;#39;&amp;lt;/table&amp;gt;&amp;#39;,                   1],
+    TBODY:  [&amp;#39;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;#39;,         &amp;#39;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;#39;,           2],
+    TR:     [&amp;#39;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;#39;,     &amp;#39;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;#39;,      3],
+    TD:     [&amp;#39;&amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#39;, &amp;#39;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;#39;, 4],
+    SELECT: [&amp;#39;&amp;lt;select&amp;gt;&amp;#39;,               &amp;#39;&amp;lt;/select&amp;gt;&amp;#39;,                  1]
+  }
+};
+
+(function() {
+  Object.extend(this.tags, {
+    THEAD: this.tags.TBODY,
+    TFOOT: this.tags.TBODY,
+    TH:    this.tags.TD
+  });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+  hasAttribute: function(element, attribute) {
+    attribute = Element._attributeTranslations.has[attribute] || attribute;
+    var node = $(element).getAttributeNode(attribute);
+    return !!(node &amp;amp;&amp;amp; node.specified);
+  }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &amp;amp;&amp;amp;
+    document.createElement(&amp;#39;div&amp;#39;)[&amp;#39;__proto__&amp;#39;]) {
+  window.HTMLElement = { };
+  window.HTMLElement.prototype = document.createElement(&amp;#39;div&amp;#39;)[&amp;#39;__proto__&amp;#39;];
+  Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+  if (Prototype.BrowserFeatures.SpecificElementExtensions)
+    return Prototype.K;
+
+  var Methods = { }, ByTag = Element.Methods.ByTag;
+
+  var extend = Object.extend(function(element) {
+    if (!element || element._extendedByPrototype ||
+        element.nodeType != 1 || element == window) return element;
+
+    var methods = Object.clone(Methods),
+      tagName = element.tagName.toUpperCase(), property, value;
+
+    // extend methods for specific tags
+    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+    for (property in methods) {
+      value = methods[property];
+      if (Object.isFunction(value) &amp;amp;&amp;amp; !(property in element))
+        element[property] = value.methodize();
+    }
+
+    element._extendedByPrototype = Prototype.emptyFunction;
+    return element;
+
+  }, {
+    refresh: function() {
+      // extend methods for all tags (Safari doesn&amp;#39;t need this)
+      if (!Prototype.BrowserFeatures.ElementExtensions) {
+        Object.extend(Methods, Element.Methods);
+        Object.extend(Methods, Element.Methods.Simulated);
+      }
+    }
+  });
+
+  extend.refresh();
+  return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+  if (element.hasAttribute) return element.hasAttribute(attribute);
+  return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+  if (!methods) {
+    Object.extend(Form, Form.Methods);
+    Object.extend(Form.Element, Form.Element.Methods);
+    Object.extend(Element.Methods.ByTag, {
+      &amp;quot;FORM&amp;quot;:     Object.clone(Form.Methods),
+      &amp;quot;INPUT&amp;quot;:    Object.clone(Form.Element.Methods),
+      &amp;quot;SELECT&amp;quot;:   Object.clone(Form.Element.Methods),
+      &amp;quot;TEXTAREA&amp;quot;: Object.clone(Form.Element.Methods)
+    });
+  }
+
+  if (arguments.length == 2) {
+    var tagName = methods;
+    methods = arguments[1];
+  }
+
+  if (!tagName) Object.extend(Element.Methods, methods || { });
+  else {
+    if (Object.isArray(tagName)) tagName.each(extend);
+    else extend(tagName);
+  }
+
+  function extend(tagName) {
+    tagName = tagName.toUpperCase();
+    if (!Element.Methods.ByTag[tagName])
+      Element.Methods.ByTag[tagName] = { };
+    Object.extend(Element.Methods.ByTag[tagName], methods);
+  }
+
+  function copy(methods, destination, onlyIfAbsent) {
+    onlyIfAbsent = onlyIfAbsent || false;
+    for (var property in methods) {
+      var value = methods[property];
+      if (!Object.isFunction(value)) continue;
+      if (!onlyIfAbsent || !(property in destination))
+        destination[property] = value.methodize();
+    }
+  }
+
+  function findDOMClass(tagName) {
+    var klass;
+    var trans = {
+      &amp;quot;OPTGROUP&amp;quot;: &amp;quot;OptGroup&amp;quot;, &amp;quot;TEXTAREA&amp;quot;: &amp;quot;TextArea&amp;quot;, &amp;quot;P&amp;quot;: &amp;quot;Paragraph&amp;quot;,
+      &amp;quot;FIELDSET&amp;quot;: &amp;quot;FieldSet&amp;quot;, &amp;quot;UL&amp;quot;: &amp;quot;UList&amp;quot;, &amp;quot;OL&amp;quot;: &amp;quot;OList&amp;quot;, &amp;quot;DL&amp;quot;: &amp;quot;DList&amp;quot;,
+      &amp;quot;DIR&amp;quot;: &amp;quot;Directory&amp;quot;, &amp;quot;H1&amp;quot;: &amp;quot;Heading&amp;quot;, &amp;quot;H2&amp;quot;: &amp;quot;Heading&amp;quot;, &amp;quot;H3&amp;quot;: &amp;quot;Heading&amp;quot;,
+      &amp;quot;H4&amp;quot;: &amp;quot;Heading&amp;quot;, &amp;quot;H5&amp;quot;: &amp;quot;Heading&amp;quot;, &amp;quot;H6&amp;quot;: &amp;quot;Heading&amp;quot;, &amp;quot;Q&amp;quot;: &amp;quot;Quote&amp;quot;,
+      &amp;quot;INS&amp;quot;: &amp;quot;Mod&amp;quot;, &amp;quot;DEL&amp;quot;: &amp;quot;Mod&amp;quot;, &amp;quot;A&amp;quot;: &amp;quot;Anchor&amp;quot;, &amp;quot;IMG&amp;quot;: &amp;quot;Image&amp;quot;, &amp;quot;CAPTION&amp;quot;:
+      &amp;quot;TableCaption&amp;quot;, &amp;quot;COL&amp;quot;: &amp;quot;TableCol&amp;quot;, &amp;quot;COLGROUP&amp;quot;: &amp;quot;TableCol&amp;quot;, &amp;quot;THEAD&amp;quot;:
+      &amp;quot;TableSection&amp;quot;, &amp;quot;TFOOT&amp;quot;: &amp;quot;TableSection&amp;quot;, &amp;quot;TBODY&amp;quot;: &amp;quot;TableSection&amp;quot;, &amp;quot;TR&amp;quot;:
+      &amp;quot;TableRow&amp;quot;, &amp;quot;TH&amp;quot;: &amp;quot;TableCell&amp;quot;, &amp;quot;TD&amp;quot;: &amp;quot;TableCell&amp;quot;, &amp;quot;FRAMESET&amp;quot;:
+      &amp;quot;FrameSet&amp;quot;, &amp;quot;IFRAME&amp;quot;: &amp;quot;IFrame&amp;quot;
+    };
+    if (trans[tagName]) klass = &amp;#39;HTML&amp;#39; + trans[tagName] + &amp;#39;Element&amp;#39;;
+    if (window[klass]) return window[klass];
+    klass = &amp;#39;HTML&amp;#39; + tagName + &amp;#39;Element&amp;#39;;
+    if (window[klass]) return window[klass];
+    klass = &amp;#39;HTML&amp;#39; + tagName.capitalize() + &amp;#39;Element&amp;#39;;
+    if (window[klass]) return window[klass];
+
+    window[klass] = { };
+    window[klass].prototype = document.createElement(tagName)[&amp;#39;__proto__&amp;#39;];
+    return window[klass];
+  }
+
+  if (F.ElementExtensions) {
+    copy(Element.Methods, HTMLElement.prototype);
+    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+  }
+
+  if (F.SpecificElementExtensions) {
+    for (var tag in Element.Methods.ByTag) {
+      var klass = findDOMClass(tag);
+      if (Object.isUndefined(klass)) continue;
+      copy(T[tag], klass.prototype);
+    }
+  }
+
+  Object.extend(Element, Element.Methods);
+  delete Element.ByTag;
+
+  if (Element.extend.refresh) Element.extend.refresh();
+  Element.cache = { };
+};
+
+document.viewport = {
+  getDimensions: function() {
+    var dimensions = { }, B = Prototype.Browser;
+    $w(&amp;#39;width height&amp;#39;).each(function(d) {
+      var D = d.capitalize();
+      if (B.WebKit &amp;amp;&amp;amp; !document.evaluate) {
+        // Safari &amp;lt;3.0 needs self.innerWidth/Height
+        dimensions[d] = self[&amp;#39;inner&amp;#39; + D];
+      } else if (B.Opera &amp;amp;&amp;amp; parseFloat(window.opera.version()) &amp;lt; 9.5) {
+        // Opera &amp;lt;9.5 needs document.body.clientWidth/Height
+        dimensions[d] = document.body[&amp;#39;client&amp;#39; + D]
+      } else {
+        dimensions[d] = document.documentElement[&amp;#39;client&amp;#39; + D];
+      }
+    });
+    return dimensions;
+  },
+
+  getWidth: function() {
+    return this.getDimensions().width;
+  },
+
+  getHeight: function() {
+    return this.getDimensions().height;
+  },
+
+  getScrollOffsets: function() {
+    return Element._returnOffset(
+      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+  }
+};
+/* Portions of the Selector class are derived from Jack Slocum&amp;#39;s DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license.  Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+  initialize: function(expression) {
+    this.expression = expression.strip();
+
+    if (this.shouldUseSelectorsAPI()) {
+      this.mode = &amp;#39;selectorsAPI&amp;#39;;
+    } else if (this.shouldUseXPath()) {
+      this.mode = &amp;#39;xpath&amp;#39;;
+      this.compileXPathMatcher();
+    } else {
+      this.mode = &amp;quot;normal&amp;quot;;
+      this.compileMatcher();
+    }
+
+  },
+
+  shouldUseXPath: function() {
+    if (!Prototype.BrowserFeatures.XPath) return false;
+
+    var e = this.expression;
+
+    // Safari 3 chokes on :*-of-type and :empty
+    if (Prototype.Browser.WebKit &amp;amp;&amp;amp;
+     (e.include(&amp;quot;-of-type&amp;quot;) || e.include(&amp;quot;:empty&amp;quot;)))
+      return false;
+
+    // XPath can&amp;#39;t do namespaced attributes, nor can it read
+    // the &amp;quot;checked&amp;quot; property from DOM nodes
+    if ((/(\[[\w-]*?:|:checked)/).test(e))
+      return false;
+
+    return true;
+  },
+
+  shouldUseSelectorsAPI: function() {
+    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+    if (!Selector._div) Selector._div = new Element(&amp;#39;div&amp;#39;);
+
+    // Make sure the browser treats the selector as valid. Test on an
+    // isolated element to minimize cost of this check.
+    try {
+      Selector._div.querySelector(this.expression);
+    } catch(e) {
+      return false;
+    }
+
+    return true;
+  },
+
+  compileMatcher: function() {
+    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+        c = Selector.criteria, le, p, m;
+
+    if (Selector._cache[e]) {
+      this.matcher = Selector._cache[e];
+      return;
+    }
+
+    this.matcher = [&amp;quot;this.matcher = function(root) {&amp;quot;,
+                    &amp;quot;var r = root, h = Selector.handlers, c = false, n;&amp;quot;];
+
+    while (e &amp;amp;&amp;amp; le != e &amp;amp;&amp;amp; (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        p = ps[i];
+        if (m = e.match(p)) {
+          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+            new Template(c[i]).evaluate(m));
+          e = e.replace(m[0], &amp;#39;&amp;#39;);
+          break;
+        }
+      }
+    }
+
+    this.matcher.push(&amp;quot;return h.unique(n);\n}&amp;quot;);
+    eval(this.matcher.join(&amp;#39;\n&amp;#39;));
+    Selector._cache[this.expression] = this.matcher;
+  },
+
+  compileXPathMatcher: function() {
+    var e = this.expression, ps = Selector.patterns,
+        x = Selector.xpath, le, m;
+
+    if (Selector._cache[e]) {
+      this.xpath = Selector._cache[e]; return;
+    }
+
+    this.matcher = [&amp;#39;.//*&amp;#39;];
+    while (e &amp;amp;&amp;amp; le != e &amp;amp;&amp;amp; (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        if (m = e.match(ps[i])) {
+          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+            new Template(x[i]).evaluate(m));
+          e = e.replace(m[0], &amp;#39;&amp;#39;);
+          break;
+        }
+      }
+    }
+
+    this.xpath = this.matcher.join(&amp;#39;&amp;#39;);
+    Selector._cache[this.expression] = this.xpath;
+  },
+
+  findElements: function(root) {
+    root = root || document;
+    var e = this.expression, results;
+
+    switch (this.mode) {
+      case &amp;#39;selectorsAPI&amp;#39;:
+        // querySelectorAll queries document-wide, then filters to descendants
+        // of the context element. That&amp;#39;s not what we want.
+        // Add an explicit context to the selector if necessary.
+        if (root !== document) {
+          var oldId = root.id, id = $(root).identify();
+          e = &amp;quot;#&amp;quot; + id + &amp;quot; &amp;quot; + e;
+        }
+
+        results = $A(root.querySelectorAll(e)).map(Element.extend);
+        root.id = oldId;
+
+        return results;
+      case &amp;#39;xpath&amp;#39;:
+        return document._getElementsByXPath(this.xpath, root);
+      default:
+       return this.matcher(root);
+    }
+  },
+
+  match: function(element) {
+    this.tokens = [];
+
+    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+    var le, p, m;
+
+    while (e &amp;amp;&amp;amp; le !== e &amp;amp;&amp;amp; (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        p = ps[i];
+        if (m = e.match(p)) {
+          // use the Selector.assertions methods unless the selector
+          // is too complex.
+          if (as[i]) {
+            this.tokens.push([i, Object.clone(m)]);
+            e = e.replace(m[0], &amp;#39;&amp;#39;);
+          } else {
+            // reluctantly do a document-wide search
+            // and look for a match in the array
+            return this.findElements(document).include(element);
+          }
+        }
+      }
+    }
+
+    var match = true, name, matches;
+    for (var i = 0, token; token = this.tokens[i]; i++) {
+      name = token[0], matches = token[1];
+      if (!Selector.assertions[name](element, matches)) {
+        match = false; break;
+      }
+    }
+
+    return match;
+  },
+
+  toString: function() {
+    return this.expression;
+  },
+
+  inspect: function() {
+    return &amp;quot;#&amp;lt;Selector:&amp;quot; + this.expression.inspect() + &amp;quot;&amp;gt;&amp;quot;;
+  }
+});
+
+Object.extend(Selector, {
+  _cache: { },
+
+  xpath: {
+    descendant:   &amp;quot;//*&amp;quot;,
+    child:        &amp;quot;/*&amp;quot;,
+    adjacent:     &amp;quot;/following-sibling::*[1]&amp;quot;,
+    laterSibling: &amp;#39;/following-sibling::*&amp;#39;,
+    tagName:      function(m) {
+      if (m[1] == &amp;#39;*&amp;#39;) return &amp;#39;&amp;#39;;
+      return &amp;quot;[local-name()=&amp;#39;&amp;quot; + m[1].toLowerCase() +
+             &amp;quot;&amp;#39; or local-name()=&amp;#39;&amp;quot; + m[1].toUpperCase() + &amp;quot;&amp;#39;]&amp;quot;;
+    },
+    className:    &amp;quot;[contains(concat(&amp;#39; &amp;#39;, @class, &amp;#39; &amp;#39;), &amp;#39; #{1} &amp;#39;)]&amp;quot;,
+    id:           &amp;quot;[@id=&amp;#39;#{1}&amp;#39;]&amp;quot;,
+    attrPresence: function(m) {
+      m[1] = m[1].toLowerCase();
+      return new Template(&amp;quot;[@#{1}]&amp;quot;).evaluate(m);
+    },
+    attr: function(m) {
+      m[1] = m[1].toLowerCase();
+      m[3] = m[5] || m[6];
+      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+    },
+    pseudo: function(m) {
+      var h = Selector.xpath.pseudos[m[1]];
+      if (!h) return &amp;#39;&amp;#39;;
+      if (Object.isFunction(h)) return h(m);
+      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+    },
+    operators: {
+      &amp;#39;=&amp;#39;:  &amp;quot;[@#{1}=&amp;#39;#{3}&amp;#39;]&amp;quot;,
+      &amp;#39;!=&amp;#39;: &amp;quot;[@#{1}!=&amp;#39;#{3}&amp;#39;]&amp;quot;,
+      &amp;#39;^=&amp;#39;: &amp;quot;[starts-with(@#{1}, &amp;#39;#{3}&amp;#39;)]&amp;quot;,
+      &amp;#39;$=&amp;#39;: &amp;quot;[substring(@#{1}, (string-length(@#{1}) - string-length(&amp;#39;#{3}&amp;#39;) + 1))=&amp;#39;#{3}&amp;#39;]&amp;quot;,
+      &amp;#39;*=&amp;#39;: &amp;quot;[contains(@#{1}, &amp;#39;#{3}&amp;#39;)]&amp;quot;,
+      &amp;#39;~=&amp;#39;: &amp;quot;[contains(concat(&amp;#39; &amp;#39;, @#{1}, &amp;#39; &amp;#39;), &amp;#39; #{3} &amp;#39;)]&amp;quot;,
+      &amp;#39;|=&amp;#39;: &amp;quot;[contains(concat(&amp;#39;-&amp;#39;, @#{1}, &amp;#39;-&amp;#39;), &amp;#39;-#{3}-&amp;#39;)]&amp;quot;
+    },
+    pseudos: {
+      &amp;#39;first-child&amp;#39;: &amp;#39;[not(preceding-sibling::*)]&amp;#39;,
+      &amp;#39;last-child&amp;#39;:  &amp;#39;[not(following-sibling::*)]&amp;#39;,
+      &amp;#39;only-child&amp;#39;:  &amp;#39;[not(preceding-sibling::* or following-sibling::*)]&amp;#39;,
+      &amp;#39;empty&amp;#39;:       &amp;quot;[count(*) = 0 and (count(text()) = 0)]&amp;quot;,
+      &amp;#39;checked&amp;#39;:     &amp;quot;[@checked]&amp;quot;,
+      &amp;#39;disabled&amp;#39;:    &amp;quot;[(@disabled) and (@type!=&amp;#39;hidden&amp;#39;)]&amp;quot;,
+      &amp;#39;enabled&amp;#39;:     &amp;quot;[not(@disabled) and (@type!=&amp;#39;hidden&amp;#39;)]&amp;quot;,
+      &amp;#39;not&amp;#39;: function(m) {
+        var e = m[6], p = Selector.patterns,
+            x = Selector.xpath, le, v;
+
+        var exclusion = [];
+        while (e &amp;amp;&amp;amp; le != e &amp;amp;&amp;amp; (/\S/).test(e)) {
+          le = e;
+          for (var i in p) {
+            if (m = e.match(p[i])) {
+              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+              exclusion.push(&amp;quot;(&amp;quot; + v.substring(1, v.length - 1) + &amp;quot;)&amp;quot;);
+              e = e.replace(m[0], &amp;#39;&amp;#39;);
+              break;
+            }
+          }
+        }
+        return &amp;quot;[not(&amp;quot; + exclusion.join(&amp;quot; and &amp;quot;) + &amp;quot;)]&amp;quot;;
+      },
+      &amp;#39;nth-child&amp;#39;:      function(m) {
+        return Selector.xpath.pseudos.nth(&amp;quot;(count(./preceding-sibling::*) + 1) &amp;quot;, m);
+      },
+      &amp;#39;nth-last-child&amp;#39;: function(m) {
+        return Selector.xpath.pseudos.nth(&amp;quot;(count(./following-sibling::*) + 1) &amp;quot;, m);
+      },
+      &amp;#39;nth-of-type&amp;#39;:    function(m) {
+        return Selector.xpath.pseudos.nth(&amp;quot;position() &amp;quot;, m);
+      },
+      &amp;#39;nth-last-of-type&amp;#39;: function(m) {
+        return Selector.xpath.pseudos.nth(&amp;quot;(last() + 1 - position()) &amp;quot;, m);
+      },
+      &amp;#39;first-of-type&amp;#39;:  function(m) {
+        m[6] = &amp;quot;1&amp;quot;; return Selector.xpath.pseudos[&amp;#39;nth-of-type&amp;#39;](m);
+      },
+      &amp;#39;last-of-type&amp;#39;:   function(m) {
+        m[6] = &amp;quot;1&amp;quot;; return Selector.xpath.pseudos[&amp;#39;nth-last-of-type&amp;#39;](m);
+      },
+      &amp;#39;only-of-type&amp;#39;:   function(m) {
+        var p = Selector.xpath.pseudos; return p[&amp;#39;first-of-type&amp;#39;](m) + p[&amp;#39;last-of-type&amp;#39;](m);
+      },
+      nth: function(fragment, m) {
+        var mm, formula = m[6], predicate;
+        if (formula == &amp;#39;even&amp;#39;) formula = &amp;#39;2n+0&amp;#39;;
+        if (formula == &amp;#39;odd&amp;#39;)  formula = &amp;#39;2n+1&amp;#39;;
+        if (mm = formula.match(/^(\d+)$/)) // digit only
+          return &amp;#39;[&amp;#39; + fragment + &amp;quot;= &amp;quot; + mm[1] + &amp;#39;]&amp;#39;;
+        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+          if (mm[1] == &amp;quot;-&amp;quot;) mm[1] = -1;
+          var a = mm[1] ? Number(mm[1]) : 1;
+          var b = mm[2] ? Number(mm[2]) : 0;
+          predicate = &amp;quot;[((#{fragment} - #{b}) mod #{a} = 0) and &amp;quot; +
+          &amp;quot;((#{fragment} - #{b}) div #{a} &amp;gt;= 0)]&amp;quot;;
+          return new Template(predicate).evaluate({
+            fragment: fragment, a: a, b: b });
+        }
+      }
+    }
+  },
+
+  criteria: {
+    tagName:      &amp;#39;n = h.tagName(n, r, &amp;quot;#{1}&amp;quot;, c);      c = false;&amp;#39;,
+    className:    &amp;#39;n = h.className(n, r, &amp;quot;#{1}&amp;quot;, c);    c = false;&amp;#39;,
+    id:           &amp;#39;n = h.id(n, r, &amp;quot;#{1}&amp;quot;, c);           c = false;&amp;#39;,
+    attrPresence: &amp;#39;n = h.attrPresence(n, r, &amp;quot;#{1}&amp;quot;, c); c = false;&amp;#39;,
+    attr: function(m) {
+      m[3] = (m[5] || m[6]);
+      return new Template(&amp;#39;n = h.attr(n, r, &amp;quot;#{1}&amp;quot;, &amp;quot;#{3}&amp;quot;, &amp;quot;#{2}&amp;quot;, c); c = false;&amp;#39;).evaluate(m);
+    },
+    pseudo: function(m) {
+      if (m[6]) m[6] = m[6].replace(/&amp;quot;/g, &amp;#39;\\&amp;quot;&amp;#39;);
+      return new Template(&amp;#39;n = h.pseudo(n, &amp;quot;#{1}&amp;quot;, &amp;quot;#{6}&amp;quot;, r, c); c = false;&amp;#39;).evaluate(m);
+    },
+    descendant:   &amp;#39;c = &amp;quot;descendant&amp;quot;;&amp;#39;,
+    child:        &amp;#39;c = &amp;quot;child&amp;quot;;&amp;#39;,
+    adjacent:     &amp;#39;c = &amp;quot;adjacent&amp;quot;;&amp;#39;,
+    laterSibling: &amp;#39;c = &amp;quot;laterSibling&amp;quot;;&amp;#39;
+  },
+
+  patterns: {
+    // combinators must be listed first
+    // (and descendant needs to be last combinator)
+    laterSibling: /^\s*~\s*/,
+    child:        /^\s*&amp;gt;\s*/,
+    adjacent:     /^\s*\+\s*/,
+    descendant:   /^\s/,
+
+    // selectors follow
+    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
+    id:           /^#([\w\-\*]+)(\b|$)/,
+    className:    /^\.([\w\-\*]+)(\b|$)/,
+    pseudo:
+/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~&amp;gt;]))/,
+    attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
+    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*(([&amp;#39;&amp;quot;])([^\4]*?)\4|([^&amp;#39;&amp;quot;][^\]]*?)))?\]/
+  },
+
+  // for Selector.match and Element#match
+  assertions: {
+    tagName: function(element, matches) {
+      return matches[1].toUpperCase() == element.tagName.toUpperCase();
+    },
+
+    className: function(element, matches) {
+      return Element.hasClassName(element, matches[1]);
+    },
+
+    id: function(element, matches) {
+      return element.id === matches[1];
+    },
+
+    attrPresence: function(element, matches) {
+      return Element.hasAttribute(element, matches[1]);
+    },
+
+    attr: function(element, matches) {
+      var nodeValue = Element.readAttribute(element, matches[1]);
+      return nodeValue &amp;amp;&amp;amp; Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+    }
+  },
+
+  handlers: {
+    // UTILITY FUNCTIONS
+    // joins two collections
+    concat: function(a, b) {
+      for (var i = 0, node; node = b[i]; i++)
+        a.push(node);
+      return a;
+    },
+
+    // marks an array of nodes for counting
+    mark: function(nodes) {
+      var _true = Prototype.emptyFunction;
+      for (var i = 0, node; node = nodes[i]; i++)
+        node._countedByPrototype = _true;
+      return nodes;
+    },
+
+    unmark: function(nodes) {
+      for (var i = 0, node; node = nodes[i]; i++)
+        node._countedByPrototype = undefined;
+      return nodes;
+    },
+
+    // mark each child node with its position (for nth calls)
+    // &amp;quot;ofType&amp;quot; flag indicates whether we&amp;#39;re indexing for nth-of-type
+    // rather than nth-child
+    index: function(parentNode, reverse, ofType) {
+      parentNode._countedByPrototype = Prototype.emptyFunction;
+      if (reverse) {
+        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i &amp;gt;= 0; i--) {
+          var node = nodes[i];
+          if (node.nodeType == 1 &amp;amp;&amp;amp; (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+        }
+      } else {
+        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+          if (node.nodeType == 1 &amp;amp;&amp;amp; (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+      }
+    },
+
+    // filters out duplicates and extends all nodes
+    unique: function(nodes) {
+      if (nodes.length == 0) return nodes;
+      var results = [], n;
+      for (var i = 0, l = nodes.length; i &amp;lt; l; i++)
+        if (!(n = nodes[i])._countedByPrototype) {
+          n._countedByPrototype = Prototype.emptyFunction;
+          results.push(Element.extend(n));
+        }
+      return Selector.handlers.unmark(results);
+    },
+
+    // COMBINATOR FUNCTIONS
+    descendant: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        h.concat(results, node.getElementsByTagName(&amp;#39;*&amp;#39;));
+      return results;
+    },
+
+    child: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        for (var j = 0, child; child = node.childNodes[j]; j++)
+          if (child.nodeType == 1 &amp;amp;&amp;amp; child.tagName != &amp;#39;!&amp;#39;) results.push(child);
+      }
+      return results;
+    },
+
+    adjacent: function(nodes) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        var next = this.nextElementSibling(node);
+        if (next) results.push(next);
+      }
+      return results;
+    },
+
+    laterSibling: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        h.concat(results, Element.nextSiblings(node));
+      return results;
+    },
+
+    nextElementSibling: function(node) {
+      while (node = node.nextSibling)
+        if (node.nodeType == 1) return node;
+      return null;
+    },
+
+    previousElementSibling: function(node) {
+      while (node = node.previousSibling)
+        if (node.nodeType == 1) return node;
+      return null;
+    },
+
+    // TOKEN FUNCTIONS
+    tagName: function(nodes, root, tagName, combinator) {
+      var uTagName = tagName.toUpperCase();
+      var results = [], h = Selector.handlers;
+      if (nodes) {
+        if (combinator) {
+          // fastlane for ordinary descendant combinators
+          if (combinator == &amp;quot;descendant&amp;quot;) {
+            for (var i = 0, node; node = nodes[i]; i++)
+              h.concat(results, node.getElementsByTagName(tagName));
+            return results;
+          } else nodes = this[combinator](nodes);
+          if (tagName == &amp;quot;*&amp;quot;) return nodes;
+        }
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.tagName.toUpperCase() === uTagName) results.push(node);
+        return results;
+      } else return root.getElementsByTagName(tagName);
+    },
+
+    id: function(nodes, root, id, combinator) {
+      var targetNode = $(id), h = Selector.handlers;
+      if (!targetNode) return [];
+      if (!nodes &amp;amp;&amp;amp; root == document) return [targetNode];
+      if (nodes) {
+        if (combinator) {
+          if (combinator == &amp;#39;child&amp;#39;) {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (targetNode.parentNode == node) return [targetNode];
+          } else if (combinator == &amp;#39;descendant&amp;#39;) {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (Element.descendantOf(targetNode, node)) return [targetNode];
+          } else if (combinator == &amp;#39;adjacent&amp;#39;) {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (Selector.handlers.previousElementSibling(targetNode) == node)
+                return [targetNode];
+          } else nodes = h[combinator](nodes);
+        }
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node == targetNode) return [targetNode];
+        return [];
+      }
+      return (targetNode &amp;amp;&amp;amp; Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+    },
+
+    className: function(nodes, root, className, combinator) {
+      if (nodes &amp;amp;&amp;amp; combinator) nodes = this[combinator](nodes);
+      return Selector.handlers.byClassName(nodes, root, className);
+    },
+
+    byClassName: function(nodes, root, className) {
+      if (!nodes) nodes = Selector.handlers.descendant([root]);
+      var needle = &amp;#39; &amp;#39; + className + &amp;#39; &amp;#39;;
+      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+        nodeClassName = node.className;
+        if (nodeClassName.length == 0) continue;
+        if (nodeClassName == className || (&amp;#39; &amp;#39; + nodeClassName + &amp;#39; &amp;#39;).include(needle))
+          results.push(node);
+      }
+      return results;
+    },
+
+    attrPresence: function(nodes, root, attr, combinator) {
+      if (!nodes) nodes = root.getElementsByTagName(&amp;quot;*&amp;quot;);
+      if (nodes &amp;amp;&amp;amp; combinator) nodes = this[combinator](nodes);
+      var results = [];
+      for (var i = 0, node; node = nodes[i]; i++)
+        if (Element.hasAttribute(node, attr)) results.push(node);
+      return results;
+    },
+
+    attr: function(nodes, root, attr, value, operator, combinator) {
+      if (!nodes) nodes = root.getElementsByTagName(&amp;quot;*&amp;quot;);
+      if (nodes &amp;amp;&amp;amp; combinator) nodes = this[combinator](nodes);
+      var handler = Selector.operators[operator], results = [];
+      for (var i = 0, node; node = nodes[i]; i++) {
+        var nodeValue = Element.readAttribute(node, attr);
+        if (nodeValue === null) continue;
+        if (handler(nodeValue, value)) results.push(node);
+      }
+      return results;
+    },
+
+    pseudo: function(nodes, name, value, root, combinator) {
+      if (nodes &amp;amp;&amp;amp; combinator) nodes = this[combinator](nodes);
+      if (!nodes) nodes = root.getElementsByTagName(&amp;quot;*&amp;quot;);
+      return Selector.pseudos[name](nodes, value, root);
+    }
+  },
+
+  pseudos: {
+    &amp;#39;first-child&amp;#39;: function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        if (Selector.handlers.previousElementSibling(node)) continue;
+          results.push(node);
+      }
+      return results;
+    },
+    &amp;#39;last-child&amp;#39;: function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        if (Selector.handlers.nextElementSibling(node)) continue;
+          results.push(node);
+      }
+      return results;
+    },
+    &amp;#39;only-child&amp;#39;: function(nodes, value, root) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!h.previousElementSibling(node) &amp;amp;&amp;amp; !h.nextElementSibling(node))
+          results.push(node);
+      return results;
+    },
+    &amp;#39;nth-child&amp;#39;:        function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root);
+    },
+    &amp;#39;nth-last-child&amp;#39;:   function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, true);
+    },
+    &amp;#39;nth-of-type&amp;#39;:      function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, false, true);
+    },
+    &amp;#39;nth-last-of-type&amp;#39;: function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, true, true);
+    },
+    &amp;#39;first-of-type&amp;#39;:    function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, &amp;quot;1&amp;quot;, root, false, true);
+    },
+    &amp;#39;last-of-type&amp;#39;:     function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, &amp;quot;1&amp;quot;, root, true, true);
+    },
+    &amp;#39;only-of-type&amp;#39;:     function(nodes, formula, root) {
+      var p = Selector.pseudos;
+      return p[&amp;#39;last-of-type&amp;#39;](p[&amp;#39;first-of-type&amp;#39;](nodes, formula, root), formula, root);
+    },
+
+    // handles the an+b logic
+    getIndices: function(a, b, total) {
+      if (a == 0) return b &amp;gt; 0 ? [b] : [];
+      return $R(1, total).inject([], function(memo, i) {
+        if (0 == (i - b) % a &amp;amp;&amp;amp; (i - b) / a &amp;gt;= 0) memo.push(i);
+        return memo;
+      });
+    },
+
+    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+    nth: function(nodes, formula, root, reverse, ofType) {
+      if (nodes.length == 0) return [];
+      if (formula == &amp;#39;even&amp;#39;) formula = &amp;#39;2n+0&amp;#39;;
+      if (formula == &amp;#39;odd&amp;#39;)  formula = &amp;#39;2n+1&amp;#39;;
+      var h = Selector.handlers, results = [], indexed = [], m;
+      h.mark(nodes);
+      for (var i = 0, node; node = nodes[i]; i++) {
+        if (!node.parentNode._countedByPrototype) {
+          h.index(node.parentNode, reverse, ofType);
+          indexed.push(node.parentNode);
+        }
+      }
+      if (formula.match(/^\d+$/)) { // just a number
+        formula = Number(formula);
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.nodeIndex == formula) results.push(node);
+      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+        if (m[1] == &amp;quot;-&amp;quot;) m[1] = -1;
+        var a = m[1] ? Number(m[1]) : 1;
+        var b = m[2] ? Number(m[2]) : 0;
+        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+          for (var j = 0; j &amp;lt; l; j++)
+            if (node.nodeIndex == indices[j]) results.push(node);
+        }
+      }
+      h.unmark(nodes);
+      h.unmark(indexed);
+      return results;
+    },
+
+    &amp;#39;empty&amp;#39;: function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        // IE treats comments as element nodes
+        if (node.tagName == &amp;#39;!&amp;#39; || node.firstChild) continue;
+        results.push(node);
+      }
+      return results;
+    },
+
+    &amp;#39;not&amp;#39;: function(nodes, selector, root) {
+      var h = Selector.handlers, selectorType, m;
+      var exclusions = new Selector(selector).findElements(root);
+      h.mark(exclusions);
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!node._countedByPrototype) results.push(node);
+      h.unmark(exclusions);
+      return results;
+    },
+
+    &amp;#39;enabled&amp;#39;: function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!node.disabled &amp;amp;&amp;amp; (!node.type || node.type !== &amp;#39;hidden&amp;#39;))
+          results.push(node);
+      return results;
+    },
+
+    &amp;#39;disabled&amp;#39;: function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (node.disabled) results.push(node);
+      return results;
+    },
+
+    &amp;#39;checked&amp;#39;: function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (node.checked) results.push(node);
+      return results;
+    }
+  },
+
+  operators: {
+    &amp;#39;=&amp;#39;:  function(nv, v) { return nv == v; },
+    &amp;#39;!=&amp;#39;: function(nv, v) { return nv != v; },
+    &amp;#39;^=&amp;#39;: function(nv, v) { return nv == v || nv &amp;amp;&amp;amp; nv.startsWith(v); },
+    &amp;#39;$=&amp;#39;: function(nv, v) { return nv == v || nv &amp;amp;&amp;amp; nv.endsWith(v); },
+    &amp;#39;*=&amp;#39;: function(nv, v) { return nv == v || nv &amp;amp;&amp;amp; nv.include(v); },
+    &amp;#39;$=&amp;#39;: function(nv, v) { return nv.endsWith(v); },
+    &amp;#39;*=&amp;#39;: function(nv, v) { return nv.include(v); },
+    &amp;#39;~=&amp;#39;: function(nv, v) { return (&amp;#39; &amp;#39; + nv + &amp;#39; &amp;#39;).include(&amp;#39; &amp;#39; + v + &amp;#39; &amp;#39;); },
+    &amp;#39;|=&amp;#39;: function(nv, v) { return (&amp;#39;-&amp;#39; + (nv || &amp;quot;&amp;quot;).toUpperCase() +
+     &amp;#39;-&amp;#39;).include(&amp;#39;-&amp;#39; + (v || &amp;quot;&amp;quot;).toUpperCase() + &amp;#39;-&amp;#39;); }
+  },
+
+  split: function(expression) {
+    var expressions = [];
+    expression.scan(/(([\w#:.~&amp;gt;+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+      expressions.push(m[1].strip());
+    });
+    return expressions;
+  },
+
+  matchElements: function(elements, expression) {
+    var matches = $$(expression), h = Selector.handlers;
+    h.mark(matches);
+    for (var i = 0, results = [], element; element = elements[i]; i++)
+      if (element._countedByPrototype) results.push(element);
+    h.unmark(matches);
+    return results;
+  },
+
+  findElement: function(elements, expression, index) {
+    if (Object.isNumber(expression)) {
+      index = expression; expression = false;
+    }
+    return Selector.matchElements(elements, expression || &amp;#39;*&amp;#39;)[index || 0];
+  },
+
+  findChildElements: function(element, expressions) {
+    expressions = Selector.split(expressions.join(&amp;#39;,&amp;#39;));
+    var results = [], h = Selector.handlers;
+    for (var i = 0, l = expressions.length, selector; i &amp;lt; l; i++) {
+      selector = new Selector(expressions[i].strip());
+      h.concat(results, selector.findElements(element));
+    }
+    return (l &amp;gt; 1) ? h.unique(results) : results;
+  }
+});
+
+if (Prototype.Browser.IE) {
+  Object.extend(Selector.handlers, {
+    // IE returns comment nodes on getElementsByTagName(&amp;quot;*&amp;quot;).
+    // Filter them out.
+    concat: function(a, b) {
+      for (var i = 0, node; node = b[i]; i++)
+        if (node.tagName !== &amp;quot;!&amp;quot;) a.push(node);
+      return a;
+    },
+
+    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
+    unmark: function(nodes) {
+      for (var i = 0, node; node = nodes[i]; i++)
+        node.removeAttribute(&amp;#39;_countedByPrototype&amp;#39;);
+      return nodes;
+    }
+  });
+}
+
+function $$() {
+  return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+  reset: function(form) {
+    $(form).reset();
+    return form;
+  },
+
+  serializeElements: function(elements, options) {
+    if (typeof options != &amp;#39;object&amp;#39;) options = { hash: !!options };
+    else if (Object.isUndefined(options.hash)) options.hash = true;
+    var key, value, submitted = false, submit = options.submit;
+
+    var data = elements.inject({ }, function(result, element) {
+      if (!element.disabled &amp;amp;&amp;amp; element.name) {
+        key = element.name; value = $(element).getValue();
+        if (value != null &amp;amp;&amp;amp; element.type != &amp;#39;file&amp;#39; &amp;amp;&amp;amp; (element.type != &amp;#39;submit&amp;#39; || (!submitted &amp;amp;&amp;amp;
+            submit !== false &amp;amp;&amp;amp; (!submit || key == submit) &amp;amp;&amp;amp; (submitted = true)))) {
+          if (key in result) {
+            // a key is already present; construct an array of values
+            if (!Object.isArray(result[key])) result[key] = [result[key]];
+            result[key].push(value);
+          }
+          else result[key] = value;
+        }
+      }
+      return result;
+    });
+
+    return options.hash ? data : Object.toQueryString(data);
+  }
+};
+
+Form.Methods = {
+  serialize: function(form, options) {
+    return Form.serializeElements(Form.getElements(form), options);
+  },
+
+  getElements: function(form) {
+    return $A($(form).getElementsByTagName(&amp;#39;*&amp;#39;)).inject([],
+      function(elements, child) {
+        if (Form.Element.Serializers[child.tagName.toLowerCase()])
+          elements.push(Element.extend(child));
+        return elements;
+      }
+    );
+  },
+
+  getInputs: function(form, typeName, name) {
+    form = $(form);
+    var inputs = form.getElementsByTagName(&amp;#39;input&amp;#39;);
+
+    if (!typeName &amp;amp;&amp;amp; !name) return $A(inputs).map(Element.extend);
+
+    for (var i = 0, matchingInputs = [], length = inputs.length; i &amp;lt; length; i++) {
+      var input = inputs[i];
+      if ((typeName &amp;amp;&amp;amp; input.type != typeName) || (name &amp;amp;&amp;amp; input.name != name))
+        continue;
+      matchingInputs.push(Element.extend(input));
+    }
+
+    return matchingInputs;
+  },
+
+  disable: function(form) {
+    form = $(form);
+    Form.getElements(form).invoke(&amp;#39;disable&amp;#39;);
+    return form;
+  },
+
+  enable: function(form) {
+    form = $(form);
+    Form.getElements(form).invoke(&amp;#39;enable&amp;#39;);
+    return form;
+  },
+
+  findFirstElement: function(form) {
+    var elements = $(form).getElements().findAll(function(element) {
+      return &amp;#39;hidden&amp;#39; != element.type &amp;amp;&amp;amp; !element.disabled;
+    });
+    var firstByIndex = elements.findAll(function(element) {
+      return element.hasAttribute(&amp;#39;tabIndex&amp;#39;) &amp;amp;&amp;amp; element.tabIndex &amp;gt;= 0;
+    }).sortBy(function(element) { return element.tabIndex }).first();
+
+    return firstByIndex ? firstByIndex : elements.find(function(element) {
+      return [&amp;#39;input&amp;#39;, &amp;#39;select&amp;#39;, &amp;#39;textarea&amp;#39;].include(element.tagName.toLowerCase());
+    });
+  },
+
+  focusFirstElement: function(form) {
+    form = $(form);
+    form.findFirstElement().activate();
+    return form;
+  },
+
+  request: function(form, options) {
+    form = $(form), options = Object.clone(options || { });
+
+    var params = options.parameters, action = form.readAttribute(&amp;#39;action&amp;#39;) || &amp;#39;&amp;#39;;
+    if (action.blank()) action = window.location.href;
+    options.parameters = form.serialize(true);
+
+    if (params) {
+      if (Object.isString(params)) params = params.toQueryParams();
+      Object.extend(options.parameters, params);
+    }
+
+    if (form.hasAttribute(&amp;#39;method&amp;#39;) &amp;amp;&amp;amp; !options.method)
+      options.method = form.method;
+
+    return new Ajax.Request(action, options);
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+  focus: function(element) {
+    $(element).focus();
+    return element;
+  },
+
+  select: function(element) {
+    $(element).select();
+    return element;
+  }
+};
+
+Form.Element.Methods = {
+  serialize: function(element) {
+    element = $(element);
+    if (!element.disabled &amp;amp;&amp;amp; element.name) {
+      var value = element.getValue();
+      if (value != undefined) {
+        var pair = { };
+        pair[element.name] = value;
+        return Object.toQueryString(pair);
+      }
+    }
+    return &amp;#39;&amp;#39;;
+  },
+
+  getValue: function(element) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    return Form.Element.Serializers[method](element);
+  },
+
+  setValue: function(element, value) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    Form.Element.Serializers[method](element, value);
+    return element;
+  },
+
+  clear: function(element) {
+    $(element).value = &amp;#39;&amp;#39;;
+    return element;
+  },
+
+  present: function(element) {
+    return $(element).value != &amp;#39;&amp;#39;;
+  },
+
+  activate: function(element) {
+    element = $(element);
+    try {
+      element.focus();
+      if (element.select &amp;amp;&amp;amp; (element.tagName.toLowerCase() != &amp;#39;input&amp;#39; ||
+          ![&amp;#39;button&amp;#39;, &amp;#39;reset&amp;#39;, &amp;#39;submit&amp;#39;].include(element.type)))
+        element.select();
+    } catch (e) { }
+    return element;
+  },
+
+  disable: function(element) {
+    element = $(element);
+    element.disabled = true;
+    return element;
+  },
+
+  enable: function(element) {
+    element = $(element);
+    element.disabled = false;
+    return element;
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+  input: function(element, value) {
+    switch (element.type.toLowerCase()) {
+      case &amp;#39;checkbox&amp;#39;:
+      case &amp;#39;radio&amp;#39;:
+        return Form.Element.Serializers.inputSelector(element, value);
+      default:
+        return Form.Element.Serializers.textarea(element, value);
+    }
+  },
+
+  inputSelector: function(element, value) {
+    if (Object.isUndefined(value)) return element.checked ? element.value : null;
+    else element.checked = !!value;
+  },
+
+  textarea: function(element, value) {
+    if (Object.isUndefined(value)) return element.value;
+    else element.value = value;
+  },
+
+  select: function(element, value) {
+    if (Object.isUndefined(value))
+      return this[element.type == &amp;#39;select-one&amp;#39; ?
+        &amp;#39;selectOne&amp;#39; : &amp;#39;selectMany&amp;#39;](element);
+    else {
+      var opt, currentValue, single = !Object.isArray(value);
+      for (var i = 0, length = element.length; i &amp;lt; length; i++) {
+        opt = element.options[i];
+        currentValue = this.optionValue(opt);
+        if (single) {
+          if (currentValue == value) {
+            opt.selected = true;
+            return;
+          }
+        }
+        else opt.selected = value.include(currentValue);
+      }
+    }
+  },
+
+  selectOne: function(element) {
+    var index = element.selectedIndex;
+    return index &amp;gt;= 0 ? this.optionValue(element.options[index]) : null;
+  },
+
+  selectMany: function(element) {
+    var values, length = element.length;
+    if (!length) return null;
+
+    for (var i = 0, values = []; i &amp;lt; length; i++) {
+      var opt = element.options[i];
+      if (opt.selected) values.push(this.optionValue(opt));
+    }
+    return values;
+  },
+
+  optionValue: function(opt) {
+    // extend element because hasAttribute may not be native
+    return Element.extend(opt).hasAttribute(&amp;#39;value&amp;#39;) ? opt.value : opt.text;
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+  initialize: function($super, element, frequency, callback) {
+    $super(callback, frequency);
+    this.element   = $(element);
+    this.lastValue = this.getValue();
+  },
+
+  execute: function() {
+    var value = this.getValue();
+    if (Object.isString(this.lastValue) &amp;amp;&amp;amp; Object.isString(value) ?
+        this.lastValue != value : String(this.lastValue) != String(value)) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+  initialize: function(element, callback) {
+    this.element  = $(element);
+    this.callback = callback;
+
+    this.lastValue = this.getValue();
+    if (this.element.tagName.toLowerCase() == &amp;#39;form&amp;#39;)
+      this.registerFormCallbacks();
+    else
+      this.registerCallback(this.element);
+  },
+
+  onElementEvent: function() {
+    var value = this.getValue();
+    if (this.lastValue != value) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  },
+
+  registerFormCallbacks: function() {
+    Form.getElements(this.element).each(this.registerCallback, this);
+  },
+
+  registerCallback: function(element) {
+    if (element.type) {
+      switch (element.type.toLowerCase()) {
+        case &amp;#39;checkbox&amp;#39;:
+        case &amp;#39;radio&amp;#39;:
+          Event.observe(element, &amp;#39;click&amp;#39;, this.onElementEvent.bind(this));
+          break;
+        default:
+          Event.observe(element, &amp;#39;change&amp;#39;, this.onElementEvent.bind(this));
+          break;
+      }
+    }
+  }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+  KEY_BACKSPACE: 8,
+  KEY_TAB:       9,
+  KEY_RETURN:   13,
+  KEY_ESC:      27,
+  KEY_LEFT:     37,
+  KEY_UP:       38,
+  KEY_RIGHT:    39,
+  KEY_DOWN:     40,
+  KEY_DELETE:   46,
+  KEY_HOME:     36,
+  KEY_END:      35,
+  KEY_PAGEUP:   33,
+  KEY_PAGEDOWN: 34,
+  KEY_INSERT:   45,
+
+  cache: { },
+
+  relatedTarget: function(event) {
+    var element;
+    switch(event.type) {
+      case &amp;#39;mouseover&amp;#39;: element = event.fromElement; break;
+      case &amp;#39;mouseout&amp;#39;:  element = event.toElement;   break;
+      default: return null;
+    }
+    return Element.extend(element);
+  }
+});
+
+Event.Methods = (function() {
+  var isButton;
+
+  if (Prototype.Browser.IE) {
+    var buttonMap = { 0: 1, 1: 4, 2: 2 };
+    isButton = function(event, code) {
+      return event.button == buttonMap[code];
+    };
+
+  } else if (Prototype.Browser.WebKit) {
+    isButton = function(event, code) {
+      switch (code) {
+        case 0: return event.which == 1 &amp;amp;&amp;amp; !event.metaKey;
+        case 1: return event.which == 1 &amp;amp;&amp;amp; event.metaKey;
+        default: return false;
+      }
+    };
+
+  } else {
+    isButton = function(event, code) {
+      return event.which ? (event.which === code + 1) : (event.button === code);
+    };
+  }
+
+  return {
+    isLeftClick:   function(event) { return isButton(event, 0) },
+    isMiddleClick: function(event) { return isButton(event, 1) },
+    isRightClick:  function(event) { return isButton(event, 2) },
+
+    element: function(event) {
+      event = Event.extend(event);
+
+      var node          = event.target,
+          type          = event.type,
+          currentTarget = event.currentTarget;
+
+      if (currentTarget &amp;amp;&amp;amp; currentTarget.tagName) {
+        // Firefox screws up the &amp;quot;click&amp;quot; event when moving between radio buttons
+        // via arrow keys. It also screws up the &amp;quot;load&amp;quot; and &amp;quot;error&amp;quot; events on images,
+        // reporting the document as the target instead of the original image.
+        if (type === &amp;#39;load&amp;#39; || type === &amp;#39;error&amp;#39; ||
+          (type === &amp;#39;click&amp;#39; &amp;amp;&amp;amp; currentTarget.tagName.toLowerCase() === &amp;#39;input&amp;#39;
+            &amp;amp;&amp;amp; currentTarget.type === &amp;#39;radio&amp;#39;))
+              node = currentTarget;
+      }
+      if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
+      return Element.extend(node);
+    },
+
+    findElement: function(event, expression) {
+      var element = Event.element(event);
+      if (!expression) return element;
+      var elements = [element].concat(element.ancestors());
+      return Selector.findElement(elements, expression, 0);
+    },
+
+    pointer: function(event) {
+      var docElement = document.documentElement,
+      body = document.body || { scrollLeft: 0, scrollTop: 0 };
+      return {
+        x: event.pageX || (event.clientX +
+          (docElement.scrollLeft || body.scrollLeft) -
+          (docElement.clientLeft || 0)),
+        y: event.pageY || (event.clientY +
+          (docElement.scrollTop || body.scrollTop) -
+          (docElement.clientTop || 0))
+      };
+    },
+
+    pointerX: function(event) { return Event.pointer(event).x },
+    pointerY: function(event) { return Event.pointer(event).y },
+
+    stop: function(event) {
+      Event.extend(event);
+      event.preventDefault();
+      event.stopPropagation();
+      event.stopped = true;
+    }
+  };
+})();
+
+Event.extend = (function() {
+  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+    m[name] = Event.Methods[name].methodize();
+    return m;
+  });
+
+  if (Prototype.Browser.IE) {
+    Object.extend(methods, {
+      stopPropagation: function() { this.cancelBubble = true },
+      preventDefault:  function() { this.returnValue = false },
+      inspect: function() { return &amp;quot;[object Event]&amp;quot; }
+    });
+
+    return function(event) {
+      if (!event) return false;
+      if (event._extendedByPrototype) return event;
+
+      event._extendedByPrototype = Prototype.emptyFunction;
+      var pointer = Event.pointer(event);
+      Object.extend(event, {
+        target: event.srcElement,
+        relatedTarget: Event.relatedTarget(event),
+        pageX:  pointer.x,
+        pageY:  pointer.y
+      });
+      return Object.extend(event, methods);
+    };
+
+  } else {
+    Event.prototype = Event.prototype || document.createEvent(&amp;quot;HTMLEvents&amp;quot;)[&amp;#39;__proto__&amp;#39;];
+    Object.extend(Event.prototype, methods);
+    return Prototype.K;
+  }
+})();
+
+Object.extend(Event, (function() {
+  var cache = Event.cache;
+
+  function getEventID(element) {
+    if (element._prototypeEventID) return element._prototypeEventID[0];
+    arguments.callee.id = arguments.callee.id || 1;
+    return element._prototypeEventID = [++arguments.callee.id];
+  }
+
+  function getDOMEventName(eventName) {
+    if (eventName &amp;amp;&amp;amp; eventName.include(&amp;#39;:&amp;#39;)) return &amp;quot;dataavailable&amp;quot;;
+    return eventName;
+  }
+
+  function getCacheForID(id) {
+    return cache[id] = cache[id] || { };
+  }
+
+  function getWrappersForEventName(id, eventName) {
+    var c = getCacheForID(id);
+    return c[eventName] = c[eventName] || [];
+  }
+
+  function createWrapper(element, eventName, handler) {
+    var id = getEventID(element);
+    var c = getWrappersForEventName(id, eventName);
+    if (c.pluck(&amp;quot;handler&amp;quot;).include(handler)) return false;
+
+    var wrapper = function(event) {
+      if (!Event || !Event.extend ||
+        (event.eventName &amp;amp;&amp;amp; event.eventName != eventName))
+          return false;
+
+      Event.extend(event);
+      handler.call(element, event);
+    };
+
+    wrapper.handler = handler;
+    c.push(wrapper);
+    return wrapper;
+  }
+
+  function findWrapper(id, eventName, handler) {
+    var c = getWrappersForEventName(id, eventName);
+    return c.find(function(wrapper) { return wrapper.handler == handler });
+  }
+
+  function destroyWrapper(id, eventName, handler) {
+    var c = getCacheForID(id);
+    if (!c[eventName]) return false;
+    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+  }
+
+  function destroyCache() {
+    for (var id in cache)
+      for (var eventName in cache[id])
+        cache[id][eventName] = null;
+  }
+
+
+  // Internet Explorer needs to remove event handlers on page unload
+  // in order to avoid memory leaks.
+  if (window.attachEvent) {
+    window.attachEvent(&amp;quot;onunload&amp;quot;, destroyCache);
+  }
+
+  // Safari has a dummy event handler on page unload so that it won&amp;#39;t
+  // use its bfcache. Safari &amp;lt;= 3.1 has an issue with restoring the &amp;quot;document&amp;quot;
+  // object when page is returned to via the back button using its bfcache.
+  if (Prototype.Browser.WebKit) {
+    window.addEventListener(&amp;#39;unload&amp;#39;, Prototype.emptyFunction, false);
+  }
+
+  return {
+    observe: function(element, eventName, handler) {
+      element = $(element);
+      var name = getDOMEventName(eventName);
+
+      var wrapper = createWrapper(element, eventName, handler);
+      if (!wrapper) return element;
+
+      if (element.addEventListener) {
+        element.addEventListener(name, wrapper, false);
+      } else {
+        element.attachEvent(&amp;quot;on&amp;quot; + name, wrapper);
+      }
+
+      return element;
+    },
+
+    stopObserving: function(element, eventName, handler) {
+      element = $(element);
+      var id = getEventID(element), name = getDOMEventName(eventName);
+
+      if (!handler &amp;amp;&amp;amp; eventName) {
+        getWrappersForEventName(id, eventName).each(function(wrapper) {
+          element.stopObserving(eventName, wrapper.handler);
+        });
+        return element;
+
+      } else if (!eventName) {
+        Object.keys(getCacheForID(id)).each(function(eventName) {
+          element.stopObserving(eventName);
+        });
+        return element;
+      }
+
+      var wrapper = findWrapper(id, eventName, handler);
+      if (!wrapper) return element;
+
+      if (element.removeEventListener) {
+        element.removeEventListener(name, wrapper, false);
+      } else {
+        element.detachEvent(&amp;quot;on&amp;quot; + name, wrapper);
+      }
+
+      destroyWrapper(id, eventName, handler);
+
+      return element;
+    },
+
+    fire: function(element, eventName, memo) {
+      element = $(element);
+      if (element == document &amp;amp;&amp;amp; document.createEvent &amp;amp;&amp;amp; !element.dispatchEvent)
+        element = document.documentElement;
+
+      var event;
+      if (document.createEvent) {
+        event = document.createEvent(&amp;quot;HTMLEvents&amp;quot;);
+        event.initEvent(&amp;quot;dataavailable&amp;quot;, true, true);
+      } else {
+        event = document.createEventObject();
+        event.eventType = &amp;quot;ondataavailable&amp;quot;;
+      }
+
+      event.eventName = eventName;
+      event.memo = memo || { };
+
+      if (document.createEvent) {
+        element.dispatchEvent(event);
+      } else {
+        element.fireEvent(event.eventType, event);
+      }
+
+      return Event.extend(event);
+    }
+  };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+  fire:          Event.fire,
+  observe:       Event.observe,
+  stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+  fire:          Element.Methods.fire.methodize(),
+  observe:       Element.Methods.observe.methodize(),
+  stopObserving: Element.Methods.stopObserving.methodize(),
+  loaded:        false
+});
+
+(function() {
+  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+     Matthias Miller, Dean Edwards and John Resig. */
+
+  var timer;
+
+  function fireContentLoadedEvent() {
+    if (document.loaded) return;
+    if (timer) window.clearInterval(timer);
+    document.fire(&amp;quot;dom:loaded&amp;quot;);
+    document.loaded = true;
+  }
+
+  if (document.addEventListener) {
+    if (Prototype.Browser.WebKit) {
+      timer = window.setInterval(function() {
+        if (/loaded|complete/.test(document.readyState))
+          fireContentLoadedEvent();
+      }, 0);
+
+      Event.observe(window, &amp;quot;load&amp;quot;, fireContentLoadedEvent);
+
+    } else {
+      document.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;,
+        fireContentLoadedEvent, false);
+    }
+
+  } else {
+    document.write(&amp;quot;&amp;lt;script id=__onDOMContentLoaded defer src=//:&amp;gt;&amp;lt;\/script&amp;gt;&amp;quot;);
+    $(&amp;quot;__onDOMContentLoaded&amp;quot;).onreadystatechange = function() {
+      if (this.readyState == &amp;quot;complete&amp;quot;) {
+        this.onreadystatechange = null;
+        fireContentLoadedEvent();
+      }
+    };
+  }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+  Before: function(element, content) {
+    return Element.insert(element, {before:content});
+  },
+
+  Top: function(element, content) {
+    return Element.insert(element, {top:content});
+  },
+
+  Bottom: function(element, content) {
+    return Element.insert(element, {bottom:content});
+  },
+
+  After: function(element, content) {
+    return Element.insert(element, {after:content});
+  }
+};
+
+var $continue = new Error(&amp;#39;&amp;quot;throw $continue&amp;quot; is deprecated, use &amp;quot;return&amp;quot; instead&amp;#39;);
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+  // set to true if needed, warning: firefox performance problems
+  // NOT neeeded for page scrolling, only if draggable contained in
+  // scrollable elements
+  includeScrollOffsets: false,
+
+  // must be called before calling withinIncludingScrolloffset, every time the
+  // page is scrolled
+  prepare: function() {
+    this.deltaX =  window.pageXOffset
+                || document.documentElement.scrollLeft
+                || document.body.scrollLeft
+                || 0;
+    this.deltaY =  window.pageYOffset
+                || document.documentElement.scrollTop
+                || document.body.scrollTop
+                || 0;
+  },
+
+  // caches x/y coordinate pair to use with overlap
+  within: function(element, x, y) {
+    if (this.includeScrollOffsets)
+      return this.withinIncludingScrolloffsets(element, x, y);
+    this.xcomp = x;
+    this.ycomp = y;
+    this.offset = Element.cumulativeOffset(element);
+
+    return (y &amp;gt;= this.offset[1] &amp;amp;&amp;amp;
+            y &amp;lt;  this.offset[1] + element.offsetHeight &amp;amp;&amp;amp;
+            x &amp;gt;= this.offset[0] &amp;amp;&amp;amp;
+            x &amp;lt;  this.offset[0] + element.offsetWidth);
+  },
+
+  withinIncludingScrolloffsets: function(element, x, y) {
+    var offsetcache = Element.cumulativeScrollOffset(element);
+
+    this.xcomp = x + offsetcache[0] - this.deltaX;
+    this.ycomp = y + offsetcache[1] - this.deltaY;
+    this.offset = Element.cumulativeOffset(element);
+
+    return (this.ycomp &amp;gt;= this.offset[1] &amp;amp;&amp;amp;
+            this.ycomp &amp;lt;  this.offset[1] + element.offsetHeight &amp;amp;&amp;amp;
+            this.xcomp &amp;gt;= this.offset[0] &amp;amp;&amp;amp;
+            this.xcomp &amp;lt;  this.offset[0] + element.offsetWidth);
+  },
+
+  // within must be called directly before
+  overlap: function(mode, element) {
+    if (!mode) return 0;
+    if (mode == &amp;#39;vertical&amp;#39;)
+      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+        element.offsetHeight;
+    if (mode == &amp;#39;horizontal&amp;#39;)
+      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+        element.offsetWidth;
+  },
+
+  // Deprecation layer -- use newer Element methods now (1.5.2).
+
+  cumulativeOffset: Element.Methods.cumulativeOffset,
+
+  positionedOffset: Element.Methods.positionedOffset,
+
+  absolutize: function(element) {
+    Position.prepare();
+    return Element.absolutize(element);
+  },
+
+  relativize: function(element) {
+    Position.prepare();
+    return Element.relativize(element);
+  },
+
+  realOffset: Element.Methods.cumulativeScrollOffset,
+
+  offsetParent: Element.Methods.getOffsetParent,
+
+  page: Element.Methods.viewportOffset,
+
+  clone: function(source, target, options) {
+    options = options || { };
+    return Element.clonePosition(target, source, options);
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+  function iter(name) {
+    return name.blank() ? null : &amp;quot;[contains(concat(&amp;#39; &amp;#39;, @class, &amp;#39; &amp;#39;), &amp;#39; &amp;quot; + name + &amp;quot; &amp;#39;)]&amp;quot;;
+  }
+
+  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+  function(element, className) {
+    className = className.toString().strip();
+    var cond = /\s/.test(className) ? $w(className).map(iter).join(&amp;#39;&amp;#39;) : iter(className);
+    return cond ? document._getElementsByXPath(&amp;#39;.//*&amp;#39; + cond, element) : [];
+  } : function(element, className) {
+    className = className.toString().strip();
+    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+    if (!classNames &amp;amp;&amp;amp; !className) return elements;
+
+    var nodes = $(element).getElementsByTagName(&amp;#39;*&amp;#39;);
+    className = &amp;#39; &amp;#39; + className + &amp;#39; &amp;#39;;
+
+    for (var i = 0, child, cn; child = nodes[i]; i++) {
+      if (child.className &amp;amp;&amp;amp; (cn = &amp;#39; &amp;#39; + child.className + &amp;#39; &amp;#39;) &amp;amp;&amp;amp; (cn.include(className) ||
+          (classNames &amp;amp;&amp;amp; classNames.all(function(name) {
+            return !name.toString().blank() &amp;amp;&amp;amp; cn.include(&amp;#39; &amp;#39; + name + &amp;#39; &amp;#39;);
+          }))))
+        elements.push(Element.extend(child));
+    }
+    return elements;
+  };
+
+  return function(className, parentElement) {
+    return $(parentElement || document.body).getElementsByClassName(className);
+  };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+  initialize: function(element) {
+    this.element = $(element);
+  },
+
+  _each: function(iterator) {
+    this.element.className.split(/\s+/).select(function(name) {
+      return name.length &amp;gt; 0;
+    })._each(iterator);
+  },
+
+  set: function(className) {
+    this.element.className = className;
+  },
+
+  add: function(classNameToAdd) {
+    if (this.include(classNameToAdd)) return;
+    this.set($A(this).concat(classNameToAdd).join(&amp;#39; &amp;#39;));
+  },
+
+  remove: function(classNameToRemove) {
+    if (!this.include(classNameToRemove)) return;
+    this.set($A(this).without(classNameToRemove).join(&amp;#39; &amp;#39;));
+  },
+
+  toString: function() {
+    return $A(this).join(&amp;#39; &amp;#39;);
+  }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/web/src/main/webapp/js/prototype.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjsscriptaculousjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/scriptaculous.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/scriptaculous.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/scriptaculous.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,60 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+// script.aculo.us scriptaculous.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+  Version: &amp;#39;1.8.2&amp;#39;,
+  require: function(libraryName) {
+    // inserting via DOM fails in Safari 2.0, so brute force approach
+    document.write(&amp;#39;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&amp;#39;+libraryName+&amp;#39;&amp;quot;&amp;gt;&amp;lt;\/script&amp;gt;&amp;#39;);
+  },
+  REQUIRED_PROTOTYPE: &amp;#39;1.6.0.3&amp;#39;,
+  load: function() {
+    function convertVersionString(versionString) {
+      var v = versionString.replace(/_.*|\./g, &amp;#39;&amp;#39;);
+      v = parseInt(v + &amp;#39;0&amp;#39;.times(4-v.length));
+      return versionString.indexOf(&amp;#39;_&amp;#39;) &amp;gt; -1 ? v-1 : v;
+    }
+
+    if((typeof Prototype==&amp;#39;undefined&amp;#39;) ||
+       (typeof Element == &amp;#39;undefined&amp;#39;) ||
+       (typeof Element.Methods==&amp;#39;undefined&amp;#39;) ||
+       (convertVersionString(Prototype.Version) &amp;lt;
+        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
+       throw(&amp;quot;script.aculo.us requires the Prototype JavaScript framework &amp;gt;= &amp;quot; +
+        Scriptaculous.REQUIRED_PROTOTYPE);
+
+    var js = /scriptaculous\.js(\?.*)?$/;
+    $$(&amp;#39;head script[src]&amp;#39;).findAll(function(s) {
+      return s.src.match(js);
+    }).each(function(s) {
+      var path = s.src.replace(js, &amp;#39;&amp;#39;),
+      includes = s.src.match(/\?.*load=([a-z,]*)/);
+      (includes ? includes[1] : &amp;#39;builder,effects,dragdrop,controls,slider,sound&amp;#39;).split(&amp;#39;,&amp;#39;).each(
+       function(include) { Scriptaculous.require(path+include+&amp;#39;.js&amp;#39;) });
+    });
+  }
+};
+
+Scriptaculous.load();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/web/src/main/webapp/js/scriptaculous.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappjssliderjs&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/js/slider.js (0 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/js/slider.js	                        (rev 0)
+++ branches/product_cleanup/web/src/main/webapp/js/slider.js	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,275 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+// script.aculo.us slider.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Marty Haught, Thomas Fuchs
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if (!Control) var Control = { };
+
+// options:
+//  axis: &amp;#39;vertical&amp;#39;, or &amp;#39;horizontal&amp;#39; (default)
+//
+// callbacks:
+//  onChange(value)
+//  onSlide(value)
+Control.Slider = Class.create({
+  initialize: function(handle, track, options) {
+    var slider = this;
+
+    if (Object.isArray(handle)) {
+      this.handles = handle.collect( function(e) { return $(e) });
+    } else {
+      this.handles = [$(handle)];
+    }
+
+    this.track   = $(track);
+    this.options = options || { };
+
+    this.axis      = this.options.axis || &amp;#39;horizontal&amp;#39;;
+    this.increment = this.options.increment || 1;
+    this.step      = parseInt(this.options.step || &amp;#39;1&amp;#39;);
+    this.range     = this.options.range || $R(0,1);
+
+    this.value     = 0; // assure backwards compat
+    this.values    = this.handles.map( function() { return 0 });
+    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
+    this.options.startSpan = $(this.options.startSpan || null);
+    this.options.endSpan   = $(this.options.endSpan || null);
+
+    this.restricted = this.options.restricted || false;
+
+    this.maximum   = this.options.maximum || this.range.end;
+    this.minimum   = this.options.minimum || this.range.start;
+
+    // Will be used to align the handle onto the track, if necessary
+    this.alignX = parseInt(this.options.alignX || &amp;#39;0&amp;#39;);
+    this.alignY = parseInt(this.options.alignY || &amp;#39;0&amp;#39;);
+
+    this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+    this.handleLength = this.isVertical() ?
+      (this.handles[0].offsetHeight != 0 ?
+        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,&amp;quot;&amp;quot;)) :
+      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+        this.handles[0].style.width.replace(/px$/,&amp;quot;&amp;quot;));
+
+    this.active   = false;
+    this.dragging = false;
+    this.disabled = false;
+
+    if (this.options.disabled) this.setDisabled();
+
+    // Allowed values array
+    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+    if (this.allowedValues) {
+      this.minimum = this.allowedValues.min();
+      this.maximum = this.allowedValues.max();
+    }
+
+    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
+    this.eventMouseMove = this.update.bindAsEventListener(this);
+
+    // Initialize handles in reverse (make sure first handle is active)
+    this.handles.each( function(h,i) {
+      i = slider.handles.length-1-i;
+      slider.setValue(parseFloat(
+        (Object.isArray(slider.options.sliderValue) ?
+          slider.options.sliderValue[i] : slider.options.sliderValue) ||
+         slider.range.start), i);
+      h.makePositioned().observe(&amp;quot;mousedown&amp;quot;, slider.eventMouseDown);
+    });
+
+    this.track.observe(&amp;quot;mousedown&amp;quot;, this.eventMouseDown);
+    document.observe(&amp;quot;mouseup&amp;quot;, this.eventMouseUp);
+    document.observe(&amp;quot;mousemove&amp;quot;, this.eventMouseMove);
+
+    this.initialized = true;
+  },
+  dispose: function() {
+    var slider = this;
+    Event.stopObserving(this.track, &amp;quot;mousedown&amp;quot;, this.eventMouseDown);
+    Event.stopObserving(document, &amp;quot;mouseup&amp;quot;, this.eventMouseUp);
+    Event.stopObserving(document, &amp;quot;mousemove&amp;quot;, this.eventMouseMove);
+    this.handles.each( function(h) {
+      Event.stopObserving(h, &amp;quot;mousedown&amp;quot;, slider.eventMouseDown);
+    });
+  },
+  setDisabled: function(){
+    this.disabled = true;
+  },
+  setEnabled: function(){
+    this.disabled = false;
+  },
+  getNearestValue: function(value){
+    if (this.allowedValues){
+      if (value &amp;gt;= this.allowedValues.max()) return(this.allowedValues.max());
+      if (value &amp;lt;= this.allowedValues.min()) return(this.allowedValues.min());
+
+      var offset = Math.abs(this.allowedValues[0] - value);
+      var newValue = this.allowedValues[0];
+      this.allowedValues.each( function(v) {
+        var currentOffset = Math.abs(v - value);
+        if (currentOffset &amp;lt;= offset){
+          newValue = v;
+          offset = currentOffset;
+        }
+      });
+      return newValue;
+    }
+    if (value &amp;gt; this.range.end) return this.range.end;
+    if (value &amp;lt; this.range.start) return this.range.start;
+    return value;
+  },
+  setValue: function(sliderValue, handleIdx){
+    if (!this.active) {
+      this.activeHandleIdx = handleIdx || 0;
+      this.activeHandle    = this.handles[this.activeHandleIdx];
+      this.updateStyles();
+    }
+    handleIdx = handleIdx || this.activeHandleIdx || 0;
+    if (this.initialized &amp;amp;&amp;amp; this.restricted) {
+      if ((handleIdx&amp;gt;0) &amp;amp;&amp;amp; (sliderValue&amp;lt;this.values[handleIdx-1]))
+        sliderValue = this.values[handleIdx-1];
+      if ((handleIdx &amp;lt; (this.handles.length-1)) &amp;amp;&amp;amp; (sliderValue&amp;gt;this.values[handleIdx+1]))
+        sliderValue = this.values[handleIdx+1];
+    }
+    sliderValue = this.getNearestValue(sliderValue);
+    this.values[handleIdx] = sliderValue;
+    this.value = this.values[0]; // assure backwards compat
+
+    this.handles[handleIdx].style[this.isVertical() ? &amp;#39;top&amp;#39; : &amp;#39;left&amp;#39;] =
+      this.translateToPx(sliderValue);
+
+    this.drawSpans();
+    if (!this.dragging || !this.event) this.updateFinished();
+  },
+  setValueBy: function(delta, handleIdx) {
+    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+      handleIdx || this.activeHandleIdx || 0);
+  },
+  translateToPx: function(value) {
+    return Math.round(
+      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+      (value - this.range.start)) + &amp;quot;px&amp;quot;;
+  },
+  translateToValue: function(offset) {
+    return ((offset/(this.trackLength-this.handleLength) *
+      (this.range.end-this.range.start)) + this.range.start);
+  },
+  getRange: function(range) {
+    var v = this.values.sortBy(Prototype.K);
+    range = range || 0;
+    return $R(v[range],v[range+1]);
+  },
+  minimumOffset: function(){
+    return(this.isVertical() ? this.alignY : this.alignX);
+  },
+  maximumOffset: function(){
+    return(this.isVertical() ?
+      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
+        this.track.style.height.replace(/px$/,&amp;quot;&amp;quot;)) - this.alignY :
+      (this.track.offsetWidth != 0 ? this.track.offsetWidth :
+        this.track.style.width.replace(/px$/,&amp;quot;&amp;quot;)) - this.alignX);
+  },
+  isVertical:  function(){
+    return (this.axis == &amp;#39;vertical&amp;#39;);
+  },
+  drawSpans: function() {
+    var slider = this;
+    if (this.spans)
+      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
+    if (this.options.startSpan)
+      this.setSpan(this.options.startSpan,
+        $R(0, this.values.length&amp;gt;1 ? this.getRange(0).min() : this.value ));
+    if (this.options.endSpan)
+      this.setSpan(this.options.endSpan,
+        $R(this.values.length&amp;gt;1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
+  },
+  setSpan: function(span, range) {
+    if (this.isVertical()) {
+      span.style.top = this.translateToPx(range.start);
+      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
+    } else {
+      span.style.left = this.translateToPx(range.start);
+      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
+    }
+  },
+  updateStyles: function() {
+    this.handles.each( function(h){ Element.removeClassName(h, &amp;#39;selected&amp;#39;) });
+    Element.addClassName(this.activeHandle, &amp;#39;selected&amp;#39;);
+  },
+  startDrag: function(event) {
+    if (Event.isLeftClick(event)) {
+      if (!this.disabled){
+        this.active = true;
+
+        var handle = Event.element(event);
+        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
+        var track = handle;
+        if (track==this.track) {
+          var offsets  = Position.cumulativeOffset(this.track);
+          this.event = event;
+          this.setValue(this.translateToValue(
+           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
+          ));
+          var offsets  = Position.cumulativeOffset(this.activeHandle);
+          this.offsetX = (pointer[0] - offsets[0]);
+          this.offsetY = (pointer[1] - offsets[1]);
+        } else {
+          // find the handle (prevents issues with Safari)
+          while((this.handles.indexOf(handle) == -1) &amp;amp;&amp;amp; handle.parentNode)
+            handle = handle.parentNode;
+
+          if (this.handles.indexOf(handle)!=-1) {
+            this.activeHandle    = handle;
+            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+            this.updateStyles();
+
+            var offsets  = Position.cumulativeOffset(this.activeHandle);
+            this.offsetX = (pointer[0] - offsets[0]);
+            this.offsetY = (pointer[1] - offsets[1]);
+          }
+        }
+      }
+      Event.stop(event);
+    }
+  },
+  update: function(event) {
+   if (this.active) {
+      if (!this.dragging) this.dragging = true;
+      this.draw(event);
+      if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+      Event.stop(event);
+   }
+  },
+  draw: function(event) {
+    var pointer = [Event.pointerX(event), Event.pointerY(event)];
+    var offsets = Position.cumulativeOffset(this.track);
+    pointer[0] -= this.offsetX + offsets[0];
+    pointer[1] -= this.offsetY + offsets[1];
+    this.event = event;
+    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+    if (this.initialized &amp;amp;&amp;amp; this.options.onSlide)
+      this.options.onSlide(this.values.length&amp;gt;1 ? this.values : this.value, this);
+  },
+  endDrag: function(event) {
+    if (this.active &amp;amp;&amp;amp; this.dragging) {
+      this.finishDrag(event, true);
+      Event.stop(event);
+    }
+    this.active = false;
+    this.dragging = false;
+  },
+  finishDrag: function(event, success) {
+    this.active = false;
+    this.dragging = false;
+    this.updateFinished();
+  },
+  updateFinished: function() {
+    if (this.initialized &amp;amp;&amp;amp; this.options.onChange)
+      this.options.onChange(this.values.length&amp;gt;1 ? this.values : this.value, this);
+    this.event = null;
+  }
+});
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/web/src/main/webapp/js/slider.js
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrctestjavaorgmulegalaxywebMainjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/Main.java (2113 =&gt; 2114)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/Main.java	2009-12-17 18:20:34 UTC (rev 2113)
+++ branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/Main.java	2009-12-17 23:44:32 UTC (rev 2114)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -28,7 +28,14 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         connector.setHost(&amp;quot;0.0.0.0&amp;quot;);
         server.addConnector(connector);
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        final File baseWebapp = new File(&amp;quot;src/main/webapp&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        File base;
+        if (args.length &amp;gt; 0) {
+            base = new File(args[0]);
+        } else {
+            base = new File(&amp;quot;.&amp;quot;);
+        }
+        
+        final File baseWebapp = new File(base, &amp;quot;src/main/webapp&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         final FileResource webappResource = new FileResource(baseWebapp.toURI().toURL());
         final FileResource generated = new FileResource(new File(&amp;quot;target/gwt-webapp&amp;quot;).toURI().toURL());
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -65,7 +72,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             
         };
         wac.setContextPath(&amp;quot;/&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        wac.setDefaultsDescriptor(new File(&amp;quot;src/test/resources/webdefault.xml&amp;quot;).getAbsolutePath());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        wac.setDefaultsDescriptor(new File(base, &amp;quot;src/test/resources/webdefault.xml&amp;quot;).getAbsolutePath());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         wac.setWar(baseWebapp.getAbsolutePath());
         
         Map&amp;lt;String, Object&amp;gt; params = new HashMap&amp;lt;String, Object&amp;gt;();
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://admin.muleforge.org/manage_email


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

You received this message because you are subscribed to the Google Groups &quot;MuleForge Dev&quot; group.&lt;br /&gt;

To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26836982&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.&lt;br /&gt;

To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26836982&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.&lt;br /&gt;

For more options, visit this group at http://groups.google.com/group/muleforgedev?hl=en.&lt;br /&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-galaxy-dev----2114--branches-product_cleanup-web-src-main-webapp%3A-More-reorg-tp26836982p26836982.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26834151</id>
	<title>[mule-jira] Updated: (IBEANSIDE-12) New iBean project does not compile if iBeans distro not set</title>
	<published>2009-12-17T12:06:22Z</published>
	<updated>2009-12-17T12:06:22Z</updated>
	<author>
		<name>JIRA no-reply@mulesource.com</name>
	</author>
	<content type="html">&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[ &lt;a href=&quot;http://www.mulesource.org/jira/browse/IBEANSIDE-12?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mulesource.org/jira/browse/IBEANSIDE-12?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;/a&gt;&amp;nbsp;]
&lt;br&gt;&lt;br&gt;Ross Mason updated IBEANSIDE-12:
&lt;br&gt;--------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Attachment: iBeans Eclipse Plugin.pdf
&lt;br&gt;&lt;br&gt;The steps to create the problem
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; New iBean project does not compile if iBeans distro not set
&lt;br&gt;&amp;gt; -----------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Key: IBEANSIDE-12
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; URL: &lt;a href=&quot;http://www.mulesource.org/jira/browse/IBEANSIDE-12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mulesource.org/jira/browse/IBEANSIDE-12&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Project: iBeans IDE
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Issue Type: Bug
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Components: Usability/Integration, Wizards
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Affects Versions: 1.0-alpha-1
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Reporter: Ross Mason
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Assignee: Dirk Olmes
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Attachments: iBeans Eclipse Plugin.pdf
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If the new iBean project wizard is used before the iBeans distro location is set up, the project is created without ibeans enabled and the project does not compile. &amp;nbsp;See the attached pdf (Thanks to Matt M)
&lt;br&gt;&amp;gt; Solution is probably to check the iBeans distro in the wizard and allow the user to select the location before they can go to the next wizard screen
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://www.mulesource.org/jira/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mulesource.org/jira/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;--
&lt;br&gt;&lt;br&gt;You received this message because you are subscribed to the Google Groups &amp;quot;MuleForge Dev&amp;quot; group.
&lt;br&gt;To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26834151&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.
&lt;br&gt;To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26834151&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.
&lt;br&gt;For more options, visit this group at &lt;a href=&quot;http://groups.google.com/group/muleforgedev?hl=en&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.google.com/group/muleforgedev?hl=en&lt;/a&gt;.
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-mule-jira--Created%3A-%28IBEANSIDE-12%29-New-iBean-project-does-not-compile-if-iBeans-distro-not-set-tp26834122p26834151.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26834122</id>
	<title>[mule-jira] Created: (IBEANSIDE-12) New iBean project does not compile if iBeans distro not set</title>
	<published>2009-12-17T12:04:22Z</published>
	<updated>2009-12-17T12:04:22Z</updated>
	<author>
		<name>JIRA no-reply@mulesource.com</name>
	</author>
	<content type="html">New iBean project does not compile if iBeans distro not set
&lt;br&gt;-----------------------------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: IBEANSIDE-12
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;http://www.mulesource.org/jira/browse/IBEANSIDE-12&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mulesource.org/jira/browse/IBEANSIDE-12&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: iBeans IDE
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Bug
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Components: Usability/Integration, Wizards
&lt;br&gt;&amp;nbsp; &amp;nbsp; Affects Versions: 1.0-alpha-1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Ross Mason
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Assignee: Dirk Olmes
&lt;br&gt;&lt;br&gt;&lt;br&gt;If the new iBean project wizard is used before the iBeans distro location is set up, the project is created without ibeans enabled and the project does not compile. &amp;nbsp;See the attached pdf (Thanks to Matt M)
&lt;br&gt;&lt;br&gt;Solution is probably to check the iBeans distro in the wizard and allow the user to select the location before they can go to the next wizard screen
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;If you think it was sent incorrectly contact one of the administrators: &lt;a href=&quot;http://www.mulesource.org/jira/secure/Administrators.jspa&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mulesource.org/jira/secure/Administrators.jspa&lt;/a&gt;&lt;br&gt;-
&lt;br&gt;For more information on JIRA, see: &lt;a href=&quot;http://www.atlassian.com/software/jira&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.atlassian.com/software/jira&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&lt;br&gt;--
&lt;br&gt;&lt;br&gt;You received this message because you are subscribed to the Google Groups &amp;quot;MuleForge Dev&amp;quot; group.
&lt;br&gt;To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26834122&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.
&lt;br&gt;To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26834122&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.
&lt;br&gt;For more options, visit this group at &lt;a href=&quot;http://groups.google.com/group/muleforgedev?hl=en&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://groups.google.com/group/muleforgedev?hl=en&lt;/a&gt;.
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-mule-jira--Created%3A-%28IBEANSIDE-12%29-New-iBean-project-does-not-compile-if-iBeans-distro-not-set-tp26834122p26834122.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26832625</id>
	<title>[galaxy-dev]  [2113] branches/product_cleanup: Yeah this isn't going to be usable for a while.</title>
	<published>2009-12-17T10:20:35Z</published>
	<updated>2009-12-17T10:20:35Z</updated>
	<author>
		<name>dandiep-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt; [2113] branches/product_cleanup: Yeah this isn&amp;#39;t going to be usable for a while.&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;msg&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;Revision&lt;/dt&gt; &lt;dd&gt;&lt;a href=&quot;http://fisheye.muleforge.org/changelog/galaxy/?cs=2113&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;2113&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Author&lt;/dt&gt; &lt;dd&gt;dandiep&lt;/dd&gt;
&lt;dt&gt;Date&lt;/dt&gt; &lt;dd&gt;2009-12-17 12:20:34 -0600 (Thu, 17 Dec 2009)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Log Message&lt;/h3&gt;
&lt;pre&gt;Yeah this isn&amp;#39;t going to be usable for a while. Remove web-standalone - can restore later.&lt;/pre&gt;

&lt;h3&gt;Modified Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuppomxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Removed Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;branches/product_cleanup/web-standalone/&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;patch&quot;&gt;
&lt;h3&gt;Diff&lt;/h3&gt;
&lt;a id=&quot;branchesproduct_cleanuppomxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/pom.xml (2112 =&gt; 2113)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/pom.xml	2009-12-17 01:20:49 UTC (rev 2112)
+++ branches/product_cleanup/pom.xml	2009-12-17 18:20:34 UTC (rev 2113)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -39,7 +39,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         &amp;lt;module&amp;gt;repository/gwt-client&amp;lt;/module&amp;gt;
         &amp;lt;module&amp;gt;repository/server&amp;lt;/module&amp;gt;
         &amp;lt;module&amp;gt;web&amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        &amp;lt;module&amp;gt;web-standalone&amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         &amp;lt;module&amp;gt;gwt-client&amp;lt;/module&amp;gt;
         &amp;lt;module&amp;gt;integration&amp;lt;/module&amp;gt;
         &amp;lt;module&amp;gt;server&amp;lt;/module&amp;gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://admin.muleforge.org/manage_email


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

You received this message because you are subscribed to the Google Groups &quot;MuleForge Dev&quot; group.&lt;br /&gt;

To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26832625&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.&lt;br /&gt;

To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26832625&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.&lt;br /&gt;

For more options, visit this group at http://groups.google.com/group/muleforgedev?hl=en.&lt;br /&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-galaxy-dev----2113--branches-product_cleanup%3A-Yeah-this-isn%27t-going-to-be-usable-for-a-while.-tp26832625p26832625.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26821588</id>
	<title>[galaxy-dev]  [2112] branches/product_cleanup/repository/server: Make repository work as separate module.</title>
	<published>2009-12-16T17:20:49Z</published>
	<updated>2009-12-16T17:20:49Z</updated>
	<author>
		<name>dandiep-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt; [2112] branches/product_cleanup/repository/server: Make repository work as separate module.&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;msg&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;Revision&lt;/dt&gt; &lt;dd&gt;&lt;a href=&quot;http://fisheye.muleforge.org/changelog/galaxy/?cs=2112&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;2112&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Author&lt;/dt&gt; &lt;dd&gt;dandiep&lt;/dd&gt;
&lt;dt&gt;Date&lt;/dt&gt; &lt;dd&gt;2009-12-16 19:20:49 -0600 (Wed, 16 Dec 2009)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Log Message&lt;/h3&gt;
&lt;pre&gt;Make repository work as separate module. Applications create a Galaxy instance which in turn takes a collection of Modules which it starts.&lt;/pre&gt;

&lt;h3&gt;Modified Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientPageManagerjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/PageManager.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientpomxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryRepositoryLibgwtxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryApplicationjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryModulejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserversrcmainresourcesMETAINFgalaxyapplicationContextxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainresourcesMETAINFapplicationContextwebxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappindexjsp&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/index.jsp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Added Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientAdminApplicationjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/AdminApplication.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyModulejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/GalaxyModule.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebrpcGalaxyServicejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyService.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebrpcGalaxyServiceAsyncjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyServiceAsync.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryRepositorygwtxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/Repository.gwt.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxyrepositoryMessagesproperties&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/repository/Messages.properties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainjavaorgmulegalaxywebserverGalaxyServiceImpljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/GalaxyServiceImpl.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainwebappimagesajaxloadergif&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/webapp/images/ajax-loader.gif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrctestjavaorgmulegalaxywebserverGalaxyServiceTestjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/server/GalaxyServiceTest.java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Removed Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Property Changed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;patch&quot;&gt;
&lt;h3&gt;Diff&lt;/h3&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientAdminApplicationjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/AdminApplication.java (0 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/AdminApplication.java	                        (rev 0)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/AdminApplication.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,21 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.web.client;
+
+import java.util.ArrayList;
+
+import com.google.gwt.core.client.EntryPoint;
+
+/**
+ * A simple application implementation which just loads the administration panel.
+ * Useful for simple testing only.
+ */
+public class AdminApplication implements EntryPoint {
+
+    public void onModuleLoad() {
+        Galaxy galaxy = new Galaxy();
+        
+        // no extra modules, so just start an empty Galaxy instance with just
+        // the admin panel.
+        galaxy.initialize(new ArrayList&amp;lt;GalaxyModule&amp;gt;());
+    }
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/AdminApplication.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -54,7 +54,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
 import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
 import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import com.google.gwt.core.client.EntryPoint;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -95,7 +94,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private GalaxyServiceAsync galaxyService;
     private AdministrationPanel adminPanel;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public void initialize(List&amp;lt;GalaxyModule&amp;gt; modules) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public void initialize(final List&amp;lt;GalaxyModule&amp;gt; modules) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         //GXT.setDefaultTheme(Theme.GRAY, true);
         GXT.BLANK_IMAGE_URL = &amp;quot;extjsresources/images/default/s.gif&amp;quot;;
         final String LOGO = &amp;quot;images/galaxy_logo_main_trans.gif&amp;quot;;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -140,17 +139,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             }
 
             public void onSuccess(ApplicationInfo appInfo) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                user = (WUser) appInfo.getUser();
-                // always the left most item
-                rightHeaderPanel.insert(new Label(&amp;quot;Welcome, &amp;quot; + user.getName()), 0);
-                
-                extensions = (List) appInfo.getExtensions();
-                Collections.sort(extensions);
-                
-                plugins = appInfo.getPluginTabs();
-                userManagementSupported = appInfo.isUserManagementSupported();
-                loadTabs(Galaxy.this);
-                showFirstPage();
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                initializeApplication(appInfo, modules);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             }
         });
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -166,6 +155,24 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         Image.prefetch(&amp;quot;images/lightbox.png&amp;quot;);
     }
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    protected void initializeApplication(ApplicationInfo appInfo, final List&amp;lt;GalaxyModule&amp;gt; modules) {
+        user = (WUser) appInfo.getUser();
+        // always the left most item
+        rightHeaderPanel.insert(new Label(&amp;quot;Welcome, &amp;quot; + user.getName()), 0);
+        
+        extensions = (List) appInfo.getExtensions();
+        Collections.sort(extensions);
+        
+        plugins = appInfo.getPluginTabs();
+        userManagementSupported = appInfo.isUserManagementSupported();
+        loadTabs(Galaxy.this);
+        
+        for (GalaxyModule module : modules) {
+            module.initialize(Galaxy.this);
+        }
+        showFirstPage();
+    }
+    
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private void createFooter() {
         ContentPanel southPanel = new ContentPanel();
         southPanel.setBorders(false);
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyModulejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/GalaxyModule.java (0 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/GalaxyModule.java	                        (rev 0)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/GalaxyModule.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,8 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.web.client;
+
+/**
+ * A Module which adds capabilities to Galaxy&amp;#39;s user interface.
+ */
+public interface GalaxyModule {
+    public void initialize(Galaxy galaxy);
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/GalaxyModule.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientPageManagerjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/PageManager.java (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/PageManager.java	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/PageManager.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -185,11 +185,15 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     public int createTab(String name, String token, String toolTip) {
         int index = tabPanel.getItemCount();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        tabPanel.add(createEmptyTab(name, toolTip));
-        tabNames.add(index, token);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        createTab(index, name, token, toolTip);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         return index;
     }
     
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public void createTab(int index, String name, String token, String toolTip) {
+        tabPanel.insert(createEmptyTab(name, toolTip), index);
+        tabNames.add(index, token);
+    }
+    
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected TabItem createEmptyTab(String name, String toolTip) {
         TabItem tab = new TabItem();
         TabItem.HeaderItem header = tab.getHeader();
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebrpcGalaxyServicejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyService.java (0 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyService.java	                        (rev 0)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyService.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,11 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.web.rpc;
+
+import org.mule.galaxy.web.client.RPCException;
+
+import com.google.gwt.user.client.rpc.RemoteService;
+
+public interface GalaxyService extends RemoteService {
+
+    ApplicationInfo getApplicationInfo() throws RPCException;
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyService.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebrpcGalaxyServiceAsyncjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyServiceAsync.java (0 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyServiceAsync.java	                        (rev 0)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyServiceAsync.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,9 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.web.rpc;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+public interface GalaxyServiceAsync {
+
+    void getApplicationInfo(AsyncCallback&amp;lt;ApplicationInfo&amp;gt; callback);
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/rpc/GalaxyServiceAsync.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclient&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;propset&quot;&gt;&lt;h4&gt;Property changes: branches/product_cleanup/repository/gwt-client&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;Name: svn:ignore
   - target
   + target
.settings
.classpath
.project
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientpomxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/pom.xml (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/pom.xml	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/repository/gwt-client/pom.xml	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -55,10 +55,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                         &amp;lt;version&amp;gt;2.0-beta6&amp;lt;/version&amp;gt;
                         &amp;lt;configuration&amp;gt;
                             &amp;lt;gwtVersion&amp;gt;${gwtVersion}&amp;lt;/gwtVersion&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                            &amp;lt;runTarget&amp;gt;org.mule.galaxy.web.Galaxy/Galaxy.html&amp;lt;/runTarget&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                            &amp;lt;runTarget&amp;gt;org.mule.galaxy.repository.Repository/Repository.html&amp;lt;/runTarget&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                             &amp;lt;style&amp;gt;OBF&amp;lt;/style&amp;gt;
                             &amp;lt;compileTargets&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                                &amp;lt;value&amp;gt;org.mule.galaxy.web.Galaxy&amp;lt;/value&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                                &amp;lt;value&amp;gt;org.mule.galaxy.repository.Repository&amp;lt;/value&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                             &amp;lt;/compileTargets&amp;gt;
                             &amp;lt;extraJvmArgs&amp;gt;-Xss1024k -Xmx1024m -Dgwt.nowarn.legacy.tools&amp;lt;/extraJvmArgs&amp;gt;
                             &amp;lt;!--
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryRepositorygwtxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/Repository.gwt.xml (0 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/Repository.gwt.xml	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/Repository.gwt.xml	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,15 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
+
+&amp;lt;!--&amp;lt;!DOCTYPE module PUBLIC &amp;quot;-//Google //DTD gwt-module-configuration XML V1.0//EN&amp;quot;--&amp;gt;
+            &amp;lt;!--&amp;quot;http://google-web-toolkit.googlecode.com/svn/tags/1.4.61/distro-source/core/src/gwt-module.dtd&amp;quot;&amp;gt;--&amp;gt;
+        
+&amp;lt;module&amp;gt;
+
+    &amp;lt;inherits name=&amp;#39;org.mule.galaxy.repository.RepositoryLib&amp;#39;/&amp;gt;
+    
+    &amp;lt;source path=&amp;quot;rpc&amp;quot;/&amp;gt;
+    &amp;lt;source path=&amp;quot;client&amp;quot;/&amp;gt;
+    
+    &amp;lt;entry-point class=&amp;#39;org.mule.galaxy.repository.client.RepositoryApplication&amp;#39;/&amp;gt;
+
+&amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/Repository.gwt.xml
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + text/xml
Name: svn:keywords
   + Rev Date Id
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryRepositoryLibgwtxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -5,23 +5,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         
 &amp;lt;module&amp;gt;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    &amp;lt;!-- Inherit the core Web Toolkit stuff.                  --&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     &amp;lt;inherits name=&amp;#39;org.mule.galaxy.web.GalaxyLib&amp;#39;/&amp;gt;
     &amp;lt;inherits name=&amp;quot;com.google.gwt.gen2.table.Table&amp;quot;/&amp;gt;
     
     &amp;lt;source path=&amp;quot;rpc&amp;quot;/&amp;gt;
     &amp;lt;source path=&amp;quot;client&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-
-    &amp;lt;public path=&amp;quot;public&amp;quot;&amp;gt;
-        &amp;lt;!--
-            Don&amp;#39;t recursively include GWT compiler output when
-            developing with IDE and m2.
-        --&amp;gt;
-        &amp;lt;exclude name=&amp;quot;org.mule.galaxy.web.Galaxy/**&amp;quot;/&amp;gt;
-        &amp;lt;exclude name=&amp;quot;WEB-INF/**&amp;quot;/&amp;gt;
-        &amp;lt;exclude name=&amp;quot;META-INF/**&amp;quot;/&amp;gt; 
-    &amp;lt;/public&amp;gt;
-
-    &amp;lt;stylesheet src=&amp;quot;application.css&amp;quot;/&amp;gt;
-
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; &amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryApplicationjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,5 +1,19 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; package org.mule.galaxy.repository.client;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-public class RepositoryApplication {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.Arrays;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-}
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.client.Galaxy;
+import org.mule.galaxy.web.client.GalaxyModule;
+
+import com.google.gwt.core.client.EntryPoint;
+
+public class RepositoryApplication implements EntryPoint {
+
+    public void onModuleLoad() {
+        Galaxy galaxy = new Galaxy();
+        
+        // Initialize Galaxy with the RepositoryModule
+        galaxy.initialize(Arrays.asList((GalaxyModule)new RepositoryModule()));
+    }
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryModulejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -25,7 +25,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private PropertyInterfaceManager propertyInterfaceManager = new PropertyInterfaceManager();
     private RepositoryConstants repositoryConstants;
     private RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private int repositoryTabIndex;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private int repositoryTabIndex = 0;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private boolean showTypeSystem = true;
     
     public void initialize(Galaxy galaxy) {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -33,6 +33,8 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.repositoryConstants = (RepositoryConstants) GWT.create(RepositoryConstants.class);
 
         createService();
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        loadRepositoryTab();
+        addAdministrationMenuItems();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void addAdministrationMenuItems() {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -86,7 +88,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void loadRepositoryTab() {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        repositoryTabIndex = galaxy.getPageManager().createTab(&amp;quot;Repository&amp;quot;, &amp;quot;item&amp;quot;, repositoryConstants.repo_TabTip());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        galaxy.getPageManager().createTab(repositoryTabIndex, &amp;quot;Repository&amp;quot;, &amp;quot;browse&amp;quot;, repositoryConstants.repo_TabTip());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         createRepositoryPanels();
     }
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -120,6 +122,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public void setShowTypeSystem(boolean showTypeSystem) {
         this.showTypeSystem = showTypeSystem;
     }
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+
+    public void setRepositoryTab(int repositoryTabIndex) {
+        this.repositoryTabIndex = repositoryTabIndex;
+    }
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
 
 }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserver&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;propset&quot;&gt;&lt;h4&gt;Property changes: branches/product_cleanup/repository/server&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;Name: svn:ignore
   + .settings
target
.classpath
.project
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxyrepositoryMessagesproperties&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/repository/Messages.properties ( =&gt; )&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/repository/Messages.properties
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserversrcmainresourcesMETAINFgalaxyapplicationContextxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -12,7 +12,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     &amp;lt;bean id=&amp;quot;coreGwtModule&amp;quot; class=&amp;quot;org.mule.galaxy.web.GwtModule&amp;quot;&amp;gt;
       &amp;lt;property name=&amp;quot;core&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-      &amp;lt;property name=&amp;quot;name&amp;quot; value=&amp;quot;org.mule.galaxy.web.Repository&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+      &amp;lt;property name=&amp;quot;name&amp;quot; value=&amp;quot;org.mule.galaxy.repository.Repository&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;       &amp;lt;property name=&amp;quot;rpcServices&amp;quot;&amp;gt;
         &amp;lt;map&amp;gt;
           &amp;lt;entry key=&amp;quot;/galaxyService.rpc&amp;quot; value-ref=&amp;quot;galaxyService&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainjavaorgmulegalaxywebserverGalaxyServiceImpljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/GalaxyServiceImpl.java (0 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/GalaxyServiceImpl.java	                        (rev 0)
+++ branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/GalaxyServiceImpl.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,92 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.web.server;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.mule.galaxy.Registry;
+import org.mule.galaxy.extension.Extension;
+import org.mule.galaxy.security.AccessControlManager;
+import org.mule.galaxy.security.Permission;
+import org.mule.galaxy.security.User;
+import org.mule.galaxy.security.UserManager;
+import org.mule.galaxy.util.SecurityUtils;
+import org.mule.galaxy.web.GwtFacet;
+import org.mule.galaxy.web.WebManager;
+import org.mule.galaxy.web.client.RPCException;
+import org.mule.galaxy.web.rpc.ApplicationInfo;
+import org.mule.galaxy.web.rpc.GalaxyService;
+import org.mule.galaxy.web.rpc.PluginTabInfo;
+import org.mule.galaxy.web.rpc.WExtensionInfo;
+import org.mule.galaxy.web.rpc.WUser;
+
+public class GalaxyServiceImpl implements GalaxyService {
+
+    private Registry registry;
+    private WebManager webManager;
+    private UserManager userManager;
+    private AccessControlManager accessControlManager;
+    
+    public ApplicationInfo getApplicationInfo() throws RPCException {
+        ApplicationInfo info = new ApplicationInfo();
+        info.setPluginTabs(getPluginTabs());
+        info.setUser(getUserInfo());
+        info.setUserManagementSupported(userManager.isManagementSupported());
+        info.setExtensions(getExtensions());
+        return info;
+    }
+
+    protected Collection&amp;lt;PluginTabInfo&amp;gt; getPluginTabs() {
+        Collection&amp;lt;GwtFacet&amp;gt; facets = webManager.getGwtFacets();
+        ArrayList&amp;lt;PluginTabInfo&amp;gt; wPlugins = new ArrayList&amp;lt;PluginTabInfo&amp;gt;();
+        for (GwtFacet p : facets) {
+            if (!p.getName().equals(&amp;quot;core&amp;quot;)) {
+                PluginTabInfo wp = new PluginTabInfo();
+                wp.setName(p.getName());
+                wp.setToken(p.getToken());
+                wPlugins.add(wp);
+            }
+        }
+        return wPlugins;
+    }
+
+    public List&amp;lt;WExtensionInfo&amp;gt; getExtensions() throws RPCException {
+        ArrayList&amp;lt;WExtensionInfo&amp;gt; exts = new ArrayList&amp;lt;WExtensionInfo&amp;gt;();
+        for (Extension e : registry.getExtensions()) {
+            exts.add(new WExtensionInfo(e.getId(), e.getName(), e.getPropertyDescriptorConfigurationKeys(), e.isMultivalueSupported()));
+        }
+        return exts;
+    }
+
+    public WUser getUserInfo() throws RPCException {
+        User user = SecurityUtils.getCurrentUser();
+        WUser w = SecurityServiceImpl.createWUser(user);
+
+        List&amp;lt;String&amp;gt; perms = new ArrayList&amp;lt;String&amp;gt;();
+
+        for (Permission p : accessControlManager.getGrantedPermissions(user)) {
+            perms.add(p.toString());
+        }
+        w.setPermissions(perms);
+
+        return w;
+    }
+
+    public void setWebManager(WebManager webManager) {
+        this.webManager = webManager;
+    }
+
+    public void setRegistry(Registry registry) {
+        this.registry = registry;
+    }
+
+    public void setUserManager(UserManager userManager) {
+        this.userManager = userManager;
+    }
+
+    public void setAccessControlManager(AccessControlManager accessControlManager) {
+        this.accessControlManager = accessControlManager;
+    }
+    
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/GalaxyServiceImpl.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainresourcesMETAINFapplicationContextwebxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
     &amp;lt;bean id=&amp;quot;coreGwtModule&amp;quot; class=&amp;quot;org.mule.galaxy.web.GwtModule&amp;quot;&amp;gt;
       &amp;lt;property name=&amp;quot;core&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-      &amp;lt;property name=&amp;quot;name&amp;quot; value=&amp;quot;org.mule.galaxy.web.Admin&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+      &amp;lt;property name=&amp;quot;name&amp;quot; value=&amp;quot;org.mule.galaxy.repository.Repository&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;       &amp;lt;property name=&amp;quot;rpcServices&amp;quot;&amp;gt;
         &amp;lt;map&amp;gt;
           &amp;lt;entry key=&amp;quot;/galaxyService.rpc&amp;quot; value-ref=&amp;quot;galaxyService&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappimagesajaxloadergif&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;binary&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/main/webapp/images/ajax-loader.gif&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;cx&quot;&gt;(Binary files differ)
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/main/webapp/images/ajax-loader.gif
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + image/gif
&lt;/span&gt;&lt;a id=&quot;branchesproduct_cleanupwebsrcmainwebappindexjsp&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/web/src/main/webapp/index.jsp (2111 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/webapp/index.jsp	2009-12-16 23:18:07 UTC (rev 2111)
+++ branches/product_cleanup/web/src/main/webapp/index.jsp	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -132,7 +132,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 %&amp;gt;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-&amp;lt;!-- OPTIONAL: include this if you want history support --&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; &amp;lt;iframe src=&amp;quot;javascript:&amp;#39;&amp;#39;&amp;quot; id=&amp;quot;__gwt_historyFrame&amp;quot; style=&amp;quot;width:0;height:0;border:0&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;
 
 &amp;lt;/body&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrctestjavaorgmulegalaxywebserverGalaxyServiceTestjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/server/GalaxyServiceTest.java (0 =&gt; 2112)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/server/GalaxyServiceTest.java	                        (rev 0)
+++ branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/server/GalaxyServiceTest.java	2009-12-17 01:20:49 UTC (rev 2112)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,43 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.web.server;
+
+import java.util.Collection;
+
+import org.mule.galaxy.test.AbstractGalaxyTest;
+import org.mule.galaxy.web.rpc.ApplicationInfo;
+import org.mule.galaxy.web.rpc.GalaxyService;
+import org.mule.galaxy.web.rpc.PluginTabInfo;
+import org.mule.galaxy.web.rpc.WUser;
+
+public class GalaxyServiceTest extends AbstractGalaxyTest {
+
+    protected GalaxyService galaxyService;
+    
+    @Override
+    protected String[] getConfigLocations() {
+        return new String[] { &amp;quot;/META-INF/applicationContext-core.xml&amp;quot;, 
+                              &amp;quot;/META-INF/applicationContext-core-extensions.xml&amp;quot;, 
+                              &amp;quot;/META-INF/applicationContext-acegi-security.xml&amp;quot;,
+                              &amp;quot;/META-INF/applicationContext-web.xml&amp;quot;,
+                              &amp;quot;/META-INF/applicationContext-test.xml&amp;quot; };
+        
+    }
+    
+    public void testGwtPlugins() throws Exception {
+        Collection&amp;lt;PluginTabInfo&amp;gt; plugins = galaxyService.getApplicationInfo().getPluginTabs();
+        assertEquals(0, plugins.size());
+    }
+
+    public void testApplicationInfo() throws Exception {
+        ApplicationInfo appInfo = galaxyService.getApplicationInfo();
+        WUser user = appInfo.getUser();
+        
+        assertNotNull(user.getUsername());
+        Collection&amp;lt;String&amp;gt; permissions = user.getPermissions();
+        assertTrue(permissions.size() &amp;gt; 0);
+        
+        assertTrue(permissions.contains(&amp;quot;MANAGE_USERS&amp;quot;));
+
+        assertNotNull(appInfo.getExtensions());
+    }
+    
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/web/src/test/java/org/mule/galaxy/web/server/GalaxyServiceTest.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://admin.muleforge.org/manage_email


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

You received this message because you are subscribed to the Google Groups &quot;MuleForge Dev&quot; group.&lt;br /&gt;

To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26821588&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.&lt;br /&gt;

To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26821588&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.&lt;br /&gt;

For more options, visit this group at http://groups.google.com/group/muleforgedev?hl=en.&lt;br /&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-galaxy-dev----2112--branches-product_cleanup-repository-server%3A-Make-repository-work-as-separate-module.-tp26821588p26821588.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26820296</id>
	<title>[galaxy-dev]  [2111] branches/product_cleanup/web: Checkpoint.</title>
	<published>2009-12-16T15:18:07Z</published>
	<updated>2009-12-16T15:18:07Z</updated>
	<author>
		<name>dandiep-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt; [2111] branches/product_cleanup/web: Checkpoint.&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;msg&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;Revision&lt;/dt&gt; &lt;dd&gt;&lt;a href=&quot;http://fisheye.muleforge.org/changelog/galaxy/?cs=2111&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;2111&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Author&lt;/dt&gt; &lt;dd&gt;dandiep&lt;/dd&gt;
&lt;dt&gt;Date&lt;/dt&gt; &lt;dd&gt;2009-12-16 17:18:07 -0600 (Wed, 16 Dec 2009)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Log Message&lt;/h3&gt;
&lt;pre&gt;Checkpoint. Repository now compiles as it&amp;#39;s own separate module. Nearly working as a standalone drop in to the web module.&lt;/pre&gt;

&lt;h3&gt;Modified Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebGalaxyLibgwtxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/GalaxyLib.gwt.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientadminAdministrationPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/AdministrationPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupintegrationatomclientsrctestjavaorgmulegalaxyatomclientAtomGwtTestjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/integration/atom-client/src/test/java/org/mule/galaxy/atom/client/AtomGwtTest.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientpomxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientactivityActivityPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/activity/ActivityPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientactivityDateParseExceptionjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/activity/DateParseException.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminInnerPropertyDescriptorFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/InnerPropertyDescriptorForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminLifecycleFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/LifecycleForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminLifecycleListPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/LifecycleListPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminPolicyPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PolicyPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminPropertyDescriptorFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PropertyDescriptorForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminPropertyDescriptorListPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PropertyDescriptorListPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminTypeFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/TypeForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminTypeListPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/TypeListPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientbrowseAbstractBrowsePaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/AbstractBrowsePanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientbrowseArtifactListPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/ArtifactListPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientbrowseBulkEditPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/BulkEditPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientbrowsePolicyResultsPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/PolicyResultsPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemAddArtifactFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddArtifactForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemAddItemFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddItemForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemAddWorkspaceFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddWorkspaceForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemChildItemsPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ChildItemsPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemItemInfoPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemInfoPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemItemPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemItemRolePermissionPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemRolePermissionPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemNameEditPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/NameEditPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemPolicyResultsPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/PolicyResultsPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemRepositoryMenuPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/RepositoryMenuPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyAbstractListRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/AbstractListRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyAbstractPropertyRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/AbstractPropertyRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyArtifactRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/ArtifactRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyEditPropertyPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/EditPropertyPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyEntryMetadataPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/EntryMetadataPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyLifecycleRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/LifecycleRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyLinksRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/LinksRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyMapRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/MapRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyNewPropertyPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/NewPropertyPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyPropertyInterfaceManagerjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/PropertyInterfaceManager.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertySimpleListRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/SimpleListRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertySimpleRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/SimpleRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyUserListRendererjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/UserListRenderer.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilAddItemHelperjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/AddItemHelper.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilItemPathOraclejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/ItemPathOracle.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilLifecycleSelectionPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/LifecycleSelectionPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilPolicySelectionPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/PolicySelectionPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilPropertyDescriptorComparatorjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/PropertyDescriptorComparator.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilRegistryOraclejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/RegistryOracle.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilWTypeComparatorjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/WTypeComparator.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcItemInfojava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/ItemInfo.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcRegistryServicejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/RegistryService.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcRegistryServiceAsyncjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/RegistryServiceAsync.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWApprovalMessagejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WApprovalMessage.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWArtifactTypejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WArtifactType.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWArtifactViewjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WArtifactView.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWCommentjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WComment.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWGovernanceInfojava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WGovernanceInfo.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWIndexjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WIndex.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWLifecyclejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WLifecycle.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWLinksjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WLinks.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPhasejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPhase.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPolicyjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPolicy.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPolicyExceptionjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPolicyException.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPropertyjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WProperty.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPropertyDescriptorjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPropertyDescriptor.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWSearchResultsjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WSearchResults.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWTypejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WType.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserverpomxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserversrctestjavaorgmulegalaxywebserverRegistryServiceTestjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/src/test/java/org/mule/galaxy/web/server/RegistryServiceTest.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebpomxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainresourcesMETAINFapplicationContextwebxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Added Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebAdmingwtxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Admin.gwt.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryRepositoryLibgwtxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryApplicationjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryConstantsjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryConstants.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryMessagesjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryMessages.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryModulejava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/activity/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilStylizedSortableGridjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/StylizedSortableGrid.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/repository/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxyrepositoryRegistryServiceImpljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/repository/RegistryServiceImpl.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxywebContextPathResolverjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/ContextPathResolver.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxywebContextPathSaverFilterjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/main/resources/META-INF/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserversrcmainresourcesMETAINFgalaxyapplicationContextxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Removed Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebGalaxygwtxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Galaxy.gwt.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilStylizedSortableGridjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/StylizedSortableGrid.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/activity/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/ui/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/server/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainjavaorgmulegalaxywebContextPathSaverFilterjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupwebsrcmainjavaorgmulegalaxywebserverContextPathResolverjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/ContextPathResolver.java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;patch&quot;&gt;
&lt;h3&gt;Diff&lt;/h3&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebAdmingwtxmlfromrev2109branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebGalaxygwtxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Admin.gwt.xml (from rev 2109, branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Galaxy.gwt.xml) (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Admin.gwt.xml	                        (rev 0)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Admin.gwt.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,10 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
+
+&amp;lt;!--&amp;lt;!DOCTYPE module PUBLIC &amp;quot;-//Google //DTD gwt-module-configuration XML V1.0//EN&amp;quot;--&amp;gt;
+            &amp;lt;!--&amp;quot;http://google-web-toolkit.googlecode.com/svn/tags/1.4.61/distro-source/core/src/gwt-module.dtd&amp;quot;&amp;gt;--&amp;gt;
+        
+&amp;lt;module&amp;gt;
+    &amp;lt;inherits name=&amp;#39;org.mule.galaxy.web.GalaxyLib&amp;#39;/&amp;gt;
+    
+    &amp;lt;entry-point class=&amp;#39;org.mule.galaxy.web.client.AdminApplication&amp;#39;/&amp;gt;
+&amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebGalaxygwtxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Galaxy.gwt.xml (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Galaxy.gwt.xml	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/Galaxy.gwt.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,11 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
-
-&amp;lt;!--&amp;lt;!DOCTYPE module PUBLIC &amp;quot;-//Google //DTD gwt-module-configuration XML V1.0//EN&amp;quot;--&amp;gt;
-            &amp;lt;!--&amp;quot;http://google-web-toolkit.googlecode.com/svn/tags/1.4.61/distro-source/core/src/gwt-module.dtd&amp;quot;&amp;gt;--&amp;gt;
-        
-&amp;lt;module&amp;gt;
-    &amp;lt;inherits name=&amp;#39;org.mule.galaxy.web.GalaxyLib&amp;#39;/&amp;gt;
-    &amp;lt;inherits name=&amp;quot;com.google.gwt.gen2.table.Table&amp;quot;/&amp;gt;
-    
-    &amp;lt;entry-point class=&amp;#39;org.mule.galaxy.web.client.Galaxy&amp;#39;/&amp;gt;
-&amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebGalaxyLibgwtxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/GalaxyLib.gwt.xml (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/GalaxyLib.gwt.xml	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/GalaxyLib.gwt.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -7,11 +7,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     &amp;lt;!-- Inherit the core Web Toolkit stuff.                  --&amp;gt;
     &amp;lt;inherits name=&amp;#39;com.google.gwt.user.User&amp;#39;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    &amp;lt;inherits name=&amp;#39;com.google.gwt.widgetideas.DatePicker&amp;#39; /&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    &amp;lt;inherits name=&amp;#39;com.google.gwt.widgetideas.GlassPanel&amp;#39; /&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     &amp;lt;inherits name=&amp;#39;com.extjs.gxt.ui.GXT&amp;#39;/&amp;gt;
     &amp;lt;inherits name=&amp;#39;com.google.gwt.i18n.I18N&amp;#39;/&amp;gt;
     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     &amp;lt;source path=&amp;quot;rpc&amp;quot;/&amp;gt;
     &amp;lt;source path=&amp;quot;client&amp;quot;/&amp;gt;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -70,7 +70,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; /**
  * Entry point classes define &amp;lt;code&amp;gt;onModuleLoad()&amp;lt;/code&amp;gt;.
  */
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-public class Galaxy implements EntryPoint {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+public class Galaxy {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     private SecurityServiceAsync securityService;
     private HeartbeatServiceAsync heartbeatService;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -93,11 +93,9 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private PageManager pageManager;
     private ContentPanel centerPanel;
     private GalaxyServiceAsync galaxyService;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private AdministrationPanel adminPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    /**
-     * This is the entry point method.
-     */
-    public void onModuleLoad() {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public void initialize(List&amp;lt;GalaxyModule&amp;gt; modules) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         //GXT.setDefaultTheme(Theme.GRAY, true);
         GXT.BLANK_IMAGE_URL = &amp;quot;extjsresources/images/default/s.gif&amp;quot;;
         final String LOGO = &amp;quot;images/galaxy_logo_main_trans.gif&amp;quot;;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -284,11 +282,15 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected void loadAdminTab() {
         if (showAdminTab(user)) {
             adminTabIndex = pageManager.createTab(&amp;quot;Administration&amp;quot;, &amp;quot;admin&amp;quot;, administrationConstants.admin_TabTip());
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            AdministrationPanel adminPanel = createAdministrationPanel();
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            adminPanel = createAdministrationPanel();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             pageManager.createPageInfo(&amp;quot;admin&amp;quot;, adminPanel, adminTabIndex);
         }
     }
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public AdministrationPanel getAministrationPanel() {
+        return adminPanel;
+    }
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected void loadPluginTabs() {
         for (PluginTabInfo plugin : getPlugins()) {
             int index = pageManager.createTab(plugin.getName(), plugin.getRootToken(), &amp;quot;&amp;quot;);
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientadminAdministrationPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/AdministrationPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/AdministrationPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/AdministrationPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -252,5 +252,15 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.utilityItems = utilityItems;
     }
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public void addUtilityMenuItem(NavMenuItem navMenuItem) {
+        // TODO Auto-generated method stub
+        
+    }
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public void addManageMenuItem(NavMenuItem item) {
+        // TODO Auto-generated method stub
+        
+    }
+
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilStylizedSortableGridjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/StylizedSortableGrid.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/StylizedSortableGrid.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/StylizedSortableGrid.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,162 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
-
-import com.google.gwt.gen2.table.client.SortableGrid;
-import com.google.gwt.gen2.table.client.TableModelHelper.ColumnSortList;
-import com.google.gwt.gen2.table.event.client.RowHighlightEvent;
-import com.google.gwt.gen2.table.event.client.RowHighlightHandler;
-import com.google.gwt.gen2.table.event.client.RowSelectionEvent;
-import com.google.gwt.gen2.table.event.client.RowSelectionHandler;
-import com.google.gwt.gen2.table.event.client.RowUnhighlightEvent;
-import com.google.gwt.gen2.table.event.client.RowUnhighlightHandler;
-import com.google.gwt.gen2.table.event.client.TableEvent.Row;
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Element;
-
-public class StylizedSortableGrid extends SortableGrid {
-
-    public StylizedSortableGrid(int rows, int columns) {
-        super(rows, columns);
-
-        setCellSpacing(0);
-        setCellPadding(4);
-
-        addRowHighlightHandler(new RowHighlightHandler() {
-            public void onRowHighlight(RowHighlightEvent event) {
-                int idx = event.getValue().getRowIndex();
-                if (idx == 0)
-                    return;
-                getRowFormatter().setStyleName(idx, &amp;quot;SortableGrid-selectedRow&amp;quot;);
-            }
-        });
-        addRowUnhighlightHandler(new RowUnhighlightHandler() {
-            public void onRowUnhighlight(RowUnhighlightEvent event) {
-                int idx = event.getValue().getRowIndex();
-                if (idx == 0 || getSelectedRows().contains(idx))
-                    return;
-
-                getRowFormatter().setStyleName(idx, &amp;quot;&amp;quot;);
-            }
-        });
-        addRowSelectionHandler(new RowSelectionHandler() {
-
-            public void onRowSelection(RowSelectionEvent event) {
-                for (Row row : event.getDeselectedRows()) {
-                    int idx = row.getRowIndex();
-                    if (idx == 0)
-                        return;
-
-                    getRowFormatter().setStyleName(idx, &amp;quot;&amp;quot;);
-                }
-
-                for (Row row : event.getSelectedRows()) {
-                    int idx = row.getRowIndex();
-                    if (idx == 0)
-                        return;
-
-                    getRowFormatter().setStyleName(idx, &amp;quot;SortableGrid-selectedRow&amp;quot;);
-                }
-            }
-        });
-
-        setColumnSorter(new ColumnSorter() {
-
-            @Override
-            public void onSortColumn(SortableGrid grid, ColumnSortList sortList,
-                                     SortableGrid.ColumnSorterCallback callback) {
-                // Get the primary column and sort order
-                int column = sortList.getPrimaryColumn();
-                boolean ascending = sortList.isPrimaryAscending();
-
-                // Apply the default quicksort algorithm
-                SelectionGridCellFormatter formatter = grid.getSelectionGridCellFormatter();
-                Element[] tdElems = new Element[grid.getRowCount()];
-                for (int i = 0; i &amp;lt; tdElems.length; i++) {
-                    tdElems[i] = formatter.getElement(i, column);
-                }
-                
-                Element[] nonHeaders = new Element[tdElems.length-1];
-                
-                for (int i = 1; i &amp;lt; tdElems.length; i++) {
-                    nonHeaders[i-1] = tdElems[i];
-                }
-                
-                quicksort(nonHeaders, 0, nonHeaders.length - 1);
-
-                for (int i = 1; i &amp;lt; tdElems.length; i++) {
-                    tdElems[i] = nonHeaders[i-1];
-                }
-                
-                // Convert tdElems to trElems, reversing if needed
-                Element[] trElems = new Element[tdElems.length];
-                trElems[0] = DOM.getParent(tdElems[0]);
-                if (ascending) {
-                    for (int i = 1; i &amp;lt; tdElems.length; i++) {
-                        trElems[i] = DOM.getParent(tdElems[i]);
-                    }
-                } else {
-                    int maxElem = tdElems.length - 1;
-                    for (int i = 1; i &amp;lt;= maxElem; i++) {
-                        trElems[i] = DOM.getParent(tdElems[maxElem - i + 1]);
-                    }
-                }
-
-                // Use the callback to complete the sorting
-                callback.onSortingComplete(trElems);
-            }
-
-            /**
-             * Recursive quicksort algorithm.
-             * 
-             * @param tdElems
-             *            an array of row elements
-             * @param start
-             *            the start index to sort
-             * @param end
-             *            the last index to sort
-             */
-            private void quicksort(Element[] tdElems, int start, int end) {
-                // No need to sort
-                if (start &amp;gt;= end) {
-                    return;
-                }
-
-                // Sort this set
-                int i = start + 1;
-                int k = end;
-                String pivot = DOM.getInnerText(tdElems[start]);
-                while (k &amp;gt;= i) {
-                    if (DOM.getInnerText(tdElems[i]).compareTo(pivot) &amp;lt; 0) {
-                        // Move i until the value is great than the pivot
-                        i++;
-                    } else if (k == i) {
-                        // Don&amp;#39;t swap if equal
-                        k--;
-                    } else if (DOM.getInnerText(tdElems[k]).compareTo(pivot) &amp;lt; 0) {
-                        // Swap the elements at k and i
-                        Element tr = tdElems[i];
-                        tdElems[i] = tdElems[k];
-                        tdElems[k] = tr;
-                        i++;
-                        k--;
-                    } else {
-                        // Decrement k
-                        k--;
-                    }
-                }
-
-                // Swap k and pivot
-                if (k != start) {
-                    Element tr = tdElems[k];
-                    tdElems[k] = tdElems[start];
-                    tdElems[start] = tr;
-                }
-
-                // Sort the subsets
-                quicksort(tdElems, start, k - 1);
-                quicksort(tdElems, k + 1, end);
-            }
-        });
-
-    }
-
-}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupintegrationatomclientsrctestjavaorgmulegalaxyatomclientAtomGwtTestjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/integration/atom-client/src/test/java/org/mule/galaxy/atom/client/AtomGwtTest.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/integration/atom-client/src/test/java/org/mule/galaxy/atom/client/AtomGwtTest.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/integration/atom-client/src/test/java/org/mule/galaxy/atom/client/AtomGwtTest.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -3,9 +3,9 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 
 import org.mule.galaxy.Item;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
-import org.mule.galaxy.web.rpc.RegistryService;
-import org.mule.galaxy.web.rpc.WSearchResults;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryService;
+import org.mule.galaxy.repository.rpc.WSearchResults;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 public class AtomGwtTest extends AbstractAtomTest {
     protected RegistryService gwtRegistry;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientpomxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/pom.xml (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/pom.xml	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/pom.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -7,7 +7,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     &amp;lt;/parent&amp;gt;
     &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
     &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    &amp;lt;artifactId&amp;gt;galaxy-repository-client&amp;lt;/artifactId&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    &amp;lt;artifactId&amp;gt;galaxy-repository-gwt-client&amp;lt;/artifactId&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     &amp;lt;version&amp;gt;2.0-SNAPSHOT&amp;lt;/version&amp;gt;
     &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;
     &amp;lt;name&amp;gt;Galaxy Repository: GWT Client&amp;lt;/name&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryRepositoryLibgwtxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,27 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
+
+&amp;lt;!--&amp;lt;!DOCTYPE module PUBLIC &amp;quot;-//Google //DTD gwt-module-configuration XML V1.0//EN&amp;quot;--&amp;gt;
+            &amp;lt;!--&amp;quot;http://google-web-toolkit.googlecode.com/svn/tags/1.4.61/distro-source/core/src/gwt-module.dtd&amp;quot;&amp;gt;--&amp;gt;
+        
+&amp;lt;module&amp;gt;
+
+    &amp;lt;!-- Inherit the core Web Toolkit stuff.                  --&amp;gt;
+    &amp;lt;inherits name=&amp;#39;org.mule.galaxy.web.GalaxyLib&amp;#39;/&amp;gt;
+    &amp;lt;inherits name=&amp;quot;com.google.gwt.gen2.table.Table&amp;quot;/&amp;gt;
+    
+    &amp;lt;source path=&amp;quot;rpc&amp;quot;/&amp;gt;
+    &amp;lt;source path=&amp;quot;client&amp;quot;/&amp;gt;
+
+    &amp;lt;public path=&amp;quot;public&amp;quot;&amp;gt;
+        &amp;lt;!--
+            Don&amp;#39;t recursively include GWT compiler output when
+            developing with IDE and m2.
+        --&amp;gt;
+        &amp;lt;exclude name=&amp;quot;org.mule.galaxy.web.Galaxy/**&amp;quot;/&amp;gt;
+        &amp;lt;exclude name=&amp;quot;WEB-INF/**&amp;quot;/&amp;gt;
+        &amp;lt;exclude name=&amp;quot;META-INF/**&amp;quot;/&amp;gt; 
+    &amp;lt;/public&amp;gt;
+
+    &amp;lt;stylesheet src=&amp;quot;application.css&amp;quot;/&amp;gt;
+
+&amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/RepositoryLib.gwt.xml
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + text/xml
Name: svn:keywords
   + Rev Date Id
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryApplicationjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,5 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client;
+
+public class RepositoryApplication {
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryApplication.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryConstantsjavafromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebclientuiRepositoryConstantsjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryConstants.java (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/ui/RepositoryConstants.java) (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryConstants.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryConstants.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,124 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client;
+
+/**
+ * Interface to represent the constants contained in resource bundle:
+ */
+public interface RepositoryConstants extends com.google.gwt.i18n.client.Constants {
+
+  /**
+   * Translated &amp;quot;Specify the type of item you are adding, the workspace (parent) where you want it stored, and a name for it. Additional fields appear depending on the type of item you select (see the &amp;lt;a href=\&amp;quot;http://www.mulesoft.org/display/TCAT/Managing+the+Repository\&amp;quot; target=\&amp;quot;_blank\&amp;quot;&amp;gt;online help&amp;lt;/a&amp;gt; for details). Click &amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt; to create the item.&amp;quot;.
+   *
+   * @return translated &amp;quot;Specify the type of item you are adding, the workspace (parent) where you want it stored, and a name for it. Additional fields appear depending on the type of item you select (see the &amp;lt;a href=\&amp;quot;http://www.mulesoft.org/display/TCAT/Managing+the+Repository\&amp;quot; target=\&amp;quot;_blank\&amp;quot;&amp;gt;online help&amp;lt;/a&amp;gt; for details). Click &amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt; to create the item.&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Specify the type of item you are adding, the workspace (parent) where you want it stored, and a name for it. Additional fields appear depending on the type of item you select (see the &amp;lt;a href=\&amp;quot;http://www.mulesoft.org/display/TCAT/Managing+the+Repository\&amp;quot; target=\&amp;quot;_blank\&amp;quot;&amp;gt;online help&amp;lt;/a&amp;gt; for details). Click &amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt; to create the item.&amp;quot;)
+  @Key(&amp;quot;repo_Add_Item_Tip&amp;quot;)
+  String repo_Add_Item_Tip();
+
+  /**
+   * Translated &amp;quot;Deletes the currently selected workspace(s) or artifact(s)&amp;quot;.
+   *
+   * @return translated &amp;quot;Deletes the currently selected workspace(s) or artifact(s)&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Deletes the currently selected workspace(s) or artifact(s)&amp;quot;)
+  @Key(&amp;quot;repo_Delete&amp;quot;)
+  String repo_Delete();
+
+  /**
+   * Translated &amp;quot;Display related help topic on www.mulesoft.org&amp;quot;.
+   *
+   * @return translated &amp;quot;Display related help topic on www.mulesoft.org&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Display related help topic on www.mulesoft.org&amp;quot;)
+  @Key(&amp;quot;repo_HelpLink&amp;quot;)
+  String repo_HelpLink();
+
+  /**
+   * Translated &amp;quot;View and edit the name, metadata, and comments for the current workspace or item&amp;quot;.
+   *
+   * @return translated &amp;quot;View and edit the name, metadata, and comments for the current workspace or item&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;View and edit the name, metadata, and comments for the current workspace or item&amp;quot;)
+  @Key(&amp;quot;repo_Info_TabTip&amp;quot;)
+  String repo_Info_TabTip();
+
+  /**
+   * Translated &amp;quot;Adds a new item to the repository&amp;quot;.
+   *
+   * @return translated &amp;quot;Adds a new item to the repository&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Adds a new item to the repository&amp;quot;)
+  @Key(&amp;quot;repo_Items_New&amp;quot;)
+  String repo_Items_New();
+
+  /**
+   * Translated &amp;quot;Add, view, and delete items in the repository&amp;quot;.
+   *
+   * @return translated &amp;quot;Add, view, and delete items in the repository&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Add, view, and delete items in the repository&amp;quot;)
+  @Key(&amp;quot;repo_Items_TabTip&amp;quot;)
+  String repo_Items_TabTip();
+
+  /**
+   * Translated &amp;quot;Adds a new artifact (file) to the current workspace&amp;quot;.
+   *
+   * @return translated &amp;quot;Adds a new artifact (file) to the current workspace&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Adds a new artifact (file) to the current workspace&amp;quot;)
+  @Key(&amp;quot;repo_NewArtifact&amp;quot;)
+  String repo_NewArtifact();
+
+  /**
+   * Translated &amp;quot;Adds a new workspace under the current workspace&amp;quot;.
+   *
+   * @return translated &amp;quot;Adds a new workspace under the current workspace&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Adds a new workspace under the current workspace&amp;quot;)
+  @Key(&amp;quot;repo_NewWorkspace&amp;quot;)
+  String repo_NewWorkspace();
+
+  /**
+   * Translated &amp;quot;Apply policies to the different lifecycle phases for the current workspace or item&amp;quot;.
+   *
+   * @return translated &amp;quot;Apply policies to the different lifecycle phases for the current workspace or item&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Apply policies to the different lifecycle phases for the current workspace or item&amp;quot;)
+  @Key(&amp;quot;repo_Policies_TabTip&amp;quot;)
+  String repo_Policies_TabTip();
+
+  /**
+   * Translated &amp;quot;Specify the type of access each role has to the current workspace or item&amp;quot;.
+   *
+   * @return translated &amp;quot;Specify the type of access each role has to the current workspace or item&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Specify the type of access each role has to the current workspace or item&amp;quot;)
+  @Key(&amp;quot;repo_Security_TabTip&amp;quot;)
+  String repo_Security_TabTip();
+
+  /**
+   * Translated &amp;quot;For each role, specify how users with that role can access this artifact or workspace. In the row for the role whose permissions you want to change, select whether you want to grant or revoke the right to read, modify, or delete the item, or to manage policies for the item.&amp;quot;.
+   *
+   * @return translated &amp;quot;For each role, specify how users with that role can access this artifact or workspace. In the row for the role whose permissions you want to change, select whether you want to grant or revoke the right to read, modify, or delete the item, or to manage policies for the item.&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;For each role, specify how users with that role can access this artifact or workspace. In the row for the role whose permissions you want to change, select whether you want to grant or revoke the right to read, modify, or delete the item, or to manage policies for the item.&amp;quot;)
+  @Key(&amp;quot;repo_Security_Tip&amp;quot;)
+  String repo_Security_Tip();
+
+  /**
+   * Translated &amp;quot;Manage your repository of applications, servers, and server groups&amp;quot;.
+   *
+   * @return translated &amp;quot;Manage your repository of applications, servers, and server groups&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;Manage your repository of applications, servers, and server groups&amp;quot;)
+  @Key(&amp;quot;repo_TabTip&amp;quot;)
+  String repo_TabTip();
+
+  /**
+   * Translated &amp;quot;The repository stores applications and other objects as &amp;lt;i&amp;gt;artifacts&amp;lt;/i&amp;gt;. Artifacts are organized into &amp;lt;i&amp;gt;workspaces&amp;lt;/i&amp;gt;, such as the Applications workspace where your applications are stored by default. You can search or browse the repository, view the details of your artifacts, and add metadata and comments about them.&amp;quot;.
+   *
+   * @return translated &amp;quot;The repository stores applications and other objects as &amp;lt;i&amp;gt;artifacts&amp;lt;/i&amp;gt;. Artifacts are organized into &amp;lt;i&amp;gt;workspaces&amp;lt;/i&amp;gt;, such as the Applications workspace where your applications are stored by default. You can search or browse the repository, view the details of your artifacts, and add metadata and comments about them.&amp;quot;
+   */
+  @DefaultStringValue(&amp;quot;The repository stores applications and other objects as &amp;lt;i&amp;gt;artifacts&amp;lt;/i&amp;gt;. Artifacts are organized into &amp;lt;i&amp;gt;workspaces&amp;lt;/i&amp;gt;, such as the Applications workspace where your applications are stored by default. You can search or browse the repository, view the details of your artifacts, and add metadata and comments about them.&amp;quot;)
+  @Key(&amp;quot;repo_Tip&amp;quot;)
+  String repo_Tip();
+}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryMessagesjavafromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebclientuiRepositoryMessagesjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryMessages.java (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/ui/RepositoryMessages.java) (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryMessages.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryMessages.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client;
+
+public interface RepositoryMessages extends com.google.gwt.i18n.client.Messages {
+}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientRepositoryModulejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,125 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client;
+
+import org.mule.galaxy.repository.client.activity.ActivityPanel;
+import org.mule.galaxy.repository.client.admin.LifecycleForm;
+import org.mule.galaxy.repository.client.admin.LifecycleListPanel;
+import org.mule.galaxy.repository.client.admin.PolicyPanel;
+import org.mule.galaxy.repository.client.admin.PropertyDescriptorForm;
+import org.mule.galaxy.repository.client.admin.PropertyDescriptorListPanel;
+import org.mule.galaxy.repository.client.admin.TypeForm;
+import org.mule.galaxy.repository.client.admin.TypeListPanel;
+import org.mule.galaxy.repository.client.item.RepositoryMenuPanel;
+import org.mule.galaxy.repository.client.property.PropertyInterfaceManager;
+import org.mule.galaxy.repository.rpc.RegistryService;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.web.client.Galaxy;
+import org.mule.galaxy.web.client.GalaxyModule;
+import org.mule.galaxy.web.client.NavMenuItem;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.ServiceDefTarget;
+
+public class RepositoryModule implements GalaxyModule {
+    private Galaxy galaxy;
+    private PropertyInterfaceManager propertyInterfaceManager = new PropertyInterfaceManager();
+    private RepositoryConstants repositoryConstants;
+    private RegistryServiceAsync registryService;
+    private int repositoryTabIndex;
+    private boolean showTypeSystem = true;
+    
+    public void initialize(Galaxy galaxy) {
+        this.galaxy = galaxy;
+        this.repositoryConstants = (RepositoryConstants) GWT.create(RepositoryConstants.class);
+
+        createService();
+    }
+
+    protected void addAdministrationMenuItems() {
+
+        AdministrationPanel adminPanel = galaxy.getAministrationPanel();
+        if (galaxy.hasPermission(&amp;quot;VIEW_ACTIVITY&amp;quot;)) {
+            adminPanel.addUtilityMenuItem(new NavMenuItem(&amp;quot;Activity&amp;quot;,
+                                                          &amp;quot;ActivityPanel&amp;quot;,
+                                                          new ActivityPanel(adminPanel, galaxy, registryService),
+                                                          null));
+        }
+        
+        if (galaxy.hasPermission(&amp;quot;MANAGE_LIFECYCLES&amp;quot;)) {
+            NavMenuItem item = new NavMenuItem(&amp;quot;Lifecycles&amp;quot;,
+                                               &amp;quot;lifecycles&amp;quot;,
+                                               new LifecycleListPanel(adminPanel, registryService),
+                                               new LifecycleForm(adminPanel, registryService));
+            adminPanel.addManageMenuItem(item);
+        }
+        
+        if (isShowTypeSystem()) {
+            if (galaxy.hasPermission(&amp;quot;MANAGE_POLICIES&amp;quot;)) {
+                NavMenuItem item = new NavMenuItem(&amp;quot;Policies&amp;quot;, &amp;quot;policies&amp;quot;, new PolicyPanel(adminPanel, galaxy, registryService), null);
+                adminPanel.addManageMenuItem(item);
+            }
+
+            if (galaxy.hasPermission(&amp;quot;MANAGE_PROPERTIES&amp;quot;)) {
+                NavMenuItem item = new NavMenuItem(&amp;quot;Properties&amp;quot;,
+                        &amp;quot;properties&amp;quot;,
+                        new PropertyDescriptorListPanel(adminPanel, registryService),
+                        new PropertyDescriptorForm(adminPanel, this));
+                adminPanel.addManageMenuItem(item);
+            }
+
+            if (galaxy.hasPermission(&amp;quot;MANAGE_PROPERTIES&amp;quot;)) {
+                NavMenuItem item = new NavMenuItem(&amp;quot;Types&amp;quot;,
+                        &amp;quot;types&amp;quot;,
+                        new TypeListPanel(adminPanel, registryService),
+                        new TypeForm(adminPanel, this));
+                adminPanel.addManageMenuItem(item);
+            }
+        }
+    }
+    
+    protected RepositoryMenuPanel createRepositoryPanels() {
+        return new RepositoryMenuPanel(this);
+    }
+
+    public int getRepositoryTab() {
+        return repositoryTabIndex;
+    }
+
+    protected void loadRepositoryTab() {
+        repositoryTabIndex = galaxy.getPageManager().createTab(&amp;quot;Repository&amp;quot;, &amp;quot;item&amp;quot;, repositoryConstants.repo_TabTip());
+        createRepositoryPanels();
+    }
+
+    private void createService() {
+        this.registryService = (RegistryServiceAsync) GWT.create(RegistryService.class);
+        ServiceDefTarget target = (ServiceDefTarget) registryService;
+        String baseUrl = GWT.getModuleBaseURL();
+        target.setServiceEntryPoint(baseUrl + &amp;quot;../handler/registry.rpc&amp;quot;);
+    }
+
+    public Galaxy getGalaxy() {
+        return galaxy;
+    }
+
+    public PropertyInterfaceManager getPropertyInterfaceManager() {
+        return propertyInterfaceManager;
+    }
+
+    public RepositoryConstants getRepositoryConstants() {
+        return repositoryConstants;
+    }
+
+    public RegistryServiceAsync getRegistryService() {
+        return registryService;
+    }
+
+    public boolean isShowTypeSystem() {
+        return showTypeSystem;
+    }
+
+    public void setShowTypeSystem(boolean showTypeSystem) {
+        this.showTypeSystem = showTypeSystem;
+    }
+    
+
+}
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/RepositoryModule.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientactivityfromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebclientactivity&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/activity (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/activity) ( =&gt; )&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/activity/ActivityPanel.java
===================================================================
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/activity/ActivityPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/activity/ActivityPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,14 +16,19 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.activity;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.activity;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+
+import org.mule.galaxy.repository.client.util.ItemPathOracle;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractFlowComposite;
 import org.mule.galaxy.web.client.ErrorPanel;
 import org.mule.galaxy.web.client.Galaxy;
 import org.mule.galaxy.web.client.ui.help.InlineHelpPanel;
 import org.mule.galaxy.web.client.util.InlineFlowPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.util.ItemPathOracle;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
 import org.mule.galaxy.web.rpc.WActivity;
 import org.mule.galaxy.web.rpc.WUser;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -48,10 +53,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.SuggestBox;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.Collection;
-import java.util.Date;
-import java.util.Iterator;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class ActivityPanel extends AbstractFlowComposite {
 
     private ListBox userLB;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -67,11 +68,13 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private DateField startDate;
     private DateField endDate;
     private final ErrorPanel errorPanel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync service;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public ActivityPanel(ErrorPanel errorPanel, final Galaxy galaxy) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public ActivityPanel(ErrorPanel errorPanel, final Galaxy galaxy, RegistryServiceAsync service) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super();
         this.errorPanel = errorPanel;
         this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.service = service;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     public void initialize() {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -136,7 +139,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         searchTable.setWidget(0, 5, textTB);
 
         searchTable.setWidget(1, 4, new Label(&amp;quot;Relating to:&amp;quot;));
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        itemSB = new SuggestBox(new ItemPathOracle(galaxy, errorPanel));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        itemSB = new SuggestBox(new ItemPathOracle(service, errorPanel));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         itemSB.setStyleName(&amp;quot;x-form-text&amp;quot;);
         itemSB.setText(&amp;quot;[All Items]&amp;quot;);
         searchTable.setWidget(1, 5, itemSB);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -220,36 +223,17 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         Date toDate = endDate.getValue();
 
         if(fromDate != null &amp;amp;&amp;amp; endDate != null) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().getActivities(fromDate, toDate, user,
-                    itemSB.getText(),
-                    textTB.getValue(),
-                    eventType, resultStart, maxResults,
-                    ascending, callback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            service.getActivities(fromDate, toDate, user,
+                                  itemSB.getText(),
+                                  textTB.getValue(),
+                                  eventType, resultStart, maxResults,
+                                  ascending, callback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         }
 
 
     }
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private Date parseDate(String s) throws DateParseException {
-        if (s.length() != 10 || s.charAt(4) != &amp;#39;-&amp;#39; || s.charAt(7) != &amp;#39;-&amp;#39;) {
-            throw new DateParseException();
-        }
-
-        String yearStr = s.substring(0, 4);
-        String monthStr = s.substring(5, 7);
-        String dayStr = s.substring(8, 10);
-
-        try {
-            int year = new Integer(yearStr).intValue();
-            int month = new Integer(monthStr).intValue();
-            int day = new Integer(dayStr).intValue();
-            return new Date(year - 1900, month - 1, day);
-        } catch (NumberFormatException e) {
-            throw new DateParseException();
-        }
-    }
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected void loadResults(Collection o) {
         resultsPanel.clear();
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientactivityDateParseExceptionjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/activity/DateParseException.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/activity/DateParseException.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/activity/DateParseException.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.activity;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.activity;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminfromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebclientadmin&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin) ( =&gt; )&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/InnerPropertyDescriptorForm.java
===================================================================
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/InnerPropertyDescriptorForm.java	2009-12-16 02:14:51 UTC (rev 2110)
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/InnerPropertyDescriptorForm.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,12 +16,13 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.admin;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.property.PropertyInterfaceManager;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractShowable;
 import org.mule.galaxy.web.client.Galaxy;
 import org.mule.galaxy.web.rpc.WExtensionInfo;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.widget.form.TextField;
 import com.google.gwt.event.dom.client.ChangeEvent;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -47,10 +48,13 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private ListBox typeLB;
     private HashMap&amp;lt;String, TextField&amp;lt;String&amp;gt;&amp;gt; fields;
     private Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private PropertyInterfaceManager propertyManager;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     public void initialize(Galaxy galaxy,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                           PropertyInterfaceManager propertyManager,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                            WPropertyDescriptor pd,
                            final FlexTable table) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.propertyManager = propertyManager;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.property = pd;
         this.galaxy = galaxy;
         table.setText(0, 0, &amp;quot;Name:&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -98,7 +102,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             WExtensionInfo e = (WExtensionInfo) itr.next();
 
             // Only show properties which we have edit renderers for
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            if (galaxy.getPropertyInterfaceManager().isExtensionEditable(e.getId())) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            if (propertyManager.isExtensionEditable(e.getId())) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 typeLB.addItem(e.getDescription(), e.getId());
 
                 if (e.getId().equals(property.getExtension())) {
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminLifecycleFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/LifecycleForm.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/LifecycleForm.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/LifecycleForm.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,16 +16,21 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.admin;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WLifecycle;
+import org.mule.galaxy.repository.rpc.WPhase;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ErrorPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.client.admin.AbstractAdministrationForm;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ui.help.InlineHelpPanel;
 import org.mule.galaxy.web.client.util.LightBox;
 import org.mule.galaxy.web.client.validation.StringNotEmptyValidator;
 import org.mule.galaxy.web.client.validation.ui.ValidatableTextBox;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WLifecycle;
-import org.mule.galaxy.web.rpc.WPhase;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.event.ComponentEvent;
 import com.extjs.gxt.ui.client.event.Listener;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -47,10 +52,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.Widget;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.ArrayList;
-import java.util.Iterator;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class LifecycleForm extends AbstractAdministrationForm {
 
     private WLifecycle lifecycle;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -65,16 +67,18 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private CheckBox defaultLifecycleCB;
     private static Button ok;
     private static Button cancel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public LifecycleForm(AdministrationPanel adminPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public LifecycleForm(AdministrationPanel adminPanel, RegistryServiceAsync registryService) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super(adminPanel, &amp;quot;lifecycles&amp;quot;, &amp;quot;Lifecycle was saved.&amp;quot;, &amp;quot;Lifecycle was deleted.&amp;quot;,
                 &amp;quot;A lifecycle with that name already exists&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.registryService = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         panel.setStyleName(&amp;quot;lifecycle-form-base&amp;quot;);
     }
 
     protected void fetchItem(String id) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().getLifecycle(id, getFetchCallback());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getLifecycle(id, getFetchCallback());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void initializeItem(Object o) {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -346,7 +350,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         lifecycle.setName(nameTB.getValue());
         lifecycle.setInitialPhase(initialPhase);
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().saveLifecycle(lifecycle, getSaveCallback());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.saveLifecycle(lifecycle, getSaveCallback());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void delete() {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -356,7 +360,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
                 if (Dialog.YES.equals(btn.getItemId())) {
                     LifecycleForm.super.delete();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                    adminPanel.getRegistryService().deleteLifecycle(lifecycle.getId(), getDeleteCallback());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                    registryService.deleteLifecycle(lifecycle.getId(), getDeleteCallback());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 }
             }
         };
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminLifecycleListPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/LifecycleListPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/LifecycleListPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/LifecycleListPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,14 +16,20 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.admin;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WLifecycle;
+import org.mule.galaxy.web.client.admin.AbstractAdministrationComposite;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
+import org.mule.galaxy.web.client.ui.help.InlineHelpPanel;
+import org.mule.galaxy.web.client.util.FauxLinkRenderer;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.ListCellRenderer;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.util.FauxLinkRenderer;
-import org.mule.galaxy.web.client.ui.help.InlineHelpPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WLifecycle;
-import org.mule.galaxy.web.rpc.WUser;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BeanModel;
 import com.extjs.gxt.ui.client.data.BeanModelFactory;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -44,21 +50,20 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
 import com.google.gwt.user.client.History;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class LifecycleListPanel extends AbstractAdministrationComposite {
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public LifecycleListPanel(AdministrationPanel a) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
+
+    public LifecycleListPanel(AdministrationPanel a, RegistryServiceAsync registryService) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super(a);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.registryService = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     @Override
     public void doShowPage() {
         super.doShowPage();
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().getLifecycles(new AbstractCallback&amp;lt;Collection&amp;lt;WLifecycle&amp;gt;&amp;gt;(adminPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getLifecycles(new AbstractCallback&amp;lt;Collection&amp;lt;WLifecycle&amp;gt;&amp;gt;(adminPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public void onSuccess(Collection&amp;lt;WLifecycle&amp;gt; lifecycles) {
                 showLifecycles(lifecycles);
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminPolicyPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PolicyPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/PolicyPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PolicyPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,25 +16,25 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.admin;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.item.PolicyResultsPanel;
+import org.mule.galaxy.repository.client.util.LifecycleSelectionPanel;
+import org.mule.galaxy.repository.client.util.PolicySelectionPanel;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WPolicyException;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractShowable;
 import org.mule.galaxy.web.client.ErrorPanel;
 import org.mule.galaxy.web.client.Galaxy;
 import org.mule.galaxy.web.client.PageInfo;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.item.PolicyResultsPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ui.help.InlineHelpPanel;
 import org.mule.galaxy.web.client.util.InlineFlowPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.util.LifecycleSelectionPanel;
-import org.mule.galaxy.web.client.util.PolicySelectionPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
-import org.mule.galaxy.web.rpc.WPolicyException;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.event.ButtonEvent;
 import com.extjs.gxt.ui.client.event.SelectionListener;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -64,16 +64,16 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private String workspaceId;
     private final Galaxy galaxy;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public PolicyPanel(ErrorPanel adminPanel, Galaxy galaxy) {
-        this(adminPanel, galaxy, null);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public PolicyPanel(ErrorPanel adminPanel, Galaxy galaxy, RegistryServiceAsync registryService) {
+        this(adminPanel, galaxy, registryService, null);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public PolicyPanel(ErrorPanel adminPanel, Galaxy galaxy, String workspaceId) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public PolicyPanel(ErrorPanel adminPanel, Galaxy galaxy, RegistryServiceAsync registryService, String workspaceId) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super();
         this.menuPanel = adminPanel;
         this.galaxy = galaxy;
         this.workspaceId = workspaceId;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.svc = galaxy.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.svc = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         panel = new InlineFlowPanel();
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminPropertyDescriptorFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PropertyDescriptorForm.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/PropertyDescriptorForm.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PropertyDescriptorForm.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,10 +16,12 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.admin;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
+import org.mule.galaxy.web.client.admin.AbstractAdministrationForm;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.event.Listener;
 import com.extjs.gxt.ui.client.event.MessageBoxEvent;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -32,19 +34,22 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     private WPropertyDescriptor property;
     private InnerPropertyDescriptorForm innerForm;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RepositoryModule repositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public PropertyDescriptorForm(AdministrationPanel adminPanel){
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public PropertyDescriptorForm(AdministrationPanel adminPanel, 
+                                  RepositoryModule repositoryModule){
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super(adminPanel, &amp;quot;properties&amp;quot;, &amp;quot;Property was saved.&amp;quot;, &amp;quot;Property was deleted.&amp;quot;,
               &amp;quot;A property with that name already exists.&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.repositoryModule = repositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void addFields(final FlexTable table) {
         this.innerForm = new InnerPropertyDescriptorForm();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        innerForm.initialize(galaxy, property, table);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        innerForm.initialize(galaxy, repositoryModule.getPropertyInterfaceManager(), property, table);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void fetchItem(String id) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().getPropertyDescriptor(id, getFetchCallback());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        repositoryModule.getRegistryService().getPropertyDescriptor(id, getFetchCallback());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     public String getTitle() {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -71,7 +76,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         property = innerForm.getPropertyDescriptor();
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().savePropertyDescriptor(property, getSaveCallback());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        repositoryModule.getRegistryService().savePropertyDescriptor(property, getSaveCallback());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void delete() {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -82,8 +87,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             if (Dialog.YES.equals(btn.getItemId())) {
               PropertyDescriptorForm.super.delete();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-              RegistryServiceAsync svc = adminPanel.getRegistryService();
-              svc.deletePropertyDescriptor(property.getId(), getDeleteCallback());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+              repositoryModule.getRegistryService().deletePropertyDescriptor(property.getId(), getDeleteCallback());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             }
           }
         };
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminPropertyDescriptorListPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PropertyDescriptorListPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/PropertyDescriptorListPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/PropertyDescriptorListPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,12 +16,18 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.admin;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.AbstractCallback;
-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.ArrayList;
+import java.util.List;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.WidgetHelper;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.client.admin.AbstractAdministrationComposite;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ui.help.InlineHelpPanel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BeanModel;
 import com.extjs.gxt.ui.client.data.BeanModelFactory;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -33,7 +39,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.extjs.gxt.ui.client.store.ListStore;
 import com.extjs.gxt.ui.client.store.Store;
 import com.extjs.gxt.ui.client.widget.ContentPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import com.extjs.gxt.ui.client.widget.layout.FitLayout;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.extjs.gxt.ui.client.widget.form.StoreFilterField;
 import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
 import com.extjs.gxt.ui.client.widget.grid.ColumnData;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -41,25 +46,24 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.extjs.gxt.ui.client.widget.grid.Grid;
 import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
 import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import com.extjs.gxt.ui.client.widget.grid.BufferView;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
 import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
 import com.google.gwt.user.client.History;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.ArrayList;
-import java.util.List;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class PropertyDescriptorListPanel
         extends AbstractAdministrationComposite {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public PropertyDescriptorListPanel(AdministrationPanel a) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
+
+    public PropertyDescriptorListPanel(AdministrationPanel a, RegistryServiceAsync registryService) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super(a);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.registryService = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     @Override
     public void doShowPage() {
         super.doShowPage();
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().getPropertyDescriptors(false, new AbstractCallback&amp;lt;List&amp;lt;WPropertyDescriptor&amp;gt;&amp;gt;(adminPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getPropertyDescriptors(false, new AbstractCallback&amp;lt;List&amp;lt;WPropertyDescriptor&amp;gt;&amp;gt;(adminPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public void onSuccess(List&amp;lt;WPropertyDescriptor&amp;gt; result) {
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminTypeFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/TypeForm.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/TypeForm.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/TypeForm.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,19 +16,22 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.admin;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.client.util.PropertyDescriptorComparator;
+import org.mule.galaxy.repository.client.util.StylizedSortableGrid;
+import org.mule.galaxy.repository.client.util.WTypeComparator;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
+import org.mule.galaxy.repository.rpc.WType;
+import org.mule.galaxy.web.client.admin.AbstractAdministrationForm;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.InlineFlowPanel;
 import org.mule.galaxy.web.client.util.LightBox;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.util.PropertyDescriptorComparator;
-import org.mule.galaxy.web.client.util.StylizedSortableGrid;
-import org.mule.galaxy.web.client.util.WTypeComparator;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.validation.StringNotEmptyValidator;
 import org.mule.galaxy.web.client.validation.ui.ValidatableTextBox;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
-import org.mule.galaxy.web.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.event.Listener;
 import com.extjs.gxt.ui.client.event.MessageBoxEvent;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -66,10 +69,14 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private List&amp;lt;WPropertyDescriptor&amp;gt; globalProperties;
     private SortableGrid propertiesTable;
     private InnerPropertyDescriptorForm innerForm;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
+    private final RepositoryModule repositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public TypeForm(AdministrationPanel adminPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public TypeForm(AdministrationPanel adminPanel, RepositoryModule repositoryModule) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super(adminPanel, &amp;quot;types&amp;quot;, &amp;quot;Type was saved.&amp;quot;, &amp;quot;Type was deleted.&amp;quot;,
                 &amp;quot;A type with that name already exists.&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.repositoryModule = repositoryModule;
+        this.registryService = repositoryModule.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void addFields(final FlexTable table) {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -203,7 +210,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         FlexTable table = new FlexTable();
         container.add(table);
         this.innerForm = new InnerPropertyDescriptorForm();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        innerForm.initialize(galaxy, p, table);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        innerForm.initialize(galaxy, repositoryModule.getPropertyInterfaceManager(), p, table);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         Button cancel = new Button(&amp;quot;Cancel&amp;quot;);
         cancel.addClickHandler(new ClickHandler() {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -253,7 +260,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void fetchItem(String id) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().getType(id, getFetchCallback());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getType(id, getFetchCallback());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void initializeProperties(List&amp;lt;WPropertyDescriptor&amp;gt; pds) {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -379,7 +386,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void intializeTypesAndProperties() {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             public void onSuccess(List&amp;lt;WType&amp;gt; types) {
                 initializeTypes(types);
             }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -391,7 +398,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             }
         });
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().getPropertyDescriptors(false, new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getPropertyDescriptors(false, new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             public void onSuccess(Object pds) {
                 initializeProperties((List&amp;lt;WPropertyDescriptor&amp;gt;) pds);
             }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -410,7 +417,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             return;
         }
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        RegistryServiceAsync svc = adminPanel.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        RegistryServiceAsync svc = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         type.setName(nameTB.getTextBox().getText());
         type.setAllowedChildrenIds(new ArrayList&amp;lt;String&amp;gt;());
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -444,8 +451,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
                 if (Dialog.YES.equals(btn.getItemId())) {
                     TypeForm.super.delete();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                    RegistryServiceAsync svc = adminPanel.getRegistryService();
-                    svc.deletePropertyDescriptor(type.getId(), getDeleteCallback());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                    registryService.deletePropertyDescriptor(type.getId(), getDeleteCallback());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 }
             }
         };
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientadminTypeListPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/TypeListPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/admin/TypeListPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/admin/TypeListPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,11 +16,17 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.admin;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.admin;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.ArrayList;
+import java.util.List;
+
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.WidgetHelper;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.client.admin.AbstractAdministrationComposite;
+import org.mule.galaxy.web.client.admin.AdministrationPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BeanModel;
 import com.extjs.gxt.ui.client.data.BeanModelFactory;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -44,22 +50,21 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
 import com.google.gwt.user.client.History;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.ArrayList;
-import java.util.List;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class TypeListPanel
         extends AbstractAdministrationComposite {
     protected List&amp;lt;WType&amp;gt; types;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public TypeListPanel(AdministrationPanel a) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public TypeListPanel(AdministrationPanel a, RegistryServiceAsync registryService) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super(a);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.registryService = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     @Override
     public void doShowPage() {
         super.doShowPage();
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        adminPanel.getRegistryService().getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(adminPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(adminPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public void onSuccess(List&amp;lt;WType&amp;gt; types) {
                 TypeListPanel.this.types = types;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientbrowsefromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebclientregistry&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/registry) ( =&gt; )&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/AbstractBrowsePanel.java
===================================================================
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/AbstractBrowsePanel.java	2009-12-16 02:14:51 UTC (rev 2110)
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/AbstractBrowsePanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,19 +16,20 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.registry;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.browse;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import com.google.gwt.user.client.ui.Widget;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WSearchResults;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractWithTopComposite;
 import org.mule.galaxy.web.client.Galaxy;
 import org.mule.galaxy.web.client.util.Toolbox;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
-import org.mule.galaxy.web.rpc.WSearchResults;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import com.google.gwt.user.client.ui.Widget;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; /**
  * The basis for any form that lists out groups of artifacts.
  */
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -39,10 +40,12 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected final Galaxy galaxy;
     private boolean first = true;
     protected int resultStart;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RepositoryModule repository;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public AbstractBrowsePanel(Galaxy galaxy) {
-        this.galaxy = galaxy;
-        this.service = galaxy.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public AbstractBrowsePanel(RepositoryModule repository) {
+        this.repository = repository;
+        this.galaxy = repository.getGalaxy();
+        this.service = repository.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         Widget main = getMainPanel();
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -67,7 +70,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         }
 
         if (first) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            artifactListPanel = new ArtifactListPanel(this, galaxy);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            artifactListPanel = new ArtifactListPanel(this, repository);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         }
 
         artifactListPanel.setResultStart(resultStart);
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientbrowseArtifactListPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/ArtifactListPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/ArtifactListPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/ArtifactListPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.registry;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.browse;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.ArrayList;
 import java.util.Collection;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -24,12 +24,13 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 import java.util.Map;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.WSearchResults;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractShowable;
 import org.mule.galaxy.web.client.Galaxy;
 import org.mule.galaxy.web.client.util.InlineFlowPanel;
 import org.mule.galaxy.web.client.util.TooltipListener;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
-import org.mule.galaxy.web.rpc.WSearchResults;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.Window;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -64,10 +65,12 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private Hyperlink cancelLink;
     private Hyperlink editAll;
     private Map&amp;lt;CheckBox, String&amp;gt; CBCollection;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private RepositoryModule repository;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public ArtifactListPanel(AbstractBrowsePanel browsePanel, Galaxy galaxy) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public ArtifactListPanel(AbstractBrowsePanel browsePanel, RepositoryModule repository) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.galaxy = repository.getGalaxy();
+        this.repository = repository;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.browsePanel = browsePanel;
 
         panel = new FlowPanel();
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -293,13 +296,13 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             // edit only what the user selectes via the checkboxes
         } else if (sender == editSelected) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getPageManager().createPageInfo(&amp;quot;bulk-edit&amp;quot;, new BulkEditPanel(getSelectedArtifacts(), galaxy), 0);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            galaxy.getPageManager().createPageInfo(&amp;quot;bulk-edit&amp;quot;, new BulkEditPanel(getSelectedArtifacts(), repository), 0);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             History.newItem(&amp;quot;bulk-edit&amp;quot;);
 
             // edit the entire result set
             setEditable(false);
         } else if (sender == editAll) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getPageManager().createPageInfo(&amp;quot;bulk-edit&amp;quot;, new BulkEditPanel(searchResults.getQuery(), searchResults.getTotal(), galaxy), 0);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            galaxy.getPageManager().createPageInfo(&amp;quot;bulk-edit&amp;quot;, new BulkEditPanel(searchResults.getQuery(), searchResults.getTotal(), repository), 0);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             History.newItem(&amp;quot;bulk-edit&amp;quot;);
 
             // toggle edit mode
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientbrowseBulkEditPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/BulkEditPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/BulkEditPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/BulkEditPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.registry;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.browse;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.io.Serializable;
 import java.util.ArrayList;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -26,16 +26,17 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 import java.util.Map;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.client.admin.PolicyPanel;
+import org.mule.galaxy.repository.client.property.AbstractPropertyRenderer;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WPolicyException;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractErrorShowingComposite;
 import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.admin.PolicyPanel;
-import org.mule.galaxy.web.client.property.AbstractPropertyRenderer;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.SecurityService;
 import org.mule.galaxy.web.rpc.WPermission;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WPolicyException;
-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.History;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -89,22 +90,26 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     private Collection&amp;lt;String&amp;gt; entryIds;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private Repository repository;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public BulkEditPanel(Collection&amp;lt;String&amp;gt; entryIds, Repository repository) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RepositoryModule repositoryModule;
+
+
+    public BulkEditPanel(Collection&amp;lt;String&amp;gt; entryIds, RepositoryModule repository) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this(entryIds.size(), repository);
         this.entryIds = entryIds;
     }
     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public BulkEditPanel(String query, long resultCount, Repository repository) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public BulkEditPanel(String query, long resultCount, RepositoryModule repository) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this(resultCount, repository);
         this.query = query;
     }
     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public BulkEditPanel(long resultCount, Repository repository) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public BulkEditPanel(long resultCount, RepositoryModule repository) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.resultCount = resultCount;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.repository = repository;
-        this.service = repository.getGalaxy().getRegistryService();
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.repositoryModule = repository;
+        this.galaxy = repository.getGalaxy();
+        this.service = repository.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.permissions = new ArrayList();
         this.groups = new HashMap();
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -233,9 +238,9 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         propertyDescriptor = getPropertyDescriptor(txt);
 
         renderer = 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            repository.getPropertyInterfaceManager().createRenderer(propertyDescriptor.getExtension(), 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            repositoryModule.getPropertyInterfaceManager().createRenderer(propertyDescriptor.getExtension(), 
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                                                                     propertyDescriptor.isMultiValued());
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        renderer.initialize(repository.getGalaxy(), this, null, true);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        renderer.initialize(repositoryModule, this, null, true);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         
         table.setWidget(0, 4, renderer.createEditForm());
     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -295,7 +300,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     // RPC call to get list of available permissions
     private void fetchPermissions() {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        repository.getGalaxy().getSecurityService().getPermissions(SecurityService.ITEM_PERMISSIONS, new AbstractCallback(this) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        galaxy.getSecurityService().getPermissions(SecurityService.ITEM_PERMISSIONS, new AbstractCallback(this) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             public void onFailure(Throwable caught) {
                 super.onFailure(caught);
             }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -315,7 +320,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     //RPC call to get list of available groups
     private void fetchGroups() {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        repository.getGalaxy().getSecurityService().getGroupPermissions(new AbstractCallback(this) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        galaxy.getSecurityService().getGroupPermissions(new AbstractCallback(this) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public void onFailure(Throwable caught) {
                 super.onFailure(caught);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -402,7 +407,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 if (caught instanceof WPolicyException) {
                     WPolicyException pe = (WPolicyException) caught;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                    PolicyPanel.handlePolicyFailure(repository.getGalaxy(), pe);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                    PolicyPanel.handlePolicyFailure(galaxy, pe);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 } else {
                     super.onFailure(caught);
                 }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -413,11 +418,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             }
         };
         
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        RegistryServiceAsync svc = repository.getGalaxy().getRegistryService();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         if (entryIds != null) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            svc.setProperty(entryIds, propertyDescriptor.getName(), (Serializable)value, callback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            service.setProperty(entryIds, propertyDescriptor.getName(), (Serializable)value, callback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         } else {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            svc.setPropertyForQuery(query, propertyDescriptor.getName(), (Serializable)value, callback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            service.setPropertyForQuery(query, propertyDescriptor.getName(), (Serializable)value, callback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         }
     }
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -439,7 +443,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 if (caught instanceof WPolicyException) {
                     WPolicyException pe = (WPolicyException) caught;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                    PolicyPanel.handlePolicyFailure(repository.getGalaxy(), pe);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                    PolicyPanel.handlePolicyFailure(galaxy, pe);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 } else {
                     super.onFailure(caught);
                 }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientbrowsePolicyResultsPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/PolicyResultsPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/PolicyResultsPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/browse/PolicyResultsPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.registry;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.browse;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Label;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemfromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebclientitem&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item) ( =&gt; )&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddArtifactForm.java
===================================================================
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/AddArtifactForm.java	2009-12-16 02:14:51 UTC (rev 2110)
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddArtifactForm.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,17 +1,17 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.AbstractErrorHandlingPopup;
 import org.mule.galaxy.web.rpc.AbstractCallback;
 import org.mule.galaxy.web.rpc.ItemExistsException;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.ItemNotFoundException;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.event.ButtonEvent;
 import com.extjs.gxt.ui.client.event.Events;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -30,7 +30,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     private String fileId;
     private List&amp;lt;WType&amp;gt; types;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private final Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private Button closeBtn;
     private Button submitBtn;
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -42,13 +41,14 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private final boolean parentIsWorkspace;
     private FileUploadField file;
     private final ChildItemsPanel itemsPanel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public AddArtifactForm(final Galaxy galaxy,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public AddArtifactForm(final RegistryServiceAsync registryService,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                            ItemInfo parent,
                            boolean parentIsWorkspace, 
                            ChildItemsPanel itemsPanel) {
         super();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.registryService = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.parent = parent;
         this.parentIsWorkspace = parentIsWorkspace;
         this.itemsPanel = itemsPanel;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -150,7 +150,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         fpanel.addListener(Events.Submit, new Listener&amp;lt;FormEvent&amp;gt;() {
             public void handleEvent(final FormEvent fe) {
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                galaxy.getRegistryService().getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(AddArtifactForm.this) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                registryService.getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(AddArtifactForm.this) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     public void onSuccess(List&amp;lt;WType&amp;gt; types) {
                         AddArtifactForm.this.submit(fe, types);
                     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -216,23 +216,19 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 }
             }
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().addVersionedItem(parentPath,
-                                                         name,
-                                                         fversion.getRawValue(),
-                                                         null,
-                                                         artifactType.getId(),
-                                                         avType.getId(),
-                                                         new HashMap&amp;lt;String, Serializable&amp;gt;(),
-                                                         versionProperties, 
-                                                         callback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            registryService.addVersionedItem(parentPath,
+                                             name,
+                                             fversion.getRawValue(),
+                                             null,
+                                             artifactType.getId(),
+                                             avType.getId(),
+                                             new HashMap&amp;lt;String, Serializable&amp;gt;(),
+                                             versionProperties, 
+                                             callback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         } else {
             String parentId = parent != null ? parent.getPath() : null;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().addItem(parentId, 
-                                                fversion.getRawValue(), 
-                                                null, 
-                                                avType.getId(), 
-                                                versionProperties, 
-                                                callback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            registryService.addItem(parentId, fversion.getRawValue(), null, 
+                                    avType.getId(), versionProperties, callback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         }
         
     }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemAddItemFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddItemForm.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/AddItemForm.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddItemForm.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.io.Serializable;
 import java.util.ArrayList;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -25,24 +25,25 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 import java.util.Map;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.client.browse.PolicyResultsPanel;
+import org.mule.galaxy.repository.client.property.AbstractPropertyRenderer;
+import org.mule.galaxy.repository.client.property.ArtifactRenderer;
+import org.mule.galaxy.repository.client.property.PropertyInterfaceManager;
+import org.mule.galaxy.repository.client.util.AddItemHelper;
+import org.mule.galaxy.repository.client.util.ItemPathOracle;
+import org.mule.galaxy.repository.client.util.WTypeComparator;
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
+import org.mule.galaxy.repository.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractFlowComposite;
 import org.mule.galaxy.web.client.ErrorPanel;
 import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.property.AbstractPropertyRenderer;
-import org.mule.galaxy.web.client.property.ArtifactRenderer;
-import org.mule.galaxy.web.client.property.PropertyInterfaceManager;
-import org.mule.galaxy.web.client.registry.PolicyResultsPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ui.help.InlineHelpPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.util.AddItemHelper;
-import org.mule.galaxy.web.client.util.ItemPathOracle;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.StringUtil;
 import org.mule.galaxy.web.client.util.TooltipListener;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.util.WTypeComparator;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
 import org.mule.galaxy.web.rpc.ItemExistsException;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
-import org.mule.galaxy.web.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.event.BaseEvent;
 import com.extjs.gxt.ui.client.event.ComponentEvent;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -110,13 +111,14 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private WType selectedVersion;
     private AddItemHelper form;
     private final ErrorPanel errorPanel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private RepositoryModule repositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public AddItemForm(final Galaxy galaxy, ErrorPanel errorPanel) {
-        this.galaxy = galaxy;
-        this.errorPanel = errorPanel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public AddItemForm(RepositoryMenuPanel menuPanel) {
+        this.galaxy = menuPanel.getGalaxy();
+        this.repositoryModule = menuPanel.getRepositoryModule();
+        this.errorPanel = menuPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-
-        form = new AddItemHelper(galaxy);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        form = new AddItemHelper(repositoryModule.getRegistryService());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         form.setAction(GWT.getModuleBaseURL() + &amp;quot;../artifactUpload.form&amp;quot;);
         form.addSubmitCompleteHandler(this);
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -127,10 +129,9 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         cp.setStyleName(&amp;quot;x-panel-container-full&amp;quot;);
         cp.add(form);
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         // add inline help string and widget
         cp.setTopComponent(
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                new InlineHelpPanel(galaxy.getRepositoryConstants().repo_Add_Item_Tip(), 21));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                new InlineHelpPanel(repositoryModule.getRepositoryConstants().repo_Add_Item_Tip(), 21));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         panel.add(cp);
     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -144,7 +145,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public void showPage(List&amp;lt;String&amp;gt; params) {
         if (params.size() &amp;gt; 0) {
             itemId = params.get(0);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().getItemInfo(itemId, false, new AbstractCallback&amp;lt;ItemInfo&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            repositoryModule.getRegistryService().getItemInfo(itemId, false, new AbstractCallback&amp;lt;ItemInfo&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 public void onSuccess(ItemInfo item) {
                     AddItemForm.this.item = item;
                     finishShow();
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,7 +179,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         // note how spacing uses a clear pixel on the second column
         table.setWidget(1, 0, new Label(&amp;quot;Parent:&amp;quot;));
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        parentSB = new SuggestBox(new ItemPathOracle(galaxy, errorPanel));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        parentSB = new SuggestBox(new ItemPathOracle(repositoryModule.getRegistryService(), errorPanel));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         parentSB.setStyleName(&amp;quot;x-form-text&amp;quot;);
 
         parentSB.getTextBox().setName(&amp;quot;workspacePath&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -199,7 +200,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         nameBox.setName(&amp;quot;name&amp;quot;);
         table.setWidget(2, 2, nameBox);
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        repositoryModule.getRegistryService().getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             public void onSuccess(List&amp;lt;WType&amp;gt; wtypes) {
                 Collections.sort(wtypes, new WTypeComparator());
                 AddItemForm.this.types = new HashMap&amp;lt;String, WType&amp;gt;();
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -368,7 +369,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         for (WPropertyDescriptor pd : props) {
             table.setText(row, 0, pd.getDescription());
             AbstractPropertyRenderer renderer = factory.createRenderer(pd.getExtension(), pd.isMultiValued());
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            renderer.initialize(galaxy, errorPanel, null, false);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            renderer.initialize(repositoryModule, errorPanel, null, false);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             typeRenderers.put(pd.getName(), renderer);
             table.setWidget(row, 2, renderer.createEditForm());
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -511,7 +512,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         Map&amp;lt;String, Serializable&amp;gt; properties = getProperties(renderers);
 
         if (isUserSubmittingVersion()) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().addVersionedItem(parent,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            repositoryModule.getRegistryService().addVersionedItem(parent,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     name,
                     versionNameBox.getValue(),
                     null,
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -521,7 +522,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     getProperties(versionRenderers),
                     callback);
         } else {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().addItem(parent,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            repositoryModule.getRegistryService().addItem(parent,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     name,
                     null,
                     getType().getId(),
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemAddWorkspaceFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddWorkspaceForm.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/AddWorkspaceForm.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/AddWorkspaceForm.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,13 +1,17 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.AbstractErrorHandlingPopup;
 import org.mule.galaxy.web.client.validation.FieldNotEmptyValidator;
 import org.mule.galaxy.web.rpc.AbstractCallback;
 import org.mule.galaxy.web.rpc.ItemExistsException;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.ItemNotFoundException;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.event.ButtonEvent;
 import com.extjs.gxt.ui.client.event.SelectionListener;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -19,14 +23,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.History;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.List;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class AddWorkspaceForm extends AbstractErrorHandlingPopup {
 
     private List&amp;lt;WType&amp;gt; types;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private final Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private Button closeBtn;
     private Button submitBtn;
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,10 +35,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private TextField&amp;lt;String&amp;gt; fname;
     private final ItemInfo parent;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public AddWorkspaceForm(final Galaxy galaxy,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public AddWorkspaceForm(final RegistryServiceAsync registryService,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                             ItemInfo parent) {
         super();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.registryService = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.parent = parent;
 
         formData = new FormData(&amp;quot;-20&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -85,7 +85,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     protected void addWorkspace() {
         setEnabled(false);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(AddWorkspaceForm.this) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(AddWorkspaceForm.this) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             public void onSuccess(List&amp;lt;WType&amp;gt; types) {
                 addWorkspace(types);
             }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -116,7 +116,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         };
 
         String parentId = parent != null ? parent.getPath() : null;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().addItem(parentId,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.addItem(parentId,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 fname.getValue(),
                 null,
                 getTypeByName(&amp;quot;Workspace&amp;quot;).getId(),
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemChildItemsPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ChildItemsPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/ChildItemsPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ChildItemsPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,9 +1,11 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractFlowComposite;
 import org.mule.galaxy.web.client.Galaxy;
 import org.mule.galaxy.web.client.WidgetHelper;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -12,7 +14,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.ToolbarButton;
 import org.mule.galaxy.web.client.util.ToolbarButtonEvent;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BeanModel;
 import com.extjs.gxt.ui.client.data.BeanModelFactory;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -46,11 +47,12 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private final Galaxy galaxy;
     private final ItemInfo info;
     private CheckBoxSelectionModel&amp;lt;BeanModel&amp;gt; selectionModel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private RepositoryModule repository;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public ChildItemsPanel(Galaxy galaxy, RepositoryMenuPanel menuPanel, ItemInfo item) {
         super();
         this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.repository = menuPanel.getRepositoryModule();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.menuPanel = menuPanel;
         this.info = item;
     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -71,7 +73,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             }
         };
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().getItems(info != null ? info.getId() : null, false, callback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        repository.getRegistryService().getItems(info != null ? info.getId() : null, false, callback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     /**
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -89,7 +91,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         cp.setAutoWidth(true);
 
         // add inline help string and widget
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        cp.setTopComponent(new InlineHelpPanel(galaxy.getRepositoryConstants().repo_Tip(), 14));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        cp.setTopComponent(new InlineHelpPanel(repository.getRepositoryConstants().repo_Tip(), 14));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         BeanModelFactory factory = BeanModelLookup.get().getFactory(ItemInfo.class);
         List&amp;lt;BeanModel&amp;gt; model = factory.createModel(items);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -165,7 +167,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         });
 
         final ToolbarButton delBtn = new ToolbarButton(&amp;quot;Delete&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        delBtn.setToolTip(galaxy.getRepositoryConstants().repo_Delete());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        delBtn.setToolTip(repository.getRepositoryConstants().repo_Delete());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         delBtn.setStyleName(&amp;quot;toolbar-btn_left&amp;quot;);
         delBtn.setEnabled(false);
         delBtn.addSelectionListener(new SelectionListener&amp;lt;ToolbarButtonEvent&amp;gt;() {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -199,7 +201,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                         showNewWorkspace();
                     }
                 });
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                newWkspaceBtn.setToolTip(galaxy.getRepositoryConstants().repo_NewWorkspace());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                newWkspaceBtn.setToolTip(repository.getRepositoryConstants().repo_NewWorkspace());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 toolbar.add(newWkspaceBtn);
                 
                 final ToolbarButton newArtifactBtn = new ToolbarButton(&amp;quot;New Artifact&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -210,7 +212,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                         showArtifactUploadForm(true);
                     }
                 });
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                newArtifactBtn.setToolTip(galaxy.getRepositoryConstants().repo_NewArtifact());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                newArtifactBtn.setToolTip(repository.getRepositoryConstants().repo_NewArtifact());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 toolbar.add(newArtifactBtn);
             } else if (info.getType().equals(&amp;quot;Artifact&amp;quot;)) {
                 final ToolbarButton newVersionBtn = new ToolbarButton(&amp;quot;New Version&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -222,7 +224,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     }
                 });
                 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                newVersionBtn.setToolTip(galaxy.getRepositoryConstants().repo_Items_New());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                newVersionBtn.setToolTip(repository.getRepositoryConstants().repo_Items_New());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 toolbar.add(newVersionBtn);
             } else {
                 String token;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -232,7 +234,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     token = &amp;quot;add-item/&amp;quot;;
                 }
                 ToolbarButton newBtn = WidgetHelper.createToolbarHistoryButton(&amp;quot;New&amp;quot;, token,
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                        &amp;quot;toolbar-btn_right&amp;quot;, galaxy.getRepositoryConstants().repo_Items_New());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                        &amp;quot;toolbar-btn_right&amp;quot;, repository.getRepositoryConstants().repo_Items_New());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 toolbar.add(newBtn);
             }
         }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -242,12 +244,12 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 
     protected void showArtifactUploadForm(boolean parentIsWorkspace) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        LightBox popup = new LightBox(new AddArtifactForm(galaxy, info, parentIsWorkspace, this));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        LightBox popup = new LightBox(new AddArtifactForm(repository.getRegistryService(), info, parentIsWorkspace, this));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         popup.show();
     }
 
     protected void showNewWorkspace() {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        LightBox popup = new LightBox(new AddWorkspaceForm(galaxy, info));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        LightBox popup = new LightBox(new AddWorkspaceForm(repository.getRegistryService(), info));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         popup.show();
     }
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -263,7 +265,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     }
 
                     // FIXME: delete collection.
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                    galaxy.getRegistryService().delete(ids, new AbstractCallback(menuPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                    repository.getRegistryService().delete(ids, new AbstractCallback(menuPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                         public void onSuccess(Object arg0) {
                             fetchAllItems();
                             menuPanel.removeItems(info, ids);
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemItemInfoPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemInfoPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/ItemInfoPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemInfoPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,8 +16,21 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.Iterator;
+import java.util.List;
+
+import org.mule.galaxy.repository.client.property.EntryMetadataPanel;
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WComment;
+import org.mule.galaxy.web.client.AbstractShowable;
+import org.mule.galaxy.web.client.util.InlineFlowPanel;
+import org.mule.galaxy.web.client.validation.StringNotEmptyValidator;
+import org.mule.galaxy.web.client.validation.ui.ValidatableTextArea;
+import org.mule.galaxy.web.rpc.AbstractCallback;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.extjs.gxt.ui.client.event.ButtonEvent;
 import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.widget.button.Button;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -38,35 +51,19 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.Iterator;
-import java.util.List;
-
-import org.mule.galaxy.web.client.AbstractShowable;
-import org.mule.galaxy.web.client.Galaxy;
-import org.mule.galaxy.web.client.property.EntryMetadataPanel;
-import org.mule.galaxy.web.client.util.InlineFlowPanel;
-import org.mule.galaxy.web.client.validation.StringNotEmptyValidator;
-import org.mule.galaxy.web.client.validation.ui.ValidatableTextArea;
-import org.mule.galaxy.web.rpc.AbstractCallback;
-import org.mule.galaxy.web.rpc.ItemInfo;
-import org.mule.galaxy.web.rpc.WComment;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class ItemInfoPanel extends AbstractShowable {
 
     private HorizontalPanel topPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private VerticalPanel rightGroup;
     private VerticalPanel panel;
     private FlowPanel commentsPanel;
     private ItemInfo info;
     private final RepositoryMenuPanel menuPanel;
     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public ItemInfoPanel(final Galaxy galaxy,
-                         RepositoryMenuPanel menuPanel,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public ItemInfoPanel(RepositoryMenuPanel menuPanel,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                          ItemInfo item, 
                          final ItemPanel artifactPanel, 
                          final List&amp;lt;String&amp;gt; callbackParams) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.menuPanel = menuPanel;
         this.info = item;
         
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -80,8 +77,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         FlexTable table = createColumnTable();
         
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        final NameEditPanel nep = new NameEditPanel(galaxy, 
-                                                    menuPanel,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        final NameEditPanel nep = new NameEditPanel(menuPanel,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                                                     item.getId(),
                                                     item.getName(),
                                                     item.getParentPath(), 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -105,7 +101,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         if (item.isLocal()) {
             panel.add(newSpacer());
             
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            panel.add(new EntryMetadataPanel(galaxy, menuPanel, &amp;quot;Metadata&amp;quot;, item, false));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            panel.add(new EntryMetadataPanel(menuPanel.getRepositoryModule(), menuPanel, &amp;quot;Metadata&amp;quot;, item, false));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             panel.add(newSpacer());
             
             initComments();
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -266,7 +262,8 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         addButton.setEnabled(false);
         text.getTextArea().setEnabled(false);
         
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().addComment(info.getId(), parentId, text.getTextArea().getText(), new AbstractCallback(menuPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        RegistryServiceAsync svc = menuPanel.getRepositoryModule().getRegistryService();
+        svc.addComment(info.getId(), parentId, text.getTextArea().getText(), new AbstractCallback(menuPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public void onFailure(Throwable caught) {
                 super.onFailure(caught);
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemItemPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/ItemPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,13 +16,14 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.client.admin.PolicyPanel;
+import org.mule.galaxy.repository.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractFlowComposite;
 import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.admin.PolicyPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.ShowableTabListener;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.SecurityService;
 
 import com.extjs.gxt.ui.client.event.Events;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -53,9 +54,11 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private List&amp;lt;String&amp;gt; params;
     private RepositoryMenuPanel menuPanel;
     private TabPanel tabPanel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private RepositoryModule repository;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public ItemPanel(Galaxy galaxy, RepositoryMenuPanel menuPanel) {
-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public ItemPanel(RepositoryMenuPanel menuPanel) {
+        this.galaxy = menuPanel.getGalaxy();
+        this.repository = menuPanel.getRepositoryModule();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.menuPanel = menuPanel;
     }
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -95,26 +98,26 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         tabPanel.setAutoHeight(true);
 
         TabItem itemsTab = new TabItem(&amp;quot;Items&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        itemsTab.getHeader().setToolTip(galaxy.getRepositoryConstants().repo_Items_TabTip());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        itemsTab.getHeader().setToolTip(repository.getRepositoryConstants().repo_Items_TabTip());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         itemsTab.add(new ChildItemsPanel(galaxy, menuPanel, info));
         tabPanel.add(itemsTab);
 
 
         TabItem infoTab = new TabItem(&amp;quot;Info&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        infoTab.getHeader().setToolTip(galaxy.getRepositoryConstants().repo_Info_TabTip());
-        infoTab.add(new ItemInfoPanel(galaxy, menuPanel, info, this, params));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        infoTab.getHeader().setToolTip(repository.getRepositoryConstants().repo_Info_TabTip());
+        infoTab.add(new ItemInfoPanel(menuPanel, info, this, params));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         tabPanel.add(infoTab);
 
         if (galaxy.hasPermission(&amp;quot;MANAGE_POLICIES&amp;quot;) &amp;amp;&amp;amp; info.isLocal()) {
             TabItem tab = new TabItem(&amp;quot;Policies&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            tab.getHeader().setToolTip(galaxy.getRepositoryConstants().repo_Policies_TabTip());
-            tab.add(new PolicyPanel(menuPanel, galaxy, itemId));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            tab.getHeader().setToolTip(repository.getRepositoryConstants().repo_Policies_TabTip());
+            tab.add(new PolicyPanel(menuPanel, galaxy, repository.getRegistryService(), itemId));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             tabPanel.add(tab);
         }
 
         if (galaxy.hasPermission(&amp;quot;MANAGE_GROUPS&amp;quot;) &amp;amp;&amp;amp; info.isLocal()) {
             TabItem tab = new TabItem(&amp;quot;Security&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            tab.getHeader().setToolTip(galaxy.getRepositoryConstants().repo_Security_TabTip());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            tab.getHeader().setToolTip(repository.getRepositoryConstants().repo_Security_TabTip());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             tab.add(new ItemRolePermissionPanel(galaxy, menuPanel, info.getId(), SecurityService.ITEM_PERMISSIONS));
             tabPanel.add(tab);
         }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemItemRolePermissionPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemRolePermissionPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/ItemRolePermissionPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/ItemRolePermissionPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.Widget;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemNameEditPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/NameEditPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/NameEditPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/NameEditPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,8 +16,20 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.List;
+
+import org.mule.galaxy.repository.client.admin.PolicyPanel;
+import org.mule.galaxy.repository.client.util.ItemPathOracle;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WPolicyException;
+import org.mule.galaxy.web.client.util.InlineFlowPanel;
+import org.mule.galaxy.web.client.validation.StringNotEmptyValidator;
+import org.mule.galaxy.web.client.validation.ui.ValidatableTextBox;
+import org.mule.galaxy.web.rpc.AbstractCallback;
+import org.mule.galaxy.web.rpc.ItemNotFoundException;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -29,18 +41,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.SuggestBox;
 import com.google.gwt.user.client.ui.Widget;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.List;
-
-import org.mule.galaxy.web.client.Galaxy;
-import org.mule.galaxy.web.client.admin.PolicyPanel;
-import org.mule.galaxy.web.client.util.InlineFlowPanel;
-import org.mule.galaxy.web.client.util.ItemPathOracle;
-import org.mule.galaxy.web.client.validation.StringNotEmptyValidator;
-import org.mule.galaxy.web.client.validation.ui.ValidatableTextBox;
-import org.mule.galaxy.web.rpc.AbstractCallback;
-import org.mule.galaxy.web.rpc.ItemNotFoundException;
-import org.mule.galaxy.web.rpc.WPolicyException;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; /**
  * A panel for editing the name of a registry entry.
  */
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -50,22 +50,21 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private final String itemId;
     private String name;
     private final String workspacePath;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private final Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private final RepositoryMenuPanel menuPanel;
     private final List&amp;lt;String&amp;gt; callbackParams;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public NameEditPanel(Galaxy galaxy,
-                         RepositoryMenuPanel menuPanel,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public NameEditPanel(RepositoryMenuPanel menuPanel,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                          String itemId,
                          String name,
                          String workspacePath,  
                          final List&amp;lt;String&amp;gt; callbackParams) {
         super();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.menuPanel = menuPanel;
         this.itemId = itemId;
         this.name = name;
         this.workspacePath = workspacePath;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.registryService = menuPanel.getRepositoryModule().getRegistryService();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         panel = new InlineFlowPanel();
         this.callbackParams = callbackParams;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -96,7 +95,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         final HorizontalPanel row = new HorizontalPanel();
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        final SuggestBox workspaceSB = new SuggestBox(new ItemPathOracle(galaxy, menuPanel));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        final SuggestBox workspaceSB = new SuggestBox(new ItemPathOracle(registryService, menuPanel));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         workspaceSB.setText(workspacePath);
         row.add(workspaceSB);
         
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -139,14 +138,14 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         if (!newParent.equals(this.workspacePath) 
             || !newName.equals(this.name)) {
             // save only if name or workspace changed
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().move(itemId, newParent, newName, new AbstractCallback(menuPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            registryService.move(itemId, newParent, newName, new AbstractCallback(menuPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
                 @Override
                 public void onFailure(Throwable caught) {
                     if (caught instanceof ItemNotFoundException) {
                         menuPanel.setMessage(&amp;quot;No parent workspace exists with that name!&amp;quot;);
                     } else if (caught instanceof WPolicyException) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                        PolicyPanel.handlePolicyFailure(galaxy, (WPolicyException) caught);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                        PolicyPanel.handlePolicyFailure(menuPanel.getGalaxy(), (WPolicyException) caught);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     } else {
                         super.onFailure(caught);
                     }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemPolicyResultsPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/PolicyResultsPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/PolicyResultsPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/PolicyResultsPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Hyperlink;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -27,10 +27,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 import java.util.Map;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.WApprovalMessage;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractErrorShowingComposite;
 import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
-import org.mule.galaxy.web.rpc.WApprovalMessage;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 public class PolicyResultsPanel extends AbstractErrorShowingComposite {
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientitemRepositoryMenuPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/RepositoryMenuPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/item/RepositoryMenuPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/item/RepositoryMenuPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.item;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.ArrayList;
 import java.util.Collection;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -7,6 +7,9 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 import java.util.Map;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractShowable;
 import org.mule.galaxy.web.client.Galaxy;
 import org.mule.galaxy.web.client.MenuPanel;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -14,7 +17,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.PageManager;
 import org.mule.galaxy.web.client.WidgetHelper;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BaseTreeLoader;
 import com.extjs.gxt.ui.client.data.BaseTreeModel;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -48,14 +50,18 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private BaseTreeModel root;
     protected Map&amp;lt;String,ModelData&amp;gt; idToData  = new HashMap&amp;lt;String,ModelData&amp;gt;();
     private String itemId;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RepositoryModule repository;
+    private RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public RepositoryMenuPanel(Galaxy galaxy) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public RepositoryMenuPanel(RepositoryModule repository) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         super();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.repository = repository;
+        this.registryService = repository.getRegistryService();
+        this.galaxy = repository.getGalaxy();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         createPageInfo(&amp;quot;browse&amp;quot;, new ChildItemsPanel(galaxy, this, null));
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        createPageInfo(&amp;quot;item/&amp;quot; + PageManager.WILDCARD, new ItemPanel(galaxy, this));
-        createPageInfo(&amp;quot;add-item&amp;quot;, new AddItemForm(galaxy, this));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        createPageInfo(&amp;quot;item/&amp;quot; + PageManager.WILDCARD, new ItemPanel(this));
+        createPageInfo(&amp;quot;add-item&amp;quot;, new AddItemForm(this));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         
         setId(&amp;quot;repositoryTabBody&amp;quot;);
     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -76,7 +82,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                         }
                     }
                 };
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                galaxy.getRegistryService().getItemInfo(itemId, true, getItemCallback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                registryService.getItemInfo(itemId, true, getItemCallback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 
                 loadItems(itemId);
             } else {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -97,9 +103,8 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 loadAndExpandItems(items);
             }
         };
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().getItems(itemId, true, getItemsCallback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        repository.getRegistryService().getItems(itemId, true, getItemsCallback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
     protected void loadAndExpandItems(Collection&amp;lt;ItemInfo&amp;gt; items) {
         TreeModel parent = root;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -269,7 +274,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 final TreeModel parent = (TreeModel) be.getItem();
                 
                 String id = (String)parent.get(&amp;quot;id&amp;quot;);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                galaxy.getRegistryService().getItems(id, false, new AbstractCallback&amp;lt;Collection&amp;lt;ItemInfo&amp;gt;&amp;gt;(RepositoryMenuPanel.this) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                repository.getRegistryService().getItems(id, false, new AbstractCallback&amp;lt;Collection&amp;lt;ItemInfo&amp;gt;&amp;gt;(RepositoryMenuPanel.this) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     public void onSuccess(Collection&amp;lt;ItemInfo&amp;gt; items) {
                         mergeItems(items, parent);
                     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -317,7 +322,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     public void createPageInfo(String token, final WidgetHelper composite) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        PageInfo page = new PageInfo(token, getGalaxy().getRepositoryTab()) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        PageInfo page = new PageInfo(token, repository.getRepositoryTab()) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public AbstractShowable createInstance() {
                 return null;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -336,6 +341,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         return galaxy;
     }
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public RepositoryModule getRepositoryModule() {
+        return repository;
+    }
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public TreeStore&amp;lt;ModelData&amp;gt; getStore() {
         return store;
     }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyfromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebclientproperty&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property) ( =&gt; )&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/AbstractListRenderer.java
===================================================================
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/AbstractListRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/AbstractListRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,7 +1,11 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.mule.galaxy.repository.client.RepositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ErrorPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.InlineFlowPanel;
 
 import com.google.gwt.event.dom.client.ClickEvent;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -11,10 +15,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Widget;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; /**
  * Encapsulate a list of properties that is always editable.
  */
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -49,8 +49,8 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     @SuppressWarnings(&amp;quot;unchecked&amp;quot;)
     @Override
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public void initialize(Galaxy galaxy, ErrorPanel errorPanel, Object value, boolean bulkEdit) {
-        super.initialize(galaxy, errorPanel, value, bulkEdit);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public void initialize(RepositoryModule repositoryModule, ErrorPanel errorPanel, Object value, boolean bulkEdit) {
+        super.initialize(repositoryModule, errorPanel, value, bulkEdit);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         values = new ArrayList&amp;lt;Object&amp;gt;();
         if (value != null) {
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyAbstractPropertyRendererjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/AbstractPropertyRenderer.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/AbstractPropertyRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/AbstractPropertyRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,22 +1,25 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import com.google.gwt.user.client.ui.Widget;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.io.Serializable;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ErrorPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import com.google.gwt.user.client.ui.Widget;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public abstract class AbstractPropertyRenderer {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    protected Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    protected RepositoryModule repositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected ErrorPanel errorPanel;
     protected Object value;
     protected boolean bulkEdit;
     protected boolean editSupported = true;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    protected RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public void initialize(Galaxy galaxy, ErrorPanel errorPanel, Object value, boolean bulkEdit) {
-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public void initialize(RepositoryModule repositoryModule, ErrorPanel errorPanel, Object value, boolean bulkEdit) {
+        this.repositoryModule = repositoryModule;
+        this.registryService = repositoryModule.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.errorPanel = errorPanel;
         this.value = value;             
         this.bulkEdit = bulkEdit;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -31,10 +34,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public abstract boolean validate();
  
     public void save(String itemId, String name, Serializable valueToSave, AbstractCallback saveCallback) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().setProperty(itemId, 
-                                                name, 
-                                                valueToSave, 
-                                                saveCallback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.setProperty(itemId, name, valueToSave, saveCallback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     public boolean isEditSupported() {
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyArtifactRendererjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/ArtifactRenderer.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/ArtifactRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/ArtifactRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.FileUpload;
 import com.google.gwt.user.client.ui.Widget;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyEditPropertyPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/EditPropertyPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/EditPropertyPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/EditPropertyPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,13 +1,16 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.io.Serializable;
+
+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.client.admin.PolicyPanel;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WPolicyException;
+import org.mule.galaxy.repository.rpc.WProperty;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractShowable;
 import org.mule.galaxy.web.client.ErrorPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.Galaxy;
-import org.mule.galaxy.web.client.admin.PolicyPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.InlineFlowPanel;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WPolicyException;
-import org.mule.galaxy.web.rpc.WProperty;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.event.Listener;
 import com.extjs.gxt.ui.client.event.MessageBoxEvent;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -20,8 +23,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Widget;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.io.Serializable;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; /**
  * Encapsulates the rendering and editing of a property value.
  */
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -34,10 +35,11 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected ErrorPanel errorPanel;
     protected String itemId;
     protected WProperty property;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    protected Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    protected RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected ClickListener saveListener;
     protected ClickListener deleteListener;
     protected ClickListener cancelListener;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private RepositoryModule repositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     public EditPropertyPanel(AbstractPropertyRenderer renderer, ErrorPanel errorPanel) {
         super();
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -159,7 +161,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void doDelete() {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().deleteProperty(itemId, property.getName(), new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.deleteProperty(itemId, property.getName(), new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public void onSuccess(Object arg0) {
                 deleteListener.onClick(null);
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -193,7 +195,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 if (caught instanceof WPolicyException) {
                     WPolicyException pe = (WPolicyException) caught;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                    PolicyPanel.handlePolicyFailure(galaxy, pe);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                    PolicyPanel.handlePolicyFailure(repositoryModule.getGalaxy(), pe);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 } else {
                     onSaveFailure(caught, this);
                 }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -221,7 +223,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     private void initializeRenderer() {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        renderer.initialize(galaxy, errorPanel, property.getValue(), false);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        renderer.initialize(repositoryModule, errorPanel, property.getValue(), false);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     protected void onSaveFailure(Throwable caught, AbstractCallback saveCallback) {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -237,10 +239,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.property = property;
     }
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public void setGalaxy(Galaxy galaxy) {
-        this.galaxy = galaxy;
-    }
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public void setErrorPanel(ErrorPanel errorPanel) {
         this.errorPanel = errorPanel;
     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -269,4 +267,8 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public void setCancelListener(ClickListener cancelListener) {
         this.cancelListener = cancelListener;
     }
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+
+    public void setRepositoryModule(RepositoryModule repositoryModule) {
+        this.repositoryModule = repositoryModule;
+    }
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyEntryMetadataPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/EntryMetadataPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/EntryMetadataPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/EntryMetadataPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,8 +16,20 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.Collection;
+
+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WProperty;
+import org.mule.galaxy.web.client.AbstractShowable;
+import org.mule.galaxy.web.client.ErrorPanel;
+import org.mule.galaxy.web.client.Galaxy;
+import org.mule.galaxy.web.client.util.InlineFlowPanel;
+import org.mule.galaxy.web.rpc.AbstractCallback;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FlexTable;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -27,17 +39,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Widget;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.Collection;
-
-import org.mule.galaxy.web.client.AbstractShowable;
-import org.mule.galaxy.web.client.ErrorPanel;
-import org.mule.galaxy.web.client.Galaxy;
-import org.mule.galaxy.web.client.util.InlineFlowPanel;
-import org.mule.galaxy.web.rpc.AbstractCallback;
-import org.mule.galaxy.web.rpc.ItemInfo;
-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
-import org.mule.galaxy.web.rpc.WProperty;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; /**
  * Shows all the artifact metadata.
  */
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -50,14 +51,18 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private Hyperlink showAll;
     private final Galaxy galaxy;
     private ItemInfo item;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RepositoryModule repositoryModule;
+    private RegistryServiceAsync service;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public EntryMetadataPanel(final Galaxy galaxy,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public EntryMetadataPanel(final RepositoryModule repository,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                               final ErrorPanel registryPanel,
                               final String title,
                               final ItemInfo item,
                               final boolean stale) {
         super();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.repositoryModule = repository;
+        this.galaxy = repository.getGalaxy();
+        this.service = repository.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.errorPanel = registryPanel;
         this.item = item;
         
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -84,9 +89,9 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             addMetadata.addClickListener(new ClickListener() {
     
                 public void onClick(Widget arg0) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                    NewPropertyPanel edit = new NewPropertyPanel(galaxy,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                    NewPropertyPanel edit = new NewPropertyPanel(repositoryModule,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                                                                  errorPanel,
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-                                                                 galaxy.getRegistryService(),
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+                                                                 service,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                                                                  item.getId(),
                                                                  metadata,
                                                                  amPanel,
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -119,8 +124,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             showAll.setText(&amp;quot;Show All&amp;quot;);
         }
         
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        RegistryServiceAsync svc = galaxy.getRegistryService();
-        svc.getItemInfo(item.getId(), showHidden, new AbstractCallback&amp;lt;ItemInfo&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        service.getItemInfo(item.getId(), showHidden, new AbstractCallback&amp;lt;ItemInfo&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public void onSuccess(ItemInfo o) {
                 item = o;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -138,11 +142,11 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public void addRow(WProperty property) {
 
         final AbstractPropertyRenderer renderer = 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getPropertyInterfaceManager().createRenderer(property.getExtension(), property.isMultiValued());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            repositoryModule.getPropertyInterfaceManager().createRenderer(property.getExtension(), property.isMultiValued());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         EditPropertyPanel render = new EditPropertyPanel(renderer, errorPanel);
         render.setProperty(property);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        render.setGalaxy(galaxy);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        render.setRepositoryModule(repositoryModule);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         render.setItemId(item.getId());
         render.initialize();
         render.showView();
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyLifecycleRendererjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/LifecycleRenderer.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/LifecycleRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/LifecycleRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.FlexTable;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -11,10 +11,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.Iterator;
 import java.util.List;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.WLifecycle;
+import org.mule.galaxy.repository.rpc.WPhase;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractShowable;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WLifecycle;
-import org.mule.galaxy.web.rpc.WPhase;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 public class LifecycleRenderer extends AbstractPropertyRenderer {
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -30,7 +30,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         lifecycleTable = AbstractShowable.createColumnTable();
         
         if (lifecycles == null) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().getLifecycles(new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            registryService.getLifecycles(new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                 public void onSuccess(Object o) {
                     lifecycles = (Collection) o;
                     doShowLifecycles();
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -64,7 +64,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public void loadRemote() {
         final List&amp;lt;String&amp;gt; ids = (List&amp;lt;String&amp;gt;) value;
         if (ids != null) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getRegistryService().getLifecycle(ids.get(0), new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            registryService.getLifecycle(ids.get(0), new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
                 public void onSuccess(Object o) {
                     lifecycle = (WLifecycle) o;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyLinksRendererjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/LinksRenderer.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/LinksRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/LinksRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,19 +1,19 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.client.util.ItemPathOracle;
+import org.mule.galaxy.repository.rpc.WLinks;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ErrorPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.Galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.util.InlineFlowPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.util.ItemPathOracle;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.validation.Validator;
 import org.mule.galaxy.web.client.validation.ui.ValidatableSuggestBox;
 import org.mule.galaxy.web.rpc.AbstractCallback;
 import org.mule.galaxy.web.rpc.LinkInfo;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WLinks;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.ui.Button;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,8 +35,9 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private Label verifyLabel;
 
     @Override
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public void initialize(Galaxy galaxy, ErrorPanel errorPanel, Object value, boolean bulkEdit) {
-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public void initialize(RepositoryModule repositoryModule, ErrorPanel errorPanel, Object value, boolean bulkEdit) {
+        this.repositoryModule = repositoryModule;
+        this.registryService = repositoryModule.getRegistryService();
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.errorPanel = errorPanel;
         this.value = value;
         
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -100,7 +101,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             }
         };
         
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        suggest = new ValidatableSuggestBox(validator, new ItemPathOracle(galaxy, errorPanel, true, &amp;quot;xxx&amp;quot;));
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        suggest = new ValidatableSuggestBox(validator, new ItemPathOracle(registryService, errorPanel, true, &amp;quot;xxx&amp;quot;));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         addPanel.add(suggest);
 
         addButton = new Button();
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -124,7 +125,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     protected void verify(final String path) {
         setEnabled(false);
         
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().itemExists(path, new AbstractCallback&amp;lt;Boolean&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.itemExists(path, new AbstractCallback&amp;lt;Boolean&amp;gt;(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
             public void onSuccess(Boolean exists) {
                 if (isDuplicate(path)) {
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyMapRendererjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/MapRenderer.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/MapRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/MapRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.HashMap;
 import java.util.Map;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyNewPropertyPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/NewPropertyPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/NewPropertyPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/NewPropertyPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,8 +16,22 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.mule.galaxy.repository.client.RepositoryModule;
+import org.mule.galaxy.repository.client.util.PropertyDescriptorComparator;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WProperty;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
+import org.mule.galaxy.web.client.ErrorPanel;
+import org.mule.galaxy.web.client.Galaxy;
+import org.mule.galaxy.web.client.util.InlineFlowPanel;
+import org.mule.galaxy.web.rpc.AbstractCallback;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.ClickListener;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -30,19 +44,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.Widget;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.mule.galaxy.web.client.ErrorPanel;
-import org.mule.galaxy.web.client.Galaxy;
-import org.mule.galaxy.web.client.util.InlineFlowPanel;
-import org.mule.galaxy.web.client.util.PropertyDescriptorComparator;
-import org.mule.galaxy.web.rpc.AbstractCallback;
-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
-import org.mule.galaxy.web.rpc.WProperty;
-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class NewPropertyPanel extends Composite {
 
     private ListBox propertiesBox;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -53,20 +54,20 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private Panel propertiesPanel;
     private ClickListener cancelListener;
     private List propertyDescriptors;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private final Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private WProperty property;
     private Button cancelButton;
     private FlexTable panel;
     private InlineFlowPanel selectorPanel;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RepositoryModule repositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public NewPropertyPanel(final Galaxy galaxy,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public NewPropertyPanel(final RepositoryModule repositoryModule,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                             final ErrorPanel registryPanel, 
                             final RegistryServiceAsync registryService,
                             final String itemId,
                             final Panel propertiesPanel,
                             final EntryMetadataPanel metadataPanel,
                             final FlexTable table) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        this.repositoryModule = repositoryModule;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.errorPanel = registryPanel;
         this.itemId = itemId;
         this.propertiesPanel = propertiesPanel; 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -131,13 +132,13 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         WPropertyDescriptor pd = getPropertyDescriptor(txt);
 
         AbstractPropertyRenderer renderer = 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getPropertyInterfaceManager().createRenderer(pd.getExtension(), pd.isMultiValued());
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            repositoryModule.getPropertyInterfaceManager().createRenderer(pd.getExtension(), pd.isMultiValued());
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         
         EditPropertyPanel render = new EditPropertyPanel(renderer, errorPanel);
         property = new WProperty(pd.getName(), pd.getDescription(), null, pd.getExtension(), false);
         property.setMultiValued(pd.isMultiValued());
         render.setProperty(property);
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        render.setGalaxy(galaxy);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        render.setRepositoryModule(repositoryModule);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         render.setItemId(itemId);
         render.setErrorPanel(errorPanel);
         render.setSaveListener(new ClickListener() {
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyPropertyInterfaceManagerjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/PropertyInterfaceManager.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/PropertyInterfaceManager.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/PropertyInterfaceManager.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 
 /**
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertySimpleListRendererjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/SimpleListRenderer.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/SimpleListRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/SimpleListRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.Collection;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertySimpleRendererjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/SimpleRenderer.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/SimpleRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/SimpleRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Widget;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientpropertyUserListRendererjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/UserListRenderer.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/property/UserListRenderer.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/property/UserListRenderer.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.property;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.property;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.Collection;
 import java.util.Iterator;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -26,7 +26,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         userLB.addItem(&amp;quot;Loading...&amp;quot;);
         
         if (users == null) { 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            galaxy.getSecurityService().getUsers(new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            repositoryModule.getGalaxy().getSecurityService().getUsers(new AbstractCallback(errorPanel) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
                 public void onSuccess(Object o) {
                     users = (Collection) o;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilfromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebclientutil&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util) ( =&gt; )&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/AddItemHelper.java
===================================================================
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util/AddItemHelper.java	2009-12-16 02:14:51 UTC (rev 2110)
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/AddItemHelper.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.util;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 
 import java.io.Serializable;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -7,12 +7,12 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 import java.util.Map;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.Galaxy;
-import org.mule.galaxy.web.client.property.AbstractPropertyRenderer;
-import org.mule.galaxy.web.client.property.ArtifactRenderer;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.property.AbstractPropertyRenderer;
+import org.mule.galaxy.repository.client.property.ArtifactRenderer;
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
-import org.mule.galaxy.web.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.FormPanel;
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -32,7 +32,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         ARTIFACT, ARTIFACT_VERSION, VERSION, VERSION_TYPE
     }
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private final Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private String typeId;
     private String versionTypeId;
     private boolean addVersion;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -46,10 +45,11 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private String fileId;
     private AbstractCallback callback;
     protected Map&amp;lt;String, WType&amp;gt; types;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public AddItemHelper(Galaxy galaxy) {
-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public AddItemHelper(RegistryServiceAsync registryService) {
+        this.registryService = registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.setEncoding(FormPanel.ENCODING_MULTIPART);
         this.setMethod(FormPanel.METHOD_POST);
     }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -75,7 +75,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         Map&amp;lt;String, Serializable&amp;gt; properties = getProperties(this.getRenderers());
 
         if (this.isAddVersion()) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            this.galaxy.getRegistryService().addVersionedItem(parent,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            registryService.addVersionedItem(parent,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     name,
                     version,
                     null,
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -85,7 +85,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     getProperties(this.getVersionRenderers()),
                     callback);
         } else {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            this.galaxy.getRegistryService().addItem(parent,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            registryService.addItem(parent,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;                     name,
                     null,
                     getTypeId(),
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -133,7 +133,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
     public ItemInfo fetchAndSetItem(String itemId) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().getItemInfo(itemId, false, new AbstractCallback&amp;lt;ItemInfo&amp;gt;(null) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getItemInfo(itemId, false, new AbstractCallback&amp;lt;ItemInfo&amp;gt;(null) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             public void onSuccess(ItemInfo item) {
                 AddItemHelper.this.setItem(item);
             }
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -143,7 +143,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 
     public Map&amp;lt;String, WType&amp;gt; getTypes() {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(null) {
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.getTypes(new AbstractCallback&amp;lt;List&amp;lt;WType&amp;gt;&amp;gt;(null) {
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             public void onSuccess(List&amp;lt;WType&amp;gt; wtypes) {
                 Collections.sort(wtypes, new WTypeComparator());
                 AddItemHelper.this.types = new HashMap&amp;lt;String, WType&amp;gt;();
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilItemPathOraclejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/ItemPathOracle.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util/ItemPathOracle.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/ItemPathOracle.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,4 +1,4 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.util;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.SuggestOracle;
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -6,36 +6,37 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.Collection;
 import java.util.List;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ErrorPanel;
 import org.mule.galaxy.web.client.Galaxy;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 public class ItemPathOracle extends SuggestOracle {
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    private Galaxy galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     private ErrorPanel errorPanel;
     private final String exclude;
     private final String[] types;
     private boolean recursive;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    private final RegistryServiceAsync registryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public ItemPathOracle(Galaxy galaxy, ErrorPanel errorPanel, boolean recursive, String exclude, String... types) {
-        super();    
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public ItemPathOracle(RegistryServiceAsync registryService, ErrorPanel errorPanel, boolean recursive, String exclude, String... types) {
+        super();
+        this.registryService = registryService;    
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.errorPanel = errorPanel;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        this.galaxy = galaxy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         this.recursive = recursive;
         this.exclude = exclude;
         this.types = types;
     }
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public ItemPathOracle(Galaxy galaxy, ErrorPanel errorPanel) {
-        this(galaxy, errorPanel, true, &amp;quot;xxx&amp;quot;, new String[0]);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+    public ItemPathOracle(RegistryServiceAsync registryService, ErrorPanel errorPanel) {
+        this(registryService, errorPanel, true, &amp;quot;xxx&amp;quot;, new String[0]);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     }
 
 
     @Override
     public void requestSuggestions(final Request request, final Callback callback) {
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        galaxy.getRegistryService().suggestItems(request.getQuery(), recursive, exclude,
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+        registryService.suggestItems(request.getQuery(), recursive, exclude,
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             types, new AbstractCallback&amp;lt;Collection&amp;lt;ItemInfo&amp;gt;&amp;gt;(errorPanel) {
 
             public void onSuccess(Collection&amp;lt;ItemInfo&amp;gt; entries) {
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilLifecycleSelectionPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/LifecycleSelectionPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util/LifecycleSelectionPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/LifecycleSelectionPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.util;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.ChangeListener;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -28,12 +28,12 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.Collection;
 import java.util.Iterator;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WLifecycle;
+import org.mule.galaxy.repository.rpc.WPhase;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractShowable;
 import org.mule.galaxy.web.client.ErrorPanel;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
-import org.mule.galaxy.web.rpc.WLifecycle;
-import org.mule.galaxy.web.rpc.WPhase;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 public class LifecycleSelectionPanel extends AbstractShowable {
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilPolicySelectionPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/PolicySelectionPanel.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util/PolicySelectionPanel.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/PolicySelectionPanel.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.util;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ChangeListener;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -33,11 +33,11 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.Collection;
 import java.util.Iterator;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.repository.rpc.WPolicy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.AbstractShowable;
 import org.mule.galaxy.web.client.ErrorPanel;
 import org.mule.galaxy.web.rpc.AbstractCallback;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
-import org.mule.galaxy.web.rpc.WPolicy;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 public class PolicySelectionPanel extends AbstractShowable{
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilPropertyDescriptorComparatorjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/PropertyDescriptorComparator.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util/PropertyDescriptorComparator.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/PropertyDescriptorComparator.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -17,11 +17,11 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * under the License.
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.util;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.Comparator;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 public class PropertyDescriptorComparator implements Comparator&amp;lt;WPropertyDescriptor&amp;gt; {
     
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilRegistryOraclejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/RegistryOracle.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util/RegistryOracle.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/RegistryOracle.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,10 +1,11 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.util;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.ArrayList;
 import java.util.Collection;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
-import org.mule.galaxy.web.rpc.RegistryServiceAsync;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryServiceAsync;
+import org.mule.galaxy.web.client.util.Oracle;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BaseModelData;
 import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilStylizedSortableGridjavafromrev2109branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilStylizedSortableGridjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/StylizedSortableGrid.java (from rev 2109, branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/StylizedSortableGrid.java) (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/StylizedSortableGrid.java	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/StylizedSortableGrid.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,162 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.util;
+
+import com.google.gwt.gen2.table.client.SortableGrid;
+import com.google.gwt.gen2.table.client.TableModelHelper.ColumnSortList;
+import com.google.gwt.gen2.table.event.client.RowHighlightEvent;
+import com.google.gwt.gen2.table.event.client.RowHighlightHandler;
+import com.google.gwt.gen2.table.event.client.RowSelectionEvent;
+import com.google.gwt.gen2.table.event.client.RowSelectionHandler;
+import com.google.gwt.gen2.table.event.client.RowUnhighlightEvent;
+import com.google.gwt.gen2.table.event.client.RowUnhighlightHandler;
+import com.google.gwt.gen2.table.event.client.TableEvent.Row;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
+
+public class StylizedSortableGrid extends SortableGrid {
+
+    public StylizedSortableGrid(int rows, int columns) {
+        super(rows, columns);
+
+        setCellSpacing(0);
+        setCellPadding(4);
+
+        addRowHighlightHandler(new RowHighlightHandler() {
+            public void onRowHighlight(RowHighlightEvent event) {
+                int idx = event.getValue().getRowIndex();
+                if (idx == 0)
+                    return;
+                getRowFormatter().setStyleName(idx, &amp;quot;SortableGrid-selectedRow&amp;quot;);
+            }
+        });
+        addRowUnhighlightHandler(new RowUnhighlightHandler() {
+            public void onRowUnhighlight(RowUnhighlightEvent event) {
+                int idx = event.getValue().getRowIndex();
+                if (idx == 0 || getSelectedRows().contains(idx))
+                    return;
+
+                getRowFormatter().setStyleName(idx, &amp;quot;&amp;quot;);
+            }
+        });
+        addRowSelectionHandler(new RowSelectionHandler() {
+
+            public void onRowSelection(RowSelectionEvent event) {
+                for (Row row : event.getDeselectedRows()) {
+                    int idx = row.getRowIndex();
+                    if (idx == 0)
+                        return;
+
+                    getRowFormatter().setStyleName(idx, &amp;quot;&amp;quot;);
+                }
+
+                for (Row row : event.getSelectedRows()) {
+                    int idx = row.getRowIndex();
+                    if (idx == 0)
+                        return;
+
+                    getRowFormatter().setStyleName(idx, &amp;quot;SortableGrid-selectedRow&amp;quot;);
+                }
+            }
+        });
+
+        setColumnSorter(new ColumnSorter() {
+
+            @Override
+            public void onSortColumn(SortableGrid grid, ColumnSortList sortList,
+                                     SortableGrid.ColumnSorterCallback callback) {
+                // Get the primary column and sort order
+                int column = sortList.getPrimaryColumn();
+                boolean ascending = sortList.isPrimaryAscending();
+
+                // Apply the default quicksort algorithm
+                SelectionGridCellFormatter formatter = grid.getSelectionGridCellFormatter();
+                Element[] tdElems = new Element[grid.getRowCount()];
+                for (int i = 0; i &amp;lt; tdElems.length; i++) {
+                    tdElems[i] = formatter.getElement(i, column);
+                }
+                
+                Element[] nonHeaders = new Element[tdElems.length-1];
+                
+                for (int i = 1; i &amp;lt; tdElems.length; i++) {
+                    nonHeaders[i-1] = tdElems[i];
+                }
+                
+                quicksort(nonHeaders, 0, nonHeaders.length - 1);
+
+                for (int i = 1; i &amp;lt; tdElems.length; i++) {
+                    tdElems[i] = nonHeaders[i-1];
+                }
+                
+                // Convert tdElems to trElems, reversing if needed
+                Element[] trElems = new Element[tdElems.length];
+                trElems[0] = DOM.getParent(tdElems[0]);
+                if (ascending) {
+                    for (int i = 1; i &amp;lt; tdElems.length; i++) {
+                        trElems[i] = DOM.getParent(tdElems[i]);
+                    }
+                } else {
+                    int maxElem = tdElems.length - 1;
+                    for (int i = 1; i &amp;lt;= maxElem; i++) {
+                        trElems[i] = DOM.getParent(tdElems[maxElem - i + 1]);
+                    }
+                }
+
+                // Use the callback to complete the sorting
+                callback.onSortingComplete(trElems);
+            }
+
+            /**
+             * Recursive quicksort algorithm.
+             * 
+             * @param tdElems
+             *            an array of row elements
+             * @param start
+             *            the start index to sort
+             * @param end
+             *            the last index to sort
+             */
+            private void quicksort(Element[] tdElems, int start, int end) {
+                // No need to sort
+                if (start &amp;gt;= end) {
+                    return;
+                }
+
+                // Sort this set
+                int i = start + 1;
+                int k = end;
+                String pivot = DOM.getInnerText(tdElems[start]);
+                while (k &amp;gt;= i) {
+                    if (DOM.getInnerText(tdElems[i]).compareTo(pivot) &amp;lt; 0) {
+                        // Move i until the value is great than the pivot
+                        i++;
+                    } else if (k == i) {
+                        // Don&amp;#39;t swap if equal
+                        k--;
+                    } else if (DOM.getInnerText(tdElems[k]).compareTo(pivot) &amp;lt; 0) {
+                        // Swap the elements at k and i
+                        Element tr = tdElems[i];
+                        tdElems[i] = tdElems[k];
+                        tdElems[k] = tr;
+                        i++;
+                        k--;
+                    } else {
+                        // Decrement k
+                        k--;
+                    }
+                }
+
+                // Swap k and pivot
+                if (k != start) {
+                    Element tr = tdElems[k];
+                    tdElems[k] = tdElems[start];
+                    tdElems[start] = tr;
+                }
+
+                // Sort the subsets
+                quicksort(tdElems, start, k - 1);
+                quicksort(tdElems, k + 1, end);
+            }
+        });
+
+    }
+
+}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryclientutilWTypeComparatorjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/WTypeComparator.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/client/util/WTypeComparator.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/client/util/WTypeComparator.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -17,11 +17,11 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * under the License.
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.client.util;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.Comparator;
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 public class WTypeComparator implements Comparator&amp;lt;WType&amp;gt; {
     
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcfromrev2110branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxywebrpc&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc (from rev 2110, branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc) ( =&gt; )&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/ItemInfo.java
===================================================================
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/ItemInfo.java	2009-12-16 02:14:51 UTC (rev 2110)
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/ItemInfo.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.ArrayList;
 import java.util.Collection;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcRegistryServicejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/RegistryService.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/RegistryService.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/RegistryService.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.io.Serializable;
 import java.util.Collection;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -26,6 +26,10 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.Set;
 
 import org.mule.galaxy.web.client.RPCException;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.rpc.ItemExistsException;
+import org.mule.galaxy.web.rpc.ItemNotFoundException;
+import org.mule.galaxy.web.rpc.SearchPredicate;
+import org.mule.galaxy.web.rpc.WActivity;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.RemoteService;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcRegistryServiceAsyncjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/RegistryServiceAsync.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/RegistryServiceAsync.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/RegistryServiceAsync.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,14 +16,17 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.io.Serializable;
 import java.util.Collection;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import java.util.Date;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.rpc.SearchPredicate;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import com.google.gwt.user.client.rpc.AsyncCallback;
 
 public interface RegistryServiceAsync {
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -174,4 +177,14 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     void deleteArtifactView(String id, AsyncCallback callback);
     
     void getRecentArtifactViews(AsyncCallback callback);
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+
+    void getActivities(Date from, 
+                       Date to, 
+                       String user,
+                       String itemPath,
+                       String text,
+                       String eventTypeStr, int start,
+                       int results, 
+                       boolean ascending,
+                       AsyncCallback callback);
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; }
\ No newline at end of file
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWApprovalMessagejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WApprovalMessage.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WApprovalMessage.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WApprovalMessage.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWArtifactTypejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WArtifactType.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WArtifactType.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WArtifactType.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BeanModelTag;
 import com.google.gwt.user.client.rpc.IsSerializable;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWArtifactViewjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WArtifactView.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WArtifactView.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WArtifactView.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,10 +1,12 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
 import java.util.HashSet;
 import java.util.Set;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.rpc.SearchPredicate;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class WArtifactView implements IsSerializable {
     private String id;
     private String name;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWCommentjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WComment.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WComment.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WComment.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWGovernanceInfojava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WGovernanceInfo.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WGovernanceInfo.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WGovernanceInfo.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWIndexjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WIndex.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WIndex.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WIndex.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 import com.extjs.gxt.ui.client.data.BeanModelTag;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWLifecyclejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WLifecycle.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WLifecycle.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WLifecycle.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 import com.extjs.gxt.ui.client.data.BeanModelTag;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWLinksjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WLinks.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WLinks.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WLinks.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,10 +1,12 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
 import java.io.Serializable;
 import java.util.List;
 
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.web.rpc.LinkInfo;
+
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; public class WLinks implements IsSerializable, Serializable {
     private List&amp;lt;LinkInfo&amp;gt; links;
     private List&amp;lt;LinkInfo&amp;gt; reciprocal;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPhasejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPhase.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WPhase.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPhase.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 import com.extjs.gxt.ui.client.data.BeanModelTag;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPolicyjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPolicy.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WPolicy.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPolicy.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPolicyExceptionjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPolicyException.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WPolicyException.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPolicyException.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPropertyjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WProperty.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WProperty.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WProperty.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWPropertyDescriptorjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPropertyDescriptor.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WPropertyDescriptor.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WPropertyDescriptor.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BeanModelTag;
 import com.google.gwt.user.client.rpc.IsSerializable;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWSearchResultsjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WSearchResults.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WSearchResults.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WSearchResults.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import java.util.ArrayList;
 import java.util.List;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientsrcmainjavaorgmulegalaxyrepositoryrpcWTypejava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WType.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/web/rpc/WType.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/gwt-client/src/main/java/org/mule/galaxy/repository/rpc/WType.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,6 +1,6 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.rpc;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+package org.mule.galaxy.repository.rpc;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.util.PropertyDescriptorComparator;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.client.util.PropertyDescriptorComparator;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
 import com.extjs.gxt.ui.client.data.BeanModelTag;
 import com.google.gwt.user.client.rpc.IsSerializable;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserverpomxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/server/pom.xml (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/pom.xml	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/server/pom.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -28,7 +28,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
         &amp;lt;dependency&amp;gt;
             &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-            &amp;lt;artifactId&amp;gt;galaxy-repository-client&amp;lt;/artifactId&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            &amp;lt;artifactId&amp;gt;galaxy-repository-gwt-client&amp;lt;/artifactId&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             &amp;lt;version&amp;gt;${version}&amp;lt;/version&amp;gt;
         &amp;lt;/dependency&amp;gt;
 
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxyrepositoryRegistryServiceImpljavafromrev2110branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxywebserverRegistryServiceImpljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/repository/RegistryServiceImpl.java (from rev 2110, branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/server/RegistryServiceImpl.java) (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/repository/RegistryServiceImpl.java	                        (rev 0)
+++ branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/repository/RegistryServiceImpl.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,2094 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+/*
+ * $Id: ContextPathResolver.java 794 2008-04-23 22:23:10Z andrew $
+ * --------------------------------------------------------------------------------------
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+package org.mule.galaxy.repository;
+
+import java.io.FileNotFoundException;
+import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+
+import org.acegisecurity.context.SecurityContextHolder;
+import org.apache.abdera.i18n.text.UrlEncoding;
+import org.apache.abdera.i18n.text.CharUtils.Profile;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.mule.galaxy.DuplicateItemException;
+import org.mule.galaxy.Item;
+import org.mule.galaxy.Link;
+import org.mule.galaxy.Links;
+import org.mule.galaxy.NotFoundException;
+import org.mule.galaxy.PropertyException;
+import org.mule.galaxy.PropertyInfo;
+import org.mule.galaxy.Registry;
+import org.mule.galaxy.RegistryException;
+import org.mule.galaxy.activity.Activity;
+import org.mule.galaxy.activity.ActivityManager;
+import org.mule.galaxy.activity.ActivityManager.EventType;
+import org.mule.galaxy.artifact.ArtifactType;
+import org.mule.galaxy.artifact.ArtifactTypeDao;
+import org.mule.galaxy.collab.Comment;
+import org.mule.galaxy.collab.CommentManager;
+import org.mule.galaxy.event.EventManager;
+import org.mule.galaxy.extension.Extension;
+import org.mule.galaxy.impl.artifact.ArtifactExtension;
+import org.mule.galaxy.impl.artifact.UploadService;
+import org.mule.galaxy.impl.jcr.UserDetailsWrapper;
+import org.mule.galaxy.impl.lifecycle.LifecycleExtension;
+import org.mule.galaxy.impl.link.LinkExtension;
+import org.mule.galaxy.index.Index;
+import org.mule.galaxy.index.IndexManager;
+import org.mule.galaxy.lifecycle.Lifecycle;
+import org.mule.galaxy.lifecycle.LifecycleManager;
+import org.mule.galaxy.lifecycle.Phase;
+import org.mule.galaxy.policy.ApprovalMessage;
+import org.mule.galaxy.policy.Policy;
+import org.mule.galaxy.policy.PolicyException;
+import org.mule.galaxy.policy.PolicyManager;
+import org.mule.galaxy.query.OpRestriction;
+import org.mule.galaxy.query.Query;
+import org.mule.galaxy.query.QueryException;
+import org.mule.galaxy.query.Restriction;
+import org.mule.galaxy.query.SearchResults;
+import org.mule.galaxy.query.OpRestriction.Operator;
+import org.mule.galaxy.render.ItemRenderer;
+import org.mule.galaxy.render.RendererManager;
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryService;
+import org.mule.galaxy.repository.rpc.WApprovalMessage;
+import org.mule.galaxy.repository.rpc.WArtifactType;
+import org.mule.galaxy.repository.rpc.WArtifactView;
+import org.mule.galaxy.repository.rpc.WComment;
+import org.mule.galaxy.repository.rpc.WIndex;
+import org.mule.galaxy.repository.rpc.WLifecycle;
+import org.mule.galaxy.repository.rpc.WLinks;
+import org.mule.galaxy.repository.rpc.WPhase;
+import org.mule.galaxy.repository.rpc.WPolicy;
+import org.mule.galaxy.repository.rpc.WPolicyException;
+import org.mule.galaxy.repository.rpc.WProperty;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
+import org.mule.galaxy.repository.rpc.WSearchResults;
+import org.mule.galaxy.repository.rpc.WType;
+import org.mule.galaxy.security.AccessControlManager;
+import org.mule.galaxy.security.AccessException;
+import org.mule.galaxy.security.Permission;
+import org.mule.galaxy.security.User;
+import org.mule.galaxy.security.UserManager;
+import org.mule.galaxy.type.PropertyDescriptor;
+import org.mule.galaxy.type.Type;
+import org.mule.galaxy.type.TypeManager;
+import org.mule.galaxy.util.SecurityUtils;
+import org.mule.galaxy.util.UserUtils;
+import org.mule.galaxy.view.ArtifactViewManager;
+import org.mule.galaxy.view.View;
+import org.mule.galaxy.web.ContextPathResolver;
+import org.mule.galaxy.web.client.RPCException;
+import org.mule.galaxy.web.rpc.ItemExistsException;
+import org.mule.galaxy.web.rpc.ItemNotFoundException;
+import org.mule.galaxy.web.rpc.LinkInfo;
+import org.mule.galaxy.web.rpc.SearchPredicate;
+import org.mule.galaxy.web.rpc.WActivity;
+
+public class RegistryServiceImpl implements RegistryService {
+
+    protected static final String DEFAULT_DATETIME_FORMAT = &amp;quot;h:mm a, MMMM d, yyyy&amp;quot;;
+
+    private static final String RECENT_VIEWS = &amp;quot;recent.artifactViews&amp;quot;;
+
+    private final Log log = LogFactory.getLog(getClass());
+
+    private Registry registry;
+    private ArtifactTypeDao artifactTypeDao;
+    private RendererManager rendererManager;
+    private PolicyManager policyManager;
+    private IndexManager indexManager;
+    private ActivityManager activityManager;
+    private AccessControlManager accessControlManager;
+    private ArtifactViewManager artifactViewManager;
+    private TypeManager typeManager;
+
+    private ContextPathResolver contextPathResolver;
+
+    private LifecycleManager localLifecycleManager;
+
+    private EventManager eventManager;
+
+    private UploadService uploadService;
+
+    private UserManager userManager;
+    
+    public Collection&amp;lt;ItemInfo&amp;gt; getItems(String parentId, boolean traverseUpParents) throws RPCException {
+        try {
+            if (parentId == null) {
+                Collection&amp;lt;Item&amp;gt; items = registry.getItems();
+                
+                return toWeb(items, false);
+            } else {
+                Item w = (Item) registry.getItemById(parentId);
+
+                Collection&amp;lt;ItemInfo&amp;gt; workspaces = null;
+                if (traverseUpParents) {
+                    while (w != null) {
+                        Item parent = w.getParent();
+                        Collection&amp;lt;ItemInfo&amp;gt; parentWorkspaces;
+                        if (parent != null) {
+                            parentWorkspaces = toWeb(parent.getItems(), false);
+                        } else {
+                            parentWorkspaces = toWeb(registry.getItems(), false);
+                        }
+                        
+                        if (workspaces != null) {
+                            addWorkspaces(w.getName(), parentWorkspaces, workspaces);
+                        }
+                        workspaces = parentWorkspaces;
+                        w = parent;
+                    }
+                } else {
+                    workspaces = toWeb(w.getItems(), false);
+                }
+                return workspaces;
+            }
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public Collection&amp;lt;ItemInfo&amp;gt; getItemsWithAllChildren(String parentPath) throws RPCException {
+        return getItemsInPath(parentPath, true);
+    }
+
+    public Collection&amp;lt;ItemInfo&amp;gt; getItemsInPath(String parentPath) throws RPCException {
+        return getItemsInPath(parentPath, false);
+    }
+
+    private Collection&amp;lt;ItemInfo&amp;gt; getItemsInPath(String parentPath, boolean populateChildren) throws RPCException {
+        try {
+            if (parentPath == null || &amp;quot;&amp;quot;.equals(parentPath) || &amp;quot;/&amp;quot;.equals(parentPath)) {
+                return toWeb(registry.getItems(), populateChildren);
+            } else {
+                return toWeb(registry.getItemByPath(parentPath).getItems(), populateChildren);
+            }
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    
+    private Collection&amp;lt;ItemInfo&amp;gt; toWeb(Collection&amp;lt;Item&amp;gt; workspaces, boolean populateChildren) throws RegistryException {
+        if (workspaces == null) {
+            return null;
+        }
+        
+        List&amp;lt;ItemInfo&amp;gt; wis = new ArrayList&amp;lt;ItemInfo&amp;gt;();
+        for (Item w : workspaces) {
+            if (!w.isInternal()) {
+                ItemInfo ww = toWeb(w, populateChildren);
+                wis.add(ww);
+            }
+        }
+        
+        return wis;
+    }
+
+    private void addWorkspaces(String name, Collection&amp;lt;ItemInfo&amp;gt; parents, Collection&amp;lt;ItemInfo&amp;gt; children) {
+        for (ItemInfo w : parents) {
+            if (name.equals(w.getName())) {
+                w.setItems(children);
+                return;
+            }
+        }
+    }
+    
+    private ItemInfo toWeb(Item i, boolean populateChildren) throws RegistryException {
+        ItemInfo ii = new ItemInfo();
+        ii.setId(i.getId());
+        ii.setName(i.getName());
+        ii.setPath(i.getPath());
+        if (i.getParent() != null) {
+            ii.setParentPath(i.getParent().getPath());
+        }
+        ii.setLocal(i.isLocal());
+        if (i.getAuthor() != null) {
+            ii.setAuthorName(i.getAuthor().getName());
+            ii.setAuthorUsername(i.getAuthor().getUsername());
+        } else {
+            ii.setAuthorName(&amp;quot;[Removed]&amp;quot;);
+            ii.setAuthorName(&amp;quot;[Removed]&amp;quot;);
+        }
+        ii.setType(i.getType().getName());
+        
+        if (populateChildren) {
+            Collection&amp;lt;ItemInfo&amp;gt; children = toWeb(i.getItems(), populateChildren);
+            ii.setItems(children);
+        }
+        return ii;
+    }
+
+    public String addVersionedItem(String parentPath, 
+                                   String name, 
+                                   String versionName, 
+                                   String lifecycleId,
+                                   String typeId, 
+                                   String versionTypeId, 
+                                   Map&amp;lt;String, Serializable&amp;gt; properties,
+                                   Map&amp;lt;String, Serializable&amp;gt; versionProperties) throws RPCException,
+        ItemNotFoundException, ItemExistsException, WPolicyException {
+        addItem(parentPath, name, lifecycleId, typeId, properties);
+        
+        if (!parentPath.endsWith(&amp;quot;/&amp;quot;)) {
+            parentPath += &amp;quot;/&amp;quot;;
+        }
+        parentPath += name;
+        
+        return addItem(parentPath, versionName, lifecycleId, versionTypeId, versionProperties);
+    }
+
+    public String addItem(String parentPath, 
+                          String itemName, 
+                          String lifecycleId, 
+                          String typeId, 
+                          Map&amp;lt;String, Serializable&amp;gt; properties) 
+        throws RPCException, ItemNotFoundException, ItemExistsException, WPolicyException {
+        
+        // If we uploaded files, lets track them so we can delete them
+        ArrayList&amp;lt;String&amp;gt; filesToDelete = new ArrayList&amp;lt;String&amp;gt;();
+        
+        try {
+            Item item;
+            Type type = typeManager.getType(typeId);
+            Map&amp;lt;String, Object&amp;gt; localProperties = new HashMap&amp;lt;String, Object&amp;gt;();
+            if (properties != null) {
+                for (Map.Entry&amp;lt;String, Serializable&amp;gt; e : properties.entrySet()) {
+                    String name = e.getKey();
+                    PropertyDescriptor pd = typeManager.getPropertyDescriptorByName(name);
+                    
+                    localProperties.put(name, getLocalValue(pd, e.getValue(), null));
+                    
+                    if (pd != null &amp;amp;&amp;amp; pd.getExtension() instanceof ArtifactExtension) {
+                        filesToDelete.add((String)e.getValue());
+                    }
+                }
+            }
+            
+            if (parentPath == null || &amp;quot;&amp;quot;.equals(parentPath) || &amp;quot;/&amp;quot;.equals(parentPath)) {
+                item = registry.newItem(itemName, type, localProperties).getItem();
+            } else {
+                Item parent = (Item) registry.getItemByPath(parentPath);
+                
+                if (parent == null) {
+                    throw new RPCException(&amp;quot;Could not find parent workspace: &amp;quot; + parentPath);
+                }
+                item = parent.newItem(itemName, type, localProperties).getItem();
+            }
+            if (lifecycleId != null) {
+                item.setDefaultLifecycle(item.getLifecycleManager().getLifecycleById(lifecycleId));
+                registry.save(item);
+            }
+            
+            return item.getId();
+        } catch (DuplicateItemException e) {
+            throw new ItemExistsException();
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            log.error(e.getMessage(), e);
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw toWeb(e);
+        } catch (PropertyException e) {
+            throw new RPCException(e.getMessage());
+        } finally {
+            for (String s : filesToDelete) {
+                uploadService.delete(s);
+            }
+        }
+    }
+
+    public Collection&amp;lt;WArtifactType&amp;gt; getArtifactTypes() {
+        Collection&amp;lt;ArtifactType&amp;gt; artifactTypes = artifactTypeDao.listAll();
+        List&amp;lt;WArtifactType&amp;gt; atis = new ArrayList&amp;lt;WArtifactType&amp;gt;();
+
+        for (ArtifactType a : artifactTypes) {
+            WArtifactType at = toWeb(a);
+            atis.add(at);
+        }
+        return atis;
+    }
+
+    public WArtifactType getArtifactType(String id) throws RPCException {
+        try {
+            return toWeb(artifactTypeDao.get(id));
+        } catch (Exception e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    private WArtifactType toWeb(ArtifactType a) {
+        Set&amp;lt;QName&amp;gt; docTypes = a.getDocumentTypes();
+        List&amp;lt;String&amp;gt; docTypesAsStr = new ArrayList&amp;lt;String&amp;gt;();
+        if (docTypes != null) {
+            for (QName q : docTypes) {
+                docTypesAsStr.add(q.toString());
+            }
+        }
+        return new WArtifactType(a.getId(), a.getContentType(),
+                                 a.getDescription(), docTypesAsStr,
+                                 a.getFileExtensions());
+    }
+
+    public void deleteArtifactType(String id) throws RPCException {
+        try {
+            artifactTypeDao.delete(id);
+        } catch (RuntimeException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void saveArtifactType(WArtifactType artifactType) throws RPCException, ItemExistsException {
+        try {
+            ArtifactType at = fromWeb(artifactType);
+            artifactTypeDao.save(at);
+        } catch (RuntimeException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (DuplicateItemException e) {
+            throw new ItemExistsException();
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    private ArtifactType fromWeb(WArtifactType wat) {
+        ArtifactType at = new ArtifactType();
+        at.setId(wat.getId());
+        at.setDescription(wat.getDescription());
+        at.setContentType(wat.getMediaType());
+        at.setDocumentTypes(fromWeb(wat.getDocumentTypes()));
+
+        HashSet&amp;lt;String&amp;gt; exts = new HashSet&amp;lt;String&amp;gt;();
+        exts.addAll(wat.getFileExtensions());
+        at.setFileExtensions(exts);
+
+        return at;
+    }
+
+    private Set&amp;lt;QName&amp;gt; fromWeb(Collection&amp;lt;String&amp;gt; documentTypes) {
+        if (documentTypes == null) return null;
+
+        Set&amp;lt;QName&amp;gt; s = new HashSet&amp;lt;QName&amp;gt;();
+        for (Object o : documentTypes) {
+            String qn = o.toString();
+            if (qn.startsWith(&amp;quot;{}&amp;quot;)) {
+                qn = qn.substring(2);
+            }
+
+            s.add(QName.valueOf(qn));
+        }
+        return s;
+    }
+
+    private OpRestriction getRestrictionForPredicate(SearchPredicate pred) {
+        String property = pred.getProperty();
+        String value = pred.getValue();
+        switch (pred.getMatchType()) {
+            case SearchPredicate.HAS_VALUE:
+                return OpRestriction.eq(property, value);
+            case SearchPredicate.LIKE:
+                return OpRestriction.like(property, value);
+            case SearchPredicate.DOES_NOT_HAVE_VALUE:
+                return OpRestriction.not(OpRestriction.eq(property, value));
+            default:
+                return null;
+        }
+    }
+
+    public WSearchResults getArtifacts(String workspaceId, 
+                                       String workspacePath, 
+                                       boolean includeChildWkspcs,
+                                       Set&amp;lt;SearchPredicate&amp;gt; searchPredicates, 
+                                       String freeformQuery,
+                                       int start, int maxResults) throws RPCException {
+        Query q = getQuery(searchPredicates, start, maxResults);
+
+        final String context = contextPathResolver.getContextPath();
+        
+        try {
+            if (workspaceId != null) {
+                Item workspace = ((Item)registry.getItemById(workspaceId));
+                List&amp;lt;Item&amp;gt; items = workspace.getItems();
+                List&amp;lt;Item&amp;gt; trimmedItems = new ArrayList&amp;lt;Item&amp;gt;();
+                for (int i = start; i &amp;lt; start+maxResults &amp;amp;&amp;amp; i &amp;lt; items.size(); i++) {
+                    trimmedItems.add(items.get(i));
+                }
+                WSearchResults results = getSearchResults(null, trimmedItems, items.size());
+                results.setQuery(&amp;quot;select artifact, entry from &amp;#39;@&amp;quot; + workspaceId + &amp;quot;&amp;#39;&amp;quot;);
+                results.setFeed(getLink(context + &amp;quot;/api/registry&amp;quot;, workspace));
+                results.setTotal(items.size());
+                return results;
+            } else if (workspacePath != null &amp;amp;&amp;amp; !&amp;quot;&amp;quot;.equals(workspacePath) &amp;amp;&amp;amp; !&amp;quot;/&amp;quot;.equals(workspacePath)) {
+                q.fromPath(workspacePath, includeChildWkspcs);
+            }
+            
+            SearchResults results;
+            if (freeformQuery != null &amp;amp;&amp;amp; !freeformQuery.equals(&amp;quot;&amp;quot;))
+                results = registry.search(freeformQuery, start, maxResults);
+            else
+                results = registry.search(q);
+
+            WSearchResults wr = getSearchResults(null, results.getResults(), results.getTotal());
+            wr.setQuery(q.toString());
+            wr.setFeed(context + &amp;quot;/api/registry?q=&amp;quot; + UrlEncoding.encode(wr.getQuery(), Profile.PATH.filter()));
+            return wr;
+        } catch (QueryException e) {
+            throw new RPCException(e.getMessage());
+        } catch (RegistryException e) {
+            log.error(&amp;quot;Could not query the registry.&amp;quot;, e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public Collection&amp;lt;ItemInfo&amp;gt; suggestItems(String query, boolean recursive, String excludePath, String[] types) throws RPCException {
+        try {
+            SearchResults results = registry.suggest(query, recursive, 10, excludePath, types);
+            
+            ArrayList&amp;lt;ItemInfo&amp;gt; entries = new ArrayList&amp;lt;ItemInfo&amp;gt;();
+            for (Item i : results.getResults()) {
+                entries.add(toWeb(i, false));
+            }
+            return entries;
+        } catch (QueryException e) {
+            throw new RPCException(e.getMessage());
+        } catch (RegistryException e) {
+            log.error(&amp;quot;Could not query the registry.&amp;quot;, e);
+            throw new RPCException(e.getMessage());
+        }
+    }
+    
+    private Query getQuery(Set&amp;lt;SearchPredicate&amp;gt; searchPredicates, int start, int maxResults) {
+        Query q = new Query().orderBy(&amp;quot;name&amp;quot;);
+
+        q.setMaxResults(maxResults);
+        q.setStart(start);
+        // Filter based on our search terms
+
+        if (searchPredicates != null) {
+            for (Object predObj : searchPredicates) {
+                SearchPredicate pred = (SearchPredicate) predObj;
+                q.add(getRestrictionForPredicate(pred));
+            }
+        }
+        return q;
+    }
+
+    private WSearchResults getSearchResults(String type, 
+                                            Collection&amp;lt;? extends Item&amp;gt; results,
+                                            long total) throws RegistryException {
+
+        WSearchResults wsr = new WSearchResults();
+        ItemRenderer view;
+//        if (type != null) {
+//            view = rendererManager.getRenderer(type);
+//        } else {
+            view = rendererManager.getDefaultRenderer();
+//        }
+
+
+        int col = 0;
+        for (String colName : view.getColumnNames()) {
+            if (view.isSummary(col)) {
+                wsr.getColumns().add(colName);
+            }
+            col++;
+        }
+        
+        for (Item i : results) {
+            wsr.getRows().add(toWeb(i, false));
+        }
+
+        wsr.setTotal(total);
+        return wsr;
+    }
+
+    public WSearchResults getArtifactsForView(String viewId,
+                                              int resultStart,
+                                              int maxResults)
+            throws RPCException {
+        try {
+            View view = artifactViewManager.getArtifactView(viewId);
+            SearchResults result = registry.search(view.getQuery(), resultStart, maxResults);
+            return getSearchResults(null, result.getResults(), result.getTotal());
+        } catch (QueryException e) {
+            throw new RPCException(e.getMessage());
+        } catch (RegistryException e) {
+            log.error(&amp;quot;Could not query the registry.&amp;quot;, e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)
+    public void deleteArtifactView(String id) throws RPCException {
+        artifactViewManager.delete(id);
+        // clean up recent views too
+        User user = getCurrentUser();
+        List&amp;lt;String&amp;gt; views = (List&amp;lt;String&amp;gt;) user.getProperties().get(RECENT_VIEWS);
+        boolean wasFound = views.remove(id);
+
+        assert wasFound : &amp;quot;View deleted, but no corresponding Recent Views entry found for &amp;quot; + id;
+    }
+
+    public WArtifactView getArtifactView(String id) throws RPCException, ItemExistsException, ItemNotFoundException {
+        User user = getCurrentUser();
+        try {
+            WArtifactView view = toWeb(artifactViewManager.getArtifactView(id));
+            updateRecentArtifactViews(user, id);
+
+            return view;
+        } catch (DuplicateItemException e) {
+            throw new ItemExistsException();
+        } catch (NotFoundException e) {
+            log.error(e.getMessage(), e);
+            throw new ItemNotFoundException();
+        }
+    }
+
+    private void updateRecentArtifactViews(User user, String id) throws DuplicateItemException, NotFoundException {
+        List&amp;lt;String&amp;gt; recent = getRecentArtifactViewIds(user);
+
+        // remove this id if it alread exists
+        recent.remove(id);
+
+        // add the view to the top of the list
+        recent.add(0, id);
+
+        while (recent.size() &amp;gt; 5) {
+            recent.remove(recent.size() - 1);
+        }
+
+        userManager.save(user);
+    }
+
+    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)
+    private List&amp;lt;String&amp;gt; getRecentArtifactViewIds(User user) {
+        if (user.getProperties() == null) {
+            user.setProperties(new HashMap&amp;lt;String, Object&amp;gt;());
+        }
+        List&amp;lt;String&amp;gt; recent = (List&amp;lt;String&amp;gt;) user.getProperties().get(RECENT_VIEWS);
+
+        if (recent == null) {
+            recent = new ArrayList&amp;lt;String&amp;gt;();
+            user.getProperties().put(RECENT_VIEWS, recent);
+        }
+        return recent;
+    }
+
+    public Collection&amp;lt;WArtifactView&amp;gt; getArtifactViews() throws RPCException {
+        List&amp;lt;WArtifactView&amp;gt; views = new ArrayList&amp;lt;WArtifactView&amp;gt;();
+        User currentUser = getCurrentUser();
+        for (View v : artifactViewManager.getArtifactViews(currentUser)) {
+            views.add(toWeb(v));
+        }
+
+        Collections.sort(views, new Comparator&amp;lt;WArtifactView&amp;gt;() {
+            public int compare(WArtifactView v1, WArtifactView v2) {
+                return v1.getName().compareTo(v2.getName());
+            }
+        });
+        return views;
+    }
+
+    public Collection&amp;lt;WArtifactView&amp;gt; getRecentArtifactViews() throws RPCException {
+        List&amp;lt;WArtifactView&amp;gt; views = new ArrayList&amp;lt;WArtifactView&amp;gt;();
+        User currentUser = getCurrentUser();
+        List&amp;lt;String&amp;gt; ids = getRecentArtifactViewIds(currentUser);
+        if (ids != null) {
+            for (String id : ids) {
+                try {
+                    views.add(toWeb(artifactViewManager.getArtifactView(id)));
+                } catch (NotFoundException e) {
+                }
+            }
+        }
+        return views;
+    }
+
+    private WArtifactView toWeb(View v) throws RPCException {
+        WArtifactView wv = new WArtifactView();
+        if (v == null) {
+            return wv;
+        }
+        wv.setName(v.getName());
+        wv.setId(v.getId());
+
+        try {
+            if (v.isFreeform()) {
+                wv.setQueryString(v.getQuery());
+            } else {
+                Query q = Query.fromString(v.getQuery());
+    
+                wv.setPredicates(getPredicates(q));
+                wv.setWorkspace(q.getFromPath());
+                wv.setWorkspaceSearchRecursive(q.isFromRecursive());
+            }
+            
+            wv.setShared(v.getUser() == null);
+        } catch (QueryException e) {
+            log.error(&amp;quot;Could not parse query. &amp;quot; + e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        }
+        return wv;
+    }
+
+    /**
+     * Convert a string query to a set of search predicates for the SearchForm.
+     * You&amp;#39;ll see that we do not have full fidelity yet between text queries and
+     * the actual form. However, that is not a problem as we&amp;#39;ll only ever encounter
+     * queries which were created with the form. So there are some cases here
+     * that we don&amp;#39;t have to worry about.
+     *
+     * @param q
+     * @return
+     * @throws RPCException
+     */
+    public Set&amp;lt;SearchPredicate&amp;gt; getPredicates(Query q) throws RPCException {
+        Set&amp;lt;SearchPredicate&amp;gt; predicates = new HashSet&amp;lt;SearchPredicate&amp;gt;();
+
+        for (Restriction r : q.getRestrictions()) {
+            if (r instanceof OpRestriction) {
+                OpRestriction op = (OpRestriction) r;
+
+                Object left = op.getLeft();
+                Object right = op.getRight();
+                Operator operator = op.getOperator();
+
+                if (operator.equals(Operator.NOT)) {
+                    if (right instanceof OpRestriction) {
+                        OpRestriction op2 = (OpRestriction) right;
+
+                        predicates.add(new SearchPredicate(op2.getLeft().toString(),
+                                                           SearchPredicate.DOES_NOT_HAVE_VALUE,
+                                                           op2.getRight().toString()));
+                    } else {
+                        throw new RPCException(&amp;quot;Query could not be converted.&amp;quot;);
+                    }
+                } else if (operator.equals(Operator.EQUALS)) {
+                    predicates.add(new SearchPredicate(left.toString(), SearchPredicate.HAS_VALUE, right.toString()));
+                } else if (operator.equals(Operator.LIKE)) {
+                    predicates.add(new SearchPredicate(left.toString(), SearchPredicate.LIKE, right.toString()));
+                }
+            }
+        }
+        return predicates;
+    }
+
+    public String saveArtifactView(WArtifactView wv) throws RPCException {
+        View v = fromWeb(wv);
+
+        try {
+            artifactViewManager.save(v);
+            return v.getId();
+        } catch (DuplicateItemException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(&amp;quot;Couldn&amp;#39;t save view.&amp;quot;);
+        } catch (NotFoundException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(&amp;quot;The view being saved has been deleted.&amp;quot;);
+        }
+    }
+
+    private View fromWeb(WArtifactView wv) throws RPCException {
+        View v = new View();
+        v.setId(wv.getId());
+        v.setName(wv.getName());
+        if (!wv.isShared()) {
+            v.setUser(getCurrentUser());
+        }
+        
+        if (wv.getQueryString() != null &amp;amp;&amp;amp; !&amp;quot;&amp;quot;.equals(wv.getQueryString())) {
+            v.setQuery(wv.getQueryString());
+            v.setFreeform(true);
+        } else {
+            Query query = getQuery(wv.getPredicates(), 0, 0);
+            query.fromPath(wv.getWorkspace(), wv.isWorkspaceSearchRecursive());
+    
+            v.setQuery(query.toString());
+            v.setFreeform(false);
+        }
+        
+        return v;
+    }
+
+    public Collection&amp;lt;WIndex&amp;gt; getIndexes() {
+        ArrayList&amp;lt;WIndex&amp;gt; windexes = new ArrayList&amp;lt;WIndex&amp;gt;();
+
+        Collection&amp;lt;Index&amp;gt; indices = indexManager.getIndexes();
+        for (Index idx : indices) {
+            windexes.add(toWeb(idx));
+        }
+
+        return windexes;
+    }
+
+    private WIndex toWeb(Index idx) {
+
+        ArrayList&amp;lt;String&amp;gt; docTypes = new ArrayList&amp;lt;String&amp;gt;();
+        if (idx.getDocumentTypes() != null) {
+            for (QName q : idx.getDocumentTypes()) {
+                docTypes.add(q.toString());
+            }
+        }
+        String qt;
+        if (String.class.equals(idx.getQueryType())) {
+            qt = &amp;quot;String&amp;quot;;
+        } else {
+            qt = &amp;quot;QName&amp;quot;;
+        }
+
+        return new WIndex(idx.getId(),
+                          idx.getDescription(),
+                          idx.getMediaType(),
+                          idx.getConfiguration().get(&amp;quot;property&amp;quot;),
+                          idx.getConfiguration().get(&amp;quot;expression&amp;quot;),
+                          idx.getIndexer(),
+                          qt,
+                          docTypes);
+    }
+
+    public WIndex getIndex(String id) throws RPCException {
+        try {
+            Index idx = indexManager.getIndex(id);
+            if (idx == null) {
+                return null;
+            }
+            return toWeb(idx);
+        } catch (Exception e) {
+            throw new RPCException(&amp;quot;Could not find index &amp;quot; + id);
+        }
+    }
+
+    public void saveIndex(WIndex wi) throws RPCException {
+        try {
+            Index idx = fromWeb(wi);
+
+            indexManager.save(idx);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(&amp;quot;Couldn&amp;#39;t save index.&amp;quot;);
+        }
+    }
+
+    public void deleteIndex(String id, boolean removeArtifactMetadata) throws RPCException {
+        try {
+            indexManager.delete(id, removeArtifactMetadata);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(&amp;quot;Couldn&amp;#39;t save index.&amp;quot;);
+        }
+    }
+
+    private Index fromWeb(WIndex wi) throws RPCException {
+        Index idx = new Index();
+        idx.setId(wi.getId());
+        idx.setConfiguration(new HashMap&amp;lt;String, String&amp;gt;());
+        idx.setIndexer(wi.getIndexer());
+
+        if (idx.getIndexer().contains(&amp;quot;Groovy&amp;quot;)) {
+            idx.getConfiguration().put(&amp;quot;script&amp;quot;, wi.getExpression());
+        } else {
+            idx.getConfiguration().put(&amp;quot;property&amp;quot;, wi.getProperty());
+            idx.getConfiguration().put(&amp;quot;expression&amp;quot;, wi.getExpression());
+        }
+        idx.setIndexer(wi.getIndexer());
+        idx.setDescription(wi.getDescription());
+        idx.setMediaType(wi.getMediaType());
+
+        if (wi.getResultType().equals(&amp;quot;String&amp;quot;)) {
+            idx.setQueryType(String.class);
+        } else {
+            idx.setQueryType(QName.class);
+        }
+
+        Set&amp;lt;QName&amp;gt; docTypes = new HashSet&amp;lt;QName&amp;gt;();
+        for (Object o : wi.getDocumentTypes()) {
+            try {
+                docTypes.add(QName.valueOf(o.toString()));
+            } catch (IllegalArgumentException e) {
+                throw new RPCException(&amp;quot;QName was formatted incorrectly: &amp;quot; + o.toString());
+            }
+        }
+        idx.setDocumentTypes(docTypes);
+        return idx;
+    }
+
+    public boolean itemExists(String path) throws RPCException {
+        try {
+            registry.getItemByPath(path);
+            return true;
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            return false;
+        } catch (AccessException e) {
+            // Not sure if this is the right thing to do, but
+            // I think we should err on the side of not showing what
+            // is in the registry
+            return false;
+        }
+            
+    }
+
+    public WLinks getLinks(String itemId, String property) throws RPCException {
+        try {
+            Item item = registry.getItemById(itemId);
+            Links links = item.getProperty(property);
+            PropertyDescriptor pd = typeManager.getPropertyDescriptor(property);
+            
+            return toWeb(links, pd);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        }
+
+    }
+
+    private WLinks toWeb(Links links, PropertyDescriptor pd) {
+        if (links == null) {
+            return null;
+        }
+        
+        WLinks wlinks = new WLinks();
+        
+        List&amp;lt;LinkInfo&amp;gt; deps = new ArrayList&amp;lt;LinkInfo&amp;gt;();
+        
+        for (Link l : links.getLinks()) {
+            deps.add(toWeb(l, false));
+        }
+        wlinks.setLinks(deps);
+        
+        deps = new ArrayList&amp;lt;LinkInfo&amp;gt;();
+        for (Link l : links.getReciprocalLinks()) {
+            deps.add(toWeb(l, true));
+        }
+        wlinks.setReciprocal(deps);
+        
+        
+        wlinks.setReciprocalName(pd.getConfiguration().values().iterator().next());
+        
+        return wlinks;
+    }
+    
+    private LinkInfo toWeb(Link l, boolean recip) {
+        Item i = recip ? l.getItem() : l.getLinkedTo();
+        String name;
+        int itemType;
+        String id = null;
+
+        if (i != null) {
+            itemType = LinkInfo.TYPE_ENTRY;
+            name = i.getPath();
+            id = i.getId();
+        } else if (i == null) {
+            itemType = LinkInfo.TYPE_NOT_FOUND;
+            name = l.getLinkedToPath();
+        } else {
+            throw new UnsupportedOperationException();
+        }
+        return new LinkInfo(l.getId(),
+                            l.isAutoDetected(),
+                            id,
+                            name,
+                            itemType,
+                            recip);
+    }
+
+    private ItemInfo toWebExtended(Item e, boolean showProperties) throws RegistryException {
+        ItemInfo info = toWeb(e, false);
+        
+        Set&amp;lt;Permission&amp;gt; permissions = accessControlManager.getPermissions(SecurityUtils.getCurrentUser(), e);
+        info.setModifiable(permissions.contains(Permission.MODIFY_ITEM));
+        info.setDeletable(permissions.contains(Permission.DELETE_ITEM));
+
+        if (e.isLocal()) {
+            info.setDefaultLifecycleId(e.getDefaultLifecycle().getId());
+        }
+
+        final String context = contextPathResolver.getContextPath();
+        info.setArtifactFeedLink(getLink(context + &amp;quot;/api/registry&amp;quot;, e) + &amp;quot;;history&amp;quot;);
+        info.setCommentsFeedLink(context + &amp;quot;/api/comments&amp;quot;);
+        
+        List&amp;lt;WComment&amp;gt; wcs = info.getComments();
+
+        CommentManager commentManager = e.getCommentManager();
+        if (commentManager != null) {
+            List&amp;lt;Comment&amp;gt; comments = commentManager.getComments(e.getId());
+            for (Comment c : comments) {
+                final SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATETIME_FORMAT);
+                WComment wc = new WComment(c.getId(), 
+                                           UserUtils.getUsername(c.getUser()), 
+                                           dateFormat.format(c
+                        .getDate().getTime()), c.getText());
+                wcs.add(wc);
+    
+                Set&amp;lt;Comment&amp;gt; children = c.getComments();
+                if (children != null &amp;amp;&amp;amp; children.size() &amp;gt; 0) {
+                    addComments(wc, children);
+                }
+            }
+        }
+
+        populateProperties(e, info, showProperties);
+        
+        return info;
+    }
+
+    public ItemInfo getItemInfo(String itemId, boolean showHidden) throws RPCException, ItemNotFoundException {
+        try {
+            Item item = registry.getItemById(itemId);
+
+            return toWebExtended(item, showHidden);
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public ItemInfo getItemByPath(String path) throws RPCException, ItemNotFoundException {
+        try {
+            Item item = registry.getItemByPath(path);
+            return toWeb(item, false);
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    @SuppressWarnings(&amp;quot;unchecked&amp;quot;)
+    private void populateProperties(Item item, ItemInfo vi, boolean showHidden) {
+        for (PropertyInfo p : item.getProperties()) {
+            if (!showHidden &amp;amp;&amp;amp; !p.isVisible()) {
+                continue;
+            }
+
+            PropertyDescriptor pd = p.getPropertyDescriptor();
+            Extension ext = pd != null ? pd.getExtension() : null;
+            
+            Object val = toWeb(item, p, ext);
+
+            String desc = p.getDescription();
+            if (desc == null) {
+                desc = p.getName();
+            }
+            
+            String extId = ext != null ? ext.getId() : null;
+            
+            vi.getProperties().add(new WProperty(p.getName(), 
+                                                 desc, 
+                                                 (Serializable) val, 
+                                                 extId, 
+                                                 p.isLocked()));
+        }
+
+        Collections.sort(vi.getProperties(), new Comparator() {
+
+            public int compare(Object o1, Object o2) {
+                return ((WProperty) o1).getDescription().compareTo(((WProperty) o2).getDescription());
+            }
+
+        });
+    }
+
+    private Object toWeb(Item item, PropertyInfo p, Extension ext) {
+        if (ext instanceof LinkExtension) {
+            Links links = p.getValue();
+            
+            return toWeb(links, p.getPropertyDescriptor());
+        } else if (ext instanceof ArtifactExtension) {
+            return getLink(contextPathResolver.getContextPath() + &amp;quot;/api/registry&amp;quot;, item.getParent()) 
+                + &amp;quot;?version=&amp;quot; + item.getName();
+        } else {
+            Object internalValue = p.getInternalValue();
+            
+            return convertQNames(internalValue);
+        }
+    }
+
+    /**
+     * This method is here temporarily until we can serialize qnames remotely
+     * @param val
+     */
+    private Object convertQNames(Object val) {
+        if (val instanceof Collection) {
+            List&amp;lt;String&amp;gt; objs = new ArrayList&amp;lt;String&amp;gt;();
+            for (Object o : (Collection) val) {
+                objs.add(o.toString());
+            }
+            return objs;
+        }
+        return val;
+    }
+
+    private String getLink(String base, Item a) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(base).append(a.getPath());
+        return sb.toString();
+    }
+
+    public WComment addComment(String entryId, String parentComment, String text) throws RPCException, ItemNotFoundException {
+        try {
+            Item item = registry.getItemById(entryId);
+
+            Comment comment = new Comment();
+            comment.setText(text);
+
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(new Date());
+            comment.setDate(cal);
+
+            comment.setUser(getCurrentUser());
+
+            Item w = (Item)item.getParent();
+            CommentManager commentManager = w.getCommentManager();
+            if (parentComment != null) {
+                Comment c = commentManager.getComment(parentComment);
+                if (c == null) {
+                    throw new RPCException(&amp;quot;Invalid parent comment&amp;quot;);
+                }
+                comment.setParent(c);
+            } else {
+                comment.setItem(item);
+            }
+            commentManager.addComment(comment);
+
+            SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATETIME_FORMAT);
+            return new WComment(comment.getId(), 
+                                UserUtils.getUsername(comment.getUser()), 
+                                dateFormat.format(comment.getDate().getTime()), 
+                                comment.getText());
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    private User getCurrentUser() throws RPCException {
+        UserDetailsWrapper wrapper = (UserDetailsWrapper) SecurityContextHolder.getContext()
+                .getAuthentication().getPrincipal();
+        if (wrapper == null) {
+            throw new RPCException(&amp;quot;No user is logged in!&amp;quot;);
+        }
+        return wrapper.getUser();
+    }
+
+    private void addComments(WComment parent, Set&amp;lt;Comment&amp;gt; comments) {
+        for (Comment c : comments) {
+            SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATETIME_FORMAT);
+            WComment child = new WComment(c.getId(), UserUtils.getUsername(c.getUser()), dateFormat.format(c.getDate()
+                    .getTime()), c.getText());
+            parent.getComments().add(child);
+
+            Set&amp;lt;Comment&amp;gt; children = c.getComments();
+            if (children != null &amp;amp;&amp;amp; children.size() &amp;gt; 0) {
+                addComments(child, children);
+            }
+        }
+    }
+
+    public void setProperty(String itemId, String propertyName, Serializable propertyValue) throws RPCException, ItemNotFoundException, WPolicyException {
+        try {
+            Item item = registry.getItemById(itemId);
+
+            PropertyDescriptor pd = typeManager.getPropertyDescriptorByName(propertyName);
+            
+            Object value = getLocalValue(pd, propertyValue, item);
+            
+            item.setProperty(pd.getProperty(), value);
+            
+            registry.save(item);
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (PropertyException e) {
+            // occurs if property name is formatted wrong
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw toWeb(e);
+        }
+    }
+
+    public Object getLocalValue(PropertyDescriptor pd, 
+                                Serializable s, 
+                                Item item) 
+        throws NotFoundException, RegistryException, AccessException, RPCException {
+        if (pd != null &amp;amp;&amp;amp; pd.getExtension() != null) {
+            Extension ext = pd.getExtension();
+            if (ext instanceof LinkExtension) {
+                Links links = item.getProperty(pd.getProperty());
+                WLinks wlinks = (WLinks) s;
+                
+                Collection&amp;lt;Link&amp;gt; linksToRemove = new ArrayList&amp;lt;Link&amp;gt;();
+                Collection&amp;lt;Link&amp;gt; linksToAdd = new ArrayList&amp;lt;Link&amp;gt;();
+                if (links != null) {
+                    linksToRemove.addAll(links.getLinks());
+                }
+                for (Iterator&amp;lt;LinkInfo&amp;gt; itr = wlinks.getLinks().iterator(); itr.hasNext();) {
+                    LinkInfo wl = itr.next();
+                    Link l = getLink(linksToRemove, wl);
+                    
+                    if (l != null) {
+                        linksToRemove.remove(l);
+                    } else {
+                        Item linkTo = registry.getItemByPath(wl.getItemName());
+                        
+                        Link link = new Link(item, linkTo, null, false);
+                        linksToAdd.add(link);
+                    }
+                }
+                
+                if (links != null) {
+                    for (Link l : linksToRemove) {
+                        links.removeLinks(l);
+                    }
+                    for (Link l : linksToAdd) {
+                        links.addLinks(l);
+                    }
+                }
+                
+                return linksToAdd;
+            } else if (ext instanceof ArtifactExtension) {
+                try {
+                    return new Object[] { uploadService.getFile(s.toString()),
+                                          &amp;quot;application/octet-stream&amp;quot; };
+                } catch (FileNotFoundException e) {
+                    throw new RPCException(&amp;quot;An error occurred processing the file upload. Please try again.&amp;quot;);
+                }
+            } else if (ext instanceof LifecycleExtension) {
+                List ids = (List) s;
+                
+                if (ids.size() != 2) {
+                    throw new RPCException(&amp;quot;Lifecycle metadata is wrong length!&amp;quot;);
+                }
+                
+                LifecycleManager lifecycleManager;
+                if (item != null) {
+                    lifecycleManager = item.getLifecycleManager();
+                } else {
+                    lifecycleManager = localLifecycleManager;
+                }
+                
+                return (Phase) lifecycleManager.getPhaseById((String)ids.get(1));
+            }
+        } 
+        return s;
+    }
+    
+    private Link getLink(Collection&amp;lt;Link&amp;gt; linkList, LinkInfo l) {
+        for (Link link : linkList) {
+            String path = link.getLinkedToPath();
+            if (link.getId().equals(l.getLinkId())
+                || (path != null &amp;amp;&amp;amp; path.equals(l.getItemName()))) {
+                return link;
+            }
+        }
+        return null;
+    }
+
+    public void setPropertyForQuery(String query,
+                                    String propertyName, 
+                                    Serializable propertyValue)
+        throws RPCException, ItemNotFoundException, WPolicyException {
+        try {
+            SearchResults results = registry.search(query, 0, -1);
+            List&amp;lt;Item&amp;gt; items = new ArrayList&amp;lt;Item&amp;gt;();
+            for (Item item : results.getResults()) {
+                PropertyDescriptor pd = typeManager.getPropertyDescriptorByName(propertyName);
+                Extension ext = pd != null ? pd.getExtension() : null;
+                
+                setProperty(item, pd, propertyValue, ext, items);
+            }
+            
+            // don&amp;#39;t save until we actually manage to set everything
+            for (Item i : items) {
+                registry.save(i);
+            }
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (PropertyException e) {
+            // occurs if property name is formatted wrong
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw toWeb(e);
+        }
+    }
+
+    public void setProperty(Collection&amp;lt;String&amp;gt; entryIds,
+                            String propertyName, 
+                            Serializable propertyValue)
+        throws RPCException, ItemNotFoundException, WPolicyException {
+        try {
+            List&amp;lt;Item&amp;gt; items = new ArrayList&amp;lt;Item&amp;gt;();
+            for (String itemId : entryIds) {
+                Item item = registry.getItemById(itemId);
+
+                PropertyDescriptor pd = typeManager.getPropertyDescriptorByName(propertyName);
+                Extension ext = pd != null ? pd.getExtension() : null;
+                
+                setProperty(item, pd, propertyValue, ext, items);
+            }
+            
+            // don&amp;#39;t save until we actually manage to set everything
+            for (Item i : items) {
+                registry.save(i);
+            }
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (PropertyException e) {
+            // occurs if property name is formatted wrong
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw toWeb(e);
+        }
+    }
+
+    private void setProperty(Item item, 
+                             PropertyDescriptor pd, 
+                             Serializable propertyValue, 
+                             Extension ext,
+                             List&amp;lt;Item&amp;gt; items) throws PropertyException, PolicyException, NotFoundException,
+        RegistryException, AccessException, RPCException {
+        Object value = getLocalValue(pd, propertyValue, item);
+        
+        item.setProperty(pd.getProperty(), value);
+        items.add(item);
+    }
+
+    public void deleteProperty(String itemId, String propertyName) throws RPCException, ItemNotFoundException {
+        try {
+            Item item = registry.getItemById(itemId);
+            item.setProperty(propertyName, null);
+            registry.save(item);
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (PropertyException e) {
+            // occurs if property name is formatted wrong
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void deleteProperty(Collection&amp;lt;String&amp;gt; entryIds, String propertyName) throws RPCException, ItemNotFoundException {
+        try {
+            List&amp;lt;Item&amp;gt; items = new ArrayList&amp;lt;Item&amp;gt;();
+            for (String itemId : entryIds) {
+                Item item = registry.getItemById(itemId);
+                
+                item.setProperty(propertyName, null);
+                items.add(item);
+            }
+            // don&amp;#39;t save until we actually delete everything
+            for (Item i : items) {
+                registry.save(i);
+            }
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (PropertyException e) {
+            // occurs if property name is formatted wrong
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void deletePropertyForQuery(String query, String propertyName) throws RPCException, ItemNotFoundException {
+        try {
+            SearchResults results = registry.search(query, 0, -1);
+            List&amp;lt;Item&amp;gt; items = new ArrayList&amp;lt;Item&amp;gt;();
+            for (Item item : results.getResults()) {
+                item.setProperty(propertyName, null);
+            }
+            // don&amp;#39;t save until we actually delete everything
+            for (Item i : items) {
+                registry.save(i);
+            }
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (PropertyException e) {
+            // occurs if property name is formatted wrong
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void deletePropertyDescriptor(String id) throws RPCException {
+        typeManager.deletePropertyDescriptor(id);
+    }
+
+    public WPropertyDescriptor getPropertyDescriptor(String id) throws RPCException, ItemNotFoundException {
+        try {
+            return toWeb(typeManager.getPropertyDescriptor(id));
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        }
+    }
+
+    public List&amp;lt;WPropertyDescriptor&amp;gt; getPropertyDescriptors(boolean includeIndex) throws RPCException {
+        List&amp;lt;WPropertyDescriptor&amp;gt; pds = new ArrayList&amp;lt;WPropertyDescriptor&amp;gt;();
+        for (PropertyDescriptor pd : typeManager.getGlobalPropertyDescriptors(includeIndex)) {
+            pds.add(toWeb(pd));
+        }
+        return pds;
+    }
+
+    private WPropertyDescriptor toWeb(PropertyDescriptor pd) {
+        String ext = pd.getExtension() != null ? pd.getExtension().getId() : null;
+        
+        WPropertyDescriptor wpd = new WPropertyDescriptor(pd.getId(), pd.getProperty(), pd.getDescription(), ext, pd.isMultivalued(), pd.getConfiguration());
+        if (pd.getType() != null) {
+            wpd.setTypeId(pd.getType().getId());
+        }
+        return wpd;
+    }
+
+    public void savePropertyDescriptor(WPropertyDescriptor wpd) throws RPCException, ItemNotFoundException, ItemExistsException {
+        try {
+            PropertyDescriptor pd;
+
+            if (wpd.getId() == null) {
+                pd = new PropertyDescriptor();
+            } else {
+                pd = typeManager.getPropertyDescriptor(wpd.getId());
+            }
+
+            pd.setProperty(wpd.getName());
+            pd.setDescription(wpd.getDescription());
+            pd.setMultivalued(wpd.isMultiValued());
+            pd.setConfiguration(wpd.getConfiguration());
+            pd.setExtension(registry.getExtension(wpd.getExtension()));
+            
+            typeManager.savePropertyDescriptor(pd);
+
+            wpd.setId(pd.getId());
+        } catch (DuplicateItemException e) {
+            throw new ItemExistsException();
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    
+    public List&amp;lt;WType&amp;gt; getTypes() throws RPCException {
+        ArrayList&amp;lt;WType&amp;gt; types = new ArrayList&amp;lt;WType&amp;gt;();
+        for (Type type : typeManager.getTypes()) {
+            types.add(toWeb(type));
+        }
+        return types;
+    }
+
+    public WType getType(String id) throws RPCException {
+        try {
+            return toWeb(typeManager.getType(id));
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void saveType(WType wt) throws RPCException, ItemExistsException {
+        try {
+            Type type = fromWeb(wt);
+            
+            // have to do two phases of saving. First, get a type ID
+            // then use that type ID on any property that was created
+            List&amp;lt;PropertyDescriptor&amp;gt; props = type.getProperties();
+            type.setProperties(null);
+            
+            typeManager.saveType(type);
+            
+            for (PropertyDescriptor pd : props) {
+                typeManager.savePropertyDescriptor(pd);
+            }
+            
+            type.setProperties(props);
+            typeManager.saveType(type);
+            
+            wt.setId(type.getId());
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (DuplicateItemException e) {
+            throw new ItemExistsException();
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    private Type fromWeb(WType wt) throws NotFoundException {
+        Type type = new Type();
+        type.setId(wt.getId());
+        type.setName(wt.getName());
+        type.setAllowedChildren(fromWebToTypes(wt.getAllowedChildrenIds()));
+        type.setMixins(fromWebToTypes(wt.getMixinIds()));
+        
+        List&amp;lt;PropertyDescriptor&amp;gt; properties = new ArrayList&amp;lt;PropertyDescriptor&amp;gt;();
+        for (WPropertyDescriptor wpd : wt.getProperties()) {
+            PropertyDescriptor pd;
+            if (wpd.getId() != null  &amp;amp;&amp;amp; !&amp;quot;new&amp;quot;.equals(wpd.getId())) {
+                pd = typeManager.getPropertyDescriptor(wpd.getId());
+            } else {
+                pd = new PropertyDescriptor();
+                pd.setMultivalued(wpd.isMultiValued());
+                pd.setConfiguration(wpd.getConfiguration());
+                pd.setExtension(registry.getExtension(wpd.getExtension()));
+            }
+            
+            pd.setProperty(wpd.getName());
+            pd.setDescription(wpd.getDescription());
+            
+            properties.add(pd);
+        }
+        type.setProperties(properties);
+        
+        return type;
+    }
+
+    private List&amp;lt;Type&amp;gt; fromWebToTypes(List&amp;lt;String&amp;gt; allowedChildrenIds) 
+        throws NotFoundException {
+        List&amp;lt;Type&amp;gt; types = new ArrayList&amp;lt;Type&amp;gt;();
+        for (String id : allowedChildrenIds) {
+            types.add(typeManager.getType(id));
+        }
+        return types;
+    }
+    
+    private List&amp;lt;String&amp;gt; toWeb(List&amp;lt;Type&amp;gt; children) {
+        if (children == null) return Collections.emptyList();
+        
+        List&amp;lt;String&amp;gt; types = new ArrayList&amp;lt;String&amp;gt;();
+        for (Type t : children) {
+            types.add(t.getId());
+        }
+        return types;
+    }
+
+    private WType toWeb(Type type) {
+        WType wt = new WType();
+        wt.setId(type.getId());
+        wt.setName(type.getName());
+        ArrayList&amp;lt;WPropertyDescriptor&amp;gt; pds = new ArrayList&amp;lt;WPropertyDescriptor&amp;gt;();
+        if (type.getProperties() != null) {
+            for (PropertyDescriptor pd : type.getProperties()) {
+                pds.add(toWeb(pd));
+            }
+        }
+        wt.setProperties(pds);
+        wt.setAllowedChildrenIds(toWeb(type.getAllowedChildren()));
+        wt.setMixinIds(toWeb(type.getMixins()));
+        wt.getMixinIds().remove(type.getId());
+        wt.setSystem(type.isSystemType());
+        
+        return wt;
+    }
+
+    public Map&amp;lt;String, String&amp;gt; getQueryProperties() throws RPCException {
+        return registry.getQueryProperties();
+    }
+    
+    public void move(String itemId, String workspacePath, String name) 
+        throws RPCException, ItemNotFoundException, WPolicyException {
+        try {
+            Item i = registry.getItemById(itemId);
+            
+            registry.move(i, workspacePath, name);
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw toWeb(e);
+        } catch (PropertyException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void delete(String itemId) throws RPCException, ItemNotFoundException {
+        try {
+            Item item = registry.getItemById(itemId);
+
+            item.delete();
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void delete(List&amp;lt;String&amp;gt; ids) throws RPCException, ItemNotFoundException {
+        try {
+            for (String id : ids) {
+                Item item = registry.getItemById(id);
+    
+                item.delete();
+            }
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void transition(Collection&amp;lt;String&amp;gt; entryIds, String lifecycle, String phase) throws RPCException, ItemNotFoundException {
+        
+    }
+
+    public Collection&amp;lt;WLifecycle&amp;gt; getLifecycles() throws RPCException {
+        Collection&amp;lt;Lifecycle&amp;gt; lifecycles = localLifecycleManager.getLifecycles();
+        Lifecycle defaultLifecycle = localLifecycleManager.getDefaultLifecycle();
+
+        ArrayList&amp;lt;WLifecycle&amp;gt; wls = new ArrayList&amp;lt;WLifecycle&amp;gt;();
+        for (Lifecycle l : lifecycles) {
+            WLifecycle lifecycle = toWeb(l, defaultLifecycle.equals(l));
+            wls.add(lifecycle);
+        }
+
+        return wls;
+    }
+
+    public WLifecycle getLifecycle(String id) throws RPCException {
+        try {
+            Lifecycle defaultLifecycle = localLifecycleManager.getDefaultLifecycle();
+
+            Lifecycle l = localLifecycleManager.getLifecycleById(id);
+
+            return toWeb(l, defaultLifecycle.equals(l));
+        } catch (Exception e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    private WLifecycle toWeb(Lifecycle l, boolean defaultLifecycle) {
+        WLifecycle lifecycle = new WLifecycle(l.getId(), l.getName(), defaultLifecycle);
+
+        List&amp;lt;WPhase&amp;gt; wphases = new ArrayList&amp;lt;WPhase&amp;gt;();
+        lifecycle.setPhases(wphases);
+
+        for (Phase p : l.getPhases().values()) {
+            WPhase wp = toWeb(p);
+            wphases.add(wp);
+
+            if (p.equals(l.getInitialPhase())) {
+                lifecycle.setInitialPhase(wp);
+            }
+        }
+
+        for (Phase p : l.getPhases().values()) {
+            WPhase wp = lifecycle.getPhase(p.getName());
+            List&amp;lt;WPhase&amp;gt; nextPhases = new ArrayList&amp;lt;WPhase&amp;gt;();
+
+            for (Phase next : p.getNextPhases()) {
+                WPhase wnext = lifecycle.getPhase(next.getName());
+
+                nextPhases.add(wnext);
+            }
+            wp.setNextPhases(nextPhases);
+        }
+
+        Collections.sort(wphases, new Comparator&amp;lt;WPhase&amp;gt;() {
+
+            public int compare(WPhase o1, WPhase o2) {
+                return o1.getName().compareTo(o2.getName());
+            }
+
+        });
+        return lifecycle;
+    }
+
+    private WPhase toWeb(Phase p) {
+        WPhase wp = new WPhase(p.getId(), p.getName());
+        return wp;
+    }
+
+    public Collection&amp;lt;String&amp;gt; getActivePoliciesForLifecycle(String lifecycleName, String workspaceId)
+            throws RPCException {
+        Collection&amp;lt;Policy&amp;gt; pols;
+        Lifecycle lifecycle = localLifecycleManager.getLifecycle(lifecycleName);
+        try {
+            if (workspaceId != null) {
+                Item w = (Item) registry.getItemById(workspaceId);
+                pols = policyManager.getActivePolicies(w, lifecycle);
+            } else {
+                pols = policyManager.getActivePolicies(lifecycle);
+            }
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+        return getArtifactPolicyIds(pols);
+    }
+
+    public Collection&amp;lt;String&amp;gt; getActivePoliciesForPhase(String lifecycle, 
+                                                        String phaseName, 
+                                                        String itemId)
+            throws RPCException {
+        Collection&amp;lt;Policy&amp;gt; pols;
+        Phase phase = localLifecycleManager.getLifecycle(lifecycle).getPhase(phaseName);
+        try {
+            if (itemId != null) {
+                Item w = (Item) registry.getItemById(itemId);
+                pols = policyManager.getActivePolicies(w, phase);
+            } else {
+                pols = policyManager.getActivePolicies(phase);
+            }
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+
+        return getArtifactPolicyIds(pols);
+    }
+
+    public void setActivePolicies(String itemId, 
+                                  String lifecycle, 
+                                  String phase, Collection&amp;lt;String&amp;gt; ids)
+            throws RPCException, WPolicyException, ItemNotFoundException {
+        Lifecycle l = localLifecycleManager.getLifecycle(lifecycle);
+        List&amp;lt;Policy&amp;gt; policies = getArtifactPolicies(ids);
+
+        try {
+            if (phase != null) {
+                Phase p = l.getPhase(phase);
+
+                if (p == null) {
+                    throw new RPCException(&amp;quot;Invalid phase: &amp;quot; + phase);
+                }
+
+                List&amp;lt;Phase&amp;gt; phases = Arrays.asList(p);
+
+                if (itemId == null || &amp;quot;&amp;quot;.equals(itemId)) {
+                    policyManager.setActivePolicies(phases, policies.toArray(new Policy[policies
+                            .size()]));
+                } else {
+                    Item w = (Item) registry.getItemById(itemId);
+                    policyManager.setActivePolicies(w, phases, policies.toArray(new Policy[policies
+                            .size()]));
+                }
+            } else {
+                if (itemId == null || &amp;quot;&amp;quot;.equals(itemId)) {
+                    policyManager.setActivePolicies(l, policies.toArray(new Policy[policies.size()]));
+                } else {
+                    Item w = (Item) registry.getItemById(itemId);
+                    policyManager.setActivePolicies(w, l, policies
+                            .toArray(new Policy[policies.size()]));
+                }
+            }
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        } catch (PolicyException e) {
+            throw toWeb(e);
+        } catch (NotFoundException e) {
+            throw new ItemNotFoundException();
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    private WPolicyException toWeb(PolicyException e) throws RPCException {
+        Map&amp;lt;ItemInfo, Collection&amp;lt;WApprovalMessage&amp;gt;&amp;gt; failures = new HashMap&amp;lt;ItemInfo, Collection&amp;lt;WApprovalMessage&amp;gt;&amp;gt;();
+        for (Map.Entry&amp;lt;Item, List&amp;lt;ApprovalMessage&amp;gt;&amp;gt; entry : e.getPolicyFailures().entrySet()) {
+            Item i = entry.getKey();
+            List&amp;lt;ApprovalMessage&amp;gt; approvals = entry.getValue();
+
+            try {
+                ItemInfo info = toWeb(i, false);
+    
+                ArrayList&amp;lt;WApprovalMessage&amp;gt; wapprovals = new ArrayList&amp;lt;WApprovalMessage&amp;gt;();
+                for (ApprovalMessage app : approvals) {
+                    wapprovals.add(new WApprovalMessage(app.getMessage(), app.isWarning()));
+                }
+    
+                failures.put(info, wapprovals);
+            } catch (RegistryException ex) {
+                log.error(ex.getMessage(), ex);
+                throw new RPCException(ex.getMessage());
+            }
+        }
+        return new WPolicyException(failures);
+    }
+
+    private List&amp;lt;Policy&amp;gt; getArtifactPolicies(Collection ids) {
+        List&amp;lt;Policy&amp;gt; policies = new ArrayList&amp;lt;Policy&amp;gt;();
+        for (Iterator itr = ids.iterator(); itr.hasNext();) {
+            String id = (String) itr.next();
+
+            Policy policy = policyManager.getPolicy(id);
+            policies.add(policy);
+        }
+        return policies;
+    }
+
+    private Collection&amp;lt;String&amp;gt; getArtifactPolicyIds(Collection&amp;lt;Policy&amp;gt; pols) {
+        ArrayList&amp;lt;String&amp;gt; polNames = new ArrayList&amp;lt;String&amp;gt;();
+        for (Policy ap : pols) {
+            polNames.add(ap.getId());
+        }
+        return polNames;
+    }
+
+    public Collection&amp;lt;WPolicy&amp;gt; getPolicies() throws RPCException {
+        Collection&amp;lt;Policy&amp;gt; policies = policyManager.getPolicies();
+        List&amp;lt;WPolicy&amp;gt; gwtPolicies = new ArrayList&amp;lt;WPolicy&amp;gt;();
+        for (Policy p : policies) {
+            gwtPolicies.add(toWeb(p));
+        }
+        Collections.sort(gwtPolicies, new Comparator&amp;lt;WPolicy&amp;gt;() {
+
+            public int compare(WPolicy o1, WPolicy o2) {
+                return o1.getName().compareTo(o2.getName());
+            }
+
+        });
+
+        return gwtPolicies;
+    }
+
+    public void saveLifecycle(WLifecycle wl) throws RPCException, ItemExistsException {
+        Lifecycle l = fromWeb(wl);
+
+        try {
+            localLifecycleManager.save(l);
+
+            if (wl.isDefaultLifecycle()) {
+                Lifecycle defaultLifecycle = localLifecycleManager.getDefaultLifecycle();
+
+                if (!defaultLifecycle.equals(l)) {
+                    localLifecycleManager.setDefaultLifecycle(l);
+                }
+            }
+        } catch (DuplicateItemException e) {
+            throw new ItemExistsException();
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    public void deleteLifecycle(String id) throws RPCException {
+        try {
+            String fallback = localLifecycleManager.getDefaultLifecycle().getId();
+
+            if (id.equals(fallback)) {
+                throw new RPCException(&amp;quot;The default lifecycle cannot be deleted. Please assign &amp;quot; +
+                        &amp;quot;another lifecycle to be the default before deleting this one.&amp;quot;);
+            }
+
+            localLifecycleManager.delete(id, fallback);
+        } catch (NotFoundException e) {
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    private Lifecycle fromWeb(WLifecycle wl) throws RPCException {
+        Lifecycle l = new Lifecycle();
+        l.setPhases(new HashMap&amp;lt;String, Phase&amp;gt;());
+        l.setName(wl.getName());
+        l.setId(wl.getId());
+
+        for (Object o : wl.getPhases()) {
+            WPhase wp = (WPhase) o;
+
+            Phase p = new Phase(l);
+            p.setId(wp.getId());
+            p.setName(wp.getName());
+            l.getPhases().put(p.getName(), p);
+        }
+
+        for (Object o : wl.getPhases()) {
+            WPhase wp = (WPhase) o;
+            Phase p = l.getPhase(wp.getName());
+            p.setNextPhases(new HashSet&amp;lt;Phase&amp;gt;());
+
+            if (wp.getNextPhases() != null) {
+                for (Object oNext : wp.getNextPhases()) {
+                    WPhase wNext = (WPhase) oNext;
+                    Phase next = l.getPhase(wNext.getName());
+
+                    p.getNextPhases().add(next);
+                }
+            }
+        }
+
+        if (wl.getInitialPhase() == null) {
+            throw new RPCException(&amp;quot;You must set a phase as the initial phase.&amp;quot;);
+        }
+
+        l.setInitialPhase(l.getPhase(wl.getInitialPhase().getName()));
+        return l;
+    }
+
+    private WPolicy toWeb(Policy p) {
+        WPolicy wap = new WPolicy();
+        wap.setId(p.getId());
+        wap.setDescription(p.getDescription());
+        wap.setName(p.getName());
+
+        return wap;
+    }
+
+    public Collection&amp;lt;WActivity&amp;gt; getActivities(Date from, Date to, 
+                                               String user,
+                                               String itemPath,
+                                               String text,
+                                               String eventTypeStr, int start,
+                                    int results, boolean ascending) throws RPCException {
+
+        if (&amp;quot;All&amp;quot;.equals(user)) {
+            user = null;
+        }
+
+        if (from != null) {
+            Calendar c = Calendar.getInstance();
+            c.setTime(from);
+            c.set(Calendar.HOUR, 0);
+            c.set(Calendar.MINUTE, 0);
+            c.set(Calendar.SECOND, 0);
+            from = c.getTime();
+        }
+
+        if (to != null) {
+            Calendar c = Calendar.getInstance();
+            c.setTime(to);
+            c.set(Calendar.HOUR, 23);
+            c.set(Calendar.MINUTE, 59);
+            c.set(Calendar.SECOND, 59);
+            to = c.getTime();
+        }
+
+        EventType eventType = null;
+        if (&amp;quot;Info&amp;quot;.equals(eventTypeStr)) {
+            eventType = EventType.INFO;
+        } else if (&amp;quot;Warning&amp;quot;.equals(eventTypeStr)) {
+            eventType = EventType.WARNING;
+        } else if (&amp;quot;Error&amp;quot;.equals(eventTypeStr)) {
+            eventType = EventType.ERROR;
+        }
+
+        
+        try {
+            String itemId = null;
+            if (itemPath != null &amp;amp;&amp;amp; !&amp;quot;[All Items]&amp;quot;.equals(itemPath)) {
+                try {
+                    itemId = registry.getItemByPath(itemPath).getId();
+                } catch (NotFoundException e) {
+                    throw new RPCException(&amp;quot;You do not have sufficient permissions to view activities relating to that item.&amp;quot;);
+                }
+            }
+            
+            Collection&amp;lt;Activity&amp;gt; activities = activityManager.getActivities(from, to, user, 
+                                                                            itemId, text,
+                                                                            eventType, start, 
+                                                                            results, ascending);
+
+            ArrayList&amp;lt;WActivity&amp;gt; wactivities = new ArrayList&amp;lt;WActivity&amp;gt;();
+
+            for (Activity a : activities) {
+                wactivities.add(createWActivity(a));
+            }
+            return wactivities;
+        } catch (AccessException e) {
+            throw new RPCException(e.getMessage());
+        } catch (RegistryException e) {
+            log.error(e.getMessage(), e);
+            throw new RPCException(e.getMessage());
+        }
+    }
+
+    protected WActivity createWActivity(Activity a) {
+        WActivity wa = new WActivity();
+        wa.setId(a.getId());
+        wa.setEventType(a.getEventType().getText());
+        if (a.getUser() != null) {
+            wa.setUsername(a.getUser().getUsername());
+            wa.setName(a.getUser().getName());
+        }
+        wa.setMessage(a.getMessage());
+        SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATETIME_FORMAT);
+        wa.setDate(dateFormat.format(a.getDate().getTime()));
+        return wa;
+    }
+
+    public void setAccessControlManager(AccessControlManager accessControlManager) {
+        this.accessControlManager = accessControlManager;
+    }
+
+    public void setRegistry(Registry registry) {
+        this.registry = registry;
+    }
+
+    public void setTypeManager(TypeManager typeManager) {
+        this.typeManager = typeManager;
+    }
+
+    public void setLifecycleManager(LifecycleManager lifecycleManager) {
+        this.localLifecycleManager = lifecycleManager;
+    }
+
+    public void setArtifactTypeDao(ArtifactTypeDao artifactTypeDao) {
+        this.artifactTypeDao = artifactTypeDao;
+    }
+
+    public void setPolicyManager(PolicyManager policyManager) {
+        this.policyManager = policyManager;
+    }
+
+    public void setRendererManager(RendererManager viewManager) {
+        this.rendererManager = viewManager;
+    }
+
+    public void setActivityManager(ActivityManager activityManager) {
+        this.activityManager = activityManager;
+    }
+
+    public void setIndexManager(IndexManager indexManager) {
+        this.indexManager = indexManager;
+    }
+
+    public void setArtifactViewManager(ArtifactViewManager artifactViewManager) {
+        this.artifactViewManager = artifactViewManager;
+    }
+
+    public ContextPathResolver getContextPathResolver() {
+        return contextPathResolver;
+    }
+
+    public void setContextPathResolver(final ContextPathResolver contextPathResolver) {
+        this.contextPathResolver = contextPathResolver;
+    }
+
+    public EventManager getEventManager() {
+        return eventManager;
+    }
+
+    public void setEventManager(final EventManager eventManager) {
+        this.eventManager = eventManager;
+    }
+
+    public void setUploadService(UploadService uploadService) {
+        this.uploadService = uploadService;
+    }
+
+    public void setUserManager(UserManager userManager) {
+        this.userManager = userManager;
+    }
+    
+}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxywebContextPathResolverjavafromrev2109branchesproduct_cleanupwebsrcmainjavaorgmulegalaxywebserverContextPathResolverjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/ContextPathResolver.java (from rev 2109, branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/ContextPathResolver.java) (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/ContextPathResolver.java	                        (rev 0)
+++ branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/ContextPathResolver.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,85 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+/*
+ * $Id$
+ * --------------------------------------------------------------------------------------
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+package org.mule.galaxy.web;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.springframework.web.context.ContextLoader;
+import org.springframework.web.context.WebApplicationContext;
+
+/**
+ * Correctly resolves root context path both for WAR deployments in root/non-root contexts,
+ * as well as for test runs. There&amp;#39;s some inconsistent behavior across servlet containers
+ * in this regard, and then the case is complicated by embedded and test runs of Galaxy.
+ * You may need to deploy a related filter for things to work in some scenarios (already
+ * done in Galaxy out-of-the-box).
+ *
+ * @see org.mule.galaxy.web.ContextPathSaverFilter
+ */
+public class ContextPathResolver
+{
+    /**
+     * A resolved context path. Optional, may never get set in some embedded scenarios.
+     */
+    private final static AtomicReference&amp;lt;String&amp;gt; savedContextPath = new AtomicReference&amp;lt;String&amp;gt;(null);
+
+    /**
+     * Returns:
+     * &amp;lt;ul&amp;gt;
+     *  &amp;lt;li&amp;gt;&amp;quot;&amp;quot; (empty) string when no servlet container is available (e.g. a test run)
+     *  &amp;lt;li&amp;gt;&amp;quot;&amp;quot; (empty) string when deployed to a servlet container root context
+     *  &amp;lt;li&amp;gt;context path name otherwise
+     * &amp;lt;/ul&amp;gt;
+     * @return path
+     */
+    public String getContextPath()
+    {
+        String path = savedContextPath.get();
+        if (path != null)
+        {
+            // we&amp;#39;re running in a container, filter intercepted the context path
+            return path;
+        } else
+        {
+            path = &amp;quot;&amp;quot;;
+        }
+
+        // otherwise, let&amp;#39;s try to guess, as we&amp;#39;re running either embedded or in a test
+        WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
+        if (context != null)
+        {
+            path = context.getServletContext().getServletContextName();
+            // when deployed in a servlet container under the server root
+            if (&amp;quot;/&amp;quot;.equals(path))
+            {
+                path = &amp;quot;&amp;quot;;
+            }
+        }
+        return path;
+    }
+
+    /**
+     * Normally called by a {@link org.mule.galaxy.web.ContextPathSaverFilter}. 
+     * @param path resolved context path
+     */
+    public static void saveContextPath(String path)
+    {
+        savedContextPath.compareAndSet(null, path);
+    }
+}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserversrcmainjavaorgmulegalaxywebContextPathSaverFilterjavafromrev2109branchesproduct_cleanupwebsrcmainjavaorgmulegalaxywebContextPathSaverFilterjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;copfile&quot;&gt;&lt;h4&gt;Copied: branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java (from rev 2109, branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java) (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java	                        (rev 0)
+++ branches/product_cleanup/repository/server/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,55 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+/*
+ * $Id$
+ * --------------------------------------------------------------------------------------
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+package org.mule.galaxy.web;
+
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Saves the currently deployed context path.
+ * @see ContextPathResolver
+ */
+public class ContextPathSaverFilter implements Filter
+{
+    
+
+    public void init(FilterConfig config) throws ServletException
+    {
+
+    }
+
+    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException
+    {
+        ContextPathResolver.saveContextPath(((HttpServletRequest) req).getContextPath());
+        chain.doFilter(req, resp);
+    }
+
+    public void destroy()
+    {
+    }
+
+}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserversrcmainresourcesMETAINFgalaxyapplicationContextxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml (0 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml	                        (rev 0)
+++ branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,46 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;
+  xmlns:aop=&amp;quot;http://www.springframework.org/schema/aop&amp;quot;
+  xmlns:tx=&amp;quot;http://www.springframework.org/schema/tx&amp;quot;
+  xmlns:a=&amp;quot;http://abdera.apache.org&amp;quot;
+  xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
+  xsi:schemaLocation=&amp;quot;
+    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
+    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
+    http://abdera.apache.org http://abdera.apache.org/schemas/abdera-spring.xsd&amp;quot;&amp;gt;
+    
+
+    &amp;lt;bean id=&amp;quot;coreGwtModule&amp;quot; class=&amp;quot;org.mule.galaxy.web.GwtModule&amp;quot;&amp;gt;
+      &amp;lt;property name=&amp;quot;core&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;name&amp;quot; value=&amp;quot;org.mule.galaxy.web.Repository&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;rpcServices&amp;quot;&amp;gt;
+        &amp;lt;map&amp;gt;
+          &amp;lt;entry key=&amp;quot;/galaxyService.rpc&amp;quot; value-ref=&amp;quot;galaxyService&amp;quot; /&amp;gt;
+          &amp;lt;entry key=&amp;quot;/securityService.rpc&amp;quot; value-ref=&amp;quot;gwtSecurityService&amp;quot; /&amp;gt;
+          &amp;lt;entry key=&amp;quot;/heartbeat.rpc&amp;quot; value-ref=&amp;quot;heartbeatService&amp;quot;/&amp;gt;
+          &amp;lt;entry key=&amp;quot;/admin.rpc&amp;quot; value-ref=&amp;quot;adminService&amp;quot;/&amp;gt;
+          &amp;lt;entry key=&amp;quot;/registry.rpc&amp;quot; value-ref=&amp;quot;gwtRegistry&amp;quot; /&amp;gt;
+        &amp;lt;/map&amp;gt;
+      &amp;lt;/property&amp;gt;
+    &amp;lt;/bean&amp;gt;
+    
+    &amp;lt;bean id=&amp;quot;gwtRegistry&amp;quot; class=&amp;quot;org.mule.galaxy.repository.RegistryServiceImpl&amp;quot;&amp;gt;
+      &amp;lt;property name=&amp;quot;registry&amp;quot; ref=&amp;quot;registry&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;artifactTypeDao&amp;quot; ref=&amp;quot;artifactTypeDao&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;indexManager&amp;quot; ref=&amp;quot;indexManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;rendererManager&amp;quot; ref=&amp;quot;rendererManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;lifecycleManager&amp;quot; ref=&amp;quot;lifecycleManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;policyManager&amp;quot; ref=&amp;quot;policyManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;activityManager&amp;quot; ref=&amp;quot;activityManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;artifactViewManager&amp;quot; ref=&amp;quot;artifactViewManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;accessControlManager&amp;quot; ref=&amp;quot;accessControlManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;typeManager&amp;quot; ref=&amp;quot;typeManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;uploadService&amp;quot; ref=&amp;quot;uploadService&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;userManager&amp;quot; ref=&amp;quot;userManager&amp;quot;/&amp;gt;
+      &amp;lt;property name=&amp;quot;contextPathResolver&amp;quot;&amp;gt;
+          &amp;lt;bean class=&amp;quot;org.mule.galaxy.web.ContextPathResolver&amp;quot;/&amp;gt;
+      &amp;lt;/property&amp;gt;
+      &amp;lt;property name=&amp;quot;eventManager&amp;quot; ref=&amp;quot;eventManager&amp;quot;/&amp;gt;
+    &amp;lt;/bean&amp;gt;
+
+&amp;lt;/beans&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;\ No newline at end of file
Property changes on: branches/product_cleanup/repository/server/src/main/resources/META-INF/galaxy-applicationContext.xml
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + text/xml
Name: svn:keywords
   + Rev Date Id
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserversrctestjavaorgmulegalaxywebserverRegistryServiceTestjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/repository/server/src/test/java/org/mule/galaxy/web/server/RegistryServiceTest.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/src/test/java/org/mule/galaxy/web/server/RegistryServiceTest.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/repository/server/src/test/java/org/mule/galaxy/web/server/RegistryServiceTest.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -20,27 +20,28 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.policy.ApprovalMessage;
 import org.mule.galaxy.policy.Policy;
 import org.mule.galaxy.query.Query;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+import org.mule.galaxy.repository.RegistryServiceImpl;
+import org.mule.galaxy.repository.rpc.ItemInfo;
+import org.mule.galaxy.repository.rpc.RegistryService;
+import org.mule.galaxy.repository.rpc.WApprovalMessage;
+import org.mule.galaxy.repository.rpc.WArtifactType;
+import org.mule.galaxy.repository.rpc.WComment;
+import org.mule.galaxy.repository.rpc.WIndex;
+import org.mule.galaxy.repository.rpc.WLifecycle;
+import org.mule.galaxy.repository.rpc.WLinks;
+import org.mule.galaxy.repository.rpc.WPolicyException;
+import org.mule.galaxy.repository.rpc.WProperty;
+import org.mule.galaxy.repository.rpc.WPropertyDescriptor;
+import org.mule.galaxy.repository.rpc.WSearchResults;
+import org.mule.galaxy.repository.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.test.AbstractGalaxyTest;
 import org.mule.galaxy.type.PropertyDescriptor;
 import org.mule.galaxy.type.Type;
 import org.mule.galaxy.type.TypeManager;
 import org.mule.galaxy.web.rpc.GalaxyService;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.ItemInfo;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.LinkInfo;
 import org.mule.galaxy.web.rpc.PluginTabInfo;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.RegistryService;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.SearchPredicate;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.rpc.WApprovalMessage;
-import org.mule.galaxy.web.rpc.WArtifactType;
-import org.mule.galaxy.web.rpc.WComment;
-import org.mule.galaxy.web.rpc.WIndex;
-import org.mule.galaxy.web.rpc.WLifecycle;
-import org.mule.galaxy.web.rpc.WLinks;
-import org.mule.galaxy.web.rpc.WPolicyException;
-import org.mule.galaxy.web.rpc.WProperty;
-import org.mule.galaxy.web.rpc.WPropertyDescriptor;
-import org.mule.galaxy.web.rpc.WSearchResults;
-import org.mule.galaxy.web.rpc.WType;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.WUser;
 
 public class RegistryServiceTest extends AbstractGalaxyTest {
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebpomxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/web/pom.xml (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/pom.xml	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/web/pom.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -45,6 +45,12 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         &amp;lt;/dependency&amp;gt;
 
         &amp;lt;dependency&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+            &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;galaxy-repository-server&amp;lt;/artifactId&amp;gt;
+            &amp;lt;version&amp;gt;${version}&amp;lt;/version&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+        
+        &amp;lt;dependency&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;             &amp;lt;groupId&amp;gt;com.extjs&amp;lt;/groupId&amp;gt;
             &amp;lt;artifactId&amp;gt;gxt&amp;lt;/artifactId&amp;gt;
         &amp;lt;/dependency&amp;gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainjavaorgmulegalaxywebContextPathSaverFilterjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/ContextPathSaverFilter.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,56 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-/*
- * $Id$
- * --------------------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-package org.mule.galaxy.web;
-
-import org.mule.galaxy.web.server.ContextPathResolver;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Saves the currently deployed context path.
- * @see ContextPathResolver
- */
-public class ContextPathSaverFilter implements Filter
-{
-    
-
-    public void init(FilterConfig config) throws ServletException
-    {
-
-    }
-
-    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException
-    {
-        ContextPathResolver.saveContextPath(((HttpServletRequest) req).getContextPath());
-        chain.doFilter(req, resp);
-    }
-
-    public void destroy()
-    {
-    }
-
-}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainjavaorgmulegalaxywebserverContextPathResolverjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/ContextPathResolver.java (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/ContextPathResolver.java	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/web/src/main/java/org/mule/galaxy/web/server/ContextPathResolver.java	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,85 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-/*
- * $Id$
- * --------------------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-package org.mule.galaxy.web.server;
-
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.springframework.web.context.ContextLoader;
-import org.springframework.web.context.WebApplicationContext;
-
-/**
- * Correctly resolves root context path both for WAR deployments in root/non-root contexts,
- * as well as for test runs. There&amp;#39;s some inconsistent behavior across servlet containers
- * in this regard, and then the case is complicated by embedded and test runs of Galaxy.
- * You may need to deploy a related filter for things to work in some scenarios (already
- * done in Galaxy out-of-the-box).
- *
- * @see org.mule.galaxy.web.ContextPathSaverFilter
- */
-public class ContextPathResolver
-{
-    /**
-     * A resolved context path. Optional, may never get set in some embedded scenarios.
-     */
-    private final static AtomicReference&amp;lt;String&amp;gt; savedContextPath = new AtomicReference&amp;lt;String&amp;gt;(null);
-
-    /**
-     * Returns:
-     * &amp;lt;ul&amp;gt;
-     *  &amp;lt;li&amp;gt;&amp;quot;&amp;quot; (empty) string when no servlet container is available (e.g. a test run)
-     *  &amp;lt;li&amp;gt;&amp;quot;&amp;quot; (empty) string when deployed to a servlet container root context
-     *  &amp;lt;li&amp;gt;context path name otherwise
-     * &amp;lt;/ul&amp;gt;
-     * @return path
-     */
-    public String getContextPath()
-    {
-        String path = savedContextPath.get();
-        if (path != null)
-        {
-            // we&amp;#39;re running in a container, filter intercepted the context path
-            return path;
-        } else
-        {
-            path = &amp;quot;&amp;quot;;
-        }
-
-        // otherwise, let&amp;#39;s try to guess, as we&amp;#39;re running either embedded or in a test
-        WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
-        if (context != null)
-        {
-            path = context.getServletContext().getServletContextName();
-            // when deployed in a servlet container under the server root
-            if (&amp;quot;/&amp;quot;.equals(path))
-            {
-                path = &amp;quot;&amp;quot;;
-            }
-        }
-        return path;
-    }
-
-    /**
-     * Normally called by a {@link org.mule.galaxy.web.ContextPathSaverFilter}. 
-     * @param path resolved context path
-     */
-    public static void saveContextPath(String path)
-    {
-        savedContextPath.compareAndSet(null, path);
-    }
-}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupwebsrcmainresourcesMETAINFapplicationContextwebxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml (2110 =&gt; 2111)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml	2009-12-16 02:14:51 UTC (rev 2110)
+++ branches/product_cleanup/web/src/main/resources/META-INF/applicationContext-web.xml	2009-12-16 23:18:07 UTC (rev 2111)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -16,7 +16,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     
     &amp;lt;bean id=&amp;quot;coreGwtModule&amp;quot; class=&amp;quot;org.mule.galaxy.web.GwtModule&amp;quot;&amp;gt;
       &amp;lt;property name=&amp;quot;core&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-      &amp;lt;property name=&amp;quot;name&amp;quot; value=&amp;quot;org.mule.galaxy.web.Galaxy&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+      &amp;lt;property name=&amp;quot;name&amp;quot; value=&amp;quot;org.mule.galaxy.web.Admin&amp;quot;/&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;       &amp;lt;property name=&amp;quot;rpcServices&amp;quot;&amp;gt;
         &amp;lt;map&amp;gt;
           &amp;lt;entry key=&amp;quot;/galaxyService.rpc&amp;quot; value-ref=&amp;quot;galaxyService&amp;quot; /&amp;gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://admin.muleforge.org/manage_email


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

You received this message because you are subscribed to the Google Groups &quot;MuleForge Dev&quot; group.&lt;br /&gt;

To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26820296&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.&lt;br /&gt;

To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26820296&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.&lt;br /&gt;

For more options, visit this group at http://groups.google.com/group/muleforgedev?hl=en.&lt;br /&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-galaxy-dev----2111--branches-product_cleanup-web%3A-Checkpoint.-tp26820296p26820296.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26802997</id>
	<title>[galaxy-dev]  [2109] branches/product_cleanup: Add in directories so eclipse can deal with refactoring correctly.</title>
	<published>2009-12-15T14:31:05Z</published>
	<updated>2009-12-15T14:31:05Z</updated>
	<author>
		<name>dandiep-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt; [2109] branches/product_cleanup: Add in directories so eclipse can deal with refactoring correctly.&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;msg&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;Revision&lt;/dt&gt; &lt;dd&gt;&lt;a href=&quot;http://fisheye.muleforge.org/changelog/galaxy/?cs=2109&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;2109&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Author&lt;/dt&gt; &lt;dd&gt;dandiep&lt;/dd&gt;
&lt;dt&gt;Date&lt;/dt&gt; &lt;dd&gt;2009-12-15 16:31:05 -0600 (Tue, 15 Dec 2009)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Log Message&lt;/h3&gt;
&lt;pre&gt;Add in directories so eclipse can deal with refactoring correctly.&lt;/pre&gt;

&lt;h3&gt;Added Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;branches/product_cleanup/repository/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositorygwtclientpomxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/gwt-client/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/gwt-client/src/main/java/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuprepositoryserverpomxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/repository/server/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/main/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/main/java/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/main/resources/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/test/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/test/java/&lt;/li&gt;
&lt;li&gt;branches/product_cleanup/repository/server/src/test/resources/&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;patch&quot;&gt;
&lt;h3&gt;Diff&lt;/h3&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositorygwtclientpomxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/gwt-client/pom.xml (0 =&gt; 2109)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/gwt-client/pom.xml	                        (rev 0)
+++ branches/product_cleanup/repository/gwt-client/pom.xml	2009-12-15 22:31:05 UTC (rev 2109)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,114 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+&amp;lt;project xmlns=&amp;quot;http://maven.apache.org/POM/4.0.0&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
+         xsi:schemaLocation=&amp;quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&amp;quot;&amp;gt;
+    &amp;lt;parent&amp;gt;
+        &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+        &amp;lt;artifactId&amp;gt;galaxy-parent&amp;lt;/artifactId&amp;gt;
+        &amp;lt;version&amp;gt;2.0-SNAPSHOT&amp;lt;/version&amp;gt;
+    &amp;lt;/parent&amp;gt;
+    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
+    &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+    &amp;lt;artifactId&amp;gt;galaxy-repository-gwt-client&amp;lt;/artifactId&amp;gt;
+    &amp;lt;version&amp;gt;2.0-SNAPSHOT&amp;lt;/version&amp;gt;
+    &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;
+    &amp;lt;name&amp;gt;Galaxy Repository: GWT Client&amp;lt;/name&amp;gt;
+
+    &amp;lt;dependencies&amp;gt;
+
+        &amp;lt;dependency&amp;gt;
+            &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;galaxy-gwt-client&amp;lt;/artifactId&amp;gt;
+            &amp;lt;version&amp;gt;${version}&amp;lt;/version&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+
+    &amp;lt;/dependencies&amp;gt;
+
+    &amp;lt;build&amp;gt;
+
+        &amp;lt;resources&amp;gt;
+            &amp;lt;resource&amp;gt;
+                &amp;lt;directory&amp;gt;src/main/java&amp;lt;/directory&amp;gt;
+                &amp;lt;includes&amp;gt;
+                    &amp;lt;include&amp;gt;**/*.java&amp;lt;/include&amp;gt;
+                    &amp;lt;include&amp;gt;**/*.xml&amp;lt;/include&amp;gt;
+                    &amp;lt;include&amp;gt;**/*.html&amp;lt;/include&amp;gt;
+                    &amp;lt;include&amp;gt;**/*.css&amp;lt;/include&amp;gt;
+                &amp;lt;/includes&amp;gt;
+                &amp;lt;excludes&amp;gt;
+                    &amp;lt;!-- Required for better IDE support of GWT (avoid looped symlinks). --&amp;gt;
+                    &amp;lt;exclude&amp;gt;**/org/mule/galaxy/web/public/**&amp;lt;/exclude&amp;gt;
+                &amp;lt;/excludes&amp;gt;
+            &amp;lt;/resource&amp;gt;
+        &amp;lt;/resources&amp;gt;
+    &amp;lt;/build&amp;gt;
+
+    &amp;lt;profiles&amp;gt;
+        &amp;lt;profile&amp;gt;
+            &amp;lt;id&amp;gt;default&amp;lt;/id&amp;gt;
+            &amp;lt;activation&amp;gt;
+                &amp;lt;activeByDefault&amp;gt;true&amp;lt;/activeByDefault&amp;gt;
+            &amp;lt;/activation&amp;gt;
+            &amp;lt;build&amp;gt;
+                &amp;lt;plugins&amp;gt;
+                    &amp;lt;plugin&amp;gt;
+                        &amp;lt;groupId&amp;gt;com.totsp.gwt&amp;lt;/groupId&amp;gt;
+                        &amp;lt;artifactId&amp;gt;maven-googlewebtoolkit2-plugin&amp;lt;/artifactId&amp;gt;
+                        &amp;lt;version&amp;gt;2.0-beta6&amp;lt;/version&amp;gt;
+                        &amp;lt;configuration&amp;gt;
+                            &amp;lt;gwtVersion&amp;gt;${gwtVersion}&amp;lt;/gwtVersion&amp;gt;
+                            &amp;lt;runTarget&amp;gt;org.mule.galaxy.web.Galaxy/Galaxy.html&amp;lt;/runTarget&amp;gt;
+                            &amp;lt;style&amp;gt;OBF&amp;lt;/style&amp;gt;
+                            &amp;lt;compileTargets&amp;gt;
+                                &amp;lt;value&amp;gt;org.mule.galaxy.web.Galaxy&amp;lt;/value&amp;gt;
+                            &amp;lt;/compileTargets&amp;gt;
+                            &amp;lt;extraJvmArgs&amp;gt;-Xss1024k -Xmx1024m -Dgwt.nowarn.legacy.tools&amp;lt;/extraJvmArgs&amp;gt;
+                            &amp;lt;!--
+                                CRITICAL: This should be false so that filtered resources are used instead.
+                                Also required for better IDE support of GWT (avoid looped symlinks).
+                            --&amp;gt;
+                            &amp;lt;sourcesOnPath&amp;gt;false&amp;lt;/sourcesOnPath&amp;gt;
+                        &amp;lt;/configuration&amp;gt;
+                        &amp;lt;executions&amp;gt;
+                            &amp;lt;execution&amp;gt;
+                                &amp;lt;goals&amp;gt;
+                                    &amp;lt;!-- These two goals enable automatic GWT setup, but are expirimental --&amp;gt;
+                                    &amp;lt;goal&amp;gt;setup&amp;lt;/goal&amp;gt;
+                                    &amp;lt;goal&amp;gt;extractGwt&amp;lt;/goal&amp;gt;
+
+                                    &amp;lt;!-- Compile GWT stuff --&amp;gt;
+                                    &amp;lt;goal&amp;gt;compile&amp;lt;/goal&amp;gt;
+                                &amp;lt;/goals&amp;gt;
+                            &amp;lt;/execution&amp;gt;
+                        &amp;lt;/executions&amp;gt;
+                    &amp;lt;/plugin&amp;gt;
+                &amp;lt;/plugins&amp;gt;
+            &amp;lt;/build&amp;gt;
+        &amp;lt;/profile&amp;gt;
+        &amp;lt;profile&amp;gt;
+            &amp;lt;id&amp;gt;nogwt&amp;lt;/id&amp;gt;
+        &amp;lt;/profile&amp;gt;
+    &amp;lt;/profiles&amp;gt;
+    &amp;lt;repositories&amp;gt;
+        &amp;lt;repository&amp;gt;
+            &amp;lt;id&amp;gt;gwt-maven&amp;lt;/id&amp;gt;
+            &amp;lt;url&amp;gt;http://dist.codehaus.org/mule/dependencies/maven2/&amp;lt;/url&amp;gt;
+        &amp;lt;/repository&amp;gt;
+        &amp;lt;repository&amp;gt;
+            &amp;lt;id&amp;gt;gwt-maven2&amp;lt;/id&amp;gt;
+            &amp;lt;!-- &amp;lt;url&amp;gt;http://gwt-maven.googlecode.com/svn/trunk/mavenrepo&amp;lt;/url&amp;gt; --&amp;gt;
+            &amp;lt;url&amp;gt;http://mirrors.ibiblio.org/pub/mirrors/maven2/&amp;lt;/url&amp;gt;
+        &amp;lt;/repository&amp;gt;
+    &amp;lt;/repositories&amp;gt;
+
+    &amp;lt;pluginRepositories&amp;gt;
+        &amp;lt;pluginRepository&amp;gt;
+            &amp;lt;id&amp;gt;gwt-maven&amp;lt;/id&amp;gt;
+            &amp;lt;url&amp;gt;http://dist.codehaus.org/mule/dependencies/maven2/&amp;lt;/url&amp;gt;
+        &amp;lt;/pluginRepository&amp;gt;
+        &amp;lt;pluginRepository&amp;gt;
+            &amp;lt;id&amp;gt;gwt-maven2&amp;lt;/id&amp;gt;
+            &amp;lt;!-- &amp;lt;url&amp;gt;http://gwt-maven.googlecode.com/svn/trunk/mavenrepo&amp;lt;/url&amp;gt; --&amp;gt;
+	    &amp;lt;url&amp;gt;http://mirrors.ibiblio.org/pub/mirrors/maven2/&amp;lt;/url&amp;gt;
+        &amp;lt;/pluginRepository&amp;gt;
+    &amp;lt;/pluginRepositories&amp;gt;
+
+&amp;lt;/project&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/gwt-client/pom.xml
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + text/xml
Name: svn:keywords
   + Rev Date Id
Name: svn:eol-style
   + native
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanuprepositoryserverpomxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;addfile&quot;&gt;&lt;h4&gt;Added: branches/product_cleanup/repository/server/pom.xml (0 =&gt; 2109)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/repository/server/pom.xml	                        (rev 0)
+++ branches/product_cleanup/repository/server/pom.xml	2009-12-15 22:31:05 UTC (rev 2109)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -0,0 +1,59 @@
&lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+&amp;lt;project xmlns=&amp;quot;http://maven.apache.org/POM/4.0.0&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
+         xsi:schemaLocation=&amp;quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&amp;quot;&amp;gt;
+    &amp;lt;parent&amp;gt;
+        &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+        &amp;lt;artifactId&amp;gt;galaxy-parent&amp;lt;/artifactId&amp;gt;
+        &amp;lt;version&amp;gt;2.0-SNAPSHOT&amp;lt;/version&amp;gt;
+    &amp;lt;/parent&amp;gt;
+    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
+    &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+    &amp;lt;artifactId&amp;gt;galaxy-repository-server&amp;lt;/artifactId&amp;gt;
+    &amp;lt;version&amp;gt;2.0-SNAPSHOT&amp;lt;/version&amp;gt;
+    &amp;lt;name&amp;gt;Galaxy Repository: Server&amp;lt;/name&amp;gt;
+    &amp;lt;dependencies&amp;gt;
+
+        &amp;lt;dependency&amp;gt;
+            &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;galaxy-core&amp;lt;/artifactId&amp;gt;
+            &amp;lt;version&amp;gt;${version}&amp;lt;/version&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+
+        &amp;lt;dependency&amp;gt;
+            &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;galaxy-core&amp;lt;/artifactId&amp;gt;
+            &amp;lt;version&amp;gt;${version}&amp;lt;/version&amp;gt;
+            &amp;lt;type&amp;gt;test-jar&amp;lt;/type&amp;gt;
+            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+
+        &amp;lt;dependency&amp;gt;
+            &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;galaxy-repository-gwt-client&amp;lt;/artifactId&amp;gt;
+            &amp;lt;version&amp;gt;${version}&amp;lt;/version&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+
+        &amp;lt;dependency&amp;gt;
+            &amp;lt;groupId&amp;gt;com.google.gwt&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;gwt-servlet&amp;lt;/artifactId&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+
+        &amp;lt;dependency&amp;gt;
+            &amp;lt;groupId&amp;gt;com.google.gwt&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;gwt-incubator&amp;lt;/artifactId&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+
+        &amp;lt;dependency&amp;gt;
+            &amp;lt;groupId&amp;gt;com.google.gwt&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;gwt-user&amp;lt;/artifactId&amp;gt;
+            &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+
+        &amp;lt;dependency&amp;gt;
+            &amp;lt;groupId&amp;gt;org.mule.galaxy&amp;lt;/groupId&amp;gt;
+            &amp;lt;artifactId&amp;gt;galaxy-testutils&amp;lt;/artifactId&amp;gt;
+            &amp;lt;version&amp;gt;${version}&amp;lt;/version&amp;gt;
+        &amp;lt;/dependency&amp;gt;
+
+    &amp;lt;/dependencies&amp;gt;
+
+&amp;lt;/project&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;Property changes on: branches/product_cleanup/repository/server/pom.xml
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + text/xml
Name: svn:keywords
   + Rev Date Id
Name: svn:eol-style
   + native
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://admin.muleforge.org/manage_email


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

You received this message because you are subscribed to the Google Groups &quot;MuleForge Dev&quot; group.&lt;br /&gt;

To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26802997&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.&lt;br /&gt;

To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26802997&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.&lt;br /&gt;

For more options, visit this group at http://groups.google.com/group/muleforgedev?hl=en.&lt;br /&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-galaxy-dev----2109--branches-product_cleanup%3A-Add-in-directories-so-eclipse-can-deal-with-refactoring-correctly.-tp26802997p26802997.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26802091</id>
	<title>[galaxy-dev]  [2108] branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util: More unused classes</title>
	<published>2009-12-15T13:29:26Z</published>
	<updated>2009-12-15T13:29:26Z</updated>
	<author>
		<name>dandiep-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt; [2108] branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util: More unused classes&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;msg&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;Revision&lt;/dt&gt; &lt;dd&gt;&lt;a href=&quot;http://fisheye.muleforge.org/changelog/galaxy/?cs=2108&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;2108&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Author&lt;/dt&gt; &lt;dd&gt;dandiep&lt;/dd&gt;
&lt;dt&gt;Date&lt;/dt&gt; &lt;dd&gt;2009-12-15 15:29:26 -0600 (Tue, 15 Dec 2009)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Log Message&lt;/h3&gt;
&lt;pre&gt;More unused classes&lt;/pre&gt;

&lt;h3&gt;Removed Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilGWTCBoxjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCBox.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilGWTCButtonjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCButton.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilGWTCDatePickerjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCDatePicker.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilGWTCHelperjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCHelper.java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;patch&quot;&gt;
&lt;h3&gt;Diff&lt;/h3&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilGWTCBoxjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCBox.java (2107 =&gt; 2108)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCBox.java	2009-12-15 18:24:26 UTC (rev 2107)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCBox.java	2009-12-15 21:29:26 UTC (rev 2108)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,91 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-/*
- * Copyright 2007 Manuel Carrasco Mo&amp;Atilde;&amp;plusmn;ino. (manuel_carrasco at users.sourceforge.net) 
- * http://code.google.com/p/gwtchismes
- * 
- * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package org.mule.galaxy.web.client.util;
-
-import com.google.gwt.user.client.ui.DockPanel;
-import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.SimplePanel;
-import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.user.client.ui.DockPanel.DockLayoutConstant;
-
-import java.util.Iterator;
-
-public class GWTCBox extends Panel {
-    HTML title = null;
-    HTML text = null;
-    DockPanel panel = new DockPanel();
-    public static String CONFIG_BLUE = &amp;quot;x-box-blue&amp;quot;;
-        public void add(Widget w) {
-                panel.add(w, DockPanel.NORTH);
-        }
-    public void add(Widget widget, DockLayoutConstant direction) {
-        panel.add(widget, direction);
-    }
-        public boolean remove(Widget w) {
-                return panel.remove(w);
-        }
-        public Iterator iterator() {
-                return panel.iterator();
-        }
-        
-        public static final String STYLE_NORMAL = &amp;quot;x-box&amp;quot;;
-        public static final String STYLE_BLUE = &amp;quot;x-box-blue&amp;quot;;
-        
-        public GWTCBox() {
-                this(STYLE_NORMAL);
-        }
-        public GWTCBox(String style) {
-        FlowPanel m = new FlowPanel();
-                m.setStyleName(&amp;quot;x-box&amp;quot;);
-                m.addStyleName(style);
-                String[] v = {&amp;quot;t&amp;quot;, &amp;quot;m&amp;quot;, &amp;quot;b&amp;quot;};
-                String[] h = {&amp;quot;l&amp;quot;, &amp;quot;r&amp;quot;, &amp;quot;c&amp;quot;};
-                for (int i = 0; i &amp;lt; 3; i++) {
-                        Panel l = null;
-                        for (int j = 0; j &amp;lt; 3; j++) {
-                                Panel e = new SimplePanel();
-                                e.setStyleName(&amp;quot;x-box-&amp;quot; + v[i] + h[j]);
-                    if (j==0) 
-                        m.add(e);
-                    else if (i==1 &amp;amp;&amp;amp; j==2) 
-                        e.add(panel);
-                    if (l !=null ) 
-                        l.add(e);
-                    l = e;
-            }
-        }
-                setElement(m.getElement());
-        }
-        
-        public void setTitle(String title) {
-            if (this.title == null) {
-                this.title = new HTML();
-                panel.add(this.title, DockPanel.NORTH);
-            }
-            this.title.setHTML(&amp;quot;&amp;lt;h3&amp;gt;&amp;quot; + title + &amp;quot;&amp;lt;/h3&amp;gt;&amp;quot;);
-        }
-    public void setText(String text) {
-        if (this.text == null) {
-            this.text = new HTML();
-            panel.add(this.text, DockPanel.CENTER);
-        }
-        this.title.setHTML(&amp;quot;&amp;lt;p&amp;gt;&amp;quot; + text + &amp;quot;&amp;lt;/p&amp;gt;&amp;quot;);
-    }
-}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilGWTCButtonjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCButton.java (2107 =&gt; 2108)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCButton.java	2009-12-15 18:24:26 UTC (rev 2107)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCButton.java	2009-12-15 21:29:26 UTC (rev 2108)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,154 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-/*
- * Copyright 2007 Manuel Carrasco Mo&amp;Atilde;&amp;plusmn;ino. (manuel_carrasco at users.sourceforge.net) 
- * http://code.google.com/p/gwtchismes
- * 
- * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package org.mule.galaxy.web.client.util;
-
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.ClickListenerCollection;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.MouseListener;
-import com.google.gwt.user.client.ui.MouseListenerCollection;
-import com.google.gwt.user.client.ui.SourcesClickEvents;
-import com.google.gwt.user.client.ui.SourcesMouseEvents;
-import com.google.gwt.user.client.ui.UIObject;
-import com.google.gwt.user.client.ui.Widget;
-
-public class GWTCButton extends Widget implements SourcesMouseEvents, SourcesClickEvents {
-    public static int BUTTON_TYPE_1 = 1;
-    public static int BUTTON_TYPE_2 = 2;
-    
-        private FlexTable container = new FlexTable();
-        private boolean enabled = true;
-    private int contentIndex = 1;
-    private String[] styleComponentsType1 = {&amp;quot;x-btn&amp;quot;, &amp;quot;left&amp;quot;, &amp;quot;center&amp;quot;, &amp;quot;right&amp;quot;};
-    private String[] styleComponentsType2 = {&amp;quot;my-btn&amp;quot;, &amp;quot;l&amp;quot;, &amp;quot;ml&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;mr&amp;quot;, &amp;quot;r&amp;quot;};
-    private String[] styleComponents;
-    
-    public GWTCButton() {
-        this(2);
-    }
-    public GWTCButton(int type) {
-        if (type == BUTTON_TYPE_1) {
-            contentIndex = 1;
-            styleComponents = styleComponentsType1;
-        } else {
-            contentIndex = 2;
-            styleComponents = styleComponentsType2;
-        }
-        setElement(container.getElement());
-        container.setStyleName(styleComponents[0]);
-        container.addStyleName(&amp;quot;my-no-selection&amp;quot;);
-        container.setCellSpacing(0);
-        container.setCellPadding(0);
-        for (int idx = 1; idx &amp;lt; styleComponents.length; idx++) {
-            container.setHTML(0, idx -1 , &amp;quot;&amp;lt;i&amp;gt;&amp;amp;nbsp;&amp;lt;/i&amp;gt;&amp;quot;);
-            container.getCellFormatter().setStyleName(0, idx -1, styleComponents[0] + &amp;quot;-&amp;quot; + styleComponents[idx]);
-        }
-        sinkEvents(Event.MOUSEEVENTS);
-        addMouseListener(mouseOverListener);
-    }
-        public GWTCButton(String html, ClickListener listener) {
-                this(html);
-                addClickListener(listener);
-        }
-        public GWTCButton(String html) {
-                this();
-                setHTML(html);
-        }
-    public GWTCButton(int type, String html, ClickListener listener) {
-        this(type);
-        setHTML(html);
-        addClickListener(listener);
-    }
-
-        
-    
-    public void setText(String text) {
-        setHTML(text);
-    }
-
-        public void setHTML(String html) {
-                container.setHTML(0, contentIndex, html);
-        }
-        
-        public void click() {
-                clickListeners.fireClick(this);
-        }
-
-        public void onBrowserEvent(Event event) {
-                mouseListeners.fireMouseEvent(this, event);
-                if (enabled &amp;amp;&amp;amp; DOM.eventGetType(event) == Event.ONCLICK) {
-            removeStyleName(UIObject.getStylePrimaryName(this.getElement()) + &amp;quot;-down&amp;quot;);
-            removeStyleName(UIObject.getStylePrimaryName(this.getElement()) + &amp;quot;-over&amp;quot;);
-                        clickListeners.fireClick(this);
-                }
-        }
-        
-        public void setEnabled(boolean enabled) {
-                this.enabled = enabled;
-                if (enabled) {
-                        this.removeStyleName(UIObject.getStylePrimaryName(getElement()) + &amp;quot;-disabled&amp;quot;);
-                } else {
-                        this.addStyleName(UIObject.getStylePrimaryName(getElement()) + &amp;quot;-disabled&amp;quot;);
-                }
-        }
-        
-
-        // SourcesMouseEvents Methods
-        private MouseListenerCollection mouseListeners = new MouseListenerCollection();
-        public void addMouseListener(MouseListener listener) {
-                mouseListeners.add(listener);
-        }
-        public void removeMouseListener(MouseListener listener) {
-                mouseListeners.remove(listener);
-        }
-        // SourcesClickEvents Methods
-        private ClickListenerCollection clickListeners = new ClickListenerCollection();
-        public void addClickListener(ClickListener listener) {
-                clickListeners.add(listener);
-        }
-        public void removeClickListener(ClickListener listener) {
-                clickListeners.remove(listener);
-        }
-
-
-        // A listener for changing style when the mouse is over
-        public static final MouseListener mouseOverListener = new MouseListener() {
-                public void onMouseUp(Widget sender, int x, int y) {
-                    sender.removeStyleName(UIObject.getStylePrimaryName(sender.getElement()) + &amp;quot;-down&amp;quot;);
-                }
-
-                public void onMouseMove(Widget sender, int x, int y) {
-                }
-
-        public void onMouseEnter(Widget sender) {
-            sender.addStyleName(UIObject.getStylePrimaryName(sender.getElement()) + &amp;quot;-over&amp;quot;);
-        }
-        
-                public void onMouseLeave(Widget sender) {
-            sender.removeStyleName(UIObject.getStylePrimaryName(sender.getElement()) + &amp;quot;-down&amp;quot;);
-                        sender.removeStyleName(UIObject.getStylePrimaryName(sender.getElement()) + &amp;quot;-over&amp;quot;);
-                }
-
-                public void onMouseDown(Widget sender, int x, int y) {
-            sender.addStyleName(UIObject.getStylePrimaryName(sender.getElement()) + &amp;quot;-down&amp;quot;);
-                }
-        };
-
-}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilGWTCDatePickerjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCDatePicker.java (2107 =&gt; 2108)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCDatePicker.java	2009-12-15 18:24:26 UTC (rev 2107)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCDatePicker.java	2009-12-15 21:29:26 UTC (rev 2108)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,865 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-package org.mule.galaxy.web.client.util;
-
-/*
- * Copyright 2007 Manuel Carrasco Mo&amp;Atilde;&amp;plusmn;ino. (manuel_carrasco at users.sourceforge.net) 
- * http://code.google.com/p/gwtchismes
- * 
- * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.ChangeListenerCollection;
-import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.DialogBox;
-import com.google.gwt.user.client.ui.DockPanel;
-import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.HTML;
-import com.google.gwt.user.client.ui.HasAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.SourcesChangeEvents;
-import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-import java.util.Date;
-
-/**
- * @author Manuel Carrasco Mo&amp;Atilde;&amp;plusmn;ino
- * 
-     &amp;lt;h3&amp;gt;Class description&amp;lt;/h3&amp;gt;
-       &amp;lt;p&amp;gt;
-         A widget to pick a date. It could be implemented as an independent
-         dialog box or it could be included into another widget.
-       &amp;lt;/p&amp;gt;
-       &amp;lt;p&amp;gt;
-         You can configure minimalDate, maximalDate, cursorDate and locales
-         (day names, month names, help, and weekStart)
-       &amp;lt;/p&amp;gt;
-       &amp;lt;p&amp;gt;
-         This class has public static methods useful for Date manipulation
-       &amp;lt;/p&amp;gt;
-   &amp;lt;h3&amp;gt;Example&amp;lt;/h3&amp;gt;
-      &amp;lt;pre&amp;gt;
-        // Configure internationalized strings using english language
-        private String[] days_en = new String[] { &amp;quot;Sunday&amp;quot;, &amp;quot;Monday&amp;quot;, &amp;quot;Tuesday&amp;quot;, &amp;quot;Wednesday&amp;quot;, &amp;quot;Thursday&amp;quot;, &amp;quot;Friday&amp;quot;, &amp;quot;Saturday&amp;quot; };
-        private String[] months_en = new String[] { &amp;quot;January&amp;quot;, &amp;quot;February&amp;quot;, &amp;quot;March&amp;quot;, &amp;quot;April&amp;quot;, &amp;quot;May&amp;quot;, &amp;quot;June&amp;quot;, &amp;quot;July&amp;quot;, &amp;quot;August&amp;quot;, &amp;quot;September&amp;quot;, &amp;quot;October&amp;quot;, &amp;quot;November&amp;quot;, &amp;quot;December&amp;quot; };
-        
-        // Create a GWTCDatePicker that is show into the page
-        final GWTCDatePicker picker_en = new GWTCDatePicker(false);
-        // Internationalization
-        picker_en.setLocale(days_en, months_en, 0);
-        // Disable close button, becouse it is not a dialog
-        picker_en.disableCloseButton();
-        // Configure limits
-        picker_en.setMinimalDate(GWTCDatePicker.increaseYear(new Date(), -1));
-        picker_en.setMaximalDate(GWTCDatePicker.increaseYear(new Date(), 10));
-        // Add an action when the user selects a day
-        picker_en.addChangeListener(new ChangeListener() {
-            public void onChange(Widget sender) {
-                Window.alert(picker_en.getSelectedDateStr(&amp;quot;MMMM dd, yyyy (dddd)&amp;quot;));
-            }
-        });
-        // Repaint the calendar
-        picker_en.drawCalendar();
-        
-      &amp;lt;/pre&amp;gt;        
-       
-       &amp;lt;h3&amp;gt;CSS Style Rules&amp;lt;/h3&amp;gt;
-         &amp;lt;ul&amp;gt;
-           &amp;lt;li&amp;gt;.GWTCDatePicker { GWTCDatePicket container, it can be overwritten }&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Caption { calendar text }&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_buttons { navigation buttons }&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_Header { text with the current month and year }&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_WeekHeader { week headers row}&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_CellDayNames { cells with day names} &amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_CellEmpty { cell without days }&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_InvalidDay { cell with days which can not be selected because are out of the allowed interval }&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_Selected { selected day }&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_AfterSelected { days after the selected day and before the maximal day } &amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_BeforeSelected { days before the selected day and after the minimal day}&amp;lt;/li&amp;gt;
-           &amp;lt;li&amp;gt;.Cal_Today { today } &amp;lt;/li&amp;gt;
-         &amp;lt;/ul&amp;gt;
- */
-public class GWTCDatePicker extends Composite implements ClickListener, SourcesChangeEvents {
-    // Style classes
-    private String styleName = &amp;quot;GWTCDatePicker&amp;quot;;
-
-    private static String StyleCButtons = &amp;quot;Cal_Buttons&amp;quot;;
-
-    private static String StyleCHeader = &amp;quot;Cal_Header&amp;quot;;
-
-    private static String StyleCGrid = &amp;quot;Cal_Grid&amp;quot;;
-
-    private static String StyleCWeekHeader = &amp;quot;Cal_WeekHeader&amp;quot;;
-
-    private static String StyleCCellDayNames = &amp;quot;Cal_CellDayNames&amp;quot;;
-
-    private static String StyleCCellEmpty = &amp;quot;Cal_CellEmpty&amp;quot;;
-
-    private static String StyleCCellDays = &amp;quot;Cal_CellDays&amp;quot;;
-
-    private static String StyleCInvalidDay = &amp;quot;Cal_InvalidDay&amp;quot;;
-
-    private static String StyleCSelected = &amp;quot;Cal_Selected&amp;quot;;
-
-    private static String StyleCAfterSelected = &amp;quot;Cal_AfterSelected&amp;quot;;
-
-    private static String StyleCBeforeSelected = &amp;quot;Cal_BeforeSelected&amp;quot;;
-
-    private static String StyleCToday = &amp;quot;Cal_Today&amp;quot;;
-
-    // Configurable parameters
-
-    private Date minimalDate = setHourToZero(new Date());
-
-    private Date selectedDate = setHourToZero(new Date());
-
-    private Date cursorDate = setHourToZero(new Date());
-
-    private Date maximalDate = GWTCDatePicker.increaseDate(selectedDate, 365);
-    
-    private boolean useCellLinks = false;
-
-    // Internationalizable elements
-    private String[] days = new String[] { &amp;quot;Sunday&amp;quot;, &amp;quot;Monday&amp;quot;, &amp;quot;Tuesday&amp;quot;, &amp;quot;Wednesday&amp;quot;, &amp;quot;Thursday&amp;quot;, &amp;quot;Friday&amp;quot;, &amp;quot;Saturday&amp;quot; };
-
-    private String[] months = new String[] { &amp;quot;January&amp;quot;, &amp;quot;February&amp;quot;, &amp;quot;March&amp;quot;, &amp;quot;April&amp;quot;, &amp;quot;May&amp;quot;, &amp;quot;June&amp;quot;, &amp;quot;July&amp;quot;, &amp;quot;August&amp;quot;, &amp;quot;September&amp;quot;, &amp;quot;October&amp;quot;, &amp;quot;November&amp;quot;, &amp;quot;December&amp;quot; };
-
-    private int weekStart = 0;
-
-    private String helpStr = &amp;quot;Calendar-Picker is a component of GWTChismes library.\n&amp;quot; +
-                                             &amp;quot;(c) Manuel Carrasco 2007\nhttp://code.google.com/p/gwtchismes\n\n&amp;quot; +
-                                             &amp;quot;Navigation buttons:\n&amp;quot; +
-                                             &amp;quot;\u003c Previous Month\n\u003e Next Month\n\u00AB Previous Year\n\u00BB Next Year\n- Actual Month\nx Close\n &amp;quot;;
-
-    // Containers
-    private Panel outer = new VerticalPanel();
-
-    private DialogBox calendarDlg = null;
-
-    // Navigation Buttons
-    private final DockPanel navButtons = new DockPanel();
-
-    private final DockPanel bottonButtons = new DockPanel();
-
-    private final DockPanel topButtons = new DockPanel();
-
-    private final HTML titleBtn = new HTML();
-
-    private final GWTCButton helpBtn = new GWTCButton(&amp;quot;?&amp;quot;, this);
-
-    private final GWTCButton closeBtn = new GWTCButton(&amp;quot;x&amp;quot;, this);
-
-    private final GWTCButton actualMBtn = new GWTCButton(&amp;quot;-&amp;quot;, this);
-
-    // public final GWTCButton prevMBtn = new GWTCButton(&amp;quot;\u003c&amp;quot;, this);
-    private final GWTCButton prevMBtn = new GWTCButton(&amp;quot;&amp;amp;lt;&amp;quot;, this);
-
-    private final GWTCButton prevYBtn = new GWTCButton(&amp;quot;\u00AB&amp;quot;, this);
-
-    private final GWTCButton nextMBtn = new GWTCButton(&amp;quot;\u003e&amp;quot;, this);
-
-    private final GWTCButton nextYBtn = new GWTCButton(&amp;quot;\u00BB&amp;quot;, this);
-
-    private HorizontalPanel prevButtons = new HorizontalPanel();
-
-    private HorizontalPanel nextButtons = new HorizontalPanel();
-    
-    private boolean needsRedraw = true;
-    
-    public static int CONFIG_DIALOG = 1;
-    public static int CONFIG_BORDERS = 2;
-
-    /**
-     * Constructor, you need specify the behaviour: floating dialog box or embeded widget
-     * 
-     * @param dialog
-     *            true if you wan an independient and drageable dialog box when
-     *            the picker is showed
-     */
-    public GWTCDatePicker(boolean dialog) {
-        if (dialog)
-            initialize(CONFIG_DIALOG);
-        else
-            initialize(0);
-        
-    }
-    public GWTCDatePicker(int config) {
-        initialize(config);
-    }
-    private void initialize(int config) {
-        if ((config &amp;amp; CONFIG_BORDERS) == CONFIG_BORDERS) {
-            outer = new GWTCBox();
-        }
-        if ((config &amp;amp; CONFIG_DIALOG) == CONFIG_DIALOG) {
-            calendarDlg = new DialogBox();
-            calendarDlg.setWidget(outer);
-            initWidget(new DockPanel());
-        } else {
-            initWidget(outer);
-            drawCalendar();
-        }
-        setStyleName(styleName);
-
-        navButtons.setStyleName(GWTCDatePicker.StyleCButtons);
-        titleBtn.setStyleName(GWTCDatePicker.StyleCHeader);
-
-        navButtons.add(bottonButtons, DockPanel.SOUTH);
-        navButtons.add(topButtons, DockPanel.NORTH);
-
-        prevButtons.add(prevYBtn);
-        prevButtons.add(prevMBtn);
-        nextButtons.add(nextMBtn);
-        nextButtons.add(nextYBtn);
-
-        bottonButtons.add(prevButtons, DockPanel.WEST);
-        bottonButtons.add(actualMBtn, DockPanel.CENTER);
-        bottonButtons.add(nextButtons, DockPanel.EAST);
-        bottonButtons.setVerticalAlignment(DockPanel.ALIGN_MIDDLE);
-        bottonButtons.setCellVerticalAlignment(actualMBtn, HasAlignment.ALIGN_MIDDLE);
-        bottonButtons.setCellHorizontalAlignment(prevButtons, DockPanel.ALIGN_LEFT);
-        bottonButtons.setCellHorizontalAlignment(nextButtons, DockPanel.ALIGN_RIGHT);
-        bottonButtons.setCellHorizontalAlignment(actualMBtn, HasAlignment.ALIGN_CENTER);
-        bottonButtons.setCellWidth(actualMBtn, &amp;quot;100%&amp;quot;);
-        actualMBtn.setWidth(&amp;quot;100%&amp;quot;);
-
-        topButtons.add(helpBtn, DockPanel.WEST);
-        topButtons.add(titleBtn, DockPanel.CENTER);
-        topButtons.add(closeBtn, DockPanel.EAST);
-        topButtons.setVerticalAlignment(DockPanel.ALIGN_MIDDLE);
-        topButtons.setCellVerticalAlignment(titleBtn, HasAlignment.ALIGN_MIDDLE);
-        topButtons.setCellHorizontalAlignment(helpBtn, DockPanel.ALIGN_LEFT);
-        topButtons.setCellHorizontalAlignment(closeBtn, DockPanel.ALIGN_RIGHT);
-        topButtons.setCellHorizontalAlignment(titleBtn, HasAlignment.ALIGN_CENTER);
-        topButtons.setCellWidth(titleBtn, &amp;quot;100%&amp;quot;);
-
-    }
-
-    /**
-     * Sets the object&amp;#39;s style name to the calendar container, removing all
-     * other styles.
-     * 
-     * @see com.google.gwt.user.client.ui.UIObject#setStyleName(java.lang.String)
-     */
-    public void setStyleName(String s) {
-        styleName = s;
-        if (calendarDlg != null) {
-            calendarDlg.setStyleName(styleName);
-        } else
-            outer.setStyleName(styleName);
-    }
-
-    /**
-     * Adds a secondary or dependent style name to this object
-     * 
-     * @see com.google.gwt.user.client.ui.UIObject#addStyleName(java.lang.String)
-     */
-    public void addStyleName(String s) {
-        if (calendarDlg != null) {
-            calendarDlg.addStyleName(s);
-        } else
-            outer.addStyleName(s);
-    }
-
-    /**
-     * Draw or redraw all calendar elements into the container
-     * 
-     */
-    public void drawCalendar() {
-        if (this.isVisible() == false)
-            return;
-        if (!needsRedraw)
-            return;
-
-        FlexTable grid = new FlexTable();
-        grid.setStyleName(GWTCDatePicker.StyleCGrid);
-        grid.setCellSpacing(0);
-
-        outer.clear();
-        outer.add(navButtons);
-        outer.add(grid);
-
-        titleBtn.setHTML(GWTCDatePicker.formatDate(&amp;quot;MMMM, yyyy&amp;quot;, cursorDate, months, days));
-
-        grid.getRowFormatter().setStyleName(0, GWTCDatePicker.StyleCWeekHeader);
-        int l = 0;
-        for (int i = weekStart; i &amp;lt; 7; i++) {
-            grid.getCellFormatter().setStyleName(0, l, GWTCDatePicker.StyleCCellDayNames);
-            grid.setText(0, l++, ((String) days[i]).substring(0, 3));
-        }
-        if (l &amp;lt; 7) {
-            grid.getCellFormatter().setStyleName(0, l, GWTCDatePicker.StyleCCellDayNames);
-            grid.setText(0, l++, ((String) days[0]).substring(0, 3));
-        }
-
-        Date firstDate = new Date(cursorDate.getYear(), cursorDate.getMonth(), 1);
-        long todayNum = 1 + GWTCDatePicker.compareDate(firstDate, new Date());
-        long minimalNum = 1 + GWTCDatePicker.compareDate(firstDate, minimalDate);
-        long maximalNum = 1 + GWTCDatePicker.compareDate(firstDate, maximalDate);
-        long selectedNum = 1 + GWTCDatePicker.compareDate(firstDate, selectedDate);
-        // long cursorNum = 1 + DatePicker.compareDate(firstDate,
-        // cursorDate);
-        int firstWDay = firstDate.getDay();
-        int numOfDays = GWTCDatePicker.daysInMonth(cursorDate);
-        int j = 0 + weekStart;
-
-        for (int i = 1; i &amp;lt; 7; i++) { // each row in the grid
-            for (int k = 0; k &amp;lt; 7; k++, j++) { // each day in the week
-                int displayNum = (firstWDay &amp;lt; weekStart) ? (j - firstWDay - 6) : (j - firstWDay + 1);
-                if (j &amp;lt; firstWDay || displayNum &amp;gt; numOfDays || displayNum &amp;lt;= 0) {
-                    grid.getCellFormatter().setStyleName(i, k, GWTCDatePicker.StyleCCellEmpty);
-                    grid.setHTML(i, k, &amp;quot;&amp;amp;nbsp;&amp;quot;);
-                } else {
-                    HTML html = new CellHTML(displayNum, useCellLinks);
-                    grid.getCellFormatter().setStyleName(i, k, GWTCDatePicker.StyleCCellDays);
-                    html.setStyleName(GWTCDatePicker.StyleCCellDays);
-                    if (displayNum &amp;lt; minimalNum || displayNum &amp;gt; maximalNum) {
-                        html.addStyleName(GWTCDatePicker.StyleCInvalidDay);
-                        grid.getCellFormatter().addStyleName(i, k, GWTCDatePicker.StyleCInvalidDay);
-                    } else if (displayNum == selectedNum) {
-                        html.addStyleName(GWTCDatePicker.StyleCSelected);
-                        grid.getCellFormatter().addStyleName(i, k, GWTCDatePicker.StyleCSelected);
-                        html.addClickListener(this);
-                    } else if (displayNum &amp;gt;= selectedNum) {
-                        html.addStyleName(GWTCDatePicker.StyleCAfterSelected);
-                        grid.getCellFormatter().addStyleName(i, k, GWTCDatePicker.StyleCAfterSelected);
-                        html.addClickListener(this);
-                    } else {
-                        html.addStyleName(GWTCDatePicker.StyleCBeforeSelected);
-                        grid.getCellFormatter().addStyleName(i, k, GWTCDatePicker.StyleCBeforeSelected);
-                        html.addClickListener(this);
-                    }
-                    if (displayNum == todayNum) {
-                        html.addStyleName(GWTCDatePicker.StyleCToday);
-                        grid.getCellFormatter().addStyleName(i, k, GWTCDatePicker.StyleCToday);
-                    }
-                    // else if (displayNum == cursorNum) {
-                    // grid.getCellFormatter().addStyleName(i, k, &amp;quot;Cal_Cursor&amp;quot;);
-                    // }
-                    grid.setWidget(i, k, html);
-                }
-            }
-        }
-        prevMBtn.setEnabled(isVisibleMonth(cursorDate, -1));
-        nextMBtn.setEnabled(isVisibleMonth(cursorDate, 1));
-        prevYBtn.setEnabled(isVisibleMonth(cursorDate, -12));
-        nextYBtn.setEnabled(isVisibleMonth(cursorDate, 12));
-        
-        needsRedraw = false;
-    }
-
-    /**
-     * Unhide the calendar container, if the calendar picker is a dialog box and
-     * param sender is not null the dialog is positioned near of it
-     * 
-     * @param sender
-     *            the widget that the user has clicked
-     */
-    public void show(Widget sender) {
-        this.drawCalendar();
-        if (calendarDlg == null) {
-            outer.setVisible(true);
-        } else {
-            calendarDlg.show();
-            GWTCHelper.positionPopupPanel(calendarDlg, sender);
-        }
-    }
-
-    /**
-     * Hide the calendar container.
-     * 
-     */
-    public void hide() {
-        if (calendarDlg != null) {
-            if (  calendarDlg.isAttached() ) {
-                calendarDlg.hide();
-            }
-        } else
-            outer.setVisible(false);
-    }
-
-    /**
-     * Set the text for the caption of the dialog box. It is only available if the calendar is shown as a dialog.
-     * 
-     * @param t
-     *            the message to display
-     */
-    public void setText(String t) {
-        if (calendarDlg != null)
-            calendarDlg.setText(t);
-    }
-
-    /**
-     * Set the help text.
-     * 
-     * @param t
-     *            the help message to display, if t is null help button is
-     *            disabled
-     */
-    public void setHelp(String t) {
-        helpStr = t;
-        if (t == null || t.length() == 0)
-            helpBtn.setEnabled(false);
-        else
-            helpBtn.setEnabled(true);
-    }
-    
-    /**
-     * Disable the close Button
-     */
-    public void disableCloseButton(){
-        this.closeBtn.setVisible(false);
-    }
-
-    /**
-     * Internationalize the calendar.
-     * 
-     * @param d
-     *            array with the full names of the week days (default english
-     *            names [Sunday ... Saturday] )
-     * @param m
-     *            array with the full names of the months (default english
-     *            names: [January ... December])
-     * @param s
-     *            number of the first day in the week [1...7] (default 1 =
-     *            sunday)
-     */
-    public void setLocale(String[] d, String[] m, int s) {
-        this.needsRedraw = true;
-        if (days.length &amp;gt;= 7)
-            days = d;
-        if (months.length &amp;gt;= 12)
-            months = m;
-        weekStart = s;
-        drawCalendar();
-    }
-
-    /**
-     * This method returns true or false whether a month has selectable days in
-     * the allowed interval
-     * 
-     * @param date
-     *            Date of the selected day
-     * @param months
-     *            increment of months
-     * @return true if the month has selectable days
-     */
-    public boolean isVisibleMonth(Date date, int months) {
-        Date d = GWTCDatePicker.increaseMonth(date, months);
-        Date firstD = new Date(d.getTime());
-        firstD.setDate(1);
-        Date lastD = new Date(d.getTime());
-        lastD.setDate(GWTCDatePicker.daysInMonth(d));
-        
-        if (GWTCDatePicker.compareDate(minimalDate, lastD) &amp;lt; 0) {
-            return false;
-        }
-        if (GWTCDatePicker.compareDate(maximalDate, firstD) &amp;gt; 0) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Set the date where the calendar is positioned
-     * 
-     * @param d
-     *            Date
-     */
-    public void setCursorDate(Date d) {
-        if (isVisibleMonth(d, 0)) {
-            this.needsRedraw = true;
-            cursorDate = setHourToZero(d);
-        }
-    }
-
-    /**
-     * Set the date selected by the user
-     * 
-     * @param d
-     *            Date
-     */
-    public void setSelectedDate(Date d) {
-        d = setHourToZero(d);
-        if ( GWTCDatePicker.compareDate(d, selectedDate) != 0) {
-            needsRedraw = true;
-            cursorDate = selectedDate = d;
-            drawCalendar();
-        }
-    }
-
-    /**
-     * Set the minimal selectable date
-     * 
-     * @param d
-     *            Date
-     */
-    public void setMinimalDate(Date d) {
-        this.needsRedraw = true;
-        minimalDate = setHourToZero(d);
-        if (maximalDate.getTime() &amp;lt; minimalDate.getTime())
-            maximalDate = d;
-        if (selectedDate.getTime() &amp;lt; minimalDate.getTime())
-            selectedDate = d;
-        if (cursorDate.getTime() &amp;lt; minimalDate.getTime())
-            this.setSelectedDate(d);
-    }
-
-    /**
-     * Set the maximal selectable date
-     * 
-     * @param d
-     *            Date
-     */
-    public void setMaximalDate(Date d) {
-        this.needsRedraw = true;
-        maximalDate = setHourToZero(d);
-        if (minimalDate.getTime() &amp;gt; maximalDate.getTime())
-            minimalDate = d;
-        if (selectedDate.getTime() &amp;gt; maximalDate.getTime())
-            selectedDate = d;
-        if (cursorDate.getTime() &amp;gt; maximalDate.getTime())
-            this.setSelectedDate(d);
-    }
-
-    /**
-     * Get the date selected by the user
-     * 
-     * @return Date
-     */
-    public Date getSelectedDate() {
-        return selectedDate;
-    }
-
-    /**
-     * Get a string with the selected date in the desired format
-     * 
-     * @param format
-     *            representation of the desired format [dddd ddd dd yyyy yy MMMM  MMM MM]
-     * @return String
-     */
-    public String getSelectedDateStr(String format) {
-        return formatDate(format, selectedDate, months, days);
-    }
-
-    /*
-     * (non-Javadoc)
-     */
-    private ChangeListenerCollection changeListeners;
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.google.gwt.user.client.ui.ClickListener#onClick(com.google.gwt.user.client.ui.Widget)
-     */
-    public void onClick(Widget sender) {
-        if (sender == prevMBtn) {
-            setCursorDate(GWTCDatePicker.increaseMonth(cursorDate, -1));
-            drawCalendar();
-        } else if (sender == nextMBtn) {
-            setCursorDate(GWTCDatePicker.increaseMonth(cursorDate, 1));
-            drawCalendar();
-        } else if (sender == prevYBtn) {
-            setCursorDate(GWTCDatePicker.increaseYear(cursorDate, -1));
-            drawCalendar();
-        } else if (sender == nextYBtn) {
-            setCursorDate(GWTCDatePicker.increaseYear(cursorDate, 1));
-            drawCalendar();
-        } else if (sender == actualMBtn) {
-            setCursorDate(new Date());
-            drawCalendar();
-        } else if (sender == helpBtn) {
-            Window.alert(helpStr);
-        } else if (sender == closeBtn) {
-            if (calendarDlg != null) {
-                calendarDlg.hide();
-            } else {
-                outer.setVisible(false);
-            }
-        } else if (sender instanceof CellHTML) {
-            CellHTML cell = (CellHTML) sender;
-            setSelectedDate(new Date(cursorDate.getYear(), cursorDate.getMonth(), cell.getDay()));
-            if (changeListeners != null) 
-                changeListeners.fireChange(this);
-        } else {
-            // an unknown click listener
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.google.gwt.user.client.ui.SourcesChangeEvents#addChangeListener(com.google.gwt.user.client.ui.ChangeListener)
-     */
-    public void addChangeListener(ChangeListener listener) {
-        if (changeListeners == null)
-            changeListeners = new ChangeListenerCollection();
-        changeListeners.add(listener);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.google.gwt.user.client.ui.SourcesChangeEvents#removeChangeListener(com.google.gwt.user.client.ui.ChangeListener)
-     */
-    public void removeChangeListener(ChangeListener listener) {
-        if (changeListeners != null)
-            changeListeners.remove(listener);
-    }
-
-    private static final int YEARS = 1;
-    private static final int MONTHS = 2;
-    private static final int DAYS = 3;
-
-    /**
-     * Add days to a reference Date
-     * 
-     * @param d
-     *            Date of reference
-     * @param n
-     *            number of days to increase (for decrease use negative values)
-     * @return the new Date
-     */
-    public static Date increaseDate(Date d, int n) {
-        Date ret = new Date(GWTCDatePicker.add(d.getTime(), n, GWTCDatePicker.DAYS));
-        return ret;
-    }
-
-    /**
-     * Add months to a reference Date
-     * 
-     * @param d
-     *            Date of reference
-     * @param n
-     *            number of months to increase (for decrease use negative
-     *            values)
-     * @return the new Date
-     */
-    public static Date increaseMonth(Date d, int n) {
-        if (d.getDate() &amp;gt; 28) {
-            Date tmp = new Date(d.getTime());
-            tmp.setDate(1);
-            GWTCDatePicker.add(tmp.getTime(), n, GWTCDatePicker.MONTHS);
-            int d1 = daysInMonth(d);
-            int d2 = daysInMonth(tmp);
-            if (d1 &amp;gt; d2)
-                d.setDate(d2);
-        }
-
-        return new Date(GWTCDatePicker.add(d.getTime(), n, GWTCDatePicker.MONTHS));
-    }
-
-    /**
-     * Add years to a reference Date
-     * 
-     * @param d
-     *            Date of reference
-     * @param n
-     *            number of years to increase (for decrease use negative values)
-     * @return the new Date
-     */
-    public static Date increaseYear(Date d, int n) {
-        return new Date(GWTCDatePicker.add(d.getTime(), n, GWTCDatePicker.YEARS));
-    }
-
-    /**
-     * Calculate the number of days in a month
-     * 
-     * @param d
-     *            reference date
-     * @return the number of days in this month [1...31]
-     */
-    public static int daysInMonth(Date d) {
-        Date nd = new Date(GWTCDatePicker.add(d.getTime(), 1, GWTCDatePicker.MONTHS));
-        return GWTCDatePicker.compareDate(d, nd);
-    }
-
-    /**
-     * Calculate the number of days betwen two dates
-     * 
-     * @param a
-     *            Date
-     * @param b
-     *            Date
-     * @return the difference in days betwen b and a (b - a)
-     */
-    public static int compareDate(Date a, Date b) {
-        long d1 = setHourToZero(a).getTime();
-        long d2 = setHourToZero(b).getTime();
-        return (int) ((d2 - d1) / 1000 / 60 / 60 / 24);
-    }
-
-    private static long add(long time, int n, int months2) {
-        return (long) add((double) time, n, months2);
-    }
-    
-    /**
-     * Increase/decrease a date based in a type parameter which specifies the type of operation
-     * 
-     * This method is coded enterely in native javascript because it has native methods to increase dates  
-     * 
-     * @param time
-     *            in milliseconds since 1-1-1970
-     * @param value
-     *            interval to add (use negative values to decrease)
-     * @param type
-     *            type of addition (1=days, 2=months, 3=years, 4=hours
-     * @return number of milliseconds from 1-1-1970
-     */
-    private static native double add(double time, int value, int type)
-    /*-{
-     var d = new Date(time);
-     if (type == 1) {
-       // this is a hack because getYear returns diferent results with diferent browsers
-        var y = d.getYear();
-        y = y &amp;lt; 1000 ? y + 1900 : y; 
-        d.setYear( value + y);
-     }   
-     if (type == 2) d.setMonth(d.getMonth() + value);
-     if (type == 3) d.setDate(d.getDate() + value);
-     return d.getTime();  
-     }-*/;
-
-    /**
-     * Set hour, minutes, second and milliseconds to zero.
-     * 
-     * @param date
-     *            Date
-     * @return Modified date
-     */
-    public static Date setHourToZero(Date date) {
-        Date d = new Date(date.getTime());
-        d.setHours(0);
-        d.setMinutes(0);
-        d.setSeconds(0);
-        // a trick to set milliseconds to zero
-        long t = d.getTime() / 1000;
-        t = t * 1000;
-        return new Date(t);
-    }
-
-    /**
-     * Create a new Date
-     * 
-     * @param y
-     *            year (ie 1980)
-     * @param m
-     *            month (1...12)
-     * @param d
-     *            day of month (1...31)
-     * @return new Date
-     */
-    public static Date newDateFromYMD(int y, int m, int d) {
-        Date dat = new Date();
-        dat.setYear(y - 1900);
-        dat.setMonth(m -1);
-        dat.setDate(d);
-        return setHourToZero(dat);
-    }
-
-    /**
-     *  Basic method to format dates 
-     *  
-     *  TODO: use the new class DateTimeFormat available in GWT 1.4.  But still there are many people using old versions 
-     * 
-     * @param format
-     *            (supported dddd ddd dd yyyy yy MMMM MMM MM)
-     * @param date
-     * @param months
-     *            array with the months names [January ... December]
-     * @param days
-     *            array with the days names [Sunday .... Saturday]
-     * @return formated string
-     */
-    static public String formatDate(String format, Date date, String[] months, String days[]) {
-        /*
-        DateTimeFormat dateFormat  = DateTimeFormat.getFormat(format); 
-        Window.alert (&amp;quot;&amp;quot; + date + &amp;quot; &amp;quot; + dateFormat.format(date));
-        */
-        
-        if (date == null || format == null || months == null || days == null)
-            return &amp;quot;NULL&amp;quot;;
-        String ret = format;
-        String month = months[date.getMonth()];
-        String day = days[date.getDay()];
-        String month_3 = month.length() &amp;gt;= 3 ? month.substring(0, 3) : month;
-        String day_3 = day.length() &amp;gt;= 3 ? day.substring(0, 3) : day;
-        //String day_4 = day.length() &amp;gt;= 4 ? day.substring(0, 4) : day;
-        ret = ret.replaceAll(&amp;quot;ddddd&amp;quot;, day);
-        ret = ret.replaceAll(&amp;quot;dddd&amp;quot;, day);
-        ret = ret.replaceAll(&amp;quot;ddd&amp;quot;, day_3);
-        ret = ret.replaceAll(&amp;quot;dd&amp;quot;, leftPadding(String.valueOf(date.getDate()), &amp;quot;0&amp;quot;, 2));
-        ret = ret.replaceAll(&amp;quot;yyyy&amp;quot;, String.valueOf(1900 + date.getYear()));
-        ret = ret.replaceAll(&amp;quot;yy&amp;quot;, &amp;quot;&amp;quot; + leftPadding(String.valueOf(date.getYear() % 100), &amp;quot;0&amp;quot;, 2));
-        ret = ret.replaceAll(&amp;quot;MMMM&amp;quot;, month);
-        ret = ret.replaceAll(&amp;quot;MMM&amp;quot;, month_3);
-        ret = ret.replaceAll(&amp;quot;MM&amp;quot;, leftPadding(String.valueOf(date.getMonth() + 1), &amp;quot;0&amp;quot;, 2));
-        return ret;
-    }
-
-    static private String leftPadding(String text, String character, int maxNumberChars) {
-        StringBuffer ret = new StringBuffer();
-        for (int i = text.length(); i &amp;lt; maxNumberChars; i++) {
-            ret.append(character);
-        }
-        ret.append(text);
-        return ret.toString();
-    }
-    
-    /**
-     * Enables the use of links in Cells, it is needed to use Selenium-IDE
-     * It interferes with History 
-     * By default this parameter is disabled.
-     * 
-     * @param b
-     */
-    public void useCellLinks(boolean b) {
-        useCellLinks = b;
-        this.needsRedraw = true;
-    }
-
-    /**
-     * Basic Widget that represents each cell in the calendar picker
-     * 
-     */
-    private static class CellHTML extends HTML {
-        private int day;
-        private boolean useCellLinks = false;
-
-        public CellHTML(int day, boolean useCellLinks) {
-            super (String.valueOf(day));
-            this.useCellLinks = useCellLinks;
-            this.day = day;
-        }
-        
-        public void addClickListener(ClickListener pickListener) {
-            boolean ie6 = GWTCHelper.isIE6(); 
-            if (useCellLinks &amp;amp;&amp;amp; ie6 == false) {
-                // If the cell has a click-listernet, we add a link, so Selenium is able to use it
-                // setHTML( &amp;quot;&amp;lt;a href=\&amp;quot;javascript:;\&amp;quot;&amp;gt;&amp;quot; + String.valueOf(day) + &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;);
-                setHTML( &amp;quot;&amp;lt;a href=\&amp;quot;#\&amp;quot;&amp;gt;&amp;quot; + String.valueOf(day) + &amp;quot;&amp;lt;/a&amp;gt;&amp;quot;);
-            }
-            super.addClickListener(pickListener);
-            //  IE6 does not support div:hover style, this listener adds a new class when the mouse is over
-            if (ie6)
-                this.addMouseListener(GWTCButton.mouseOverListener);
-        }
-
-        public int getDay() {
-            return day;
-        }
-        
-    }
-}
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientutilGWTCHelperjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCHelper.java (2107 =&gt; 2108)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCHelper.java	2009-12-15 18:24:26 UTC (rev 2107)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/util/GWTCHelper.java	2009-12-15 21:29:26 UTC (rev 2108)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,137 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-/*
- * Copyright 2007 Manuel Carrasco Mo&amp;Atilde;&amp;plusmn;ino. (manuel_carrasco at users.sourceforge.net) 
- * http://code.google.com/p/gwtchismes
- * 
- * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package org.mule.galaxy.web.client.util;
-
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.ui.PopupPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-/**
- * @author Manuel Carrasco Mo&amp;Atilde;&amp;plusmn;ino
- * &amp;lt;h3&amp;gt;Class description&amp;lt;/h3&amp;gt;
- * &amp;lt;p&amp;gt;
- * Utility class for the gwtchismes library
- * &amp;lt;/p&amp;gt; 
- */
-public class GWTCHelper {
-
-    /**
-     * Detection of Internet Explorer 6.x 
-     * @return true if the browser is ie6
-     */
-    public static native boolean isIE6() /*-{
-      return (window.XMLHttpRequest)? false: true;
-    }-*/;
-    
-    /**
-     * This method move the panel near the widget provided.
-     * If widget is null, the panel is centered into the visible area of the browser.
-     *  
-     * Hack: PopupPanel.center() does not work because it centers the panel in the  window.
-     * 
-     * @param panel
-     * @param widget
-     */
-    public static void positionPopupPanel(PopupPanel panel, Widget widget) {
-        if (panel==null) return;
-
-        int visibleW = getVisibleWidth();
-        int visibleH = getVisibleHeight();
-        int windowW = Window.getClientWidth();
-        int windowH = Window.getClientHeight();
-        int scrollLeft = Window.getScrollLeft();
-        int scrollTop = Window.getScrollTop();
-        int objectW = panel.getOffsetWidth();
-        int objectH = panel.getOffsetHeight();
-        
-        if (widget != null ) {
-            // Put the panel near the widget
-            int left = widget.getAbsoluteLeft() - 20;
-            int top = widget.getAbsoluteTop() + 10;
-            panel.setPopupPosition(left, top);
-            // If part of the panel is not visible, move the scrollbars
-            int xDiff =  objectW + left - visibleW - scrollLeft;
-            int yDiff =  objectH + top - visibleH - scrollTop;
-            if (xDiff &amp;lt; 0 ) {
-                xDiff = left - scrollLeft;
-                if (xDiff &amp;gt; 0) xDiff = 0;
-            }
-            if (yDiff &amp;lt; 0 ) {
-                yDiff = top - scrollTop;
-                if (yDiff &amp;gt; 0) yDiff = 0;
-            }
-            
-            // scrollTo(scrollLeft + xDiff, scrollTop + yDiff);
-        } else {
-            // Center the panel into the visible part of the document
-            if (visibleW == 0 || visibleH == 0) {
-                //Window.alert(&amp;quot;center 1&amp;quot;);
-                panel.center();
-            } else if ( visibleH &amp;gt; windowH){
-                //Window.alert(&amp;quot;center 2&amp;quot;);
-                panel.center();
-            } else {
-                //Window.alert(&amp;quot;center 3&amp;quot;);
-                int left = scrollLeft + ((visibleW + objectW) / 2) - objectW;
-                int top = scrollTop + ((visibleH + objectH) / 2) - objectH;
-                panel.setPopupPosition(left, top);
-            }
-        }
-    }
-    public static void centerPopupPanel(PopupPanel panel) {
-        positionPopupPanel(panel, null);
-    }
-    
-    public static void maximizeWidget(Widget widget) {
-        if (widget==null) return;
-        int w = Math.max(getVisibleWidth(), Window.getClientWidth());
-        int h = Math.max(getVisibleHeight(), Window.getClientHeight());
-        widget.setSize(w + &amp;quot;px&amp;quot;, h + &amp;quot;px&amp;quot;);
-    }
-    public static native void scrollTo(int x, int y) /*-{
-       $wnd.scrollTo(x,y);
-    }-*/;
-    public static native int getVisibleWidth() /*-{
-       return $wnd.document.documentElement.clientWidth;
-    }-*/;
-    public static native int getVisibleHeight() /*-{
-       return $wnd.document.documentElement.clientHeight;
-    }-*/;
-
-    public static String internationalize(String s, Object[] os) {
-        for (int i = 0; i &amp;lt; os.length; i++) {
-            String o = &amp;quot;&amp;quot; + (os[i] != null ? os[i] : &amp;quot;&amp;quot;);
-            String c = &amp;quot;{&amp;quot; + i + &amp;quot;}&amp;quot;;
-            for (;;) {
-                int pos = s.indexOf(c);
-                if (pos &amp;lt; 0)
-                    break;
-                String trail = &amp;quot;&amp;quot;;
-                if (pos + c.length() &amp;lt; s.length())
-                    trail = s.substring(pos + c.length());
-                s = s.substring(0, pos) + o + trail;
-            }
-        }
-        return s;
-    }
-
-    public static String internationalize(String s, String o) {
-        Object[] os = { o };
-        return internationalize(s, os);
-    }
-}
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://admin.muleforge.org/manage_email


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

You received this message because you are subscribed to the Google Groups &quot;MuleForge Dev&quot; group.&lt;br /&gt;

To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26802091&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.&lt;br /&gt;

To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26802091&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.&lt;br /&gt;

For more options, visit this group at http://groups.google.com/group/muleforgedev?hl=en.&lt;br /&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-galaxy-dev----2108--branches-product_cleanup-gwt-client-src-main-java-org-mule-galaxy-web-client-util%3A-More-unused-classes-tp26802091p26802091.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26799359</id>
	<title>[galaxy-dev]  [2107] branches/product_cleanup: Remove netboot</title>
	<published>2009-12-15T10:24:26Z</published>
	<updated>2009-12-15T10:24:26Z</updated>
	<author>
		<name>dandiep-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt; [2107] branches/product_cleanup: Remove netboot&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;msg&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;Revision&lt;/dt&gt; &lt;dd&gt;&lt;a href=&quot;http://fisheye.muleforge.org/changelog/galaxy/?cs=2107&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;2107&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Author&lt;/dt&gt; &lt;dd&gt;dandiep&lt;/dd&gt;
&lt;dt&gt;Date&lt;/dt&gt; &lt;dd&gt;2009-12-15 12:24:26 -0600 (Tue, 15 Dec 2009)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Log Message&lt;/h3&gt;
&lt;pre&gt;Remove netboot&lt;/pre&gt;

&lt;h3&gt;Modified Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanuppomxml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/pom.xml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Removed Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;branches/product_cleanup/netboot/&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;patch&quot;&gt;
&lt;h3&gt;Diff&lt;/h3&gt;
&lt;a id=&quot;branchesproduct_cleanuppomxml&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/pom.xml (2106 =&gt; 2107)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/pom.xml	2009-12-15 18:22:24 UTC (rev 2106)
+++ branches/product_cleanup/pom.xml	2009-12-15 18:24:26 UTC (rev 2107)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -41,7 +41,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         &amp;lt;module&amp;gt;gwt-client&amp;lt;/module&amp;gt;
         &amp;lt;module&amp;gt;integration&amp;lt;/module&amp;gt;
         &amp;lt;module&amp;gt;server&amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        &amp;lt;module&amp;gt;netboot&amp;lt;/module&amp;gt;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 	&amp;lt;module&amp;gt;examples&amp;lt;/module&amp;gt;
     &amp;lt;/modules&amp;gt;
 
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://admin.muleforge.org/manage_email


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

You received this message because you are subscribed to the Google Groups &quot;MuleForge Dev&quot; group.&lt;br /&gt;

To post to this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26799359&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev@...&lt;/a&gt;.&lt;br /&gt;

To unsubscribe from this group, send email to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26799359&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muleforgedev+unsubscribe@...&lt;/a&gt;.&lt;br /&gt;

For more options, visit this group at http://groups.google.com/group/muleforgedev?hl=en.&lt;br /&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-galaxy-dev----2107--branches-product_cleanup%3A-Remove-netboot-tp26799359p26799359.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26799322</id>
	<title>[galaxy-dev]  [2106] branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client: Remove some cruft</title>
	<published>2009-12-15T10:22:24Z</published>
	<updated>2009-12-15T10:22:24Z</updated>
	<author>
		<name>dandiep-2</name>
	</author>
	<content type="html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt; [2106] branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client: Remove some cruft&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;msg&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;Revision&lt;/dt&gt; &lt;dd&gt;&lt;a href=&quot;http://fisheye.muleforge.org/changelog/galaxy/?cs=2106&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;2106&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;Author&lt;/dt&gt; &lt;dd&gt;dandiep&lt;/dd&gt;
&lt;dt&gt;Date&lt;/dt&gt; &lt;dd&gt;2009-12-15 12:22:24 -0600 (Tue, 15 Dec 2009)&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Log Message&lt;/h3&gt;
&lt;pre&gt;Remove some cruft&lt;/pre&gt;

&lt;h3&gt;Modified Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientitemRepositoryMenuPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/item/RepositoryMenuPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Removed Paths&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientregistrySearchFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/SearchForm.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientregistrySearchFormRowjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/SearchFormRow.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientregistrySearchPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/SearchPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientregistryViewPaneljava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/ViewPanel.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientregistryViewSearchFormjava&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/ViewSearchForm.java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;div id=&quot;patch&quot;&gt;
&lt;h3&gt;Diff&lt;/h3&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientGalaxyjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java (2105 =&gt; 2106)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java	2009-12-15 18:16:00 UTC (rev 2105)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/Galaxy.java	2009-12-15 18:22:24 UTC (rev 2106)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -29,7 +29,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.admin.AdministrationPanel;
 import org.mule.galaxy.web.client.item.RepositoryMenuPanel;
 import org.mule.galaxy.web.client.property.PropertyInterfaceManager;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.registry.SearchPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.ui.AdministrationConstants;
 import org.mule.galaxy.web.client.ui.BaseConstants;
 import org.mule.galaxy.web.client.ui.BaseMessages;
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -294,12 +293,7 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; 
     protected void loadTabs(final Galaxy galaxy) {
         loadRepositoryTab();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        
-        int searchIdx = pageManager.createTab(&amp;quot;Search&amp;quot;, &amp;quot;search&amp;quot;, &amp;quot;&amp;quot;);
-        pageManager.createPageInfo(&amp;quot;search&amp;quot;, new SearchPanel(this), searchIdx);
-        
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         loadPluginTabs();
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         loadAdminTab();
         
         pageManager.initialize();
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -423,10 +417,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         return adminTabIndex;
     }
 
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-    public void addHistoryListener(String token, AbstractShowable composite) {
-        historyListeners.put(token, composite);
-    }
-
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;     public WExtensionInfo getExtension(String id) {
         for (Iterator itr = extensions.iterator(); itr.hasNext();) {
             WExtensionInfo ei = (WExtensionInfo) itr.next();
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientitemRepositoryMenuPaneljava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;modfile&quot;&gt;&lt;h4&gt;Modified: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/item/RepositoryMenuPanel.java (2105 =&gt; 2106)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/item/RepositoryMenuPanel.java	2009-12-15 18:16:00 UTC (rev 2105)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/item/RepositoryMenuPanel.java	2009-12-15 18:22:24 UTC (rev 2106)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -13,7 +13,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.client.PageInfo;
 import org.mule.galaxy.web.client.PageManager;
 import org.mule.galaxy.web.client.WidgetHelper;
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-import org.mule.galaxy.web.client.registry.ViewPanel;
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; import org.mule.galaxy.web.rpc.AbstractCallback;
 import org.mule.galaxy.web.rpc.ItemInfo;
 
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -57,7 +56,6 @@
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         createPageInfo(&amp;quot;browse&amp;quot;, new ChildItemsPanel(galaxy, this, null));
         createPageInfo(&amp;quot;item/&amp;quot; + PageManager.WILDCARD, new ItemPanel(galaxy, this));
         createPageInfo(&amp;quot;add-item&amp;quot;, new AddItemForm(galaxy, this));
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-        createPageInfo(&amp;quot;view&amp;quot;, new ViewPanel(galaxy));
&lt;/span&gt;&lt;span class=&quot;cx&quot;&gt;         
         setId(&amp;quot;repositoryTabBody&amp;quot;);
     }
&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;a id=&quot;branchesproduct_cleanupgwtclientsrcmainjavaorgmulegalaxywebclientregistrySearchFormjava&quot; target=&quot;_top&quot;&gt;&lt;/a&gt;
&lt;div class=&quot;delfile&quot;&gt;&lt;h4&gt;Deleted: branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/SearchForm.java (2105 =&gt; 2106)&lt;/h4&gt;
&lt;pre class=&quot;diff&quot;&gt;
&lt;span class=&quot;info&quot;&gt;--- branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/SearchForm.java	2009-12-15 18:16:00 UTC (rev 2105)
+++ branches/product_cleanup/gwt-client/src/main/java/org/mule/galaxy/web/client/registry/SearchForm.java	2009-12-15 18:22:24 UTC (rev 2106)
&lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -1,313 +0,0 @@
&lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;-/*
- * $Id: LicenseHeader-GPLv2.txt 288 2008-01-29 00:59:35Z andrew $
- * --------------------------------------------------------------------------------------
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-