[kune-commits] r1183 - in trunk: . img/webtemplate src/main/java/cc/kune src/main/java/cc/kune/common/client/ui src/main/java/cc/kune/common/public src/main/java/cc/kune/core src/main/java/cc/kune/core/client src/main/java/cc/kune/core/client/init src/main/java/cc/kune/core/client/notify/msgs src/main/java/cc/kune/core/client/notify/spiner src/main/java/cc/kune/core/client/resources src/main/java/cc/kune/core/client/sitebar src/main/java/cc/kune/core/client/sitebar/logo src/main/java/cc/kune/core/client/sitebar/spaces src/main/java/cc/kune/core/client/ui/dialogs src/main/java/cc/kune/core/public src/main/java/cc/kune/msgs/client src/main/java/cc/kune/wave src/main/java/cc/kune/wave/client src/main/java/cc/kune/wave/server src/main/java/cc/kune/wspace src/main/java/cc/kune/wspace/client src/main/java/org/ourproject/kune/app/server src/main/java/org/ourproject/kune/rack src/main/resources

Vicente J. Ruiz Jurado vjrj_ at ourproject.org
Sun Jan 16 04:05:59 CET 2011


Author: vjrj_
Date: 2011-01-16 04:05:58 +0100 (Sun, 16 Jan 2011)
New Revision: 1183

Added:
   trunk/.classpath
   trunk/.project
   trunk/src/main/java/cc/kune/core/client/sitebar/SiteBarActions.java
   trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.java
   trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.ui.xml
   trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialogView.java
   trunk/src/main/java/cc/kune/wave/
   trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml
   trunk/src/main/java/cc/kune/wave/client/
   trunk/src/main/java/cc/kune/wave/client/WebClient.java
   trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml
   trunk/src/main/java/cc/kune/wave/server/
   trunk/src/main/java/cc/kune/wave/server/CustomServerRpcControllerImpl.java
   trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProviderSamePort.java
   trunk/src/main/java/cc/kune/wave/server/CustomSettingsBinder.java
   trunk/src/main/java/cc/kune/wave/server/Trio.java
   trunk/src/main/java/cc/kune/wave/server/WaveModule.java
   trunk/src/main/java/cc/kune/wave/server/WaveStarter.java
   trunk/src/main/resources/jaas.config
Removed:
   trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.java
   trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.ui.xml
   trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsView.java
   trunk/src/main/java/org/ourproject/kune/app/server/wave/
Modified:
   trunk/
   trunk/TODO
   trunk/TROUBLESHOOT
   trunk/img/webtemplate/web_template-2011.svg
   trunk/pom.xml
   trunk/src/main/java/cc/kune/Kune.gwt.xml
   trunk/src/main/java/cc/kune/common/client/ui/PopupPanelBottomCentered.java
   trunk/src/main/java/cc/kune/common/client/ui/PopupPanelTopCentered.java
   trunk/src/main/java/cc/kune/common/public/kune-common.css
   trunk/src/main/java/cc/kune/core/Core.gwt.xml
   trunk/src/main/java/cc/kune/core/client/CoreGinModule.java
   trunk/src/main/java/cc/kune/core/client/CoreGinjector.java
   trunk/src/main/java/cc/kune/core/client/KuneEntryPoint.java
   trunk/src/main/java/cc/kune/core/client/init/AppStarterDefault.java
   trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java
   trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.java
   trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.ui.xml
   trunk/src/main/java/cc/kune/core/client/resources/core.css
   trunk/src/main/java/cc/kune/core/client/sitebar/logo/SiteLogoViewImpl.java
   trunk/src/main/java/cc/kune/core/client/sitebar/spaces/SpaceSelectorViewImpl.java
   trunk/src/main/java/cc/kune/core/public/ws.html
   trunk/src/main/java/cc/kune/msgs/client/UserMessage.ui.xml
   trunk/src/main/java/cc/kune/msgs/client/UserMessagesPanel.ui.xml
   trunk/src/main/java/cc/kune/wspace/Wspace.gwt.xml
   trunk/src/main/java/cc/kune/wspace/client/WsArmor.java
   trunk/src/main/java/cc/kune/wspace/client/WsArmorEntryPoint.java
   trunk/src/main/java/cc/kune/wspace/client/WsArmorImpl.java
   trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java
Log:
NEW - # 10: Wave server code update 
http://kune.ourproject.org/issues/ticket/10


Property changes on: trunk
___________________________________________________________________
Name: svn:ignore
   - pmd-eclipse.log
.pmd
www-test
screenlog.0
bin
client
public
target
Main-compile
bin
.settings
.gwt-cache
repository
derby.log
star-yellow-grey.png
run.sh
tomcat
.classpath
gwt-out
synccss.sh
.externalToolBuilders
.project
.wtpmodules
www
testRepository
kune-OLD-jcr
KuneApp.launch
KuneApp NOSERVER.launch
old_src
org.ourproject.kune.app.Kune
org.ourproject.kune.iml
org.ourproject.kune.ipr
org.ourproject.kune.iws
nbproject
hibernate.reveng.xml
.gwt-tmp
target-eclipse
.checkstyle

.classpath-bien

pom.xml.*

.gwt

.jdee_sources

.jdee_classpath

prj.el

.factorypath

   + pmd-eclipse.log
.pmd
www-test
screenlog.0
bin
client
public
target
Main-compile
bin
.settings
.gwt-cache
repository
derby.log
star-yellow-grey.png
run.sh
tomcat
gwt-out
synccss.sh
.externalToolBuilders
.wtpmodules
www
testRepository
kune-OLD-jcr
KuneApp.launch
KuneApp NOSERVER.launch
old_src
org.ourproject.kune.app.Kune
org.ourproject.kune.iml
org.ourproject.kune.ipr
org.ourproject.kune.iws
nbproject
hibernate.reveng.xml
.gwt-tmp
target-eclipse
.checkstyle

.classpath-bien

pom.xml.*

.gwt

.jdee_sources

.jdee_classpath

prj.el

.factorypath


Added: trunk/.classpath
===================================================================
--- trunk/.classpath	                        (rev 0)
+++ trunk/.classpath	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,104 @@
+<classpath>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
+  <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/kune-0.0.7/WEB-INF/classes"/>
+  <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar" sourcepath="M2_REPO/javax/activation/activation/1.1/activation-1.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" sourcepath="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar" sourcepath="M2_REPO/javax/transaction/jta/1.1/jta-1.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar" sourcepath="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.4/servlet-api-2.4.jar" sourcepath="M2_REPO/javax/servlet/servlet-api/2.4/servlet-api-2.4-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar" sourcepath="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar" sourcepath="M2_REPO/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar" sourcepath="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/asm/asm/1.5.3/asm-1.5.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/beanshell/bsh/2.0b4/bsh-2.0b4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2.jar" sourcepath="M2_REPO/c3p0/c3p0/0.9.1.2/c3p0-0.9.1.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3.jar" sourcepath="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/cobogw/gwt/cobogw/1.3.1/cobogw-1.3.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar" sourcepath="M2_REPO/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-cli/commons-cli/1.2/commons-cli-1.2.jar" sourcepath="M2_REPO/commons-cli/commons-cli/1.2/commons-cli-1.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.3/commons-codec-1.3.jar" sourcepath="M2_REPO/commons-codec/commons-codec/1.3/commons-codec-1.3-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar" sourcepath="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-fileupload/commons-fileupload/1.1.1/commons-fileupload-1.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.2/commons-io-1.2.jar" sourcepath="M2_REPO/commons-io/commons-io/1.2/commons-io-1.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.5/commons-lang-2.5.jar" sourcepath="M2_REPO/commons-lang/commons-lang/2.5/commons-lang-2.5-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/net/sf/dozer/dozer/4.0/dozer-4.0.jar" sourcepath="M2_REPO/net/sf/dozer/dozer/4.0/dozer-4.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar" sourcepath="M2_REPO/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar" sourcepath="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/calclab/emite/emite/0.4.7/emite-0.4.7.jar"/>
+  <classpathentry kind="var" path="M2_REPO/net/sf/ezmorph/ezmorph/1.0.3/ezmorph-1.0.3.jar" sourcepath="M2_REPO/net/sf/ezmorph/ezmorph/1.0.3/ezmorph-1.0.3-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/freemarker/freemarker/2.3.8/freemarker-2.3.8.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/googlecode/gwt/inject/gin/r137/gin-r137.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/guava/guava/r07/guava-r07.jar" sourcepath="M2_REPO/com/google/guava/guava/r07/guava-r07-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/guava/guava-gwt/r07/guava-gwt-r07.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/code/guice/guice/2.1-SNAPSHOT-r1160/guice-2.1-SNAPSHOT-r1160.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/code/guice/guice-servlet/2.0.1/guice-servlet-2.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/ourproject/common/gwt-common/0.0.6/gwt-common-0.0.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/adamtacy/gwt-fx/r464/gwt-fx-r464.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/allen_sauer/gwt/log/gwt-log/gwt-log/3.0.1/gwt-log-3.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/gwt/gwt-servlet/2.1.1/gwt-servlet-2.1.1.jar" sourcepath="M2_REPO/com/google/gwt/gwt-servlet/2.1.1/gwt-servlet-2.1.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/gwt/gwt-user/2.1.1/gwt-user-2.1.1.jar" sourcepath="M2_REPO/com/google/gwt/gwt-user/2.1.1/gwt-user-2.1.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/waveprotocol/gwt-util/0.3.0/gwt-util-0.3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/allen_sauer/gwt/voices/gwt-voices/gwt-voices/1.6.0/gwt-voices-1.6.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/gwtext/gwtext/2.0.5/gwtext-2.0.5.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/gwtextux/gwtextux/0.4.0.924/gwtextux-0.4.0.924.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/gwtplatform/gwtp/0.5-SNAPSHOT/gwtp-0.5-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/extjs/gxt/2.2.1/gxt-2.2.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.20070617/h2-1.0.20070617.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga.jar" sourcepath="M2_REPO/org/hibernate/hibernate/3.2.1.ga/hibernate-3.2.1.ga-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar" sourcepath="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.3.0.ga/hibernate-commons-annotations-3.3.0.ga.jar" sourcepath="M2_REPO/org/hibernate/hibernate-commons-annotations/3.3.0.ga/hibernate-commons-annotations-3.3.0.ga-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.1.GA/hibernate-core-3.3.1.GA.jar" sourcepath="M2_REPO/org/hibernate/hibernate-core/3.3.1.GA/hibernate-core-3.3.1.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar" sourcepath="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-search/3.1.0.GA/hibernate-search-3.1.0.GA.jar" sourcepath="M2_REPO/org/hibernate/hibernate-search/3.1.0.GA/hibernate-search-3.1.0.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-tools/3.2.3.GA/hibernate-tools-3.2.3.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/4.0.2.GA/hibernate-validator-4.0.2.GA.jar" sourcepath="M2_REPO/org/hibernate/hibernate-validator/4.0.2.GA/hibernate-validator-4.0.2.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3.jar" sourcepath="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/jcl-over-slf4j/1.6.1/jcl-over-slf4j-1.6.1.jar" sourcepath="M2_REPO/org/slf4j/jcl-over-slf4j/1.6.1/jcl-over-slf4j-1.6.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/codehaus/jettison/jettison/1.0-RC2/jettison-1.0-RC2.jar" sourcepath="M2_REPO/org/codehaus/jettison/jettison/1.0-RC2/jettison-1.0-RC2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jmagick/jmagick/6.2.6-0/jmagick-6.2.6-0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jruby/jruby-complete/1.5.1/jruby-complete-1.5.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jruby/rack/jruby-rack/1.0.3/jruby-rack-1.0.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/net/sf/json-lib/json-lib/2.1/json-lib-2.1-jdk15.jar" sourcepath="M2_REPO/net/sf/json-lib/json-lib/2.1/json-lib-2.1-jdk15-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/jtidy/r8-20060801/jtidy-r8-20060801.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/4.8.1/junit-4.8.1.jar" sourcepath="M2_REPO/junit/junit/4.8.1/junit-4.8.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/liquibase/liquibase-core/1.7.0/liquibase-core-1.7.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/liquibase/liquibase-plugin/1.7.0.0/liquibase-plugin-1.7.0.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16.jar" sourcepath="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar" sourcepath="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.4.0/lucene-core-2.4.0.jar" sourcepath="M2_REPO/org/apache/lucene/lucene-core/2.4.0/lucene-core-2.4.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.jar" sourcepath="M2_REPO/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.jar" sourcepath="M2_REPO/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-model/2.0/maven-model-2.0.jar" sourcepath="M2_REPO/org/apache/maven/maven-model/2.0/maven-model-2.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.jar" sourcepath="M2_REPO/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-profile/2.0/maven-profile-2.0.jar" sourcepath="M2_REPO/org/apache/maven/maven-profile/2.0/maven-profile-2.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-project/2.0/maven-project-2.0.jar" sourcepath="M2_REPO/org/apache/maven/maven-project/2.0/maven-project-2.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.jar" sourcepath="M2_REPO/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mockito/mockito-all/1.6/mockito-all-1.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/mysql/mysql-connector-java/5.1.13/mysql-connector-java-5.1.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.jar" sourcepath="M2_REPO/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar" sourcepath="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar" sourcepath="M2_REPO/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jivesoftware/smack/smack/3.0.4/smack-3.0.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jivesoftware/smackx/smackx/3.0.4/smackx-3.0.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jivesoftware/smackx/debugger/smackx-debugger/3.0.4/smackx-debugger-3.0.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0.1/stax-api-1.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/calclab/suco/0.6.5/suco-0.6.5.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.jar" sourcepath="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/wideplay/warp-persist/2.0-SNAPSHOT/warp-persist-2.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/waveprotocol/waveinabox-server/0.3.5/waveinabox-server-0.3.5.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar" sourcepath="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar" sourcepath="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/xwiki/platform/xwiki-web-gwt-dom/2.3-rc-1/xwiki-web-gwt-dom-2.3-rc-1.jar" sourcepath="M2_REPO/org/xwiki/platform/xwiki-web-gwt-dom/2.3-rc-1/xwiki-web-gwt-dom-2.3-rc-1-sources.jar"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="src" path="target/generated-sources/apt" including="**/*.java"/>  <classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
+</classpath>
\ No newline at end of file

Added: trunk/.project
===================================================================
--- trunk/.project	                        (rev 0)
+++ trunk/.project	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,70 @@
+<projectDescription>
+  <name>kune</name>
+  <comment>kune free/open/libre collaboration platform. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+      <triggers>full,incremental,</triggers>
+      <arguments>
+        <dictionary>
+          <key>LaunchConfigHandle</key>
+          <value>&lt;project&gt;/.externalToolBuilders/org.eclipse.wst.common.project.facet.core.builder (2).launch</value>
+        </dictionary>
+      </arguments>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+      <triggers>full,incremental,</triggers>
+      <arguments>
+        <dictionary>
+          <key>LaunchConfigHandle</key>
+          <value>&lt;project&gt;/.externalToolBuilders/org.eclipse.wst.validation.validationbuilder (3).launch</value>
+        </dictionary>
+      </arguments>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+      <triggers>full,incremental,</triggers>
+      <arguments>
+        <dictionary>
+          <key>LaunchConfigHandle</key>
+          <value>&lt;project&gt;/.externalToolBuilders/com.google.gwt.eclipse.core.gwtProjectValidator (2).launch</value>
+        </dictionary>
+      </arguments>
+    </buildCommand>
+    <buildCommand>
+      <name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
+    </buildCommand>
+    <buildCommand>
+      <name>com.google.gwt.eclipse.core.gwtProjectValidator</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.wst.common.project.facet.core.builder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
+      <triggers>full,incremental,</triggers>
+      <arguments>
+        <dictionary>
+          <key>LaunchConfigHandle</key>
+          <value>&lt;project&gt;/.externalToolBuilders/org.eclipse.wst.validation.validationbuilder (4).launch</value>
+        </dictionary>
+      </arguments>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.wst.validation.validationbuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+    <nature>org.eclipse.ajdt.ui.ajnature</nature>
+    <nature>com.google.gwt.eclipse.core.gwtNature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file

Modified: trunk/TODO
===================================================================
--- trunk/TODO	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/TODO	2011-01-16 03:05:58 UTC (rev 1183)
@@ -11,6 +11,10 @@
    Use org-mode in emacs to easy manage this file
 
 * SHORT-TERM (URGENT)
+** src/org/waveprotocol/box/server/gxp/ (pages) >> ./gen/org/waveprotocol/box/server/gxp/WaveClientPage.java
+** Use Emulate Stack Java like src/org/waveprotocol/box/webclient/WebClientDev.gwt.xml
+** roo error
+[FelixDispatchQueue] Expected string-based content in @RooGwtMirroredFrom on cc.kune.client.managed.request.ContainerTranslationProxyObject of class [org.springframework.roo.classpath.details.annotations.ClassAttributeValue] must be an instance of class org.springframework.roo.classpath.details.annotations.StringAttributeValue
 ** spaces navigation
 *** index.html via jruby and loads the app in background...
 **** the sitebar (login/logout), the site logo, etc
@@ -20,12 +24,21 @@
    [ ] src/org/waveprotocol/box/server/ServerMain.java
    [ ] pom.xml dep references
 ** Update Dev Guide
+*** Increase open files limit
+/etc/security/limits.conf
+#I adjusted this so kune will work with more java files
+ *       soft    nofile          2048
+ *       hard    nofile          4096
+More info
+http://www.thinkplexx.com/learn/howto/maven2/debug/fixing-too-many-open-files-maven-problem-solution-for-teamcity-hudson-local-and-ssh-shell-environments
 *** GWT Hosted mode
 **** From eclipse
-***** with: --noserve -port 8080
+***** Better without server, with: --noserve -port 8080
 ***** Hosted mode with server (many memory)
 **** Install GWT extension/plugin http://gwt.google.com/missing-plugin/MissingPlugin.html
 *** Compilation ?
+    When compiling from eclipse, select target/kune-VERSION/ as War directory
+*** Run before gwt:compile and mvn package (copy webResources)
 *** Annotations generation http://code.google.com/p/gwt-platform/wiki/BoilerplateGeneration#Eclipse
 *** Add -startupUrl to your GWT Run launch with /ws/?locale=en&log_level=INFO (or similar)
 *** When you compile/run gwt web-app from eclipse, select target/kune-CURRENT-VERSION as War directory selection

Modified: trunk/TROUBLESHOOT
===================================================================
--- trunk/TROUBLESHOOT	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/TROUBLESHOOT	2011-01-16 03:05:58 UTC (rev 1183)
@@ -47,19 +47,19 @@
 
 We have problems testing all test together from eclipse and using real db (not the h2 memory db)
 
-=== Too many files open ===
+== Too many files open ==
 
 If running all the Kune test you get errors about "Too many files open" see:
 http://code.google.com/p/gwt-examples/wiki/gwtEclipseFaqs
 about how to fix it in your system.
 
-=== Mysql: Caused by: java.sql.SQLException: Access denied for user 'kune'@'localhost' (using password: YES) ===
+== Mysql: Caused by: java.sql.SQLException: Access denied for user 'kune'@'localhost' (using password: YES) ==
 
 Check that the password you have use in the database creation it's the same like the src/main/resources/META-INF/persistence.xml. If it's wrong maybe you have to remove the mysql user (DROP USER) and repeat the GRANT senteces of the INSTALL.
 
 If you have this problem with openfire it's not enough to change the password in openfire.xml because probably it's already stored in the ofProperty openfire table and you need to change the password there.
 
-=== Eclipse & GWT ===
+== Eclipse & GWT ==
 
 If you have some tests with error like "can not be found in source packages. Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly" and you have installed GWTDesigner, uncheck "client classpath": http://code.google.com/webtoolkit/tools/gwtdesigner/preferences/gwt/preferences_builder.html
 
@@ -67,7 +67,13 @@
  Fix: clear your browser cache
 
  Error: method should override method xxx (or similar)
- Fix: Project --> Properties --> Java Compiler ---> Unenable project specific settings
+ Fix: Project --> Properties --> Java Compiler ---> Uncheck enable project specific settings
 
  Error: Running Web application seems that are running an old GWT code
  Fix: Open Run > Run configurations and remove a recreate your launch configuration
+
+ Error: Problem with Eclipse plugin and UiBinder "Field xxx has no corresponding field in template file yyy.ui.xml"
+https://code.google.com/p/google-web-toolkit/issues/detail?id=4353
+
+== Outbound variable M2_REPO ==
+Set M2_REPO to eclipse in Preferences > Java > Build Path > Classpath Variable (normally to /home/youruser/.m2/repository/)
\ No newline at end of file

Modified: trunk/img/webtemplate/web_template-2011.svg
===================================================================
--- trunk/img/webtemplate/web_template-2011.svg	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/img/webtemplate/web_template-2011.svg	2011-01-16 03:05:58 UTC (rev 1183)
@@ -52,10 +52,10 @@
      borderopacity="1.0"
      inkscape:pageopacity="0"
      inkscape:pageshadow="2"
-     inkscape:zoom="1.5792381"
-     inkscape:cx="122.45896"
-     inkscape:cy="650.75279"
-     inkscape:current-layer="layer1"
+     inkscape:zoom="0.78961905"
+     inkscape:cx="453.50795"
+     inkscape:cy="448.12343"
+     inkscape:current-layer="layer3"
      inkscape:document-units="px"
      showgrid="false"
      inkscape:window-width="1280"
@@ -124,7 +124,8 @@
      id="layer1"
      inkscape:label="normal"
      inkscape:groupmode="layer"
-     style="display:inline">
+     style="display:inline"
+     sodipodi:insensitive="true">
     <rect
        style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
        id="rect5037"
@@ -2632,8 +2633,7 @@
      inkscape:groupmode="layer"
      id="layer3"
      inkscape:label="overlay"
-     sodipodi:insensitive="true"
-     style="display:none">
+     style="display:inline">
     <rect
        style="opacity:0.68399999;color:#000000;fill:#f7ebe3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
        id="rect3865"
@@ -2808,11 +2808,10 @@
        sodipodi:nodetypes="cccc" />
   </g>
   <g
-     style="display:none"
+     style="display:inline"
      inkscape:label="confirmation"
      id="g8450"
-     inkscape:groupmode="layer"
-     sodipodi:insensitive="true">
+     inkscape:groupmode="layer">
     <rect
        ry="10"
        rx="10"
@@ -2821,37 +2820,39 @@
        height="205.09827"
        width="476.85486"
        id="rect8452"
-       style="color:#000000;fill:#552200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+       style="color:#000000;fill:#552200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.85" />
     <rect
-       style="color:#000000;fill:#e7caba;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       style="opacity:0.85;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
        id="rect8454"
-       width="457.59314"
-       height="116.79102"
-       x="287.29156"
-       y="148" />
+       width="444.9288"
+       height="120.59032"
+       x="293.62372"
+       y="149.06573"
+       rx="3"
+       ry="3" />
     <rect
        y="112.08939"
        x="277.29156"
-       height="19.354607"
+       height="7.9567051"
        width="476.85486"
        id="rect8456"
        style="color:#000000;fill:#552200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
     <text
        xml:space="preserve"
-       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#552200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
-       x="434.16895"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#241c1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
+       x="317.16895"
        y="191.81694"
        id="text8468"
        sodipodi:linespacing="125%"><tspan
          sodipodi:role="line"
          id="tspan8470"
-         x="434.16895"
+         x="317.16895"
          y="191.81694">Confirm please</tspan></text>
     <rect
        ry="7"
        rx="6.9999995"
        y="280"
-       x="299"
+       x="509"
        height="26"
        width="103.29102"
        id="rect8472"
@@ -2860,11 +2861,11 @@
        sodipodi:linespacing="125%"
        id="text8474"
        y="298.10547"
-       x="312.03516"
+       x="522.03516"
        style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
        xml:space="preserve"><tspan
          y="298.10547"
-         x="312.03516"
+         x="522.03516"
          id="tspan8476"
          sodipodi:role="line">Continuar</tspan></text>
     <rect
@@ -2872,20 +2873,20 @@
        id="rect8488"
        width="103.29102"
        height="26"
-       x="619"
+       x="636"
        y="280"
        rx="6.9999995"
        ry="7" />
     <text
        xml:space="preserve"
        style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
-       x="636.03516"
+       x="653.03516"
        y="298.10547"
        id="text8490"
        sodipodi:linespacing="125%"><tspan
          sodipodi:role="line"
          id="tspan8492"
-         x="636.03516"
+         x="653.03516"
          y="298.10547">Cancelar</tspan></text>
     <path
        inkscape:connector-curvature="0"
@@ -2896,12 +2897,12 @@
        sodipodi:linespacing="125%"
        id="text8498"
        y="229.14001"
-       x="434.08438"
+       x="317.08438"
        style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#552200;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
        xml:space="preserve"><tspan
          sodipodi:role="line"
          id="tspan8502"
-         x="434.08438"
+         x="317.08438"
          y="229.14001">Are you sure?</tspan></text>
     <path
        sodipodi:nodetypes="cccc"
@@ -2916,7 +2917,8 @@
      inkscape:groupmode="layer"
      id="layer5"
      inkscape:label="notify"
-     style="display:none">
+     style="display:none"
+     sodipodi:insensitive="true">
     <g
        style="display:inline"
        id="g8344"
@@ -3014,7 +3016,8 @@
      inkscape:groupmode="layer"
      id="layer2"
      inkscape:label="browser"
-     sodipodi:insensitive="true">
+     sodipodi:insensitive="true"
+     style="display:inline">
     <g
        id="g5439">
       <path

Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/pom.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -224,7 +224,7 @@
     <dependency>
       <groupId>org.ourproject.common</groupId>
       <artifactId>gwt-common</artifactId>
-      <version>0.0.4</version>
+      <version>0.0.6</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
@@ -371,7 +371,8 @@
     <dependency>
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
-      <version>2.0</version>
+      <!-- wave use 2.5 -->
+      <version>2.5</version>
     </dependency>
     <dependency>
       <groupId>com.wideplay</groupId>
@@ -500,13 +501,18 @@
       <version>1.0.3</version>
       <!-- <version>0.9.4</version> -->
     </dependency>
-    <!-- wave -->
+	<!-- wave -->
     <dependency>
       <groupId>org.waveprotocol</groupId>
       <artifactId>waveinabox-server</artifactId>
-      <version>0.0.3.2</version>
+      <version>0.3.5</version>
     </dependency>
     <dependency>
+      <groupId>org.waveprotocol</groupId>
+      <artifactId>gwt-util</artifactId>
+      <version>0.3.0</version>
+    </dependency> 
+    <dependency>
       <groupId>commons-cli</groupId>
       <artifactId>commons-cli</artifactId>
       <version>1.2</version>
@@ -580,6 +586,11 @@
       <artifactId>guava</artifactId>
       <version>r07</version>
     </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava-gwt</artifactId>
+      <version>r07</version>
+    </dependency>
   </dependencies>
   <distributionManagement>
     <repository>
@@ -679,7 +690,7 @@
       <plugin>
         <!-- =roo sin spring executions -->
         <artifactId>maven-eclipse-plugin</artifactId>
-        <version>2.7</version>
+        <version>2.8</version>
         <configuration>
           <downloadSources>true</downloadSources>
           <downloadJavadocs>false</downloadJavadocs>
@@ -689,8 +700,11 @@
               <name>com.google.gwt.eclipse.core.gwtProjectValidator </name>
             </buildCommand>
           </additionalBuildcommands>
+          <workspaceCodeStylesURL>http://kune.ourproject.org/kune.formatter.eclipse.preferences.xml</workspaceCodeStylesURL>      
           <additionalProjectnatures>
+            <!--   
             <projectnature>org.eclipse.ajdt.ui.ajnature</projectnature>
+            -->
             <projectnature>com.google.gwt.eclipse.core.gwtNature </projectnature>
           </additionalProjectnatures>
         </configuration>

Modified: trunk/src/main/java/cc/kune/Kune.gwt.xml
===================================================================
--- trunk/src/main/java/cc/kune/Kune.gwt.xml	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/Kune.gwt.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -4,6 +4,7 @@
   <inherits name="com.google.gwt.user.User" />
   <inherits name='com.google.gwt.logging.Logging' />
   <inherits name="cc.kune.core.Core" />
+<!--  <inherits name="cc.kune.wave.KuneWave" />-->
   <inherits name="com.calclab.suco.Suco" />
   <inherits name="org.adamtacy.GWTEffects"></inherits>
   <source path='client'

Modified: trunk/src/main/java/cc/kune/common/client/ui/PopupPanelBottomCentered.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/PopupPanelBottomCentered.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/common/client/ui/PopupPanelBottomCentered.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -25,7 +25,7 @@
 
     private void init() {
         setStyleName("k-popup-bottom-centered");
-        addStyleName("k-opacity80");
+        addStyleName("k-opacity90");
         addStyleName("k-box-10shadow");
         addStyleName("k-top-10corners");
         Window.addResizeHandler(new ResizeHandler() {

Modified: trunk/src/main/java/cc/kune/common/client/ui/PopupPanelTopCentered.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/PopupPanelTopCentered.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/common/client/ui/PopupPanelTopCentered.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -24,7 +24,7 @@
 
     private void init() {
         setStyleName("k-popup-top-centered");
-        addStyleName("k-opacity80");
+        addStyleName("k-opacity90");
         addStyleName("k-box-10shadow");
         addStyleName("k-bottom-10corners");
         Window.addResizeHandler(new ResizeHandler() {

Modified: trunk/src/main/java/cc/kune/common/public/kune-common.css
===================================================================
--- trunk/src/main/java/cc/kune/common/public/kune-common.css	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/common/public/kune-common.css	2011-01-16 03:05:58 UTC (rev 1183)
@@ -2,7 +2,7 @@
 	
 }
 
-.k-popup-bottom-centered {
+.k-popup-bottom-centered { /*	z-index:100000; */
 	
 }
 
@@ -20,12 +20,27 @@
 }
 
 .k-opacity80 {
-	kfilter: alpha(opacity = 80);
+	kfilter: alpha(opacity =       80);
 	-moz-opacity: 0.80;
 	-khtml-opacity: 0.80;
 	opacity: 0.80;
 }
 
+.k-opacity90 {
+	kfilter: alpha(opacity =       90);
+	-moz-opacity: 0.90;
+	-khtml-opacity: 0.90;
+	opacity: 0.90;
+}
+
+.gwt-PopupPanelGlass {
+	background-color: #f7ebe3 !important;
+	kfilter: alpha(opacity =       68) !important;
+	-moz-opacity: 0.68 !important;
+	-khtml-opacity: 0.68 !important;
+	opacity: 0.68 !important;
+}
+
 .k-box-5shadow {
 	-webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5);
 	-moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5);
@@ -100,6 +115,8 @@
 
 .k-dialog-outerp {
 	background-color: #552200;
+	border-top: 4px solid #000;
+	padding: 22px 4px 3px 4px;
 }
 
 .k-dialog-title {
@@ -109,10 +126,15 @@
 }
 
 .k-dialog-innerp {
-	background-color: #e7caba;
+	background-color: #FFFFFF;
 	border: solid 1px #F2F2F2;
 }
 
+.k-dialog-btn {
+	text-shadow: 1px 1px 1px #FFFFFF;
+	font-weight: bold;
+}
+
 .k-dialog-firstBtn {
 	float: left;
 }
@@ -121,10 +143,14 @@
 	float: right;
 }
 
+.k-z100000 {
+	z-index: 100000;
+}
+
 .k-z10000 {
-  z-index: 10000;
+	z-index: 10000;
 }
 
 .k-z1000 {
-  z-index: 1000;
+	z-index: 1000;
 }
\ No newline at end of file

Modified: trunk/src/main/java/cc/kune/core/Core.gwt.xml
===================================================================
--- trunk/src/main/java/cc/kune/core/Core.gwt.xml	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/Core.gwt.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,31 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.1.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.1.0/distro-source/core/src/gwt-module.dtd">
 <module rename-to="ws">
-  <!-- source / public / etc ==================================== -->
-  <!-- excluding test sources for this module workaround for open issue 4454 
-    see http://code.google.com/p/google-web-toolkit/issues/detail?id=4454 -->
-  <source path='client'
-    excludes="**/*Test.java,**/*Tests.java,**/*MockProvider.java" />
-  <source path="shared" />
-  <public path="public" />
-  <script src="js/jquery-1.3.2.min.js" />  
-  <script src="js/jquery.qtip-1.0.0-rc3.min.js" />
-  <!-- Dependencies ============================================= -->
-  <inherits name="com.google.gwt.user.User" />
-  <!-- <inherits name='com.mvp4g.Mvp4gModule' /> -->
-  <inherits name="cc.kune.wspace.Wspace" />
-  <inherits name="cc.kune.msgs.KuneMsgs" />
-  <inherits name="cc.kune.common.KuneCommon" />
-  <inherits name="org.ourproject.common.Common" />
-  <inherits name="com.extjs.gxt.ui.GXT" />
-  <inherits name="com.calclab.suco.Suco" />
-  <!-- gwt-platform ============================================= -->
-  <inherits name='com.gwtplatform.mvp.Mvp' />
-  <define-configuration-property name="gin.ginjector"
-    is-multi-valued="false" />
-  <set-configuration-property name="gin.ginjector"
-    value="cc.kune.core.client.CoreGinjector" />
-  <!-- Styles =================================================== -->
-  <stylesheet src="ws.css" />
-  <stylesheet src="fontface/stylesheet.css" />
+	<!-- source / public / etc ==================================== -->
+	<!-- excluding test sources for this module workaround for open issue 4454 
+		see http://code.google.com/p/google-web-toolkit/issues/detail?id=4454 -->
+	<source path='client'
+		excludes="**/*Test.java,**/*Tests.java,**/*MockProvider.java" />
+	<source path="shared" />
+	<public path="public" />
+	<script src="js/jquery-1.3.2.min.js" />
+	<script src="js/jquery.qtip-1.0.0-rc3.min.js" />
+	<!-- Dependencies ============================================= -->
+	<inherits name="com.google.gwt.user.User" />
+	<inherits name="org.ourproject.common.Common" />
+	<!-- <inherits name='com.mvp4g.Mvp4gModule' /> -->
+	<inherits name="cc.kune.wspace.Wspace" />
+	<inherits name="cc.kune.msgs.KuneMsgs" />
+	<inherits name="cc.kune.common.KuneCommon" />
+	<inherits name="com.extjs.gxt.ui.GXT" />
+	<inherits name="com.calclab.suco.Suco" />
+	<!-- gwt-platform ============================================= -->
+	<inherits name='com.gwtplatform.mvp.Mvp' />
+	<define-configuration-property name="gin.ginjector"
+		is-multi-valued="false" />
+	<set-configuration-property name="gin.ginjector"
+		value="cc.kune.core.client.CoreGinjector" />
+	<!-- Styles =================================================== -->
+	<stylesheet src="ws.css" />
+	<stylesheet src="fontface/stylesheet.css" />
+	<!-- <inherits name="com.google.gwt.user.theme.standard.Standard" /> -->
 </module>
\ No newline at end of file

Modified: trunk/src/main/java/cc/kune/core/client/CoreGinModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/CoreGinModule.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/CoreGinModule.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,5 +1,11 @@
 package cc.kune.core.client;
 
+import org.ourproject.common.client.actions.gxtui.GxtGuiProvider;
+import org.ourproject.common.client.actions.ui.bind.DefaultGuiProvider;
+import org.ourproject.common.client.actions.ui.bind.GuiProvider;
+import org.ourproject.common.client.shortcuts.DefaultGlobalShortcutRegister;
+import org.ourproject.common.client.shortcuts.GlobalShortcutRegister;
+
 import cc.kune.core.client.cookies.CookiesManager;
 import cc.kune.core.client.cookies.CookiesManagerViewImpl;
 import cc.kune.core.client.errors.ErrorHandler;
@@ -12,6 +18,7 @@
 import cc.kune.core.client.notify.msgs.UserNotifierViewImpl;
 import cc.kune.core.client.notify.spiner.SpinerPresenter;
 import cc.kune.core.client.notify.spiner.SpinerViewImpl;
+import cc.kune.core.client.sitebar.SiteBarActions;
 import cc.kune.core.client.sitebar.logo.SiteLogoPresenter;
 import cc.kune.core.client.sitebar.logo.SiteLogoViewImpl;
 import cc.kune.core.client.sitebar.spaces.SpaceSelectorPresenter;
@@ -61,6 +68,11 @@
         bind(QTipsHelper.class).asEagerSingleton();
         bind(ProxyFailureHandler.class).to(DefaultProxyFailureHandler.class).in(Singleton.class);
 
+        bind(GuiProvider.class).to(DefaultGuiProvider.class).in(Singleton.class);
+        bind(GxtGuiProvider.class).in(Singleton.class);
+        bind(GlobalShortcutRegister.class).to(DefaultGlobalShortcutRegister.class).in(Singleton.class);
+        bind(SiteBarActions.class).in(Singleton.class);
+
         // Presenters
         bindPresenter(CorePresenter.class, CorePresenter.CoreView.class, CoreViewImpl.class,
                 CorePresenter.CoreProxy.class);

Modified: trunk/src/main/java/cc/kune/core/client/CoreGinjector.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/CoreGinjector.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/CoreGinjector.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,9 +1,14 @@
 package cc.kune.core.client;
 
+import org.ourproject.common.client.actions.gxtui.GxtGuiProvider;
+import org.ourproject.common.client.actions.ui.bind.GuiProvider;
+import org.ourproject.common.client.shortcuts.GlobalShortcutRegister;
+
 import cc.kune.core.client.cookies.CookiesManager;
 import cc.kune.core.client.errors.ErrorHandler;
 import cc.kune.core.client.notify.msgs.UserNotifierPresenter;
 import cc.kune.core.client.notify.spiner.SpinerPresenter;
+import cc.kune.core.client.sitebar.SiteBarActions;
 import cc.kune.core.client.sitebar.logo.SiteLogoPresenter;
 import cc.kune.core.client.sitebar.spaces.SpaceSelectorPresenter;
 import cc.kune.core.client.state.StateManager;
@@ -24,28 +29,36 @@
      * You have to add here all the GWTPresenters (as Provider or AsyncProvider)
      * see the GWTPlatform doc
      */
-    ErrorHandler getErrorHandler();
 
+    AsyncProvider<CookiesManager> getCookiesManager();
+
     AsyncProvider<CorePresenter> getCorePresenter();
 
-    AsyncProvider<CookiesManager> getCookiesManager();
+    ErrorHandler getErrorHandler();
 
     EventBus getEventBus();
 
+    GlobalShortcutRegister getGlobalShortcutRegister();
+
+    GuiProvider getGuiProvider();
+
+    GxtGuiProvider getGxtGuiProvider();
+
+    I18nTranslationService getI18n();
+
     PlaceManager getPlaceManager();
 
     ProxyFailureHandler getProxyFailureHandler();
 
-    AsyncProvider<SpinerPresenter> getSpinerPresenter();
+    SiteBarActions getSiteBarActions();
 
     AsyncProvider<SiteLogoPresenter> getSiteLogoPresenter();
 
     AsyncProvider<SpaceSelectorPresenter> getSpacesTabPresenter();
 
-    AsyncProvider<UserNotifierPresenter> getUserNotifierPresenter();
+    AsyncProvider<SpinerPresenter> getSpinerPresenter();
 
-    I18nTranslationService getI18n();
-
     StateManager getStateManager();
 
+    AsyncProvider<UserNotifierPresenter> getUserNotifierPresenter();
 }
\ No newline at end of file

Modified: trunk/src/main/java/cc/kune/core/client/KuneEntryPoint.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/KuneEntryPoint.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/KuneEntryPoint.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -46,8 +46,10 @@
         AsyncCallbackSimple.init(ginjector.getErrorHandler());
         ginjector.getPlaceManager().revealCurrentPlace();
         ginjector.getI18n();
+        ginjector.getGxtGuiProvider();
         ginjector.getUserNotifierPresenter();
         ginjector.getSpinerPresenter();
         ginjector.getStateManager();
+        ginjector.getSiteBarActions();
     }
 }

Modified: trunk/src/main/java/cc/kune/core/client/init/AppStarterDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/init/AppStarterDefault.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/init/AppStarterDefault.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -39,10 +39,10 @@
 import com.google.inject.Inject;
 
 public class AppStarterDefault implements AppStarter {
+    private final EventBus eventBus;
+    private final PrefetchUtilities prefetchUtilities;
     private final Session session;
     private final SiteServiceAsync siteService;
-    private final EventBus eventBus;
-    private final PrefetchUtilities prefetchUtilities;
 
     @Inject
     public AppStarterDefault(final Session session, final SiteServiceAsync siteService, final EventBus eventBus,
@@ -59,30 +59,8 @@
         });
     }
 
-    @Override
-    public void start() {
-        prefetchUtilities.preFetchImpImages();
-        getInitData();
-        final Timer prefetchTimer = new Timer() {
-            @Override
-            public void run() {
-                prefetchUtilities.doTasksDeferred();
-            }
-        };
-        prefetchTimer.schedule(20000);
-    }
-
     private void getInitData() {
         siteService.getInitData(session.getUserHash(), new AsyncCallback<InitDataDTO>() {
-            @Override
-            public void onFailure(final Throwable error) {
-                eventBus.fireEvent(new ProgressHideEvent());
-                eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error,
-                        "Error fetching initial data from Kune server"));
-                Log.debug(error.getMessage());
-                hideInitialPanels();
-            }
-
             private void hideInitialPanels() {
                 final RootPanel curtain = RootPanel.get("kuneinitialcurtain");
                 // Fade anim = new Fade(curtain.getElement());
@@ -95,10 +73,20 @@
                 // }
                 // });
                 // anim.play();
-                eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.info, "Starting"));
+                // eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.info,
+                // "Starting"));
             }
 
             @Override
+            public void onFailure(final Throwable error) {
+                eventBus.fireEvent(new ProgressHideEvent());
+                eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error,
+                        "Error fetching initial data from Kune server"));
+                Log.debug(error.getMessage());
+                hideInitialPanels();
+            }
+
+            @Override
             public void onSuccess(final InitDataDTO initData) {
                 session.setInitData(initData);
                 session.setCurrentUserInfo(initData.getUserInfo());
@@ -113,4 +101,17 @@
             }
         });
     }
+
+    @Override
+    public void start() {
+        prefetchUtilities.preFetchImpImages();
+        getInitData();
+        final Timer prefetchTimer = new Timer() {
+            @Override
+            public void run() {
+                prefetchUtilities.doTasksDeferred();
+            }
+        };
+        prefetchTimer.schedule(20000);
+    }
 }

Modified: trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -22,7 +22,6 @@
         msgs.init(panel);
         panel.setWidth("370px");
         popup = new PopupPanelBottomCentered(false, false);
-        popup.addStyleName("k-z10000");
         popup.add(panel);
         popup.show();
     }

Modified: trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,7 +1,6 @@
 package cc.kune.core.client.notify.spiner;
 
 import cc.kune.core.client.notify.spiner.SpinerPresenter.SpinerView;
-import cc.kune.wspace.client.WsArmor;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.shared.EventBus;
@@ -18,10 +17,24 @@
 
 public class SpinerViewImpl extends PopupViewWithUiHandlers<UiHandlers> implements SpinerView {
 
+    interface SpinerViewImplUiBinder extends UiBinder<Widget, SpinerViewImpl> {
+    }
+
+    private static SpinerViewImplUiBinder uiBinder = GWT.create(SpinerViewImplUiBinder.class);
+
+    @UiField
+    Image img;
+
+    @UiField
+    InlineLabel label;
+
+    @UiField
+    HorizontalPanel panel;
     private final PopupPanel popup;
+    Widget widget;
 
     @Inject
-    protected SpinerViewImpl(EventBus eventBus, WsArmor armor) {
+    public SpinerViewImpl(EventBus eventBus) {
         super(eventBus);
         widget = uiBinder.createAndBindUi(this);
         popup = new PopupPanel(false, false);
@@ -31,19 +44,6 @@
         popup.show();
     }
 
-    private static SpinerViewImplUiBinder uiBinder = GWT.create(SpinerViewImplUiBinder.class);
-
-    interface SpinerViewImplUiBinder extends UiBinder<Widget, SpinerViewImpl> {
-    }
-
-    @UiField
-    HorizontalPanel panel;
-    @UiField
-    InlineLabel label;
-    @UiField
-    Image img;
-    Widget widget;
-
     @Override
     public Widget asWidget() {
         return popup;
@@ -51,7 +51,7 @@
 
     @Override
     public void fade() {
-        // popup.hide();
+        popup.hide();
     }
 
     @Override

Modified: trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.ui.xml	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.ui.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -2,10 +2,12 @@
 <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
 	xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:p1="urn:import:com.extjs.gxt.ui.client.widget">
 	<ui:with field='res' type='cc.kune.core.client.resources.CoreResources' />
-	<g:FlowPanel>
-		<g:HorizontalPanel ui:field="panel" styleName="kLoadingPanel" verticalAlignment="ALIGN_MIDDLE" horizontalAlignment="ALIGN_CENTER" borderWidth="0">
-			<g:Image ui:field="img" styleName="{res.css.loadingSpiner}" />
-			<g:InlineLabel ui:field="label" styleName="kLoadingLabel" horizontalAlignment="ALIGN_CENTER" />
-		</g:HorizontalPanel>
-	</g:FlowPanel>
+	<g:HorizontalPanel ui:field="panel" styleName="kLoadingPanel"
+		verticalAlignment="ALIGN_MIDDLE" horizontalAlignment="ALIGN_CENTER"
+		borderWidth="0">
+		<g:Image ui:field="img" styleName="{res.css.loadingSpiner}"
+			resource="{res.loadingSpiner}" width="16px" height="16px" />
+		<g:InlineLabel ui:field="label" styleName="kLoadingLabel"
+			horizontalAlignment="ALIGN_CENTER" />
+	</g:HorizontalPanel>
 </ui:UiBinder> 
\ No newline at end of file

Modified: trunk/src/main/java/cc/kune/core/client/resources/core.css
===================================================================
--- trunk/src/main/java/cc/kune/core/client/resources/core.css	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/resources/core.css	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,6 +1,9 @@
 @CHARSET "UTF-8";
 
- at sprite .loadingSpiner {
+/* @sprite */ 
+.loadingSpiner {
+	/* Unused 
 	gwt-image: 'loadingSpiner';
+	*/
 	margin-top: 2px;
 }

Added: trunk/src/main/java/cc/kune/core/client/sitebar/SiteBarActions.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sitebar/SiteBarActions.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sitebar/SiteBarActions.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,37 @@
+package cc.kune.core.client.sitebar;
+
+import org.ourproject.common.client.actions.AbstractExtendedAction;
+import org.ourproject.common.client.actions.Action;
+import org.ourproject.common.client.actions.ActionEvent;
+import org.ourproject.common.client.actions.ui.IsActionExtensible;
+import org.ourproject.common.client.actions.ui.descrip.ButtonDescriptor;
+import org.ourproject.common.client.actions.ui.descrip.IconLabelDescriptor;
+
+import cc.kune.wspace.client.WsArmor;
+
+import com.google.gwt.user.client.Window;
+import com.google.inject.Inject;
+
+public class SiteBarActions {
+
+    @Inject
+    public SiteBarActions(WsArmor armor) {
+        IconLabelDescriptor icon = new IconLabelDescriptor("test");
+        AbstractExtendedAction action = new AbstractExtendedAction() {
+
+            @Override
+            public void actionPerformed(ActionEvent event) {
+                Window.alert("kk");
+            }
+        };
+        action.putValue(Action.SHORT_DESCRIPTION, "kk");
+        action.putValue(Action.LONG_DESCRIPTION, "tooltip");
+        ButtonDescriptor signIn = new ButtonDescriptor(action);
+        IsActionExtensible toolbar = armor.getSiteActionsToolbar();
+        // ToolbarSeparatorDescriptor fill = new
+        // ToolbarSeparatorDescriptor(Type.fill, (ToolbarDescriptor) toolbar);
+        // toolbar.addAction(fill);
+        toolbar.addAction(icon);
+        toolbar.addAction(signIn);
+    }
+}


Property changes on: trunk/src/main/java/cc/kune/core/client/sitebar/SiteBarActions.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/src/main/java/cc/kune/core/client/sitebar/logo/SiteLogoViewImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sitebar/logo/SiteLogoViewImpl.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/sitebar/logo/SiteLogoViewImpl.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -23,7 +23,7 @@
 
     @Inject
     public SiteLogoViewImpl(WsArmor armor, PlaceManager placeManager) {
-        armor.getSitebar().add(uiBinder.createAndBindUi(this));
+        armor.getSitebar().insert(uiBinder.createAndBindUi(this),0);
     }
 
     @UiField

Modified: trunk/src/main/java/cc/kune/core/client/sitebar/spaces/SpaceSelectorViewImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sitebar/spaces/SpaceSelectorViewImpl.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/sitebar/spaces/SpaceSelectorViewImpl.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -22,7 +22,7 @@
     @UiField
     ToggleButton userButton;
     @UiField
-    ToggleButton groupButton;
+    ToggleButton groupButton ;
     @UiField
     ToggleButton publicButton;
     @UiField
@@ -33,7 +33,7 @@
 
     @Inject
     public SpaceSelectorViewImpl(WsArmor armor, I18nTranslationService i18n) {
-        armor.getSitebar().insert(uiBinder.createAndBindUi(this), 1);
+        armor.getSitebar().insert(uiBinder.createAndBindUi(this), 0);
         homeButton.setTitle(i18n.t("Home page of this site"));
         userButton.setTitle(i18n.t("User space: Waves (aka docs) in which you participate"));
         groupButton.setTitle(i18n.t("Group & personal space: Where you can create and publish contents"));

Copied: trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.java (from rev 1179, trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,79 @@
+package cc.kune.core.client.ui.dialogs;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HasDirectionalText;
+import com.google.gwt.user.client.ui.HasText;
+import com.google.gwt.user.client.ui.InlineLabel;
+import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+public class BasicDialog extends Composite implements BasicDialogView {
+
+    private static BasicDialogUiBinder uiBinder = GWT.create(BasicDialogUiBinder.class);
+    @UiField
+    InlineLabel title;
+    @UiField
+    Button firstBtn;
+    @UiField
+    Button secondBtn;
+    @UiField
+    VerticalPanel vp;
+
+    interface BasicDialogUiBinder extends UiBinder<Widget, BasicDialog> {
+    }
+
+    public BasicDialog() {
+        initWidget(uiBinder.createAndBindUi(this));
+        title.ensureDebugId("k-ucvi-title");
+        firstBtn.ensureDebugId("k-ucvi-accept-btn");
+        secondBtn.ensureDebugId("k-ucvi-cancel-btn");
+    }
+
+    public void setTitleId(String id) {
+        title.ensureDebugId(id);
+    }
+
+    public void setFirstBtnId(String id) {
+        firstBtn.ensureDebugId(id);
+    }
+
+    public void setSecondBtnId(String id) {
+        secondBtn.ensureDebugId(id);
+    }
+
+    @Override
+    public HasDirectionalText getTitleText() {
+        return title;
+    }
+
+    @Override
+    public HasClickHandlers getSecondBtn() {
+        return secondBtn;
+    }
+
+    @Override
+    public HasClickHandlers getFirstBtn() {
+        return firstBtn;
+    }
+
+    @Override
+    public ForIsWidget getInnerPanel() {
+        return vp;
+    }
+
+    @Override
+    public HasText getFirstBtnText() {
+        return firstBtn;
+    }
+
+    @Override
+    public HasText getSecondBtnText() {
+        return secondBtn;
+    }
+}


Property changes on: trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Copied: trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.ui.xml (from rev 1180, trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.ui.xml)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.ui.xml	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.ui.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,19 @@
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+	xmlns:g="urn:import:com.google.gwt.user.client.ui">
+	<g:VerticalPanel spacing="12"
+		addStyleNames="k-dialog-outerp, k-bottom-10corners, k-opacity80 ">
+		<g:SimplePanel>
+			<g:VerticalPanel ui:field="vp"
+				addStyleNames="k-dialog-innerp, k-3corners, k-opacity90" spacing="10">
+				<g:InlineLabel ui:field="title" addStyleNames="k-dialog-title" />
+			</g:VerticalPanel>
+		</g:SimplePanel>
+		<g:FlowPanel>
+			<g:Button ui:field="firstBtn"
+				addStyleNames="k-dialog-btn, k-dialog-firstBtn, k-5corners " />
+			<g:Button ui:field="secondBtn"
+				addStyleNames="k-dialog-btn,k-dialog-secondBtn, k-5corners" />
+		</g:FlowPanel>
+	</g:VerticalPanel>
+</ui:UiBinder>
\ No newline at end of file


Property changes on: trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialog.ui.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Copied: trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialogView.java (from rev 1179, trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsView.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialogView.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialogView.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,22 @@
+package cc.kune.core.client.ui.dialogs;
+
+import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.user.client.ui.HasDirectionalText;
+import com.google.gwt.user.client.ui.HasText;
+import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget;
+
+public interface BasicDialogView {
+
+    HasText getFirstBtnText();
+
+    HasText getSecondBtnText();
+
+    HasClickHandlers getSecondBtn();
+
+    HasClickHandlers getFirstBtn();
+
+    HasDirectionalText getTitleText();
+
+    ForIsWidget getInnerPanel();
+
+}
\ No newline at end of file


Property changes on: trunk/src/main/java/cc/kune/core/client/ui/dialogs/BasicDialogView.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Deleted: trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,79 +0,0 @@
-package cc.kune.core.client.ui.dialogs;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.HasClickHandlers;
-import com.google.gwt.uibinder.client.UiBinder;
-import com.google.gwt.uibinder.client.UiField;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.HasDirectionalText;
-import com.google.gwt.user.client.ui.HasText;
-import com.google.gwt.user.client.ui.HasWidgets.ForIsWidget;
-import com.google.gwt.user.client.ui.InlineLabel;
-import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
-
-public class TwoButtonsDialog extends Composite implements TwoButtonsView {
-
-    private static TwoButtonsDialogUiBinder uiBinder = GWT.create(TwoButtonsDialogUiBinder.class);
-    @UiField
-    InlineLabel title;
-    @UiField
-    Button firstBtn;
-    @UiField
-    Button secondBtn;
-    @UiField
-    VerticalPanel vp;
-
-    interface TwoButtonsDialogUiBinder extends UiBinder<Widget, TwoButtonsDialog> {
-    }
-
-    public TwoButtonsDialog() {
-        initWidget(uiBinder.createAndBindUi(this));
-        title.ensureDebugId("k-ucvi-title");
-        firstBtn.ensureDebugId("k-ucvi-accept-btn");
-        secondBtn.ensureDebugId("k-ucvi-cancel-btn");
-    }
-
-    public void setTitleId(String id) {
-        title.ensureDebugId(id);
-    }
-
-    public void setFirstBtnId(String id) {
-        firstBtn.ensureDebugId(id);
-    }
-
-    public void setSecondBtnId(String id) {
-        secondBtn.ensureDebugId(id);
-    }
-
-    @Override
-    public HasDirectionalText getTitleText() {
-        return title;
-    }
-
-    @Override
-    public HasClickHandlers getSecondBtn() {
-        return secondBtn;
-    }
-
-    @Override
-    public HasClickHandlers getFirstBtn() {
-        return firstBtn;
-    }
-
-    @Override
-    public ForIsWidget getInnerPanel() {
-        return vp;
-    }
-
-    @Override
-    public HasText getFirstBtnText() {
-        return firstBtn;
-    }
-
-    @Override
-    public HasText getSecondBtnText() {
-        return secondBtn;
-    }
-}

Deleted: trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.ui.xml	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsDialog.ui.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,17 +0,0 @@
-<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
-<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
-  xmlns:g="urn:import:com.google.gwt.user.client.ui">
-  <g:VerticalPanel spacing="12"
-    addStyleNames="k-dialog-outerp, k-bottom-10corners">
-    <g:SimplePanel>
-      <g:VerticalPanel ui:field="vp"
-        addStyleNames="k-dialog-innerp, k-3corners" spacing="10">
-        <g:InlineLabel ui:field="title" addStyleNames="k-dialog-title" />
-      </g:VerticalPanel>
-    </g:SimplePanel>
-    <g:FlowPanel>
-      <g:Button ui:field="firstBtn" addStyleNames="k-dialog-firstBtn" />
-      <g:Button ui:field="secondBtn" addStyleNames="k-dialog-secondBtn" />
-    </g:FlowPanel>
-  </g:VerticalPanel>
-</ui:UiBinder>
\ No newline at end of file

Deleted: trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsView.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsView.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/client/ui/dialogs/TwoButtonsView.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,22 +0,0 @@
-package cc.kune.core.client.ui.dialogs;
-
-import com.google.gwt.event.dom.client.HasClickHandlers;
-import com.google.gwt.user.client.ui.HasDirectionalText;
-import com.google.gwt.user.client.ui.HasText;
-import com.google.gwt.user.client.ui.HasWidgets.ForIsWidget;
-
-public interface TwoButtonsView {
-
-    HasText getFirstBtnText();
-
-    HasText getSecondBtnText();
-
-    HasClickHandlers getSecondBtn();
-
-    HasClickHandlers getFirstBtn();
-
-    HasDirectionalText getTitleText();
-
-    ForIsWidget getInnerPanel();
-
-}
\ No newline at end of file

Modified: trunk/src/main/java/cc/kune/core/public/ws.html
===================================================================
--- trunk/src/main/java/cc/kune/core/public/ws.html	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/core/public/ws.html	2011-01-16 03:05:58 UTC (rev 1183)
@@ -59,6 +59,7 @@
 Your web browser must have JavaScript enabled in order for this
 application to display correctly.</div>
 </noscript>
+
 <iframe id="__gwt_historyFrame" style="width: 0; height: 0; border: 0"></iframe>
 <iframe src="" id="__download" style="width: 0; height: 0; border: 0"></iframe>
 <!--<div id="kuneinitialcurtain"></div>-->

Modified: trunk/src/main/java/cc/kune/msgs/client/UserMessage.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/msgs/client/UserMessage.ui.xml	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/msgs/client/UserMessage.ui.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -4,7 +4,7 @@
   <ui:with field='img'
     type='cc.kune.msgs.client.resources.UserMessageImages' />
   <g:HorizontalPanel verticalAlignment="ALIGN_MIDDLE"
-    height="42px" addStyleNames="k-msg, k-opacity80, k-3corners">
+    height="42px" addStyleNames="k-msg, k-3corners">
     <g:SimplePanel addStyleNames="k-msg-icon">
       <g:Image width="100%" ui:field="icon" height="100%" />
     </g:SimplePanel>

Modified: trunk/src/main/java/cc/kune/msgs/client/UserMessagesPanel.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/msgs/client/UserMessagesPanel.ui.xml	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/msgs/client/UserMessagesPanel.ui.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -3,7 +3,7 @@
   xmlns:g="urn:import:com.google.gwt.user.client.ui">
   <g:VerticalPanel verticalAlignment="ALIGN_TOP"
     ui:field="vp" width="100%" height=""
-    addStyleNames="k-msg-panel, k-opacity80, k-box-10shadow, k-top-10corners"
+    addStyleNames="k-msg-panel, k-box-10shadow, k-top-10corners"
     spacing="10">
   </g:VerticalPanel>
 </ui:UiBinder>
\ No newline at end of file

Added: trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml
===================================================================
--- trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.1.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.1.1/distro-source/core/src/gwt-module.dtd">
+<module>
+	<inherits name="com.google.gwt.user.User" />
+	<source path="client"/>
+    <inherits name="org.waveprotocol.box.webclient.WebClientDev" />
+</module>
\ No newline at end of file


Property changes on: trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/src/main/java/cc/kune/wave/client/WebClient.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/WebClient.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/client/WebClient.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,406 @@
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); 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 "AS IS" 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 cc.kune.wave.client;
+
+import org.waveprotocol.box.webclient.client.ClientEvents;
+import org.waveprotocol.box.webclient.client.DebugMessagePanel;
+import org.waveprotocol.box.webclient.client.HistorySupport;
+import org.waveprotocol.box.webclient.client.RemoteViewServiceMultiplexer;
+import org.waveprotocol.box.webclient.client.Session;
+import org.waveprotocol.box.webclient.client.SimpleCcDocumentFactory;
+import org.waveprotocol.box.webclient.client.StagesProvider;
+import org.waveprotocol.box.webclient.client.WaveView;
+import org.waveprotocol.box.webclient.client.WaveWebSocketClient;
+import org.waveprotocol.box.webclient.client.events.NetworkStatusEvent;
+import org.waveprotocol.box.webclient.client.events.NetworkStatusEvent.ConnectionStatus;
+import org.waveprotocol.box.webclient.client.events.NetworkStatusEventHandler;
+import org.waveprotocol.box.webclient.client.events.WaveCreationEvent;
+import org.waveprotocol.box.webclient.client.events.WaveCreationEventHandler;
+import org.waveprotocol.box.webclient.client.events.WaveIndexUpdatedEvent;
+import org.waveprotocol.box.webclient.client.events.WaveSelectionEvent;
+import org.waveprotocol.box.webclient.client.events.WaveSelectionEventHandler;
+import org.waveprotocol.box.webclient.client.events.WaveUpdatedEvent;
+import org.waveprotocol.box.webclient.util.Log;
+import org.waveprotocol.box.webclient.waveclient.common.ClientIdGenerator;
+import org.waveprotocol.box.webclient.waveclient.common.WaveViewServiceImpl;
+import org.waveprotocol.box.webclient.waveclient.common.WebClientBackend;
+import org.waveprotocol.box.webclient.waveclient.common.WebClientUtils;
+import org.waveprotocol.box.webclient.widget.error.ErrorIndicatorPresenter;
+import org.waveprotocol.wave.client.common.safehtml.SafeHtml;
+import org.waveprotocol.wave.client.common.safehtml.SafeHtmlBuilder;
+import org.waveprotocol.wave.client.common.util.AsyncHolder.Accessor;
+import org.waveprotocol.wave.client.debug.logger.LogLevel;
+import org.waveprotocol.wave.client.util.ClientFlags;
+import org.waveprotocol.wave.client.widget.common.ImplPanel;
+import org.waveprotocol.wave.concurrencycontrol.channel.WaveViewService;
+import org.waveprotocol.wave.concurrencycontrol.common.ChannelException;
+import org.waveprotocol.wave.concurrencycontrol.wave.CcBasedWavelet;
+import org.waveprotocol.wave.model.conversation.ObservableConversation;
+import org.waveprotocol.wave.model.id.IdFilters;
+import org.waveprotocol.wave.model.id.IdGenerator;
+import org.waveprotocol.wave.model.id.WaveId;
+import org.waveprotocol.wave.model.wave.ParticipantId;
+import org.waveprotocol.wave.model.waveref.WaveRef;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.History;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.DockLayoutPanel;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.SplitLayoutPanel;
+
+public class WebClient extends Composite {
+  interface Binder extends UiBinder<DockLayoutPanel, WebClient> {
+  }
+
+  interface Style extends CssResource {
+    String subPanel();
+    String waveView();
+  }
+
+  private static final Binder BINDER = GWT.create(Binder.class);
+
+  @UiField
+  SplitLayoutPanel splitPanel;
+
+  @UiField
+  Style style;
+
+  @UiField
+  ImplPanel contentPanel;
+
+  @UiField
+  DebugMessagePanel logPanel;
+
+  static Log LOG = Log.get(WebClient.class);
+
+  private WebClientBackend backend = null;
+
+  /** The wave panel, if a wave is open. */
+  private StagesProvider wave;
+
+  /** The old wave panel */
+  private WaveView waveView = null;
+
+  /**
+   * Create a remote websocket to talk to the server-side FedOne service.
+   */
+  private WaveWebSocketClient websocket;
+
+  private ParticipantId loggedInUser;
+
+  private IdGenerator idGenerator;
+
+  private RemoteViewServiceMultiplexer channel;
+
+  public WebClient() {
+
+    ErrorHandler.install();
+
+    // Set up UI
+    DockLayoutPanel self = BINDER.createAndBindUi(this);
+    initWidget(self);
+    // DockLayoutPanel forcibly conflicts with sensible layout control, and
+    // sticks inline styles on elements without permission. They must be
+    // cleared.
+    self.getElement().getStyle().clearPosition();
+
+    if (LogLevel.showDebug()) {
+      logPanel.enable();
+    } else {
+      logPanel.removeFromParent();
+    }
+
+    if (ClientFlags.get().enableWavePanelHarness()) {
+      // For handling the opening of wave using the new wave panel
+      ClientEvents.get().addWaveSelectionEventHandler(
+          new WaveSelectionEventHandler() {
+            @Override
+            public void onSelection(WaveRef waveRef) {
+              openWave(waveRef, false);
+            }
+          });
+      waveView = null;
+    } else {
+      waveView = new WaveView();
+      contentPanel.add(waveView);
+
+      // DockLayoutPanel manually set position relative. We need to clear it.
+      waveView.getElement().getStyle().clearPosition();
+    }
+
+    ClientEvents.get().addWaveCreationEventHandler(
+        new WaveCreationEventHandler() {
+
+          @Override
+          public void onCreateRequest(WaveCreationEvent event) {
+            LOG.info("WaveCreationEvent received");
+            if (channel == null) {
+              throw new RuntimeException("Spaghetti attack.  Create occured before login");
+            }
+
+            if (ClientFlags.get().enableWavePanelHarness()) {
+              WaveId newWaveId = idGenerator.newWaveId();
+              openWave(WaveRef.of(newWaveId), true);
+            } else {
+              WaveId newWaveId = idGenerator.newWaveId();
+              ClientEvents.get().fireEvent(new WaveSelectionEvent(WaveRef.of(newWaveId)));
+              ObservableConversation convo = waveView.getConversationView().createRoot();
+              CcBasedWavelet rootWavelet = waveView.getCcStackManager().getView().getRoot();
+              rootWavelet.addParticipant(loggedInUser);
+              LOG.info("created conversation: " + convo);
+              convo.getRootThread().appendBlip();
+            }
+          }
+        });
+
+    configureConnectionIndicator();
+
+    HistorySupport.init();
+
+    websocket = new WaveWebSocketClient(useSocketIO(), getWebSocketBaseUrl(GWT.getModuleBaseURL()));
+    websocket.connect();
+
+    if (Session.get().isLoggedIn()) {
+      loggedInUser = new ParticipantId(Session.get().getAddress());
+      idGenerator = ClientIdGenerator.create();
+      loginToServer();
+    }
+    History.fireCurrentHistoryState();
+    LOG.info("SimpleWebClient.onModuleLoad() done");
+  }
+
+  private void configureConnectionIndicator() {
+    ClientEvents.get().addNetworkStatusEventHandler(new NetworkStatusEventHandler() {
+      @Override
+      public void onNetworkStatus(NetworkStatusEvent event) {
+        Element element = Document.get().getElementById("netstatus");
+        if (element != null) {
+          switch (event.getStatus()) {
+            case CONNECTED:
+            case RECONNECTED:
+              element.setInnerText("Online");
+              element.setClassName("online");
+              break;
+            case DISCONNECTED:
+              element.setInnerText("Offline");
+              element.setClassName("offline");
+              break;
+            case RECONNECTING:
+              element.setInnerText("Connecting...");
+              element.setClassName("connecting");
+              break;
+          }
+        }
+      }
+    });
+  }
+
+  /**
+   * Returns <code>ws://yourhost[:port]/</code>.
+   */
+  // XXX check formatting wrt GPE
+  private native String getWebSocketBaseUrl(String moduleBase) /*-{return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/";}-*/;
+
+  private native boolean useSocketIO() /*-{ return !!$wnd.__useSocketIO }-*/;
+
+  /**
+   */
+  private void loginToServer() {
+    assert loggedInUser != null;
+    backend = new WebClientBackend(loggedInUser, websocket);
+    channel = new RemoteViewServiceMultiplexer(websocket, loggedInUser.getAddress());
+
+    websocket.attachLegacy(backend);
+    if (!ClientFlags.get().enableWavePanelHarness()) {
+      waveView.setLegacy(backend, idGenerator);
+    }
+
+    ClientEvents.get().addNetworkStatusEventHandler(new NetworkStatusEventHandler() {
+      @Override
+      public void onNetworkStatus(NetworkStatusEvent event) {
+        if (event.getStatus() == ConnectionStatus.CONNECTED) {
+          openIndexWave();
+        }
+      }
+    });
+  }
+
+  private void openIndexWave() {
+    SimpleCcDocumentFactory docFactory = new SimpleCcDocumentFactory();
+    final WaveViewServiceImpl indexWave = (WaveViewServiceImpl) backend.getIndexWave(docFactory);
+    indexWave.viewOpen(IdFilters.ALL_IDS, null,
+        new WaveViewService.OpenCallback() {
+
+          @Override
+          public void onException(ChannelException e) {
+            LOG.severe("ChannelException opening index wave", e);
+          }
+
+          @Override
+          public void onFailure(String reason) {
+            LOG.info("Failure for index wave " + reason);
+          }
+
+          @Override
+          public void onSuccess(String response) {
+            LOG.info("Success for index wave subscription");
+          }
+
+          @Override
+          public void onUpdate(WaveViewService.WaveViewServiceUpdate update) {
+            LOG.info("IndexWave update received hasDeltas="
+                + update.hasDeltas() + "  hasWaveletSnapshot="
+                + update.hasWaveletSnapshot());
+            ClientEvents.get().fireEvent(
+                new WaveUpdatedEvent(indexWave, update.getChannelId(),
+                    update.getWaveletId()));
+            ClientEvents.get().fireEvent(
+                new WaveIndexUpdatedEvent(
+                    WebClientUtils.getIndexEntries(indexWave)));
+          }
+        });
+  }
+
+  /**
+   * Shows a wave in a wave panel.
+   *
+   * @param waveRef wave id to open
+   * @param isNewWave whether the wave is being created by this client session.
+   */
+  private void openWave(WaveRef waveRef, boolean isNewWave) {
+    LOG.info("WebClient.openWave()");
+
+    if (wave != null) {
+      wave.destroy();
+      wave = null;
+    }
+
+    wave = new StagesProvider(contentPanel.getElement().appendChild(Document.get().createDivElement()),
+        contentPanel, waveRef, channel, idGenerator, isNewWave);
+    wave.load(null);
+    String encodedToken = History.getToken();
+    if (encodedToken != null && !encodedToken.isEmpty()) {
+      WaveRef fromWaveRef = HistorySupport.waveRefFromHistoryToken(encodedToken);
+      if (waveRef == null) { 
+        LOG.info("History token contains invalid path: " + encodedToken);
+        return;
+      }
+      if (fromWaveRef.getWaveId().equals(waveRef.getWaveId())) {
+        // History change was caused by clicking on a link, it's already
+        // updated by browser.
+        return;
+      }
+    }
+    History.newItem(HistorySupport.historyTokenFromWaveref(waveRef), false);
+  }
+
+  /**
+   * An exception handler that reports exceptions using a <em>shiny banner</em>
+   * (an alert placed on the top of the screen). Once the stack trace is
+   * prepared, it is revealed in the banner via a link.
+   */
+  static class ErrorHandler implements UncaughtExceptionHandler {
+    /** Next handler in the handler chain. */
+    private final UncaughtExceptionHandler next;
+
+    /**
+     * Indicates whether an error has already been reported (at most one error
+     * is ever reported by this handler).
+     */
+    private boolean hasFired;
+
+    private ErrorHandler(UncaughtExceptionHandler next) {
+      this.next = next;
+    }
+
+    public static void install() {
+      GWT.setUncaughtExceptionHandler(new ErrorHandler(GWT.getUncaughtExceptionHandler()));
+    }
+
+    @Override
+    public void onUncaughtException(Throwable e) {
+      if (!hasFired) {
+        hasFired = true;
+        final ErrorIndicatorPresenter error =
+            ErrorIndicatorPresenter.create(RootPanel.get("banner"));
+        getStackTraceAsync(e, new Accessor<SafeHtml>() {
+          @Override
+          public void use(SafeHtml stack) {
+            error.addDetail(stack, null);
+          }
+        });
+      }
+
+      if (next != null) {
+        next.onUncaughtException(e);
+      }
+    }
+
+    private void getStackTraceAsync(final Throwable t, final Accessor<SafeHtml> whenReady) {
+      // TODO: Request stack-trace de-obfuscation. For now, just use the
+      // javascript stack trace.
+      //
+      // Use minimal services here, in order to avoid the chance that reporting
+      // the error produces more errors. In particular, do not use Scheduler.
+      // Also, this code could potentially be put behind a runAsync boundary, to
+      // save whatever dependencies it uses from the initial download.
+      DeferredCommand.addCommand(new Command() {
+        @Override
+        public void execute() {
+          SafeHtmlBuilder stack = new SafeHtmlBuilder();
+
+          Throwable error = t;
+          while (error != null) {
+            stack.appendEscaped(String.valueOf(error.getMessage())).appendHtmlConstant("<br>");
+            for (StackTraceElement elt : error.getStackTrace()) {
+              stack.appendHtmlConstant("  ")
+                  .appendEscaped(maybe(elt.getClassName(), "??")).appendHtmlConstant(".") //
+                  .appendEscaped(maybe(elt.getMethodName(), "??")).appendHtmlConstant(" (") //
+                  .appendEscaped(maybe(elt.getFileName(), "??")).appendHtmlConstant(":") //
+                  .appendEscaped(maybe(elt.getLineNumber(), "??")).appendHtmlConstant(")") //
+                  .appendHtmlConstant("<br>");
+            }
+            error = error.getCause();
+            if (error != null) {
+              stack.appendHtmlConstant("Caused by: ");
+            }
+          }
+
+          whenReady.use(stack.toSafeHtml());
+        }
+      });
+    }
+
+    private static String maybe(String value, String otherwise) {
+      return value != null ? value : otherwise;
+    }
+
+    private static String maybe(int value, String otherwise) {
+      return value != -1 ? String.valueOf(value) : otherwise;
+    }
+  }
+}


Property changes on: trunk/src/main/java/cc/kune/wave/client/WebClient.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,68 @@
+<ui:UiBinder
+    xmlns:ui="urn:ui:com.google.gwt.uibinder"
+    xmlns:g='urn:import:com.google.gwt.user.client.ui'
+    xmlns:s='urn:import:org.waveprotocol.box.webclient.client'
+    xmlns:w='urn:import:org.waveprotocol.wave.client.widget.common' >
+  <ui:style type="cc.kune.wave.client.WebClient.Style">
+    @def rootBackground #f0f0ff;
+    @def gap 5px;
+    .root {
+      background: rootBackground;
+      position: absolute;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+    }
+
+    .root2 {
+      position: absolute;
+    }
+
+    .subPanel {
+      background: white; border: thin solid silver; border-radius: gap;
+    }
+
+    .splitPanel {
+
+    }
+
+    @external gwt-SplitLayoutPanel-HDragger;
+    @external gwt-SplitLayoutPanel-VDragger;
+    .splitPanel .gwt-SplitLayoutPanel-HDragger,.splitPanel .gwt-SplitLayoutPanel-VDragger {
+      background-color: rootBackground;
+    }
+
+    .waveList {
+      margin-left: gap;
+    }
+
+    .waveView {
+      margin-right: gap; opacity: 0; visibility: hidden;
+      -webkit-transition: opacity 1s ease-in-out;
+    }
+
+    .debugPanel {
+      margin: 0 gap gap gap;
+    }
+
+    .fullGap {
+      margin: gap;
+    }
+  </ui:style>
+  <g:DockLayoutPanel unit="PX" styleName="{style.root}">
+    <g:center>
+      <g:SplitLayoutPanel ui:field="splitPanel" stylePrimaryName="{style.splitPanel}">
+        <g:south size="200">
+          <s:DebugMessagePanel ui:field="logPanel" styleName="{style.subPanel} {style.debugPanel}" />
+        </g:south>
+        <g:west size="300">
+          <s:WaveList styleName="{style.subPanel} {style.waveList}" />
+        </g:west>
+        <g:center>
+          <w:ImplPanel ui:field="contentPanel"></w:ImplPanel>
+        </g:center>
+      </g:SplitLayoutPanel>
+    </g:center>
+  </g:DockLayoutPanel>
+</ui:UiBinder>
\ No newline at end of file


Property changes on: trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/src/main/java/cc/kune/wave/server/CustomServerRpcControllerImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/CustomServerRpcControllerImpl.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/server/CustomServerRpcControllerImpl.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,225 @@
+/**
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * 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 "AS IS" 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 cc.kune.wave.server;
+
+import org.waveprotocol.box.server.rpc.Rpc;
+import org.waveprotocol.box.server.rpc.ServerRpcController;
+import org.waveprotocol.wave.model.wave.ParticipantId;
+
+import com.google.protobuf.Descriptors;
+import com.google.protobuf.Message;
+import com.google.protobuf.RpcCallback;
+import com.google.protobuf.Service;
+
+/**
+ * Implements the server end-point of a wave server RPC connection. This is a
+ * single-use RPC controller.
+ * 
+ * 
+ */
+public class CustomServerRpcControllerImpl implements ServerRpcController {
+    private final Message requestMessage;
+    private final Service backingService;
+    private final Descriptors.MethodDescriptor serviceMethod;
+    private final RpcCallback<Message> callback;
+    private final boolean isStreamingRpc;
+
+    // The following variables represent the current status of this instance,
+    // and
+    // must all only be accessed or modified while synchronised on statusLock.
+    private final Object statusLock = new Object();
+    private boolean complete = false;
+    private RpcCallback<Object> cancelCallback = null;
+    private boolean cancelled = false;
+    private final ParticipantId loggedInUser;
+
+    /**
+     * Instantiate a new ServerRpcController that may later be completely
+     * invoked by calling {#link run}.
+     * 
+     * @param requestMessage
+     *            the request being handled
+     * @param backingService
+     *            the backing service type
+     * @param serviceMethod
+     *            the specific method within the backing service type
+     * @param loggedInUser
+     *            the currently logged in user
+     * @param callback
+     *            the destination where responses may be passed - may be called
+     *            once (normal RPC) or 1-n times (streaming RPC), and will pass
+     *            instances of RpcFinished as required (error cases, or
+     *            streaming RPC shutdown); is also always called under the
+     *            ServerRpcController's statusLock to ensure that consecutive
+     *            calls (in the streaming case) are called in series
+     */
+    public CustomServerRpcControllerImpl(Message requestMessage, Service backingService,
+            Descriptors.MethodDescriptor serviceMethod, ParticipantId loggedInUser, RpcCallback<Message> callback) {
+        this.requestMessage = requestMessage;
+        this.backingService = backingService;
+        this.serviceMethod = serviceMethod;
+        this.loggedInUser = loggedInUser;
+        this.isStreamingRpc = serviceMethod.getOptions().getExtension(Rpc.isStreamingRpc);
+        this.callback = callback;
+    }
+
+    @Override
+    public String errorText() {
+        throw new UnsupportedOperationException("Client-side method of RpcController only.");
+    }
+
+    @Override
+    public boolean failed() {
+        throw new UnsupportedOperationException("Client-side method of RpcController only.");
+    }
+
+    @Override
+    public boolean isCanceled() {
+        return cancelled;
+    }
+
+    /**
+     * Registers a cancellation callback. This will always be called as part of
+     * this RPC, and always at most once; either when the client asks to cancel
+     * it, or when the RPC finishes (regardless of error case).
+     * 
+     * This callback will be called outside normal locks on ServerRpcController
+     * state, i.e., not within a block synchronised on statusLock.
+     */
+    @Override
+    public void notifyOnCancel(final RpcCallback<Object> callback) {
+        RpcCallback<Object> runCallback = null;
+        synchronized (statusLock) {
+            if (cancelCallback != null) {
+                throw new IllegalStateException("Must only be called once per request.");
+            } else {
+                cancelCallback = callback;
+                if (cancelled || complete) {
+                    runCallback = cancelCallback;
+                }
+            }
+        }
+        if (runCallback != null) {
+            runCallback.run(null);
+        }
+    }
+
+    @Override
+    public void reset() {
+        throw new UnsupportedOperationException("Client-side method of RpcController only.");
+    }
+
+    @Override
+    public void setFailed(String reason) {
+        RpcCallback<Object> runCallback = null;
+        synchronized (statusLock) {
+            if (complete) {
+                throw new IllegalStateException("Can't fail this RPC, as it is already complete.");
+            } else {
+                complete = true;
+                callback.run(Rpc.RpcFinished.newBuilder().setFailed(true).setErrorText(reason).build());
+                if (cancelCallback != null && !cancelled) {
+                    runCallback = cancelCallback;
+                }
+            }
+        }
+        if (runCallback != null) {
+            runCallback.run(null);
+        }
+    }
+
+    @Override
+    public void startCancel() {
+        throw new UnsupportedOperationException("Client-side method of RpcController only.");
+    }
+
+    @Override
+    public void cancel() {
+        RpcCallback<Object> runCallback = null;
+        synchronized (statusLock) {
+            if (cancelled) {
+                throw new IllegalStateException("Can't cancel RPC, already cancelled.");
+            }
+            cancelled = true;
+            if (cancelCallback != null && !complete) {
+                runCallback = cancelCallback;
+            }
+        }
+        if (runCallback != null) {
+            runCallback.run(null);
+        }
+    }
+
+    /**
+     * Run this ServerRpcController in the current thread. This must only be
+     * invoked ONCE, and will throw an IllegalStateException otherwise.
+     */
+    @Override
+    public void run() {
+        RpcCallback<Message> messageCallback = new RpcCallback<Message>() {
+            @Override
+            public void run(Message result) {
+                RpcCallback<Object> runCallback = null;
+                synchronized (statusLock) {
+                    if (complete) {
+                        throw new IllegalStateException("Can't send responses over this RPC, as it is"
+                                + " already complete: " + result);
+                    }
+                    if (!isStreamingRpc || result == null) {
+                        // This either completes the streaming RPC (by passing
+                        // an instance
+                        // of RpcFinished in place of null) or completes a
+                        // normal RPC (by
+                        // passing any other message).
+                        if (result == null) {
+                            result = Rpc.RpcFinished.newBuilder().setFailed(false).build();
+                        }
+                        callback.run(result);
+
+                        // Now complete, mark as such and invoke the
+                        // cancellation callback.
+                        complete = true;
+                        if (cancelCallback != null && !cancelled) {
+                            runCallback = cancelCallback;
+                        }
+                    } else {
+                        // Streaming RPC update.
+                        callback.run(result);
+                    }
+                }
+                if (runCallback != null) {
+                    runCallback.run(null);
+                }
+            }
+        };
+        try {
+            backingService.callMethod(serviceMethod, this, requestMessage, messageCallback);
+        } catch (RuntimeException e) {
+            // Pass the description of any RuntimeException back to the caller.
+            e.printStackTrace();
+            if (!complete) {
+                setFailed(e.toString());
+            }
+        }
+    }
+
+    @Override
+    public ParticipantId getLoggedInUser() {
+        return loggedInUser;
+    }
+}


Property changes on: trunk/src/main/java/cc/kune/wave/server/CustomServerRpcControllerImpl.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProviderSamePort.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProviderSamePort.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProviderSamePort.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,564 @@
+/**
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * 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 "AS IS" 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 cc.kune.wave.server;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.servlet.DefaultServlet;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.websocket.WebSocket;
+import org.eclipse.jetty.websocket.WebSocketServlet;
+import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticate;
+import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticationResult;
+import org.waveprotocol.box.server.CoreSettings;
+import org.waveprotocol.box.server.authentication.SessionManager;
+import org.waveprotocol.box.server.rpc.MessageExpectingChannel;
+import org.waveprotocol.box.server.rpc.ProtoCallback;
+import org.waveprotocol.box.server.rpc.Rpc;
+import org.waveprotocol.box.server.rpc.ServerRpcController;
+import org.waveprotocol.box.server.rpc.SocketIOServerChannel;
+import org.waveprotocol.box.server.rpc.WebSocketServerChannel;
+import org.waveprotocol.box.server.util.NetUtils;
+import org.waveprotocol.wave.model.wave.ParticipantId;
+import org.waveprotocol.wave.util.logging.Log;
+
+import com.glines.socketio.server.SocketIOInbound;
+import com.glines.socketio.server.SocketIOServlet;
+import com.glines.socketio.server.transport.FlashSocketTransport;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.google.inject.name.Named;
+import com.google.inject.servlet.ServletModule;
+import com.google.protobuf.Descriptors;
+import com.google.protobuf.Descriptors.MethodDescriptor;
+import com.google.protobuf.Message;
+import com.google.protobuf.RpcCallback;
+import com.google.protobuf.Service;
+import com.google.protobuf.UnknownFieldSet;
+
+/**
+ * ServerRpcProvider can provide instances of type Service over an incoming
+ * network socket and service incoming RPCs to these services and their methods.
+ * 
+ * 
+ */
+public class CustomServerRpcProviderSamePort extends ServletModule {
+    private static final Log LOG = Log.get(CustomServerRpcProviderSamePort.class);
+
+    private final InetSocketAddress[] httpAddresses;
+    private final Integer flashsocketPolicyPort;
+    private final Set<Connection> incomingConnections = Sets.newHashSet();
+    private final ExecutorService threadPool;
+    private final SessionManager sessionManager;
+    private final org.eclipse.jetty.server.SessionManager jettySessionManager;
+    // private Server httpServer = null;
+
+    // Mapping from incoming protocol buffer type -> specific handler.
+    private final Map<Descriptors.Descriptor, RegisteredServiceMethod> registeredServices = Maps.newHashMap();
+
+    /**
+     * Internal, static container class for any specific registered service
+     * method.
+     */
+    static class RegisteredServiceMethod {
+        final Service service;
+        final MethodDescriptor method;
+
+        RegisteredServiceMethod(Service service, MethodDescriptor method) {
+            this.service = service;
+            this.method = method;
+        }
+    }
+
+    // SocketIO is a Generic Servlet then we use this workaround
+    // http://stackoverflow.com/questions/3597414/how-to-integrate-hessian-with-guice
+    @Singleton
+    public class WaveSocketIOWrapperServlet extends HttpServlet {
+
+        private WaveSocketIOServlet waveSocketIOServlet;
+
+        @Override
+        public void init(ServletConfig config) throws ServletException {
+            LOG.info("init() in");
+            try {
+                if (waveSocketIOServlet == null) {
+                    waveSocketIOServlet = new WaveSocketIOServlet();
+                }
+                waveSocketIOServlet.init(config);
+            } catch (Throwable t) {
+                LOG.severe("Error initialising waveSocketIO servlet", t);
+                throw new ServletException(t);
+            }
+            LOG.info("init() out");
+        }
+
+        @Override
+        public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
+
+            try {
+                waveSocketIOServlet.service(request, response);
+            } catch (Throwable t) {
+                LOG.severe("Error calling service()", t);
+                throw new ServletException(t);
+            }
+
+        }
+    }
+
+    class WebSocketConnection extends Connection {
+        private final WebSocketServerChannel socketChannel;
+
+        WebSocketConnection(ParticipantId loggedInUser) {
+            super(loggedInUser);
+            socketChannel = new WebSocketServerChannel(this);
+            LOG.info("New websocket connection set up for user " + loggedInUser);
+            expectMessages(socketChannel);
+        }
+
+        @Override
+        protected void sendMessage(long sequenceNo, Message message) {
+            socketChannel.sendMessage(sequenceNo, message);
+        }
+
+        public WebSocketServerChannel getWebSocketServerChannel() {
+            return socketChannel;
+        }
+    }
+
+    class SocketIOConnection extends Connection {
+        private final SocketIOServerChannel socketChannel;
+
+        SocketIOConnection(ParticipantId loggedInUser) {
+            super(loggedInUser);
+            socketChannel = new SocketIOServerChannel(this);
+            LOG.info("New websocket connection set up for user " + loggedInUser);
+            expectMessages(socketChannel);
+        }
+
+        @Override
+        protected void sendMessage(long sequenceNo, Message message) {
+            socketChannel.sendMessage(sequenceNo, message);
+        }
+
+        public SocketIOServerChannel getWebSocketServerChannel() {
+            return socketChannel;
+        }
+    }
+
+    abstract class Connection implements ProtoCallback {
+        private final Map<Long, ServerRpcController> activeRpcs = new ConcurrentHashMap<Long, ServerRpcController>();
+
+        // The logged in user.
+        // Note: Due to this bug:
+        // http://code.google.com/p/wave-protocol/issues/detail?id=119,
+        // the field may be null on first connect and then set later using an
+        // RPC.
+        private ParticipantId loggedInUser;
+
+        /**
+         * @param loggedInUser
+         *            The currently logged in user, or null if no user is logged
+         *            in.
+         */
+        public Connection(ParticipantId loggedInUser) {
+            this.loggedInUser = loggedInUser;
+        }
+
+        protected void expectMessages(MessageExpectingChannel channel) {
+            synchronized (registeredServices) {
+                for (RegisteredServiceMethod serviceMethod : registeredServices.values()) {
+                    channel.expectMessage(serviceMethod.service.getRequestPrototype(serviceMethod.method));
+                    LOG.fine("Expecting: " + serviceMethod.method.getFullName());
+                }
+            }
+            channel.expectMessage(Rpc.CancelRpc.getDefaultInstance());
+        }
+
+        protected abstract void sendMessage(long sequenceNo, Message message);
+
+        private ParticipantId authenticate(String token) {
+            HttpSession session = sessionManager.getSessionFromToken(token);
+            ParticipantId user = sessionManager.getLoggedInUser(session);
+            return user;
+        }
+
+        @Override
+        public void message(final long sequenceNo, Message message) {
+            if (message instanceof Rpc.CancelRpc) {
+                final ServerRpcController controller = activeRpcs.get(sequenceNo);
+                if (controller == null) {
+                    throw new IllegalStateException("Trying to cancel an RPC that is not active!");
+                } else {
+                    LOG.info("Cancelling open RPC " + sequenceNo);
+                    controller.cancel();
+                }
+            } else if (message instanceof ProtocolAuthenticate) {
+                // Workaround for bug:
+                // http://codereview.waveprotocol.org/224001/
+
+                // When we get this message, either the connection will not be
+                // logged in
+                // (loggedInUser == null) or the connection will have been
+                // authenticated
+                // via cookies
+                // (in which case loggedInUser must match the authenticated
+                // user, and
+                // this message has no
+                // effect).
+
+                ProtocolAuthenticate authMessage = (ProtocolAuthenticate) message;
+                ParticipantId authenticatedAs = authenticate(authMessage.getToken());
+
+                Preconditions.checkArgument(authenticatedAs != null, "Auth token invalid");
+                Preconditions.checkState(loggedInUser == null || loggedInUser.equals(authenticatedAs),
+                        "Session already authenticated as a different user");
+
+                loggedInUser = authenticatedAs;
+                LOG.info("Session authenticated as " + loggedInUser);
+                sendMessage(sequenceNo, ProtocolAuthenticationResult.getDefaultInstance());
+            } else if (registeredServices.containsKey(message.getDescriptorForType())) {
+                if (activeRpcs.containsKey(sequenceNo)) {
+                    throw new IllegalStateException("Can't invoke a new RPC with a sequence number already in use.");
+                } else {
+                    final RegisteredServiceMethod serviceMethod = registeredServices.get(message.getDescriptorForType());
+
+                    // Create the internal ServerRpcController used to invoke
+                    // the call.
+                    final ServerRpcController controller = new CustomServerRpcControllerImpl(message,
+                            serviceMethod.service, serviceMethod.method, loggedInUser, new RpcCallback<Message>() {
+                                @Override
+                                synchronized public void run(Message message) {
+                                    if (message instanceof Rpc.RpcFinished
+                                            || !serviceMethod.method.getOptions().getExtension(Rpc.isStreamingRpc)) {
+                                        // This RPC is over - remove it from the
+                                        // map.
+                                        boolean failed = message instanceof Rpc.RpcFinished ? ((Rpc.RpcFinished) message).getFailed()
+                                                : false;
+                                        LOG.fine("RPC " + sequenceNo + " is now finished, failed = " + failed);
+                                        if (failed) {
+                                            LOG.info("error = " + ((Rpc.RpcFinished) message).getErrorText());
+                                        }
+                                        activeRpcs.remove(sequenceNo);
+                                    }
+                                    sendMessage(sequenceNo, message);
+                                }
+                            });
+
+                    // Kick off a new thread specific to this RPC.
+                    activeRpcs.put(sequenceNo, controller);
+                    threadPool.execute(controller);
+                }
+            } else {
+                // Sent a message type we understand, but don't expect -
+                // erronous case!
+                throw new IllegalStateException("Got expected but unknown message  (" + message + ") for sequence: "
+                        + sequenceNo);
+            }
+        }
+
+        @Override
+        public void unknown(long sequenceNo, String messageType, UnknownFieldSet message) {
+            throw new IllegalStateException("Got unknown message (type: " + messageType + ", " + message
+                    + ") for sequence: " + sequenceNo);
+        }
+
+        @Override
+        public void unknown(long sequenceNo, String messageType, String message) {
+            throw new IllegalStateException("Got unknown message (type: " + messageType + ", " + message
+                    + ") for sequence: " + sequenceNo);
+        }
+    }
+
+    /**
+     * Construct a new ServerRpcProvider, hosting on the specified WebSocket
+     * addresses.
+     * 
+     * Also accepts an ExecutorService for spawning managing threads.
+     */
+    public CustomServerRpcProviderSamePort(InetSocketAddress[] httpAddresses, Integer flashsocketPolicyPort,
+            ExecutorService threadPool, SessionManager sessionManager,
+            org.eclipse.jetty.server.SessionManager jettySessionManager) {
+        this.httpAddresses = httpAddresses;
+        this.flashsocketPolicyPort = flashsocketPolicyPort;
+        this.threadPool = threadPool;
+        this.sessionManager = sessionManager;
+        this.jettySessionManager = jettySessionManager;
+    }
+
+    /**
+     * Constructs a new ServerRpcProvider with a default ExecutorService.
+     */
+    public CustomServerRpcProviderSamePort(InetSocketAddress[] httpAddresses, Integer flashsocketPolicyPort,
+            SessionManager sessionManager, org.eclipse.jetty.server.SessionManager jettySessionManager) {
+        this(httpAddresses, flashsocketPolicyPort, Executors.newCachedThreadPool(), sessionManager, jettySessionManager);
+    }
+
+    @Inject
+    public CustomServerRpcProviderSamePort(@Named(CoreSettings.HTTP_FRONTEND_ADDRESSES) List<String> httpAddresses,
+            @Named(CoreSettings.FLASHSOCKET_POLICY_PORT) Integer flashsocketPolicyPort, SessionManager sessionManager,
+            org.eclipse.jetty.server.SessionManager jettySessionManager) {
+        this(parseAddressList(httpAddresses), flashsocketPolicyPort, sessionManager, jettySessionManager);
+    }
+
+    @Override
+    protected void configureServlets() {
+        // public void startWebSocketServer() {
+        // httpServer = new Server();
+
+        List<SelectChannelConnector> connectors = getSelectChannelConnectors(httpAddresses);
+        if (connectors.isEmpty()) {
+            LOG.severe("No valid http end point address provided!");
+        }
+        for (SelectChannelConnector connector : connectors) {
+            // httpServer.addConnector(connector);
+        }
+
+        // ServletContextHandler context = new
+        // ServletContextHandler(ServletContextHandler.SESSIONS);
+        // if (jettySessionManager != null) {
+        // context.getSessionHandler().setSessionManager(jettySessionManager);
+        // }
+        // context.setResourceBase("./war");
+
+        // Servlet where the websocket connection is served from.
+        // ServletHolder wsholder = new ServletHolder(new
+        // WaveWebSocketServlet());
+        // context.addServlet(wsholder, "/socket");
+        // TODO(zamfi): fix to let messages span frames.
+        // wsholder.setInitParameter("bufferSize", "" + 1024 * 1024); // 1M
+        // buffer
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("bufferSize", "" + 1024 * 1024);
+        serveRegex("/socket").with(WaveWebSocketServlet.class, params);
+        // Servlet where the websocket connection is served from.
+        // ServletHolder sioholder = new ServletHolder(new
+        // WaveSocketIOServlet());
+        // context.addServlet(sioholder, "/socket.io/*");
+        Map<String, String> sioParams = new HashMap<String, String>();
+        // TODO(zamfi): fix to let messages span frames.
+        sioParams.put("bufferSize", "" + 1024 * 1024); // 1M buffer
+
+        // Set flash policy server parameters
+        String flashPolicyServerHost = "localhost";
+        StringBuilder flashPolicyAllowedPorts = new StringBuilder();
+        /*
+         * Loop through addresses, collect list of ports, and determine if we
+         * are to use "localhost" of the AnyHost wildcard.
+         */
+        for (InetSocketAddress addr : httpAddresses) {
+            if (flashPolicyAllowedPorts.length() > 0) {
+                flashPolicyAllowedPorts.append(",");
+            }
+            flashPolicyAllowedPorts.append(addr.getPort());
+            if (!addr.getAddress().isLoopbackAddress()) {
+                // Until it's possible to pass a list of address, this is the
+                // only valid alternative.
+                flashPolicyServerHost = "0.0.0.0";
+            }
+        }
+        sioParams.put(FlashSocketTransport.FLASHPOLICY_SERVER_HOST_KEY, flashPolicyServerHost);
+        sioParams.put(FlashSocketTransport.FLASHPOLICY_SERVER_PORT_KEY, "" + flashsocketPolicyPort);
+        // TODO: Change to use the public http address and all other bound
+        // addresses.
+        sioParams.put(FlashSocketTransport.FLASHPOLICY_DOMAIN_KEY, "*");
+        sioParams.put(FlashSocketTransport.FLASHPOLICY_PORTS_KEY, flashPolicyAllowedPorts.toString());
+        serveRegex("/socket.io/*").with(WaveSocketIOWrapperServlet.class, sioParams);
+
+        // Serve the static content and GWT web client with the default servlet
+        // (acts like a standard file-based web server).
+        // ServletHolder defaultServlet = new ServletHolder(new
+        // DefaultServlet());
+        // context.addServlet(defaultServlet, "/static/*");
+        // context.addServlet(defaultServlet, "/webclient/*");
+        serveRegex("/static/*").with(DefaultServlet.class);
+        serveRegex("/webclient/*").with(DefaultServlet.class);
+
+        for (Trio<String, HttpServlet, Map<String, String>> servlet : servletNewRegistry) {
+            Map<String, String> sParams = servlet.getThird();
+            LOG.info("Configuring servlet for: " + servlet.getFirst());
+            if (sParams == null) {
+                serveRegex(servlet.getFirst()).with(servlet.getSecond().getClass());
+            } else {
+                serveRegex(servlet.getFirst()).with(servlet.getSecond().getClass(), sParams);
+            }
+            // context.addServlet(servlet.getSecond(), servlet.getFirst());
+        }
+
+        // httpServer.setHandler(context);
+
+        try {
+            // httpServer.start();
+        } catch (Exception e) { // yes, .start() throws "Exception"
+            LOG.severe("Fatal error starting http server.", e);
+            return;
+        }
+        LOG.fine("Wave WebSocket server running.");
+    }
+
+    private static InetSocketAddress[] parseAddressList(List<String> addressList) {
+        if (addressList == null || addressList.size() == 0) {
+            return new InetSocketAddress[0];
+        } else {
+            Set<InetSocketAddress> addresses = Sets.newHashSet();
+            for (String str : addressList) {
+                if (str.length() == 0) {
+                    LOG.warning("Encountered empty address in http addresses list.");
+                } else {
+                    try {
+                        InetSocketAddress address = NetUtils.parseHttpAddress(str);
+                        if (!addresses.contains(address)) {
+                            addresses.add(address);
+                        } else {
+                            LOG.warning("Ignoring duplicate address in http addresses list: Duplicate entry '" + str
+                                    + "' resolved to " + address.getAddress().getHostAddress());
+                        }
+                    } catch (IOException e) {
+                        LOG.severe("Unable to process address " + str, e);
+                    }
+                }
+            }
+            return addresses.toArray(new InetSocketAddress[0]);
+        }
+    }
+
+    /**
+     * @return a list of {@link SelectChannelConnector} each bound to a
+     *         host:port pair form the list addresses.
+     */
+    private List<SelectChannelConnector> getSelectChannelConnectors(InetSocketAddress[] httpAddresses) {
+        List<SelectChannelConnector> list = Lists.newArrayList();
+        for (InetSocketAddress address : httpAddresses) {
+            SelectChannelConnector connector = new SelectChannelConnector();
+            connector.setHost(address.getAddress().getHostAddress());
+            connector.setPort(address.getPort());
+            list.add(connector);
+        }
+
+        return list;
+    }
+
+    public class WaveWebSocketServlet extends WebSocketServlet {
+        @Override
+        protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
+            ParticipantId loggedInUser = sessionManager.getLoggedInUser(request.getSession(false));
+
+            WebSocketConnection connection = new WebSocketConnection(loggedInUser);
+            return connection.getWebSocketServerChannel();
+        }
+    }
+
+    public class WaveSocketIOServlet extends SocketIOServlet {
+        @Override
+        protected SocketIOInbound doSocketIOConnect(HttpServletRequest request, String[] protocols) {
+            ParticipantId loggedInUser = sessionManager.getLoggedInUser(request.getSession(false));
+
+            SocketIOConnection connection = new SocketIOConnection(loggedInUser);
+            return connection.getWebSocketServerChannel();
+        }
+    }
+
+    /**
+     * Returns the socket the WebSocket server is listening on.
+     */
+    public SocketAddress getWebSocketAddress() {
+        // if (httpServer == null) {
+        // return null;
+        // } else {
+        // Connector c = httpServer.getConnectors()[0];
+        // return new InetSocketAddress(c.getHost(), c.getLocalPort());
+        // }
+        return null;
+    }
+
+    /**
+     * Stops this server.
+     */
+    public void stopServer() throws IOException {
+        try {
+            // httpServer.stop(); // yes, .stop() throws "Exception"
+        } catch (Exception e) {
+            LOG.warning("Fatal error stopping http server.", e);
+        }
+        LOG.fine("server shutdown.");
+    }
+
+    /**
+     * Register all methods provided by the given service type.
+     */
+    public void registerService(Service service) {
+        synchronized (registeredServices) {
+            for (MethodDescriptor methodDescriptor : service.getDescriptorForType().getMethods()) {
+                registeredServices.put(methodDescriptor.getInputType(), new RegisteredServiceMethod(service,
+                        methodDescriptor));
+            }
+        }
+    }
+
+    /**
+     * Set of servlets
+     */
+    // List<Pair<String, ServletHolder>> servletRegistry = Lists.newArrayList();
+
+    List<Trio<String, HttpServlet, Map<String, String>>> servletNewRegistry = Lists.newArrayList();
+
+    /**
+     * Add a servlet to the servlet registry. This servlet will be attached to
+     * the specified URL pattern when the server is started up.
+     * 
+     * @param urlPattern
+     *            URL pattern for paths. Eg, '/foo', '/foo/*'
+     * @param servlet
+     *            The servlet object to bind to the specified paths
+     * @return the {@link ServletHolder} that holds the servlet.
+     */
+    public Servlet addServlet(String urlPattern, HttpServlet servlet) {
+        // ServletHolder servletHolder = new ServletHolder(servlet);
+        servletNewRegistry.add(new Trio<String, HttpServlet, Map<String, String>>(urlPattern, servlet, null));
+        return servlet;
+    }
+
+    public Servlet addServlet(String urlPattern, HttpServlet servlet, Map<String, String> params) {
+        // ServletHolder servletHolder = new ServletHolder(servlet);
+        servletNewRegistry.add(new Trio<String, HttpServlet, Map<String, String>>(urlPattern, servlet, params));
+        return servlet;
+    }
+
+}


Property changes on: trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProviderSamePort.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/src/main/java/cc/kune/wave/server/CustomSettingsBinder.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/CustomSettingsBinder.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/server/CustomSettingsBinder.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * 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 "AS IS" 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 cc.kune.wave.server;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.CompositeConfiguration;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.configuration.SystemConfiguration;
+import org.waveprotocol.wave.util.settings.Setting;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.inject.AbstractModule;
+import com.google.inject.Module;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
+
+/**
+ * A property file parsing system that converts a given settings class into a
+ * Guice module with injectable
+ * 
+ * @Named parameters.
+ * 
+ *        Originally based on some CLI work by arb at google.com (Anthony Baxter).
+ *        Refactored by tad.glines at gmail.com (Tad Glines) to use Commons
+ *        Configuration and add support for List<String>.
+ */
+public class CustomSettingsBinder {
+
+    /**
+     * Used to validate that a type is supported. Some types may have generic
+     * parameters that need to be checked.
+     */
+    private interface SettingTypeValidator {
+        boolean check(Type type);
+    }
+
+    private static final Map<Type, SettingTypeValidator> supportedSettingTypes;
+
+    /**
+     * This default validator just returns true.
+     */
+    private static final SettingTypeValidator DEFAULT_TYPE_VALIDATOR = new SettingTypeValidator() {
+        @Override
+        public boolean check(Type type) {
+            return true;
+        }
+    };
+
+    /**
+     * This validator checks to make sure the {@link List}'s generic parameter
+     * is also supported.
+     */
+    private static final SettingTypeValidator LIST_TYPE_VALIDATOR = new SettingTypeValidator() {
+        @Override
+        public boolean check(Type type) {
+            if (type instanceof ParameterizedType) {
+                Type[] args = ((ParameterizedType) type).getActualTypeArguments();
+                if (args.length == 1) {
+                    // At the moment only List<String> is supported.
+                    if (args[0] == String.class) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
+    };
+
+    static {
+        ImmutableMap.Builder<Type, SettingTypeValidator> builder = ImmutableMap.builder();
+        builder.put(int.class, DEFAULT_TYPE_VALIDATOR);
+        builder.put(boolean.class, DEFAULT_TYPE_VALIDATOR);
+        builder.put(String.class, DEFAULT_TYPE_VALIDATOR);
+        builder.put(List.class, LIST_TYPE_VALIDATOR);
+        supportedSettingTypes = builder.build();
+    }
+
+    /**
+     * Bind configuration parameters into Guice Module.
+     * 
+     * @return a Guice module configured with setting support.
+     * @throws ConfigurationException
+     *             on configuration error
+     */
+    public static Module bindSettings(String propertyFile, Class<?>... settingsArg) throws ConfigurationException {
+        final CompositeConfiguration config = new CompositeConfiguration();
+        config.addConfiguration(new SystemConfiguration()); 
+        config.addConfiguration(new PropertiesConfiguration(propertyFile));
+
+        List<Field> fields = new ArrayList<Field>();
+        for (Class<?> settings : settingsArg) {
+            fields.addAll(Arrays.asList(settings.getDeclaredFields()));
+        }
+
+        // Reflect on settings class and absorb settings
+        final Map<Setting, Field> settings = new LinkedHashMap<Setting, Field>();
+        for (Field field : fields) {
+            if (!field.isAnnotationPresent(Setting.class)) {
+                continue;
+            }
+
+            // Validate target type
+            SettingTypeValidator typeHelper = supportedSettingTypes.get(field.getType());
+            if (typeHelper == null || !typeHelper.check(field.getGenericType())) {
+                throw new IllegalArgumentException(field.getType() + " is not one of the supported setting types");
+            }
+
+            Setting setting = field.getAnnotation(Setting.class);
+            settings.put(setting, field);
+        }
+
+        // Now validate them
+        List<String> missingProperties = new ArrayList<String>();
+        for (Setting setting : settings.keySet()) {
+            if (setting.defaultValue().isEmpty()) {
+                if (!config.containsKey(setting.name())) {
+                    missingProperties.add(setting.name());
+                }
+            }
+        }
+        if (missingProperties.size() > 0) {
+            StringBuilder error = new StringBuilder();
+            error.append("The following required properties are missing from the server configuration: ");
+            error.append(Joiner.on(", ").join(missingProperties));
+            throw new ConfigurationException(error.toString());
+        }
+
+        // bundle everything up in an injectable guice module
+        return new AbstractModule() {
+
+            @Override
+            protected void configure() {
+                // We must iterate the settings a third time when binding.
+                // Note: do not collapse these loops as that will damage
+                // early error detection. The runtime is still O(n) in setting
+                // count.
+                for (Map.Entry<Setting, Field> entry : settings.entrySet()) {
+                    Class<?> type = entry.getValue().getType();
+                    Setting setting = entry.getKey();
+
+                    if (int.class.equals(type)) {
+                        Integer defaultValue = null;
+                        if (!setting.defaultValue().isEmpty()) {
+                            defaultValue = Integer.parseInt(setting.defaultValue());
+                        }
+                        bindConstant().annotatedWith(Names.named(setting.name())).to(
+                                config.getInteger(setting.name(), defaultValue));
+                    } else if (boolean.class.equals(type)) {
+                        Boolean defaultValue = null;
+                        if (!setting.defaultValue().isEmpty()) {
+                            defaultValue = Boolean.parseBoolean(setting.defaultValue());
+                        }
+                        bindConstant().annotatedWith(Names.named(setting.name())).to(
+                                config.getBoolean(setting.name(), defaultValue));
+                    } else if (String.class.equals(type)) {
+                        bindConstant().annotatedWith(Names.named(setting.name())).to(
+                                config.getString(setting.name(), setting.defaultValue()));
+                    } else {
+                        String[] value = config.getStringArray(setting.name());
+                        if (value.length == 0 && !setting.defaultValue().isEmpty()) {
+                            value = setting.defaultValue().split(",");
+                        }
+                        bind(new TypeLiteral<List<String>>() {
+                        }).annotatedWith(Names.named(setting.name())).toInstance(ImmutableList.copyOf(value));
+                    }
+                }
+            }
+        };
+    }
+}


Property changes on: trunk/src/main/java/cc/kune/wave/server/CustomSettingsBinder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/src/main/java/cc/kune/wave/server/Trio.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/Trio.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/server/Trio.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,156 @@
+/**
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * 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 "AS IS" 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 cc.kune.wave.server;
+
+/**
+ * An immutable ordered pair of typed objects.
+ * 
+ * Essentially the same as com.google.common.base.Pair. (we avoid external
+ * dependencies from model/)
+ * 
+ * 
+ * 
+ * @param <A>
+ *            Type of value 1
+ * @param <B>
+ *            Type of value 2
+ * @param <C>
+ *            Type of value 3
+ */
+public class Trio<A, B, C> {
+
+    /**
+     * Static constructor to save typing on generic arguments.
+     */
+    public static <A, B, C> Trio<A, B, C> of(A a, B b, C c) {
+        return new Trio<A, B, C>(a, b, c);
+    }
+
+    /**
+     * The first element of the trio; see also {@link #getFirst}.
+     */
+    public final A first;
+
+    /**
+     * The second element of the trio; see also {@link #getSecond}.
+     */
+    public final B second;
+    /**
+     * The third element of the trio; see also {@link #getThird}.
+     */
+    public final C third;
+
+    /**
+     * Pair constructor
+     * 
+     * @param first
+     *            Value 1
+     * @param second
+     *            Value 2
+     */
+    public Trio(A first, B second, C third) {
+        this.first = first;
+        this.second = second;
+        this.third = third;
+    }
+
+    /**
+     * Copy constructor
+     * 
+     * @param trio
+     *            Trio to shallow copy from
+     */
+    public Trio(Trio<? extends A, ? extends B, ? extends C> trio) {
+        first = trio.first;
+        second = trio.second;
+        third = trio.third;
+    }
+
+    /**
+     * Returns the first element of this pair; see also {@link #first}.
+     */
+    public A getFirst() {
+        return first;
+    }
+
+    /**
+     * Returns the second element of this pair; see also {@link #second}.
+     */
+    public B getSecond() {
+        return second;
+    }
+
+    /**
+     * Returns the third element of this pair; see also {@link #third}.
+     */
+    public C getThird() {
+        return third;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + (first == null ? 0 : first.hashCode());
+        result = prime * result + (second == null ? 0 : second.hashCode());
+        result = prime * result + (third == null ? 0 : third.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        Trio<?, ?, ?> other = (Trio<?, ?, ?>) obj;
+        if (first == null) {
+            if (other.first != null) {
+                return false;
+            }
+        } else if (!first.equals(other.first)) {
+            return false;
+        }
+        if (second == null) {
+            if (other.second != null) {
+                return false;
+            }
+        } else if (!second.equals(other.second)) {
+            return false;
+        }
+        if (third == null) {
+            if (other.third != null) {
+                return false;
+            }
+        } else if (!third.equals(other.third)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "Trio [first=" + first + ", second=" + second + ", third=" + third + "]";
+    }
+
+}


Property changes on: trunk/src/main/java/cc/kune/wave/server/Trio.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/src/main/java/cc/kune/wave/server/WaveModule.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/WaveModule.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/server/WaveModule.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,28 @@
+package cc.kune.wave.server;
+
+import java.io.IOException;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.waveprotocol.box.server.persistence.PersistenceException;
+
+import com.google.inject.Injector;
+import com.google.inject.servlet.ServletModule;
+
+public class WaveModule extends ServletModule {
+
+    private static final Log LOG = LogFactory.getLog(WaveModule.class);
+
+    @Override
+    protected void configureServlets() {
+        super.configureServlets();
+
+    }
+
+    public void runWaveServer(Injector settingsInjector) throws IOException, PersistenceException,
+            ConfigurationException {
+
+    }
+
+}


Property changes on: trunk/src/main/java/cc/kune/wave/server/WaveModule.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/src/main/java/cc/kune/wave/server/WaveStarter.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/WaveStarter.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/wave/server/WaveStarter.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,174 @@
+package cc.kune.wave.server;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.servlets.ProxyServlet;
+import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolWaveClientRpc;
+import org.waveprotocol.box.server.CoreSettings;
+import org.waveprotocol.box.server.ServerModule;
+import org.waveprotocol.box.server.authentication.AccountStoreHolder;
+import org.waveprotocol.box.server.authentication.SessionManager;
+import org.waveprotocol.box.server.frontend.ClientFrontend;
+import org.waveprotocol.box.server.frontend.ClientFrontendImpl;
+import org.waveprotocol.box.server.frontend.WaveClientRpcImpl;
+import org.waveprotocol.box.server.persistence.AccountStore;
+import org.waveprotocol.box.server.persistence.PersistenceException;
+import org.waveprotocol.box.server.persistence.PersistenceModule;
+import org.waveprotocol.box.server.persistence.SignerInfoStore;
+import org.waveprotocol.box.server.robots.RobotApiModule;
+import org.waveprotocol.box.server.robots.RobotRegistrationServlet;
+import org.waveprotocol.box.server.robots.active.ActiveApiServlet;
+import org.waveprotocol.box.server.robots.dataapi.DataApiOAuthServlet;
+import org.waveprotocol.box.server.robots.dataapi.DataApiServlet;
+import org.waveprotocol.box.server.robots.passive.RobotsGateway;
+import org.waveprotocol.box.server.rpc.AttachmentServlet;
+import org.waveprotocol.box.server.rpc.AuthenticationServlet;
+import org.waveprotocol.box.server.rpc.FetchServlet;
+import org.waveprotocol.box.server.rpc.ServerRpcProvider;
+import org.waveprotocol.box.server.rpc.SignOutServlet;
+import org.waveprotocol.box.server.rpc.UserRegistrationServlet;
+import org.waveprotocol.box.server.rpc.WaveClientServlet;
+import org.waveprotocol.box.server.waveserver.WaveBus;
+import org.waveprotocol.box.server.waveserver.WaveletProvider;
+import org.waveprotocol.wave.crypto.CertPathStore;
+import org.waveprotocol.wave.federation.FederationSettings;
+import org.waveprotocol.wave.federation.FederationTransport;
+import org.waveprotocol.wave.federation.noop.NoOpFederationModule;
+import org.waveprotocol.wave.federation.xmpp.XmppFederationModule;
+import org.waveprotocol.wave.model.version.HashedVersionFactory;
+import org.waveprotocol.wave.util.settings.SettingsBinder;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.name.Names;
+
+public class WaveStarter {
+
+    private static final Log LOG = LogFactory.getLog(WaveStarter.class);
+    private static final String PROPERTIES_FILE_KEY = "wave-server.properties";
+
+    public WaveStarter() {
+    }
+
+    public void runMain(Injector settingsInjector) {
+        try {
+          Module coreSettings = CustomSettingsBinder.bindSettings(PROPERTIES_FILE_KEY, CoreSettings.class);
+          run(coreSettings, settingsInjector);
+          return;
+        } catch (PersistenceException e) {
+          LOG.error("PersistenceException when running server:", e);
+        } catch (ConfigurationException e) {
+          LOG.error("ConfigurationException when running server:", e);
+        }
+      }
+
+      public void run(Module coreSettings, Injector parentInjector) throws PersistenceException,
+          ConfigurationException {
+        // Injector settingsInjector = Guice.createInjector(coreSettings);
+        Injector settingsInjector = parentInjector.createChildInjector(coreSettings);
+        boolean enableFederation = settingsInjector.getInstance(Key.get(Boolean.class,
+            Names.named(CoreSettings.ENABLE_FEDERATION)));
+
+        if (enableFederation) {
+          Module federationSettings =
+            SettingsBinder.bindSettings(PROPERTIES_FILE_KEY, FederationSettings.class);
+          // This MUST happen first, or bindings will fail if federation is enabled.
+          settingsInjector = settingsInjector.createChildInjector(federationSettings);
+        }
+
+        Module federationModule = buildFederationModule(settingsInjector, enableFederation);
+        PersistenceModule persistenceModule = settingsInjector.getInstance(PersistenceModule.class);
+        Injector injector =
+            settingsInjector.createChildInjector(new ServerModule(enableFederation),
+                new RobotApiModule(), federationModule, persistenceModule);
+
+        ServerRpcProvider server = injector.getInstance(ServerRpcProvider.class);
+        WaveBus waveBus = injector.getInstance(WaveBus.class);
+
+        initializeStores(injector);
+        initializeServlets(injector, server);
+        initializeRobots(injector, waveBus);
+        initializeFrontend(injector, server, waveBus);
+        initializeFederation(injector);
+
+        LOG.info("Starting server");
+        server.startWebSocketServer();
+      }
+
+      private static Module buildFederationModule(Injector settingsInjector, boolean enableFederation)
+          throws ConfigurationException {
+        Module federationModule;
+        if (enableFederation) {
+          federationModule = settingsInjector.getInstance(XmppFederationModule.class);
+        } else {
+          federationModule = settingsInjector.getInstance(NoOpFederationModule.class);
+        }
+        return federationModule;
+      }
+
+      private static void initializeStores(Injector injector) throws PersistenceException {
+        AccountStore accountStore = injector.getInstance(AccountStore.class);
+        accountStore.initializeAccountStore();
+        AccountStoreHolder.init(accountStore,
+            injector.getInstance(Key.get(String.class, Names.named(CoreSettings.WAVE_SERVER_DOMAIN))));
+
+        // Initialize the SignerInfoStore
+        CertPathStore certPathStore = injector.getInstance(CertPathStore.class);
+        if (certPathStore instanceof SignerInfoStore) {
+          ((SignerInfoStore)certPathStore).initializeSignerInfoStore();
+        }
+      }
+
+      private static void initializeServlets(Injector injector, ServerRpcProvider server) {
+        server.addServlet("/attachment/*", injector.getInstance(AttachmentServlet.class));
+
+        server.addServlet(SessionManager.SIGN_IN_URL,
+            injector.getInstance(AuthenticationServlet.class));
+        server.addServlet("/auth/signout", injector.getInstance(SignOutServlet.class));
+        server.addServlet("/auth/register", injector.getInstance(UserRegistrationServlet.class));
+
+        server.addServlet("/fetch/*", injector.getInstance(FetchServlet.class));
+
+        server.addServlet("/robot/dataapi", injector.getInstance(DataApiServlet.class));
+        server.addServlet(DataApiOAuthServlet.DATA_API_OAUTH_PATH + "/*",
+            injector.getInstance(DataApiOAuthServlet.class));
+        server.addServlet("/robot/dataapi/rpc", injector.getInstance(DataApiServlet.class));
+        server.addServlet("/robot/register/*", injector.getInstance(RobotRegistrationServlet.class));
+        server.addServlet("/robot/rpc", injector.getInstance(ActiveApiServlet.class));
+
+        String gadgetServerHostname =injector.getInstance(Key.get(String.class,
+            Names.named(CoreSettings.GADGET_SERVER_HOSTNAME)));
+        ProxyServlet.Transparent proxyServlet =
+            new ProxyServlet.Transparent("/gadgets", "http", gadgetServerHostname, injector
+                .getInstance(Key.get(int.class, Names.named(CoreSettings.GADGET_SERVER_PORT))),
+                "/gadgets");
+        ServletHolder proxyServletHolder = server.addServlet("/gadgets/*", proxyServlet);
+        proxyServletHolder.setInitParameter("HostHeader", gadgetServerHostname);
+
+        server.addServlet("/", injector.getInstance(WaveClientServlet.class));
+      }
+
+      private static void initializeRobots(Injector injector, WaveBus waveBus) {
+        RobotsGateway robotsGateway = injector.getInstance(RobotsGateway.class);
+        waveBus.subscribe(robotsGateway);
+      }
+
+      private static void initializeFrontend(Injector injector, ServerRpcProvider server,
+          WaveBus waveBus) {
+        HashedVersionFactory hashFactory = injector.getInstance(HashedVersionFactory.class);
+        WaveletProvider provider = injector.getInstance(WaveletProvider.class);
+        ClientFrontend frontend = ClientFrontendImpl.create(hashFactory, provider, waveBus);
+
+        ProtocolWaveClientRpc.Interface rpcImpl = WaveClientRpcImpl.create(frontend, false);
+        server.registerService(ProtocolWaveClientRpc.newReflectiveService(rpcImpl));
+      }
+
+      private static void initializeFederation(Injector injector) {
+        FederationTransport federationManager = injector.getInstance(FederationTransport.class);
+        federationManager.startFederation();
+      }
+}


Property changes on: trunk/src/main/java/cc/kune/wave/server/WaveStarter.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/src/main/java/cc/kune/wspace/Wspace.gwt.xml
===================================================================
--- trunk/src/main/java/cc/kune/wspace/Wspace.gwt.xml	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/wspace/Wspace.gwt.xml	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,13 +1,12 @@
 <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.1.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.1.0/distro-source/core/src/gwt-module.dtd">
 <module>
-  <inherits name="com.google.gwt.user.User" />
-  <inherits name="com.google.gwt.user.theme.standard.Standard" />
-  <!-- <entry-point class="cc.kune.core.ws.armor.client.WsArmorEntryPoint" 
-    /> -->
-  <public path="public" />
-  <source path="client" />
-  <!-- NOTE: this only compiles for chromium/safari ============= -->
-  <!--http://code.google.com/p/google-web-toolkit/issues/detail?id=42 -->
-  <!-- <set-property name="user.agent" value="gecko1_8" /> -->
-  <set-property name="user.agent" value="safari" />
+	<inherits name="com.google.gwt.user.User" />
+	<!-- <entry-point class="cc.kune.core.ws.armor.client.WsArmorEntryPoint" 
+		/> -->
+	<public path="public" />
+	<source path="client" />
+	<!-- NOTE: this only compiles for chromium/safari ============= -->
+	<!--http://code.google.com/p/google-web-toolkit/issues/detail?id=42 -->
+	<!-- <set-property name="user.agent" value="gecko1_8" /> -->
+	<set-property name="user.agent" value="safari" />
 </module>
\ No newline at end of file

Modified: trunk/src/main/java/cc/kune/wspace/client/WsArmor.java
===================================================================
--- trunk/src/main/java/cc/kune/wspace/client/WsArmor.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/wspace/client/WsArmor.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,5 +1,7 @@
 package cc.kune.wspace.client;
 
+import org.ourproject.common.client.actions.ui.IsActionExtensible;
+
 import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget;
 
 public interface WsArmor {
@@ -20,14 +22,16 @@
 
     ForIsWidget getEntityToolsSouth();
 
+    IsActionExtensible getSiteActionsToolbar();
+
     ForIsWidget getSitebar();
 
+    void selectGroupSpace();
+
     void selectHomeSpace();
 
+    void selectPublicSpace();
+
     void selectUserSpace();
 
-    void selectGroupSpace();
-
-    void selectPublicSpace();
-
 }
\ No newline at end of file

Modified: trunk/src/main/java/cc/kune/wspace/client/WsArmorEntryPoint.java
===================================================================
--- trunk/src/main/java/cc/kune/wspace/client/WsArmorEntryPoint.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/wspace/client/WsArmorEntryPoint.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -7,9 +7,7 @@
 import com.google.gwt.user.client.ui.InlineLabel;
 import com.google.gwt.user.client.ui.RootLayoutPanel;
 
-/**
- * Entry point classes define <code>onModuleLoad()</code>.
- */
+ at Deprecated
 public class WsArmorEntryPoint implements EntryPoint {
     @Override
     public void onModuleLoad() {
@@ -17,7 +15,7 @@
         resources.style().ensureInjected();
 
         final RootLayoutPanel rootPanel = RootLayoutPanel.get();
-        final WsArmorImpl armor = new WsArmorImpl();
+        final WsArmorImpl armor = new WsArmorImpl(null);
         final InlineLabel icons = new InlineLabel("Icons");
         final InlineLabel login = new InlineLabel("Login");
         final InlineLabel logo = new InlineLabel("Logo");

Modified: trunk/src/main/java/cc/kune/wspace/client/WsArmorImpl.java
===================================================================
--- trunk/src/main/java/cc/kune/wspace/client/WsArmorImpl.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/cc/kune/wspace/client/WsArmorImpl.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -1,5 +1,8 @@
 package cc.kune.wspace.client;
 
+import org.ourproject.common.client.actions.ui.IsActionExtensible;
+import org.ourproject.common.client.actions.ui.SimpleActionToolbar;
+
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
@@ -15,6 +18,8 @@
 import com.google.gwt.user.client.ui.TabLayoutPanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
 
 public class WsArmorImpl extends Composite implements WsArmor {
 
@@ -24,47 +29,52 @@
     private static WsArmorImplUiBinder uiBinder = GWT.create(WsArmorImplUiBinder.class);
 
     @UiField
-    DockLayoutPanel mainpanel;
+    FlowPanel docFooter;
     @UiField
-    FlowPanel sitebar;
+    FlowPanel docHeader;
     @UiField
-    SplitLayoutPanel groupSpace;
+    FlowPanel docSubheader;
     @UiField
-    DockLayoutPanel splitCenter;
+    FlowPanel entityFooter;
     @UiField
-    DockLayoutPanel splitEast;
+    FlowPanel entityHeader;
     @UiField
-    VerticalPanel entityToolsSouth;
+    VerticalPanel entityToolsCenter;
     @UiField
     VerticalPanel entityToolsNorth;
     @UiField
-    VerticalPanel entityToolsCenter;
+    VerticalPanel entityToolsSouth;
     @UiField
-    FlowPanel entityHeader;
+    SplitLayoutPanel groupSpace;
     @UiField
-    FlowPanel entityFooter;
+    SimplePanel homeSpace;
     @UiField
-    FlowPanel docHeader;
+    DockLayoutPanel mainpanel;
     @UiField
-    FlowPanel docSubheader;
+    Frame publicSpace;
     @UiField
-    FlowPanel docFooter;
+    FlowPanel sitebar;
+    private final SimpleActionToolbar siteBarToolbar;
     @UiField
-    SimplePanel userSpace;
+    DockLayoutPanel splitCenter;
     @UiField
-    Frame publicSpace;
+    DockLayoutPanel splitEast;
     @UiField
-    SimplePanel homeSpace;
-    @UiField
     TabLayoutPanel tabs;
 
-    public WsArmorImpl() {
+    @UiField
+    SimplePanel userSpace;
+
+    @Inject
+    public WsArmorImpl(Provider<SimpleActionToolbar> toolbarProvider) {
         initWidget(uiBinder.createAndBindUi(this));
         groupSpace.setWidgetMinSize(splitEast, 150);
         tabs.setStyleName("k-spaces");
         homeSpace.add(RootPanel.get("k-home-ini"));
         publicSpace.setUrl("http://www.google.com");
-        userSpace.add(new Label("Wave client"));
+        userSpace.add(new Label("User space"));
+        siteBarToolbar = toolbarProvider.get();
+        sitebar.add(siteBarToolbar);
     }
 
     @Override
@@ -108,27 +118,32 @@
     }
 
     @Override
-    public ForIsWidget getSitebar() {
-        return sitebar;
+    public IsActionExtensible getSiteActionsToolbar() {
+        return siteBarToolbar;
     }
 
     @Override
-    public void selectHomeSpace() {
-        tabs.selectTab(homeSpace);
+    public ForIsWidget getSitebar() {
+        return sitebar;
     }
 
     @Override
-    public void selectUserSpace() {
-        tabs.selectTab(userSpace);
+    public void selectGroupSpace() {
+        tabs.selectTab(groupSpace);
     }
 
     @Override
-    public void selectGroupSpace() {
-        tabs.selectTab(groupSpace);
+    public void selectHomeSpace() {
+        tabs.selectTab(homeSpace);
     }
 
     @Override
     public void selectPublicSpace() {
         tabs.selectTab(publicSpace);
     }
+
+    @Override
+    public void selectUserSpace() {
+        tabs.selectTab(userSpace);
+    }
 }

Modified: trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java	2011-01-14 04:11:00 UTC (rev 1182)
+++ trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java	2011-01-16 03:05:58 UTC (rev 1183)
@@ -36,6 +36,8 @@
 import org.ourproject.kune.rack.dock.Dock;
 import org.ourproject.kune.rack.dock.RequestMatcher;
 
+import cc.kune.wave.server.WaveStarter;
+
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 
@@ -110,9 +112,9 @@
         module.configure(builder);
 
         final Rack rack = builder.getRack();
-        // WaveStarter waveStarter = new WaveStarter();
+        WaveStarter waveStarter = new WaveStarter();
         final Injector injector = installInjector(filterConfig, rack);
-        // waveStarter.run(injector);
+        waveStarter.runMain(injector);
         startContainerListeners(rack.getListeners(), injector);
         docks = rack.getDocks();
         excludes = rack.getExcludes();

Added: trunk/src/main/resources/jaas.config
===================================================================
--- trunk/src/main/resources/jaas.config	                        (rev 0)
+++ trunk/src/main/resources/jaas.config	2011-01-16 03:05:58 UTC (rev 1183)
@@ -0,0 +1,3 @@
+Wave {
+  org.waveprotocol.box.server.authentication.AccountStoreLoginModule required debug=true;
+};




More information about the kune-commits mailing list