r1178 - in trunk: . img/webtemplate script src/main/java/cc/kune src/main/java/cc/kune/core src/main/java/cc/kune/core/client src/main/java/cc/kune/core/client/errors src/main/java/cc/kune/core/client/i18n src/main/java/cc/kune/core/client/init src/main/java/cc/kune/core/client/notify src/main/java/cc/kune/core/client/notify/alerts src/main/java/cc/kune/core/client/notify/confirm src/main/java/cc/kune/core/client/notify/msgs src/main/java/cc/kune/core/client/notify/spiner src/main/java/cc/kun
Author: vjrj_ Date: 2011-01-09 05:44:25 +0100 (Sun, 09 Jan 2011) New Revision: 1178 Added: trunk/src/main/java/cc/kune/core/client/i18n/I18nReadyEvent.java trunk/src/main/java/cc/kune/core/client/init/AppStartEvent.java trunk/src/main/java/cc/kune/core/client/init/AppStopEvent.java trunk/src/main/java/cc/kune/core/client/notify/alerts/ trunk/src/main/java/cc/kune/core/client/notify/alerts/AlertEvent.java trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterPresenter.java trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterViewImpl.java trunk/src/main/java/cc/kune/core/client/notify/confirm/ trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmPresenter.java trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmViewImpl.java trunk/src/main/java/cc/kune/core/client/notify/msgs/ trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifyEvent.java trunk/src/main/java/cc/kune/core/client/notify/spiner/ trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressHideEvent.java trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressShowEvent.java trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerPresenter.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/state/UserSignInEvent.java trunk/src/main/java/cc/kune/core/client/state/UserSignOutEvent.java trunk/src/main/java/cc/kune/msgs/ trunk/src/main/java/cc/kune/msgs/KuneMsgs.gwt.xml trunk/src/main/java/cc/kune/msgs/KuneMsgsTests.gwt.xml trunk/src/main/java/cc/kune/msgs/client/ trunk/src/main/java/cc/kune/msgs/client/KuneMessagesSampleEntryPoint.java trunk/src/main/java/cc/kune/msgs/client/msgs/ trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.java trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.ui.xml trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessageLevel.java trunk/src/main/java/cc/kune/msgs/client/panel/ trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.java trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.ui.xml trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPresenter.java trunk/src/main/java/cc/kune/msgs/client/resources/ trunk/src/main/java/cc/kune/msgs/client/resources/UserMessageImages.java trunk/src/main/java/cc/kune/msgs/client/resources/error.png trunk/src/main/java/cc/kune/msgs/client/resources/important.png trunk/src/main/java/cc/kune/msgs/client/resources/info.png trunk/src/main/java/cc/kune/msgs/client/resources/remove-grey.png trunk/src/main/java/cc/kune/msgs/client/resources/remove-over.png trunk/src/main/java/cc/kune/msgs/client/resources/remove.png trunk/src/main/java/cc/kune/msgs/client/resources/severe.png trunk/src/main/java/cc/kune/msgs/client/resources/warning.png trunk/src/main/java/cc/kune/msgs/public/ trunk/src/main/java/cc/kune/msgs/public/kune-message.css trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcControllerImpl.java trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProvider.java trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProviderSamePort.java trunk/src/main/java/org/ourproject/kune/app/server/wave/Trio.java trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveModule.java trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarter.java trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarterModule.java Removed: trunk/src/main/java/cc/kune/core/client/i18n/I18nReady.java trunk/src/main/java/cc/kune/core/client/init/AppStart.java trunk/src/main/java/cc/kune/core/client/init/AppStop.java trunk/src/main/java/cc/kune/core/client/notify/Alert.java trunk/src/main/java/cc/kune/core/client/notify/ProgressHide.java trunk/src/main/java/cc/kune/core/client/notify/ProgressShow.java trunk/src/main/java/cc/kune/core/client/notify/SpinerPresenter.java trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.java trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.ui.xml trunk/src/main/java/cc/kune/core/client/notify/UserNotifierPresenter.java trunk/src/main/java/cc/kune/core/client/notify/UserNotifierViewImpl.java trunk/src/main/java/cc/kune/core/client/notify/UserNotify.java trunk/src/main/java/cc/kune/core/client/state/UserSignIn.java trunk/src/main/java/cc/kune/core/client/state/UserSignOut.java Modified: trunk/TODO trunk/img/webtemplate/web_template-2011.svg trunk/pom.xml trunk/script/css-update.sh trunk/script/mvn-eclipse.sh trunk/src/main/java/cc/kune/Kune.gwt.xml 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/errors/ErrorHandler.java trunk/src/main/java/cc/kune/core/client/init/AppStarterDefault.java trunk/src/main/java/cc/kune/core/client/state/ContentProviderDefault.java trunk/src/main/java/cc/kune/core/client/state/StateManagerDefault.java trunk/src/main/java/cc/kune/core/public/images/kune-logo-16px.png trunk/src/main/java/cc/kune/core/public/ws.html trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java trunk/src/main/java/org/ourproject/kune/rack/filters/AbstractInjectedFilter.java trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/ServletServiceFilter.java trunk/src/main/resources/wave-server.properties trunk/src/main/webapp/WEB-INF/web.xml Log: NEW - # 10: Wave server code update http://kune.ourproject.org/issues/ticket/10 NEW - # 11: New messages widget http://kune.ourproject.org/issues/ticket/11 Modified: trunk/TODO =================================================================== --- trunk/TODO 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/TODO 2011-01-09 04:44:25 UTC (rev 1178) @@ -231,6 +231,11 @@ ** vjrj <v> IconHyperlink.java and IconLabel.java to gwt1.5 * MID-TERM +** TODO junit + guice utils: +https://code.google.com/p/guiceberry/ +https://code.google.com/p/atunit/ +** TODO Study OSGI + guice: +https://code.google.com/p/peaberry/ ** Use hibernate cache http://ehcache.sourceforge.net/documentation/openjpa_provider.html http://ehcache.sourceforge.net/documentation/hibernate.html Modified: trunk/img/webtemplate/web_template-2011.svg =================================================================== --- trunk/img/webtemplate/web_template-2011.svg 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/img/webtemplate/web_template-2011.svg 2011-01-09 04:44:25 UTC (rev 1178) @@ -52,15 +52,15 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="1" - inkscape:cx="174.00056" - inkscape:cy="641.30184" + inkscape:cx="475.0028" + inkscape:cy="695.87654" inkscape:current-layer="layer1" inkscape:document-units="px" showgrid="false" inkscape:window-width="1280" - inkscape:window-height="977" + inkscape:window-height="745" inkscape:window-x="0" - inkscape:window-y="20" + inkscape:window-y="1024" inkscape:window-maximized="1" inkscape:snap-bbox="true" inkscape:bbox-paths="true" @@ -2209,7 +2209,7 @@ inkscape:export-xdpi="90" inkscape:export-ydpi="90" /> <rect - style="color:#000000;fill:#feb295;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + style="color:#000000;fill:#a40603;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4635" width="87.859406" height="19.905512" @@ -2305,7 +2305,7 @@ id="g5365"> <path transform="matrix(0.102065,0,0,0.102065,387.7515,-17.05636)" - d="m 277.35793,332.62314 a 26.82268,26.82268 0 1 1 -53.64536,0 26.82268,26.82268 0 1 1 53.64536,0 z" + d="m 277.35793,332.62314 c 0,14.81376 -12.00893,26.82268 -26.82268,26.82268 -14.81376,0 -26.82268,-12.00892 -26.82268,-26.82268 0,-14.81376 12.00892,-26.82268 26.82268,-26.82268 14.81375,0 26.82268,12.00892 26.82268,26.82268 z" sodipodi:ry="26.82268" sodipodi:rx="26.82268" sodipodi:cy="332.62314" @@ -2315,7 +2315,7 @@ sodipodi:type="arc" /> <path transform="matrix(0.05245387,0,0,0.05245387,400.1808,-0.554549)" - d="m 277.35793,332.62314 a 26.82268,26.82268 0 1 1 -53.64536,0 26.82268,26.82268 0 1 1 53.64536,0 z" + d="m 277.35793,332.62314 c 0,14.81376 -12.00893,26.82268 -26.82268,26.82268 -14.81376,0 -26.82268,-12.00892 -26.82268,-26.82268 0,-14.81376 12.00892,-26.82268 26.82268,-26.82268 14.81375,0 26.82268,12.00892 26.82268,26.82268 z" sodipodi:ry="26.82268" sodipodi:rx="26.82268" sodipodi:cy="332.62314" @@ -2360,7 +2360,7 @@ inkscape:export-xdpi="90" inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/webtemplate/web_template-2011.png" y="132.04793" - x="399.09167" + x="402.09167" height="1" width="122" id="rect5387" @@ -2371,7 +2371,7 @@ id="rect5389" width="112.5" height="1" - x="536.09167" + x="541.09167" y="-133.04793" inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/webtemplate/web_template-2011.png" inkscape:export-xdpi="90" @@ -2640,7 +2640,7 @@ transform="translate(-751,-12)"> <path transform="translate(0,-3)" - d="m 333,232 a 11,11 0 1 1 -22,0 11,11 0 1 1 22,0 z" + d="m 333,232 c 0,6.07513 -4.92487,11 -11,11 -6.07513,0 -11,-4.92487 -11,-11 0,-6.07513 4.92487,-11 11,-11 6.07513,0 11,4.92487 11,11 z" sodipodi:ry="11" sodipodi:rx="11" sodipodi:cy="232" @@ -3347,7 +3347,7 @@ inkscape:export-xdpi="90" inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/webtemplate/web_template-2011.png" y="-133.04793" - x="663.09167" + x="666.09167" height="1" width="48.90947" id="rect23163" @@ -3355,7 +3355,7 @@ transform="scale(1,-1)" /> <image y="117.04793" - x="710.00116" + x="715.00116" id="image24737" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAJ1JREFU OI3dkjEKxCAQRX9EmWIOYJEu9opFyB28cU5hmVukFwW32rC7MWHZFIH93f/MPPjDdLXWigsSV5b/ BCA/g5QS5nlGKQWv9xVCIIQAIjoHEBH6vkeM8S333u+WgYMKzjkw8+aZGdbaZoUmQEqJaZo2P44j lFJNwK7CU8MwYFkWlFJgjDkaQ3f2ieu6IucMrfVvgG90/yPdD3gAkHQqk0hfw2IAAAAASUVORK5C YII= " height="16" @@ -4443,15 +4443,7 @@ y="112.88816" x="135.45085" id="image4632" - xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAV5JREFU -OI2lk01OAkEQhb8axgGG30EiEEiMLoxuvK1X8ABewDsQdy4gBhNiJgg4IuhMl4vWAQSFxFp2+n2v -XnW1mJsr5R/l/jyQSh3qbai1oVhFb6/3B0jnDDrnUArAcTZvOw4Ysx0grRM4uQTXQx/vkXAAk3CD -IRkXTeJ1gJQC6FxAxoX+HfS6bB2MMeB5FvI+t00BELQg56PDPtrr/pmZJIaMi2TcJUArddteOPhb -DKgaEAe83BIgfhmSD5huZt4aAyyE7yEakx7sVQcemGQlwssI1IBf3qkVL2fNkhWARCPbRdDc7Z7N -W4CaJYDREH0dQ62JNI5/d/fLkC9Z8dczugA6myJPD2jrFI6OES8P09BGAyRXhKwPhbIVLmbpMqWb -qOEASWI4bKGlGhSq0IgRk9i8SQzzCKIx+halXa39BX0eIvMIKVTtQL2sFc8msHiD2TTdwK0AwNJX -HHbVJ0YdhWYwKlACAAAAAElFTkSuQmCC -" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAV5JREFU OI2lk01OAkEQhb8axgGG30EiEEiMLoxuvK1X8ABewDsQdy4gBhNiJgg4IuhMl4vWAQSFxFp2+n2v XnW1mJsr5R/l/jyQSh3qbai1oVhFb6/3B0jnDDrnUArAcTZvOw4Ysx0grRM4uQTXQx/vkXAAk3CD IRkXTeJ1gJQC6FxAxoX+HfS6bB2MMeB5FvI+t00BELQg56PDPtrr/pmZJIaMi2TcJUArddteOPhb DKgaEAe83BIgfhmSD5huZt4aAyyE7yEakx7sVQcemGQlwssI1IBf3qkVL2fNkhWARCPbRdDc7Z7N W4CaJYDREH0dQ62JNI5/d/fLkC9Z8dczugA6myJPD2jrFI6OES8P09BGAyRXhKwPhbIVLmbpMqWb qOEASWI4bKGlGhSq0IgRk9i8SQzzCKIx+halXa39BX0eIvMIKVTtQL2sFc8msHiD2TTdwK0AwNJX HHbVJ0YdhWYwKlACAAAAAElFTkSuQmCC " height="16" width="16" /> <text @@ -4470,12 +4462,194 @@ sodipodi:role="line" style="font-size:16px;font-weight:bold;-inkscape-font-specification:Ubuntu Bold">Loading</tspan></text> <rect - style="color:#000000;fill:#feb295;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + style="color:#000000;fill:#a40603;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4721" width="87.663948" height="3.7137473" x="130.07883" y="111.25339" /> + <rect + style="color:#000000;fill:#501616;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect4526" + width="13" + height="6" + x="17" + y="139" /> + <g + id="g4532" + style="fill:#892c00;fill-opacity:1;opacity:0.85"> + <rect + rx="5" + ry="5" + y="110.34837" + x="4.9808998" + height="182.65163" + width="322.0191" + id="rect4520" + style="color:#000000;fill:#892c00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <rect + y="110.5" + x="5" + height="45" + width="71" + id="rect4522" + style="color:#000000;fill:#892c00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + <rect + style="color:#000000;fill:#892c00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect4528" + width="71" + height="45" + x="5" + y="247.5" /> + <rect + y="110.5" + x="256" + height="45" + width="71" + id="rect4530" + style="color:#000000;fill:#892c00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + </g> + <rect + style="opacity:0.79000004999999984;color:#000000;fill:#fff0e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" + id="rect4538" + width="294.9017" + height="42" + x="17" + y="141" + ry="3" + rx="3" /> + <use + x="0" + y="0" + xlink:href="#rect4538" + id="use4540" + transform="translate(0,49)" + width="1024" + height="768" /> + <use + x="0" + y="0" + xlink:href="#use4540" + id="use4542" + transform="translate(0,49)" + width="1024" + height="768" /> + <text + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/webtemplate/web_template-2011.png" + 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:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#ffe9da;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="15.226257" + y="133.22296" + id="text4548" + sodipodi:linespacing="100%"><tspan + id="tspan4550" + sodipodi:role="line" + x="15.226257" + y="133.22296">Messages</tspan></text> + <image + y="140" + x="17" + id="image5750" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAWpJREFU +OI3V07svw1EUB/Bv65FqtKrUY0A8QjQIaRCbgUZSoQkSiSYSj8mASEgHg8dfYDWRWjvUahAj0QRD +k9+AySAsIvq7j985tqYJ9UgtTnJyh5v7Od/hHhszI5+y5/X6L4DCXBf3p7NTTLTGxGNNQ7HHXyW4 +PYm4SamtsvrxflJq/asEnwKk1Iq7LtTuru2BFmo+FQ/3/hgwEpN+LdSyq9ID6yWB6q4FjyXk5k1s +pOhbIBUP27WQUZ9/xgszifPDI5R60tCmHNWmHPsWsIQMOiu6Iq7yN5C4A5hgvV6gcXDNpoXYOd8b +cOUErg6CxdqUu576btDbNZjSCEy0geQDHA4D1Z3T7VrI1ZyAJeSityUUcLqewPoZsBXgMm4AIJBp +wNfaAEuopbPtDn82kPkH2hRRn38csN/D7vYBYPTNhTNzCkqa0TS8UWUcb28BmPoICOlI7k+kmRhM +lNWcOUEEZq7JTmD7/8v0DkyzqBlaCormAAAAAElFTkSuQmCC +" + height="40" + width="40" /> + <flowRoot + xml:space="preserve" + id="flowRoot5765" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;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:#280b0b;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" + transform="translate(4.170296,-7.003638)"><flowRegion + id="flowRegion5767"><rect + id="rect5769" + width="272.94324" + height="32.526917" + x="51.618793" + y="156.35263" + style="font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;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:#280b0b;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" /></flowRegion><flowPara + id="flowPara5771">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</flowPara></flowRoot> <image + y="171.03604" + x="303.15076" + id="image8263" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAsNJREFU +OI1tk7tPk1EUwH/fow+0NRIjg48YGgOt4KOp4aWk2iBqYkLixmJw8T9w6cBgpHFwMHEwLsRBB/AB +MbiYUDSasIjBxA4OKLXUFkppsR/C1373uw6UCupNbm5ykt/vnHtOjsK28zgc1tNv344IuMp/jgaT +Ai5HobIVU/6Cnzb5fJcu3rjhVjQNACklCIG0LN49emR+mpt7I+BKFKyaoAo/9/t8vZHr192LU1OY ++fyO7E6vl4bOTt6NjpqJZHJSQF8ULG04FHJkp6dfBI4e7Y0MDGzCa2tgWTsEQlVZT6cJRCL62sLC +4ZVS6fRAOPxM68pkXh5rauo5f+2aOxuPYzU0oMdikEwis9nNvx8/zt5796gkEhifP3MsHNaNVOrI +t0QiqPWo6pP+mzf1zOvXlAsF1L4+1NZWlM5O+PoVdd8+9gwN4aqvR5GS0tQUvwoFWsJhfebjx4Cu +KApISblQ2Cx1eBhcLly9vbgHB9EVBafHgxmPk797FxvYMAykECiA+s+spEQ8eICcmcG5axdOrxdr +dpZcLIawbWzABmS1R/8KAK2lBXcohK7rOBwOdgeD1IVCyCosymXEwsIfgRSiBqutrXhv38bp9bIR +j7M2MYHT48F3/z6ejg7MXA7jyxfkz58A6FLKTZthICyLuvZ2XFV4eWgI2zTRgP39/dSdPMnGw4eg +adjVpNoFKbsrxeKhQHu7VkokKI2PU/n+naVbtyhnMpSXl8mNjbE+P0/yzh0UTcPn95NeWbG/ra7m +lRg4NXh1orGxuy0YdKXicdaLxVqztl/F4aCxuZl0oSDep9NLNnRpkyAiMJIrFs+ahnEw0NamlxYX +qZjmDlh1OGj0+5nP58X0jx8pGzqikKot01Yl/gMHus+cOuVShMC2LKRl1d5EMml9yGbnbDgbheUd +27hdIqDnf+NVYdaGc1FY3Yr9BsdNUva1UTzZAAAAAElFTkSuQmCC +" + height="16" + width="16" + style="fill:#cccccc;opacity:0.81" /> + <g + transform="translate(804.21116,-270.59772)" + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/webtemplate/kune-logo.png" + id="g8266" + style="opacity:0.5;display:inline"> + <path + style="font-size:58.13353348px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#a56941;fill-opacity:1;stroke:none;font-family:Emblem" + d="m 206.0077,119.17481 c -0.23779,0 -0.46633,8.7e-4 -0.69567,0.0158 -0.0214,0.004 -0.0417,0.0118 -0.0632,0.0158 -0.21349,0.0399 -0.4241,0.0739 -0.6482,0.0791 -0.0311,0.004 -0.064,-0.005 -0.0949,0 -1.82915,0.27537 -3.37459,1.06959 -4.61662,2.38736 -1.45043,1.53186 -2.18178,3.36697 -2.18178,5.50197 0,2.15893 0.73135,4.00649 2.18178,5.53358 1.57013,1.64669 3.61017,2.46636 6.11859,2.46636 1.33077,0 2.61016,-0.33065 3.82604,-0.99601 1.21588,-0.64624 2.27312,-1.56093 3.1779,-2.71936 l -2.73518,-1.51778 c -1.17765,1.57013 -2.6245,2.35569 -4.34781,2.35569 -1.19676,0 -2.26981,-0.3882 -3.1937,-1.1541 -0.93824,-0.76596 -1.40711,-1.69889 -1.40711,-2.81422 l 12.5059,0 0,-0.63244 c 0,-2.70464 -0.91615,-4.8704 -2.73518,-6.49798 -1.53185,-1.35475 -3.22873,-2.02374 -5.09086,-2.02374 z m -58.15001,0.11067 0,6.0553 -2.1186,0 0,3.09885 2.1186,0 0,6.32407 3.22527,0 0,-6.32407 1.94464,0 3.96838,6.32407 3.82609,0 -5.32806,-8.03161 5.09091,-7.14623 -3.90514,0 -3.93676,5.75492 -1.66006,0 0,-6.0553 -3.22527,0 z m 39.573,0 c -0.55523,0.0991 -1.07256,0.26037 -1.5494,0.50596 -0.80423,0.43082 -1.43916,0.99904 -1.91307,1.7075 l 0,-1.91308 -3.24108,0 0,15.17784 3.24108,0 0,-8.5059 c 0,-1.21588 0.3431,-2.14881 1.02768,-2.81422 0.68934,-0.66536 1.5632,-0.99601 2.64032,-0.99607 1.13926,6e-5 2.02899,0.30575 2.65612,0.93283 0.62708,0.62713 0.93277,1.60993 0.93277,2.94069 l 0,8.44267 3.24113,0 0,-9.1541 c -5e-5,-1.86218 -0.56822,-3.40069 -1.70754,-4.61662 -0.85448,-0.91187 -1.84318,-1.4795 -2.97232,-1.7075 l -2.35569,0 z m -24.56913,0.30038 0,8.79053 c 0,2.0584 0.69395,3.72268 2.08698,4.99601 1.29249,1.19676 2.89338,1.80235 4.77467,1.80235 1.90046,0 3.49322,-0.60559 4.79053,-1.80235 1.39298,-1.27333 2.08693,-2.93761 2.08693,-4.99601 l 0,-8.79053 -3.24108,0 0,8.50591 c -6e-5,1.12015 -0.34316,2.03148 -1.02768,2.73517 -0.70851,0.72762 -1.56992,1.09092 -2.6087,1.09092 -1.0005,0 -1.86857,-0.36806 -2.57708,-1.09092 -0.70369,-0.72762 -1.04349,-1.63413 -1.04343,-2.73517 l 0,-8.50591 -3.24114,0 z m 42.73504,2.49803 c 1.05794,0 1.98172,0.2966 2.76679,0.8854 0.76114,0.60314 1.32167,1.48182 1.67593,2.64031 l -8.71148,0 c 0.25371,-1.11539 0.78014,-1.98162 1.5652,-2.60869 0.76114,-0.60797 1.66002,-0.91702 2.70356,-0.91702 z" + id="path8268" + inkscape:export-filename="/home/vjrj/proyectos/ourproject.org/kune/svn/trunk/img/kune-logo-16px.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + inkscape:connector-curvature="0" /> + <g + id="g8270" + transform="matrix(0.1111494,0,0,0.111008,121.5678,22.515968)" + inkscape:export-filename="/home/vjrj/proyectos/ourproject.org/kune/svn/trunk/img/kune-logo-16px.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <path + style="color:#000000;fill:#69312f;fill-opacity:1;fill-rule:nonzero;stroke:#dd8a3d;stroke-width:109.23953247;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block" + d="m 60.321717,411.99998 377.014613,0" + id="path8272" + transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffdb6b;stroke-width:109.23950958;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block" + d="m 252.61203,788.60332 0,-377.01178" + id="path8274" + transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:#69312f;fill-opacity:1;fill-rule:nonzero;stroke:#69312f;stroke-width:109.23951721;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block" + d="m 252.86937,597.15755 377.0124,0" + id="path8276" + transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#cc6633;stroke-width:109.23950195;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block" + d="m 437.45588,596.97447 0,-377.01491" + id="path8278" + transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)" + inkscape:connector-curvature="0" /> + <path + style="color:#000000;fill:#69312f;fill-opacity:1;fill-rule:nonzero;stroke:#dd8a3d;stroke-width:109.23947906;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block" + d="m 372.87905,411.27704 64.93441,0" + id="path8280" + transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)" + inkscape:connector-curvature="0" /> + </g> + </g> </g> <g inkscape:groupmode="layer" Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/pom.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -10,7 +10,7 @@ <url>http://kune.ourproject.org</url> <properties> <!-- Available versions: http://repo1.maven.org/maven2/com/google/gwt/gwt-dev/ --> - <gwt.version>2.1.0</gwt.version> + <gwt.version>2.1.1</gwt.version> <maven.compiler.source>1.6</maven.compiler.source> <maven.compiler.target>1.6</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> @@ -78,6 +78,10 @@ <url>http://google-web-toolkit.googlecode.com/svn/2.1.0/gwt/maven/</url> <name>Google Web Toolkit Repository</name> </repository> + <repository> + <id>gwt-maven-rewraps</id> + <url>http://gwt-maven-rewraps.googlecode.com/hg/</url> + </repository> <!-- cc --> <repository> <id>dyndns-repo</id> @@ -244,6 +248,11 @@ <artifactId>gwtp</artifactId> <version>0.4</version> </dependency> + <dependency> + <groupId>org.adamtacy</groupId> + <artifactId>gwt-fx</artifactId> + <version>r464</version> + </dependency> <!-- cc --> <dependency> <groupId>com.gwtext</groupId> @@ -500,7 +509,7 @@ <dependency> <groupId>org.waveprotocol</groupId> <artifactId>waveinabox-server</artifactId> - <version>0.0.3.2</version> + <version>0.0.3.2</version> </dependency> <dependency> <groupId>commons-cli</groupId> @@ -521,55 +530,55 @@ <!-- <type>jar</type> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>com.google.code.guice</groupId> --> - <!-- <artifactId>guice-assistedinject</artifactId> --> - <!-- <version>2.0</version> --> + <!-- <groupId>com.google.code.guice</groupId> --> + <!-- <artifactId>guice-assistedinject</artifactId> --> + <!-- <version>2.0</version> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>jline<!/groupId> --> - <!-- <artifactId>jline</artifactId> --> - <!-- <version>0.9.94</version> --> - <!-- <type>jar</type> --> + <!-- <groupId>jline<!/groupId> --> + <!-- <artifactId>jline</artifactId> --> + <!-- <version>0.9.94</version> --> + <!-- <type>jar</type> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>org.gnu.inet</groupId> --> - <!-- <artifactId>libidn</artifactId> --> - <!-- <version>1.15</version> --> - <!-- <type>jar</type> --> + <!-- <groupId>org.gnu.inet</groupId> --> + <!-- <artifactId>libidn</artifactId> --> + <!-- <version>1.15</version> --> + <!-- <type>jar</type> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>com.google.protobuf</groupId> --> - <!-- <artifactId>protobuf-java</artifactId> --> - <!-- <version>2.3.0</version> --> - <!-- <type>jar</type> --> + <!-- <groupId>com.google.protobuf</groupId> --> + <!-- <artifactId>protobuf-java</artifactId> --> + <!-- <version>2.3.0</version> --> + <!-- <type>jar</type> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>xpp3</groupId> --> - <!-- <artifactId>xpp3</artifactId> --> - <!-- <version>1.1.4c</version> --> - <!-- <type>jar</type> --> + <!-- <groupId>xpp3</groupId> --> + <!-- <artifactId>xpp3</artifactId> --> + <!-- <version>1.1.4c</version> --> + <!-- <type>jar</type> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>xpp3</groupId> --> - <!-- <artifactId>xpp3_xpath</artifactId> --> - <!-- <version>1.1.4c</version> --> - <!-- <type>jar</type> --> + <!-- <groupId>xpp3</groupId> --> + <!-- <artifactId>xpp3_xpath</artifactId> --> + <!-- <version>1.1.4c</version> --> + <!-- <type>jar</type> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>aopalliance</groupId> --> - <!-- <artifactId>aopalliance</artifactId> --> - <!-- <version>1.0</version> --> - <!-- <type>jar</type> --> + <!-- <groupId>aopalliance</groupId> --> + <!-- <artifactId>aopalliance</artifactId> --> + <!-- <version>1.0</version> --> + <!-- <type>jar</type> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>org.wave-protocol</groupId> --> - <!-- <artifactId>xmpp</artifactId> --> - <!-- <version>1.0.0</version> --> + <!-- <groupId>org.wave-protocol</groupId> --> + <!-- <artifactId>xmpp</artifactId> --> + <!-- <version>1.0.0</version> --> <!-- </dependency> --> <!-- <dependency> --> - <!-- <groupId>org.wave-protocol</groupId> --> - <!-- <artifactId>whack</artifactId> --> - <!-- <version>1.0.0</version> --> + <!-- <groupId>org.wave-protocol</groupId> --> + <!-- <artifactId>whack</artifactId> --> + <!-- <version>1.0.0</version> --> <!-- </dependency> --> <dependency> <groupId>com.google.guava</groupId> @@ -580,8 +589,7 @@ <distributionManagement> <repository> <id>kune.ourproject.org</id> - <url>scpexe://kune.ourproject.org/home/groups/kune/htdocs/mavenrepo/ - </url> + <url>scpexe://kune.ourproject.org/home/groups/kune/htdocs/mavenrepo/ </url> </repository> </distributionManagement> <issueManagement> @@ -732,23 +740,17 @@ <scanIntervalSeconds>0</scanIntervalSeconds> </configuration> </plugin> + <!-- pensar/probar: openjpa-maven-plugin --> + <!-- gwtp & GenEvent need this plugin --> + <!-- maybe test: http://mojo.codehaus.org/apt-maven-plugin/index.html --> + <!-- instead of this: https://code.google.com/p/maven-annotation-plugin/ --> + <!-- <plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId> + <version>1.3.7</version> <executions> <execution> <id>process</id> <goals> + <goal>process</goal> </goals> <phase>generate-sources</phase> </execution> + </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>apt-maven-plugin</artifactId> + <version>1.0-alpha-4</version> <executions> <execution> <goals> <goal>process</goal> + <goal>test-process</goal> </goals> </execution> </executions> </plugin> --> <plugin> - <!-- pensar/probar: openjpa-maven-plugin --> - <!-- gwtp & GenEvent need this plugin --> - <groupId>org.bsc.maven</groupId> - <artifactId>maven-processor-plugin</artifactId> - <version>1.3.7</version> - <executions> - <execution> - <id>process</id> - <goals> - <goal>process</goal> - </goals> - <phase>generate-sources</phase> - </execution> - </executions> - </plugin> - <plugin> <!-- =roo --> <groupId>org.codehaus.mojo</groupId> <artifactId>gwt-maven-plugin</artifactId> @@ -934,4 +936,4 @@ </plugin> </plugins> </reporting> -</project> +</project> \ No newline at end of file Modified: trunk/script/css-update.sh =================================================================== --- trunk/script/css-update.sh 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/script/css-update.sh 2011-01-09 04:44:25 UTC (rev 1178) @@ -2,9 +2,11 @@ APPPUB=src/main/java/org/ourproject/kune/app/public #WEBAPP=src/main/webapp/gwt/ws -$PWD/script/css-compact-and-tidy.sh +## > $PWD/script/css-compact-and-tidy.sh #rsync -aC $APPPUB/ws.html $WEBAPP/ws.html #rsync -aC $APPPUB/js/ $WEBAPP/js #rsync -aC $APPPUB/css/ $WEBAPP/css #rsync -aC $APPPUB/images/ $WEBAPP/images + +cp src/main/java/cc/kune/msgs/public/kune-message.css target/kune-0.0.7/ws/ Modified: trunk/script/mvn-eclipse.sh =================================================================== --- trunk/script/mvn-eclipse.sh 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/script/mvn-eclipse.sh 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,3 +1,5 @@ mvn eclipse:eclipse -Dgwt.compiler.skip=true perl -p -i -e 's/<\/classpath>//g' .classpath +echo -en " <classpathentry kind=\"src\" path=\"target/generated-sources/apt\" including=\"**/*.java\"/>" >> .classpath echo -en " <classpathentry kind=\"con\" path=\"com.google.gwt.eclipse.core.GWT_CONTAINER\"/>\n</classpath>" >> .classpath + Modified: trunk/src/main/java/cc/kune/Kune.gwt.xml =================================================================== --- trunk/src/main/java/cc/kune/Kune.gwt.xml 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/Kune.gwt.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -5,6 +5,7 @@ <inherits name='com.google.gwt.logging.Logging' /> <inherits name="cc.kune.core.Core" /> <inherits name="com.calclab.suco.Suco" /> + <inherits name="org.adamtacy.GWTEffects"></inherits> <source path='client' excludes="**/*Test.java,**/*Tests.java,**/*MockProvider.java" /> <!-- <source path='shared'/> --> Modified: trunk/src/main/java/cc/kune/core/Core.gwt.xml =================================================================== --- trunk/src/main/java/cc/kune/core/Core.gwt.xml 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/Core.gwt.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -12,6 +12,7 @@ <inherits name="com.google.gwt.user.User" /> <!-- <inherits name='com.mvp4g.Mvp4gModule' /> --> <inherits name="cc.kune.core.ws.armor.WsArmor" /> + <inherits name="cc.kune.msgs.KuneMsgs" /> <inherits name="org.ourproject.common.Common" /> <inherits name="com.extjs.gxt.ui.GXT" /> <inherits name="com.calclab.suco.Suco" /> Modified: trunk/src/main/java/cc/kune/core/client/CoreGinModule.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -7,11 +7,11 @@ import cc.kune.core.client.init.AppStarter; import cc.kune.core.client.init.AppStarterDefault; import cc.kune.core.client.init.PrefetchUtilities; -import cc.kune.core.client.notify.SpinerPresenter; -import cc.kune.core.client.notify.SpinerViewImpl; -import cc.kune.core.client.notify.UserNotifierPresenter; -import cc.kune.core.client.notify.UserNotifierPresenter.UserNotifierProxy; -import cc.kune.core.client.notify.UserNotifierViewImpl; +import cc.kune.core.client.notify.msgs.UserNotifierPresenter; +import cc.kune.core.client.notify.msgs.UserNotifierPresenter.UserNotifierProxy; +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.logo.SiteLogoPresenter; import cc.kune.core.client.sitebar.logo.SiteLogoViewImpl; import cc.kune.core.client.state.ContentProvider; @@ -28,6 +28,8 @@ import cc.kune.core.shared.i18n.I18nTranslationService; import cc.kune.core.ws.armor.client.WsArmor; import cc.kune.core.ws.armor.client.WsArmorImpl; +import cc.kune.msgs.client.panel.UserMessagesPanel; +import cc.kune.msgs.client.panel.UserMessagesPresenter; import com.google.inject.Singleton; import com.gwtplatform.mvp.client.DefaultEventBus; @@ -67,6 +69,9 @@ bindPresenter(SiteLogoPresenter.class, SiteLogoPresenter.SiteLogoView.class, SiteLogoViewImpl.class, SiteLogoPresenter.SiteLogoProxy.class); + bind(UserMessagesPresenter.class).in(Singleton.class); + bind(UserMessagesPanel.class).in(Singleton.class); + bind(WsArmorImpl.class).in(Singleton.class); bind(WsArmor.class).to(WsArmorImpl.class); bind(Session.class).to(SessionDefault.class).in(Singleton.class); Modified: trunk/src/main/java/cc/kune/core/client/CoreGinjector.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/CoreGinjector.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/CoreGinjector.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -2,8 +2,8 @@ import cc.kune.core.client.cookies.CookiesManager; import cc.kune.core.client.errors.ErrorHandler; -import cc.kune.core.client.notify.SpinerPresenter; -import cc.kune.core.client.notify.UserNotifierPresenter; +import cc.kune.core.client.notify.msgs.UserNotifierPresenter; +import cc.kune.core.client.notify.spiner.SpinerPresenter; import cc.kune.core.client.sitebar.logo.SiteLogoPresenter; import cc.kune.core.client.state.StateManager; import cc.kune.core.client.ws.CorePresenter; Modified: trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -21,9 +21,9 @@ import org.ourproject.common.client.notify.NotifyLevel; -import cc.kune.core.client.notify.AlertEvent; -import cc.kune.core.client.notify.ProgressHideEvent; -import cc.kune.core.client.notify.UserNotifyEvent; +import cc.kune.core.client.notify.alerts.AlertEvent; +import cc.kune.core.client.notify.msgs.UserNotifyEvent; +import cc.kune.core.client.notify.spiner.ProgressHideEvent; import cc.kune.core.client.state.Session; import cc.kune.core.shared.i18n.I18nTranslationService; Deleted: trunk/src/main/java/cc/kune/core/client/i18n/I18nReady.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/i18n/I18nReady.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/i18n/I18nReady.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,7 +0,0 @@ -package cc.kune.core.client.i18n; - -import com.gwtplatform.annotation.GenEvent; - -@GenEvent -public class I18nReady { -} \ No newline at end of file Added: trunk/src/main/java/cc/kune/core/client/i18n/I18nReadyEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/i18n/I18nReadyEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/i18n/I18nReadyEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,67 @@ +package cc.kune.core.client.i18n; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; + +import com.gwtplatform.mvp.client.HasEventBus; +import com.google.gwt.event.shared.HasHandlers; + +public class I18nReadyEvent extends GwtEvent<I18nReadyEvent.I18nReadyHandler> { + + public interface HasI18nReadyHandlers extends HasHandlers { + HandlerRegistration addI18nReadyHandler(I18nReadyHandler handler); + } + + public interface I18nReadyHandler extends EventHandler { + public void onI18nReady(I18nReadyEvent event); + } + + private static final Type<I18nReadyHandler> TYPE = new Type<I18nReadyHandler>(); + + public static void fire(HasEventBus source) { + source.fireEvent(new I18nReadyEvent()); + } + + public static Type<I18nReadyHandler> getType() { + return TYPE; + } + + + public I18nReadyEvent() { + } + + @Override + public Type<I18nReadyHandler> getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(I18nReadyHandler handler) { + handler.onI18nReady(this); + } + + @Override + public boolean equals(Object other) { + if (other != null && other.getClass().equals(this.getClass())) { + I18nReadyEvent o = (I18nReadyEvent) other; + return true + ; + } + return false; + } + + @Override + public int hashCode() { + int hashCode = 23; + hashCode = (hashCode * 37) + getClass().hashCode(); + return hashCode; + } + + @Override + public String toString() { + return "I18nReadyEvent[" + + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/i18n/I18nReadyEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Deleted: trunk/src/main/java/cc/kune/core/client/init/AppStart.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/init/AppStart.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/init/AppStart.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,12 +0,0 @@ -package cc.kune.core.client.init; - -import cc.kune.core.shared.dto.InitDataDTO; - -import com.gwtplatform.annotation.GenEvent; -import com.gwtplatform.annotation.Order; - -@GenEvent -public class AppStart { - @Order(1) - InitDataDTO initData; -} Added: trunk/src/main/java/cc/kune/core/client/init/AppStartEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/init/AppStartEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/init/AppStartEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,76 @@ +package cc.kune.core.client.init; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; + +import com.gwtplatform.mvp.client.HasEventBus; +import com.google.gwt.event.shared.HasHandlers; + +public class AppStartEvent extends GwtEvent<AppStartEvent.AppStartHandler> { + + public interface HasAppStartHandlers extends HasHandlers { + HandlerRegistration addAppStartHandler(AppStartHandler handler); + } + + public interface AppStartHandler extends EventHandler { + public void onAppStart(AppStartEvent event); + } + + private static final Type<AppStartHandler> TYPE = new Type<AppStartHandler>(); + + public static void fire(HasEventBus source, cc.kune.core.shared.dto.InitDataDTO initData) { + source.fireEvent(new AppStartEvent(initData)); + } + + public static Type<AppStartHandler> getType() { + return TYPE; + } + + private final cc.kune.core.shared.dto.InitDataDTO initData; + + public AppStartEvent(cc.kune.core.shared.dto.InitDataDTO initData) { + this.initData = initData; + } + + @Override + public Type<AppStartHandler> getAssociatedType() { + return TYPE; + } + + public cc.kune.core.shared.dto.InitDataDTO getInitData() { + return initData; + } + + @Override + protected void dispatch(AppStartHandler handler) { + handler.onAppStart(this); + } + + @Override + public boolean equals(Object other) { + if (other != null && other.getClass().equals(this.getClass())) { + AppStartEvent o = (AppStartEvent) other; + return true + && ((o.initData == null && this.initData == null) || (o.initData != null && o.initData.equals(this.initData))) + ; + } + return false; + } + + @Override + public int hashCode() { + int hashCode = 23; + hashCode = (hashCode * 37) + getClass().hashCode(); + hashCode = (hashCode * 37) + (initData == null ? 1 : initData.hashCode()); + return hashCode; + } + + @Override + public String toString() { + return "AppStartEvent[" + + initData + + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/init/AppStartEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Modified: trunk/src/main/java/cc/kune/core/client/init/AppStarterDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/init/AppStarterDefault.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/init/AppStarterDefault.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -21,8 +21,8 @@ import org.ourproject.common.client.notify.NotifyLevel; -import cc.kune.core.client.notify.ProgressHideEvent; -import cc.kune.core.client.notify.UserNotifyEvent; +import cc.kune.core.client.notify.msgs.UserNotifyEvent; +import cc.kune.core.client.notify.spiner.ProgressHideEvent; import cc.kune.core.client.rpcservices.SiteServiceAsync; import cc.kune.core.client.state.Session; import cc.kune.core.shared.dto.InitDataDTO; @@ -78,7 +78,8 @@ @Override public void onFailure(final Throwable error) { eventBus.fireEvent(new ProgressHideEvent()); - eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error, "Error fetching initial data")); + eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error, + "Error fetching initial data from Kune server")); Log.debug(error.getMessage()); hideInitialPanels(); } @@ -97,6 +98,9 @@ @Override public void execute() { hideInitialPanels(); + eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error, "Started")); + eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error, + "Started closeable. Started closeable. Started closeable. Started closeable", true)); } }); } Deleted: trunk/src/main/java/cc/kune/core/client/init/AppStop.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/init/AppStop.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/init/AppStop.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,8 +0,0 @@ -package cc.kune.core.client.init; - -import com.gwtplatform.annotation.GenEvent; - -@GenEvent -public class AppStop { - -} Added: trunk/src/main/java/cc/kune/core/client/init/AppStopEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/init/AppStopEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/init/AppStopEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,67 @@ +package cc.kune.core.client.init; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; + +import com.gwtplatform.mvp.client.HasEventBus; +import com.google.gwt.event.shared.HasHandlers; + +public class AppStopEvent extends GwtEvent<AppStopEvent.AppStopHandler> { + + public interface HasAppStopHandlers extends HasHandlers { + HandlerRegistration addAppStopHandler(AppStopHandler handler); + } + + public interface AppStopHandler extends EventHandler { + public void onAppStop(AppStopEvent event); + } + + private static final Type<AppStopHandler> TYPE = new Type<AppStopHandler>(); + + public static void fire(HasEventBus source) { + source.fireEvent(new AppStopEvent()); + } + + public static Type<AppStopHandler> getType() { + return TYPE; + } + + + public AppStopEvent() { + } + + @Override + public Type<AppStopHandler> getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(AppStopHandler handler) { + handler.onAppStop(this); + } + + @Override + public boolean equals(Object other) { + if (other != null && other.getClass().equals(this.getClass())) { + AppStopEvent o = (AppStopEvent) other; + return true + ; + } + return false; + } + + @Override + public int hashCode() { + int hashCode = 23; + hashCode = (hashCode * 37) + getClass().hashCode(); + return hashCode; + } + + @Override + public String toString() { + return "AppStopEvent[" + + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/init/AppStopEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Deleted: trunk/src/main/java/cc/kune/core/client/notify/Alert.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/Alert.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/Alert.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,12 +0,0 @@ -package cc.kune.core.client.notify; - -import com.gwtplatform.annotation.GenEvent; -import com.gwtplatform.annotation.Order; - -@GenEvent -public class Alert { - @Order(1) - String title; - @Order(2) - String message; -} Deleted: trunk/src/main/java/cc/kune/core/client/notify/ProgressHide.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/ProgressHide.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/ProgressHide.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,7 +0,0 @@ -package cc.kune.core.client.notify; - -import com.gwtplatform.annotation.GenEvent; - -@GenEvent -public class ProgressHide { -} Deleted: trunk/src/main/java/cc/kune/core/client/notify/ProgressShow.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/ProgressShow.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/ProgressShow.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,10 +0,0 @@ -package cc.kune.core.client.notify; - -import com.gwtplatform.annotation.GenEvent; -import com.gwtplatform.annotation.Order; - -@GenEvent -public class ProgressShow { - @Order(1) - String message; -} Deleted: trunk/src/main/java/cc/kune/core/client/notify/SpinerPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/SpinerPresenter.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/SpinerPresenter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,56 +0,0 @@ -package cc.kune.core.client.notify; - -import cc.kune.core.client.i18n.I18nReadyEvent; -import cc.kune.core.shared.i18n.I18nTranslationService; - -import com.google.inject.Inject; -import com.gwtplatform.mvp.client.EventBus; -import com.gwtplatform.mvp.client.PopupView; -import com.gwtplatform.mvp.client.Presenter; -import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; -import com.gwtplatform.mvp.client.annotations.ProxyEvent; -import com.gwtplatform.mvp.client.proxy.Proxy; -import com.gwtplatform.mvp.client.proxy.RevealRootPopupContentEvent; - -public class SpinerPresenter extends Presenter<SpinerPresenter.SpinerView, SpinerPresenter.SpinerProxy> { - - private final I18nTranslationService i18n; - - @ProxyCodeSplit - public interface SpinerProxy extends Proxy<SpinerPresenter> { - } - - public interface SpinerView extends PopupView { - void fade(); - - void show(String message); - } - - @Inject - public SpinerPresenter(final EventBus eventBus, final SpinerView view, final SpinerProxy proxy, - I18nTranslationService i18n) { - super(eventBus, view, proxy); - this.i18n = i18n; - } - - @ProxyEvent - public void onProgressShow(ProgressShowEvent event) { - getView().show(event.getMessage()); - } - - @ProxyEvent - public void onI18nReady(I18nReadyEvent event) { - getView().show(i18n.t("Loading")); - } - - @ProxyEvent - public void onProgressHide(ProgressHideEvent event) { - getView().fade(); - } - - @Override - protected void revealInParent() { - RevealRootPopupContentEvent.fire(this, this); - // RevealRootContentEvent.fire(this, this); - } -} Deleted: trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,66 +0,0 @@ -package cc.kune.core.client.notify; - -import cc.kune.core.client.notify.SpinerPresenter.SpinerView; -import cc.kune.core.ws.armor.client.WsArmor; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.InlineLabel; -import com.google.gwt.user.client.ui.PopupPanel; -import com.google.gwt.user.client.ui.Widget; -import com.google.inject.Inject; -import com.gwtplatform.mvp.client.EventBus; -import com.gwtplatform.mvp.client.PopupViewWithUiHandlers; -import com.gwtplatform.mvp.client.UiHandlers; - -public class SpinerViewImpl extends PopupViewWithUiHandlers<UiHandlers> implements SpinerView { - - private final PopupPanel popup; - - @Inject - protected SpinerViewImpl(EventBus eventBus, WsArmor armor) { - super(eventBus); - widget = uiBinder.createAndBindUi(this); - popup = new PopupPanel(false, false); - popup.add(widget); - popup.setPopupPosition(0, 0); - popup.setStyleName("k-spiner-popup"); - 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; - } - - @Override - public void fade() { - popup.hide(); - } - - @Override - public void show(String message) { - if (message == null || message.isEmpty()) { - label.setText(""); - } else { - label.setText(message); - } - popup.show(); - } -} Deleted: trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.ui.xml 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.ui.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,11 +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" 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> -</ui:UiBinder> \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/client/notify/UserNotifierPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/UserNotifierPresenter.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/UserNotifierPresenter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,51 +0,0 @@ -package cc.kune.core.client.notify; - -import org.ourproject.common.client.notify.ConfirmationAsk; -import org.ourproject.common.client.notify.NotifyLevel; - -import cc.kune.core.client.notify.UserNotifierPresenter.UserNotifierProxy; -import cc.kune.core.client.notify.UserNotifierPresenter.UserNotifierView; - -import com.google.gwt.user.client.ui.RootPanel; -import com.google.inject.Inject; -import com.gwtplatform.mvp.client.EventBus; -import com.gwtplatform.mvp.client.Presenter; -import com.gwtplatform.mvp.client.View; -import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; -import com.gwtplatform.mvp.client.annotations.ProxyEvent; -import com.gwtplatform.mvp.client.proxy.Proxy; - -public class UserNotifierPresenter extends Presenter<UserNotifierView, UserNotifierProxy> { - @ProxyCodeSplit - public interface UserNotifierProxy extends Proxy<UserNotifierPresenter> { - } - - public interface UserNotifierView extends View { - public void alert(String title, String message); - - public void confirmationAsk(ConfirmationAsk<?> ask); - - public void notify(NotifyLevel level, String message); - } - - @Inject - public UserNotifierPresenter(final EventBus eventBus, final UserNotifierView view, final UserNotifierProxy proxy) { - super(eventBus, view, proxy); - } - - @ProxyEvent - public void onUserNotify(UserNotifyEvent event) { - getView().notify(event.getLevel(), event.getMessage()); - } - - @ProxyEvent - public void onAlert(AlertEvent event) { - getView().alert(event.getTitle(), event.getMessage()); - } - - @Override - protected void revealInParent() { - RootPanel.get().add(getWidget()); - } - -} \ No newline at end of file Deleted: trunk/src/main/java/cc/kune/core/client/notify/UserNotifierViewImpl.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/UserNotifierViewImpl.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/UserNotifierViewImpl.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,43 +0,0 @@ -package cc.kune.core.client.notify; - -import org.ourproject.common.client.notify.ConfirmationAsk; -import org.ourproject.common.client.notify.NotifyLevel; - -import cc.kune.core.client.notify.UserNotifierPresenter.UserNotifierView; - -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Widget; -import com.google.inject.Inject; -import com.gwtplatform.mvp.client.ViewImpl; - -public class UserNotifierViewImpl extends ViewImpl implements UserNotifierView { - @Inject - public UserNotifierViewImpl() { - } - - @Override - public void alert(final String title, final String message) { - message(title, message); - } - - @Override - public Widget asWidget() { - return null; - } - - @Override - public void confirmationAsk(final ConfirmationAsk<?> ask) { - // TODO Auto-generated method stub - - } - - @Override - public void notify(final NotifyLevel level, final String message) { - message("", message); - } - - private void message(final String title, final String message) { - Window.alert(title + " " + message); - } - -} Deleted: trunk/src/main/java/cc/kune/core/client/notify/UserNotify.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/UserNotify.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/notify/UserNotify.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,14 +0,0 @@ -package cc.kune.core.client.notify; - -import org.ourproject.common.client.notify.NotifyLevel; - -import com.gwtplatform.annotation.GenEvent; -import com.gwtplatform.annotation.Order; - -@GenEvent -public class UserNotify { - @Order(1) - NotifyLevel level; - @Order(2) - String message; -} \ No newline at end of file Added: trunk/src/main/java/cc/kune/core/client/notify/alerts/AlertEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/alerts/AlertEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/alerts/AlertEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,86 @@ +package cc.kune.core.client.notify.alerts; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; + +import com.gwtplatform.mvp.client.HasEventBus; +import com.google.gwt.event.shared.HasHandlers; + +public class AlertEvent extends GwtEvent<AlertEvent.AlertHandler> { + + public interface HasAlertHandlers extends HasHandlers { + HandlerRegistration addAlertHandler(AlertHandler handler); + } + + public interface AlertHandler extends EventHandler { + public void onAlert(AlertEvent event); + } + + private static final Type<AlertHandler> TYPE = new Type<AlertHandler>(); + + public static void fire(HasEventBus source, java.lang.String title, java.lang.String message) { + source.fireEvent(new AlertEvent(title, message)); + } + + public static Type<AlertHandler> getType() { + return TYPE; + } + + private final java.lang.String title; + private final java.lang.String message; + + public AlertEvent(java.lang.String title, java.lang.String message) { + this.title = title; + this.message = message; + } + + @Override + public Type<AlertHandler> getAssociatedType() { + return TYPE; + } + + public java.lang.String getTitle() { + return title; + } + + public java.lang.String getMessage() { + return message; + } + + @Override + protected void dispatch(AlertHandler handler) { + handler.onAlert(this); + } + + @Override + public boolean equals(Object other) { + if (other != null && other.getClass().equals(this.getClass())) { + AlertEvent o = (AlertEvent) other; + return true + && ((o.title == null && this.title == null) || (o.title != null && o.title.equals(this.title))) + && ((o.message == null && this.message == null) || (o.message != null && o.message.equals(this.message))) + ; + } + return false; + } + + @Override + public int hashCode() { + int hashCode = 23; + hashCode = (hashCode * 37) + getClass().hashCode(); + hashCode = (hashCode * 37) + (title == null ? 1 : title.hashCode()); + hashCode = (hashCode * 37) + (message == null ? 1 : message.hashCode()); + return hashCode; + } + + @Override + public String toString() { + return "AlertEvent[" + + title + + "," + + message + + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/alerts/AlertEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterPresenter.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterPresenter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,39 @@ +package cc.kune.core.client.notify.alerts; + +import cc.kune.core.client.notify.alerts.UserAlerterPresenter.UserAlerterProxy; +import cc.kune.core.client.notify.alerts.UserAlerterPresenter.UserAlerterView; + +import com.google.gwt.user.client.ui.RootPanel; +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.EventBus; +import com.gwtplatform.mvp.client.Presenter; +import com.gwtplatform.mvp.client.View; +import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; +import com.gwtplatform.mvp.client.annotations.ProxyEvent; +import com.gwtplatform.mvp.client.proxy.Proxy; + +public class UserAlerterPresenter extends Presenter<UserAlerterView, UserAlerterProxy> { + @ProxyCodeSplit + public interface UserAlerterProxy extends Proxy<UserAlerterPresenter> { + } + + public interface UserAlerterView extends View { + public void alert(String title, String message); + } + + @Inject + public UserAlerterPresenter(final EventBus eventBus, final UserAlerterView view, final UserAlerterProxy proxy) { + super(eventBus, view, proxy); + } + + @ProxyEvent + public void onAlert(AlertEvent event) { + getView().alert(event.getTitle(), event.getMessage()); + } + + @Override + protected void revealInParent() { + RootPanel.get().add(getWidget()); + } + +} \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterPresenter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterViewImpl.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterViewImpl.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterViewImpl.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,29 @@ +package cc.kune.core.client.notify.alerts; + +import cc.kune.core.client.notify.alerts.UserAlerterPresenter.UserAlerterView; + +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.ViewImpl; + +public class UserAlerterViewImpl extends ViewImpl implements UserAlerterView { + @Inject + public UserAlerterViewImpl() { + } + + @Override + public void alert(final String title, final String message) { + message(title, message); + } + + @Override + public Widget asWidget() { + return null; + } + + private void message(final String title, final String message) { + Window.alert(title + " " + message); + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/alerts/UserAlerterViewImpl.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmPresenter.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmPresenter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,36 @@ +package cc.kune.core.client.notify.confirm; + +import org.ourproject.common.client.notify.ConfirmationAsk; + +import cc.kune.core.client.notify.confirm.UserConfirmPresenter.UserConfirmProxy; +import cc.kune.core.client.notify.confirm.UserConfirmPresenter.UserConfirmView; + +import com.google.gwt.user.client.ui.RootPanel; +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.EventBus; +import com.gwtplatform.mvp.client.Presenter; +import com.gwtplatform.mvp.client.View; +import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; +import com.gwtplatform.mvp.client.proxy.Proxy; + +public class UserConfirmPresenter extends Presenter<UserConfirmView, UserConfirmProxy> { + @ProxyCodeSplit + public interface UserConfirmProxy extends Proxy<UserConfirmPresenter> { + } + + public interface UserConfirmView extends View { + + public void confirmationAsk(ConfirmationAsk<?> ask); + } + + @Inject + public UserConfirmPresenter(final EventBus eventBus, final UserConfirmView view, final UserConfirmProxy proxy) { + super(eventBus, view, proxy); + } + + @Override + protected void revealInParent() { + RootPanel.get().add(getWidget()); + } + +} \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmPresenter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmViewImpl.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmViewImpl.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmViewImpl.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,27 @@ +package cc.kune.core.client.notify.confirm; + +import org.ourproject.common.client.notify.ConfirmationAsk; + +import cc.kune.core.client.notify.confirm.UserConfirmPresenter.UserConfirmView; + +import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.ViewImpl; + +public class UserConfirmViewImpl extends ViewImpl implements UserConfirmView { + @Inject + public UserConfirmViewImpl() { + } + + @Override + public Widget asWidget() { + return null; + } + + @Override + public void confirmationAsk(final ConfirmationAsk<?> ask) { + // TODO Auto-generated method stub + + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/confirm/UserConfirmViewImpl.java ___________________________________________________________________ Name: svn:mime-type + text/plain Copied: trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java (from rev 1176, trunk/src/main/java/cc/kune/core/client/notify/UserNotifierPresenter.java) =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,41 @@ +package cc.kune.core.client.notify.msgs; + +import org.ourproject.common.client.notify.NotifyLevel; + +import cc.kune.core.client.notify.msgs.UserNotifierPresenter.UserNotifierProxy; +import cc.kune.core.client.notify.msgs.UserNotifierPresenter.UserNotifierView; + +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.EventBus; +import com.gwtplatform.mvp.client.PopupView; +import com.gwtplatform.mvp.client.Presenter; +import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; +import com.gwtplatform.mvp.client.annotations.ProxyEvent; +import com.gwtplatform.mvp.client.proxy.Proxy; +import com.gwtplatform.mvp.client.proxy.RevealRootPopupContentEvent; + +public class UserNotifierPresenter extends Presenter<UserNotifierView, UserNotifierProxy> { + @ProxyCodeSplit + public interface UserNotifierProxy extends Proxy<UserNotifierPresenter> { + } + + public interface UserNotifierView extends PopupView { + public void notify(NotifyLevel level, String message, Boolean closeable); + } + + @Inject + public UserNotifierPresenter(final EventBus eventBus, final UserNotifierView view, final UserNotifierProxy proxy) { + super(eventBus, view, proxy); + } + + @ProxyEvent + public void onUserNotify(UserNotifyEvent event) { + getView().notify(event.getLevel(), event.getMessage(), event.getCloseable()); + } + + @Override + protected void revealInParent() { + RevealRootPopupContentEvent.fire(this, this); + } + +} \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierPresenter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Copied: trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java (from rev 1176, trunk/src/main/java/cc/kune/core/client/notify/UserNotifierViewImpl.java) =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,58 @@ +package cc.kune.core.client.notify.msgs; + +import org.ourproject.common.client.notify.NotifyLevel; + +import cc.kune.core.client.notify.msgs.UserNotifierPresenter.UserNotifierView; +import cc.kune.msgs.client.msgs.UserMessageLevel; +import cc.kune.msgs.client.panel.UserMessagesPanel; +import cc.kune.msgs.client.panel.UserMessagesPresenter; + +import com.google.gwt.user.client.ui.PopupPanel; +import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.EventBus; +import com.gwtplatform.mvp.client.PopupViewImpl; + +public class UserNotifierViewImpl extends PopupViewImpl implements UserNotifierView { + private final UserMessagesPresenter msgs; + private final PopupPanel popup; + + @Inject + public UserNotifierViewImpl(EventBus eventBus, UserMessagesPresenter msgs, UserMessagesPanel panel) { + super(eventBus); + this.msgs = msgs; + msgs.init(panel); + panel.setWidth("370px"); + popup = new PopupPanel(false, false); + popup.add(panel); + popup.setPopupPosition(0, 0); + popup.setStyleName("k-user-notif-popup"); + popup.show(); + } + + @Override + public Widget asWidget() { + return popup; + } + + @Override + public void notify(final NotifyLevel level, final String message, Boolean closeable) { + switch (level) { + case error: + msgs.add(UserMessageLevel.error, message, closeable); + break; + case important: + msgs.add(UserMessageLevel.important, message, closeable); + break; + case info: + msgs.add(UserMessageLevel.info, message, closeable); + break; + case veryImportant: + msgs.add(UserMessageLevel.veryImportant, message, false); + break; + default: + break; + } + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifierViewImpl.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifyEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifyEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifyEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,119 @@ +package cc.kune.core.client.notify.msgs; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; +import com.gwtplatform.mvp.client.HasEventBus; + +public class UserNotifyEvent extends GwtEvent<UserNotifyEvent.UserNotifyHandler> { + + public interface HasUserNotifyHandlers extends HasHandlers { + HandlerRegistration addUserNotifyHandler(UserNotifyHandler handler); + } + + public interface UserNotifyHandler extends EventHandler { + public void onUserNotify(UserNotifyEvent event); + } + + private static final Type<UserNotifyHandler> TYPE = new Type<UserNotifyHandler>(); + + public static void fire(HasEventBus source, org.ourproject.common.client.notify.NotifyLevel level, + java.lang.String message, Boolean closeable) { + source.fireEvent(new UserNotifyEvent(level, message, closeable)); + } + + public static void fire(HasEventBus source, org.ourproject.common.client.notify.NotifyLevel level, + java.lang.String message) { + source.fireEvent(new UserNotifyEvent(level, message)); + } + + public static Type<UserNotifyHandler> getType() { + return TYPE; + } + + private final org.ourproject.common.client.notify.NotifyLevel level; + private final java.lang.String message; + private final Boolean closeable; + + public UserNotifyEvent(org.ourproject.common.client.notify.NotifyLevel level, java.lang.String message, + Boolean closeable) { + this.level = level; + this.message = message; + this.closeable = closeable; + } + + public UserNotifyEvent(org.ourproject.common.client.notify.NotifyLevel level, java.lang.String message) { + this(level, message, false); + } + + @Override + public Type<UserNotifyHandler> getAssociatedType() { + return TYPE; + } + + public org.ourproject.common.client.notify.NotifyLevel getLevel() { + return level; + } + + public java.lang.String getMessage() { + return message; + } + + @Override + protected void dispatch(UserNotifyHandler handler) { + handler.onUserNotify(this); + } + + public Boolean getCloseable() { + return closeable; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (closeable == null ? 0 : closeable.hashCode()); + result = prime * result + (level == null ? 0 : level.hashCode()); + result = prime * result + (message == null ? 0 : message.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; + } + UserNotifyEvent other = (UserNotifyEvent) obj; + if (closeable == null) { + if (other.closeable != null) { + return false; + } + } else if (!closeable.equals(other.closeable)) { + return false; + } + if (level != other.level) { + return false; + } + if (message == null) { + if (other.message != null) { + return false; + } + } else if (!message.equals(other.message)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "UserNotifyEvent [level=" + level + ", message=" + message + ", closeable=" + closeable + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/msgs/UserNotifyEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressHideEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressHideEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressHideEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,67 @@ +package cc.kune.core.client.notify.spiner; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; + +import com.gwtplatform.mvp.client.HasEventBus; +import com.google.gwt.event.shared.HasHandlers; + +public class ProgressHideEvent extends GwtEvent<ProgressHideEvent.ProgressHideHandler> { + + public interface HasProgressHideHandlers extends HasHandlers { + HandlerRegistration addProgressHideHandler(ProgressHideHandler handler); + } + + public interface ProgressHideHandler extends EventHandler { + public void onProgressHide(ProgressHideEvent event); + } + + private static final Type<ProgressHideHandler> TYPE = new Type<ProgressHideHandler>(); + + public static void fire(HasEventBus source) { + source.fireEvent(new ProgressHideEvent()); + } + + public static Type<ProgressHideHandler> getType() { + return TYPE; + } + + + public ProgressHideEvent() { + } + + @Override + public Type<ProgressHideHandler> getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(ProgressHideHandler handler) { + handler.onProgressHide(this); + } + + @Override + public boolean equals(Object other) { + if (other != null && other.getClass().equals(this.getClass())) { + ProgressHideEvent o = (ProgressHideEvent) other; + return true + ; + } + return false; + } + + @Override + public int hashCode() { + int hashCode = 23; + hashCode = (hashCode * 37) + getClass().hashCode(); + return hashCode; + } + + @Override + public String toString() { + return "ProgressHideEvent[" + + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressHideEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressShowEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressShowEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressShowEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,76 @@ +package cc.kune.core.client.notify.spiner; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; + +import com.gwtplatform.mvp.client.HasEventBus; +import com.google.gwt.event.shared.HasHandlers; + +public class ProgressShowEvent extends GwtEvent<ProgressShowEvent.ProgressShowHandler> { + + public interface HasProgressShowHandlers extends HasHandlers { + HandlerRegistration addProgressShowHandler(ProgressShowHandler handler); + } + + public interface ProgressShowHandler extends EventHandler { + public void onProgressShow(ProgressShowEvent event); + } + + private static final Type<ProgressShowHandler> TYPE = new Type<ProgressShowHandler>(); + + public static void fire(HasEventBus source, java.lang.String message) { + source.fireEvent(new ProgressShowEvent(message)); + } + + public static Type<ProgressShowHandler> getType() { + return TYPE; + } + + private final java.lang.String message; + + public ProgressShowEvent(java.lang.String message) { + this.message = message; + } + + @Override + public Type<ProgressShowHandler> getAssociatedType() { + return TYPE; + } + + public java.lang.String getMessage() { + return message; + } + + @Override + protected void dispatch(ProgressShowHandler handler) { + handler.onProgressShow(this); + } + + @Override + public boolean equals(Object other) { + if (other != null && other.getClass().equals(this.getClass())) { + ProgressShowEvent o = (ProgressShowEvent) other; + return true + && ((o.message == null && this.message == null) || (o.message != null && o.message.equals(this.message))) + ; + } + return false; + } + + @Override + public int hashCode() { + int hashCode = 23; + hashCode = (hashCode * 37) + getClass().hashCode(); + hashCode = (hashCode * 37) + (message == null ? 1 : message.hashCode()); + return hashCode; + } + + @Override + public String toString() { + return "ProgressShowEvent[" + + message + + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/spiner/ProgressShowEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Copied: trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerPresenter.java (from rev 1176, trunk/src/main/java/cc/kune/core/client/notify/SpinerPresenter.java) =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerPresenter.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerPresenter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,56 @@ +package cc.kune.core.client.notify.spiner; + +import cc.kune.core.client.i18n.I18nReadyEvent; +import cc.kune.core.shared.i18n.I18nTranslationService; + +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.EventBus; +import com.gwtplatform.mvp.client.PopupView; +import com.gwtplatform.mvp.client.Presenter; +import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; +import com.gwtplatform.mvp.client.annotations.ProxyEvent; +import com.gwtplatform.mvp.client.proxy.Proxy; +import com.gwtplatform.mvp.client.proxy.RevealRootPopupContentEvent; + +public class SpinerPresenter extends Presenter<SpinerPresenter.SpinerView, SpinerPresenter.SpinerProxy> { + + private final I18nTranslationService i18n; + + @ProxyCodeSplit + public interface SpinerProxy extends Proxy<SpinerPresenter> { + } + + public interface SpinerView extends PopupView { + void fade(); + + void show(String message); + } + + @Inject + public SpinerPresenter(final EventBus eventBus, final SpinerView view, final SpinerProxy proxy, + I18nTranslationService i18n) { + super(eventBus, view, proxy); + this.i18n = i18n; + } + + @ProxyEvent + public void onProgressShow(ProgressShowEvent event) { + getView().show(event.getMessage()); + } + + @ProxyEvent + public void onI18nReady(I18nReadyEvent event) { + getView().show(i18n.t("Loading")); + } + + @ProxyEvent + public void onProgressHide(ProgressHideEvent event) { + getView().fade(); + } + + @Override + protected void revealInParent() { + RevealRootPopupContentEvent.fire(this, this); + // RevealRootContentEvent.fire(this, this); + } +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerPresenter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Copied: trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.java (from rev 1176, trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.java) =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,66 @@ +package cc.kune.core.client.notify.spiner; + +import cc.kune.core.client.notify.spiner.SpinerPresenter.SpinerView; +import cc.kune.core.ws.armor.client.WsArmor; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.InlineLabel; +import com.google.gwt.user.client.ui.PopupPanel; +import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.EventBus; +import com.gwtplatform.mvp.client.PopupViewWithUiHandlers; +import com.gwtplatform.mvp.client.UiHandlers; + +public class SpinerViewImpl extends PopupViewWithUiHandlers<UiHandlers> implements SpinerView { + + private final PopupPanel popup; + + @Inject + protected SpinerViewImpl(EventBus eventBus, WsArmor armor) { + super(eventBus); + widget = uiBinder.createAndBindUi(this); + popup = new PopupPanel(false, false); + popup.add(widget); + popup.setPopupPosition(0, 0); + popup.setStyleName("k-spiner-popup"); + 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; + } + + @Override + public void fade() { + popup.hide(); + } + + @Override + public void show(String message) { + if (message == null || message.isEmpty()) { + label.setText(""); + } else { + label.setText(message); + } + popup.show(); + } +} Property changes on: trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.java ___________________________________________________________________ Name: svn:mime-type + text/plain Copied: trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.ui.xml (from rev 1176, trunk/src/main/java/cc/kune/core/client/notify/SpinerViewImpl.ui.xml) =================================================================== --- trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.ui.xml (rev 0) +++ trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.ui.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,11 @@ +<!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" 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> +</ui:UiBinder> \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/core/client/notify/spiner/SpinerViewImpl.ui.xml ___________________________________________________________________ Name: svn:mime-type + text/plain Modified: trunk/src/main/java/cc/kune/core/client/state/ContentProviderDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/state/ContentProviderDefault.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/state/ContentProviderDefault.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -21,7 +21,7 @@ import java.util.HashMap; -import cc.kune.core.client.notify.ProgressShowEvent; +import cc.kune.core.client.notify.spiner.ProgressShowEvent; import cc.kune.core.client.rpcservices.ContentServiceAsync; import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.StateAbstractDTO; Modified: trunk/src/main/java/cc/kune/core/client/state/StateManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/state/StateManagerDefault.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/state/StateManagerDefault.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -23,7 +23,7 @@ import cc.kune.core.client.actions.BeforeActionCollection; import cc.kune.core.client.actions.BeforeActionListener; -import cc.kune.core.client.notify.ProgressHideEvent; +import cc.kune.core.client.notify.spiner.ProgressHideEvent; import cc.kune.core.client.rpcservices.AsyncCallbackSimple; import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.SocialNetworkDataDTO; Deleted: trunk/src/main/java/cc/kune/core/client/state/UserSignIn.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/state/UserSignIn.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/state/UserSignIn.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,12 +0,0 @@ -package cc.kune.core.client.state; - -import cc.kune.core.shared.dto.UserInfoDTO; - -import com.gwtplatform.annotation.GenEvent; -import com.gwtplatform.annotation.Order; - -@GenEvent -public class UserSignIn { - @Order(1) - UserInfoDTO userInfo; -} Added: trunk/src/main/java/cc/kune/core/client/state/UserSignInEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/state/UserSignInEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/state/UserSignInEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,76 @@ +package cc.kune.core.client.state; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; + +import com.gwtplatform.mvp.client.HasEventBus; +import com.google.gwt.event.shared.HasHandlers; + +public class UserSignInEvent extends GwtEvent<UserSignInEvent.UserSignInHandler> { + + public interface HasUserSignInHandlers extends HasHandlers { + HandlerRegistration addUserSignInHandler(UserSignInHandler handler); + } + + public interface UserSignInHandler extends EventHandler { + public void onUserSignIn(UserSignInEvent event); + } + + private static final Type<UserSignInHandler> TYPE = new Type<UserSignInHandler>(); + + public static void fire(HasEventBus source, cc.kune.core.shared.dto.UserInfoDTO userInfo) { + source.fireEvent(new UserSignInEvent(userInfo)); + } + + public static Type<UserSignInHandler> getType() { + return TYPE; + } + + private final cc.kune.core.shared.dto.UserInfoDTO userInfo; + + public UserSignInEvent(cc.kune.core.shared.dto.UserInfoDTO userInfo) { + this.userInfo = userInfo; + } + + @Override + public Type<UserSignInHandler> getAssociatedType() { + return TYPE; + } + + public cc.kune.core.shared.dto.UserInfoDTO getUserInfo() { + return userInfo; + } + + @Override + protected void dispatch(UserSignInHandler handler) { + handler.onUserSignIn(this); + } + + @Override + public boolean equals(Object other) { + if (other != null && other.getClass().equals(this.getClass())) { + UserSignInEvent o = (UserSignInEvent) other; + return true + && ((o.userInfo == null && this.userInfo == null) || (o.userInfo != null && o.userInfo.equals(this.userInfo))) + ; + } + return false; + } + + @Override + public int hashCode() { + int hashCode = 23; + hashCode = (hashCode * 37) + getClass().hashCode(); + hashCode = (hashCode * 37) + (userInfo == null ? 1 : userInfo.hashCode()); + return hashCode; + } + + @Override + public String toString() { + return "UserSignInEvent[" + + userInfo + + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/state/UserSignInEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Deleted: trunk/src/main/java/cc/kune/core/client/state/UserSignOut.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/state/UserSignOut.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/client/state/UserSignOut.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -1,8 +0,0 @@ -package cc.kune.core.client.state; - -import com.gwtplatform.annotation.GenEvent; - -@GenEvent -public class UserSignOut { - -} Added: trunk/src/main/java/cc/kune/core/client/state/UserSignOutEvent.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/state/UserSignOutEvent.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/state/UserSignOutEvent.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,67 @@ +package cc.kune.core.client.state; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; + +import com.gwtplatform.mvp.client.HasEventBus; +import com.google.gwt.event.shared.HasHandlers; + +public class UserSignOutEvent extends GwtEvent<UserSignOutEvent.UserSignOutHandler> { + + public interface HasUserSignOutHandlers extends HasHandlers { + HandlerRegistration addUserSignOutHandler(UserSignOutHandler handler); + } + + public interface UserSignOutHandler extends EventHandler { + public void onUserSignOut(UserSignOutEvent event); + } + + private static final Type<UserSignOutHandler> TYPE = new Type<UserSignOutHandler>(); + + public static void fire(HasEventBus source) { + source.fireEvent(new UserSignOutEvent()); + } + + public static Type<UserSignOutHandler> getType() { + return TYPE; + } + + + public UserSignOutEvent() { + } + + @Override + public Type<UserSignOutHandler> getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(UserSignOutHandler handler) { + handler.onUserSignOut(this); + } + + @Override + public boolean equals(Object other) { + if (other != null && other.getClass().equals(this.getClass())) { + UserSignOutEvent o = (UserSignOutEvent) other; + return true + ; + } + return false; + } + + @Override + public int hashCode() { + int hashCode = 23; + hashCode = (hashCode * 37) + getClass().hashCode(); + return hashCode; + } + + @Override + public String toString() { + return "UserSignOutEvent[" + + "]"; + } + +} Property changes on: trunk/src/main/java/cc/kune/core/client/state/UserSignOutEvent.java ___________________________________________________________________ Name: svn:mime-type + text/plain Modified: trunk/src/main/java/cc/kune/core/public/images/kune-logo-16px.png =================================================================== (Binary files differ) Modified: trunk/src/main/java/cc/kune/core/public/ws.html =================================================================== --- trunk/src/main/java/cc/kune/core/public/ws.html 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/cc/kune/core/public/ws.html 2011-01-09 04:44:25 UTC (rev 1178) @@ -52,6 +52,13 @@ </style> <body> +<!-- RECOMMENDED if your web app will not function without JavaScript enabled --> +<noscript> +<div + style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif"> +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> Added: trunk/src/main/java/cc/kune/msgs/KuneMsgs.gwt.xml =================================================================== --- trunk/src/main/java/cc/kune/msgs/KuneMsgs.gwt.xml (rev 0) +++ trunk/src/main/java/cc/kune/msgs/KuneMsgs.gwt.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module> + <!-- Inherit the core Web Toolkit stuff. --> + <inherits name='com.google.gwt.user.User' /> + <inherits name="org.adamtacy.GWTEffects"></inherits> + <!-- Inherit the default GWT style sheet. You can change --> + <!-- the theme of your GWT application by uncommenting --> + <!-- any one of the following lines. --> + <!-- <inherits name='com.google.gwt.user.theme.standard.Standard'/> --> + <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> --> + <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> --> + <!-- Other module inherits --> + <!-- Specify the app entry point class. --> +<!-- <entry-point class='cc.kune.msgs.client.KuneMessagesSampleEntryPoint' />--> + <!-- Specify the paths for translatable code --> + <source path='client' /> + <public path="public" /> + <stylesheet src="kune-message.css" /> +</module> \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/msgs/KuneMsgs.gwt.xml ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/KuneMsgsTests.gwt.xml =================================================================== --- trunk/src/main/java/cc/kune/msgs/KuneMsgsTests.gwt.xml (rev 0) +++ trunk/src/main/java/cc/kune/msgs/KuneMsgsTests.gwt.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module rename-to='kune_messages'> + <!-- Inherit the core Web Toolkit stuff. --> + <inherits name='com.google.gwt.user.User' /> + <inherits name="org.adamtacy.GWTEffects"></inherits> + <!-- Inherit the default GWT style sheet. You can change --> + <!-- the theme of your GWT application by uncommenting --> + <!-- any one of the following lines. --> + <!-- <inherits name='com.google.gwt.user.theme.standard.Standard'/> --> + <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> --> + <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> --> + <!-- Other module inherits --> + <!-- Specify the app entry point class. --> + <entry-point class='cc.kune.msgs.client.KuneMessagesSampleEntryPoint' /> + <!-- Specify the paths for translatable code --> + <source path='client' /> + <public path="public" /> + <stylesheet src="kune-message.css" /> +</module> \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/msgs/KuneMsgsTests.gwt.xml ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/KuneMessagesSampleEntryPoint.java =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/KuneMessagesSampleEntryPoint.java (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/KuneMessagesSampleEntryPoint.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,54 @@ +package cc.kune.msgs.client; + +import cc.kune.msgs.client.msgs.UserMessage; +import cc.kune.msgs.client.msgs.UserMessageLevel; +import cc.kune.msgs.client.panel.UserMessagesPanel; +import cc.kune.msgs.client.panel.UserMessagesPresenter; + +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.ui.PopupPanel; + +/** + * Entry point classes define <code>onModuleLoad()</code>. + */ +public class KuneMessagesSampleEntryPoint implements EntryPoint { + + /** + * This is the entry point method. + */ + @Override + public void onModuleLoad() { + UserMessagesPanel panel = new UserMessagesPanel(); + UserMessage.setFadeMills(3000); + UserMessage.setCloseTitle("Close message"); + panel.setWidth("422px"); + final UserMessagesPresenter presenter = new UserMessagesPresenter(); + presenter.init(panel); + presenter.add(UserMessageLevel.info, "Lorem ipsum dolor sit amet, consectetuer adipiscing elit", false); + presenter.add(UserMessageLevel.error, "Lorem ipsum dolor sit amet, consectetuer adipiscing elit", false); + Timer time = new Timer() { + @Override + public void run() { + presenter.add( + UserMessageLevel.error, + "Lorem <a href='/'>ipsum</a> dolor sit amet, consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit", + true); + } + }; + Timer time2 = new Timer() { + @Override + public void run() { + presenter.add(UserMessageLevel.important, "Lorem ", false); + presenter.add(UserMessageLevel.important, "Lorem ", true); + } + }; + time.schedule(1000); + time2.schedule(2000); + PopupPanel aPanel = new PopupPanel(); + aPanel.add(panel); + aPanel.setPopupPosition(0, 0); + aPanel.show(); + // RootPanel.get().add(aPanel); + } +} Property changes on: trunk/src/main/java/cc/kune/msgs/client/KuneMessagesSampleEntryPoint.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.java =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.java (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,119 @@ +package cc.kune.msgs.client.msgs; + +import org.adamtacy.client.ui.effects.events.EffectCompletedEvent; +import org.adamtacy.client.ui.effects.events.EffectCompletedHandler; +import org.adamtacy.client.ui.effects.examples.Fade; +import org.adamtacy.client.ui.effects.examples.Show; + +import cc.kune.msgs.client.resources.UserMessageImages; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HasText; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.InlineHTML; +import com.google.gwt.user.client.ui.PushButton; +import com.google.gwt.user.client.ui.Widget; + +public class UserMessage extends Composite implements HasText { + + private static int fadeMills = 5000; + private static MessageUiBinder uiBinder = GWT.create(MessageUiBinder.class); + private static String closeTitle = "Close"; + + @UiField + Image icon; + @UiField + InlineHTML label; + @UiField + PushButton close; + + interface MessageUiBinder extends UiBinder<Widget, UserMessage> { + } + + public static void setCloseTitle(String title) { + closeTitle = title; + } + + public static void setFadeMills(int mills) { + fadeMills = mills; + } + + public UserMessage(UserMessageLevel level, String message, boolean closeable) { + initWidget(uiBinder.createAndBindUi(this)); + setStyleName("k-msg"); + label.setHTML(message); + close.setVisible(closeable); + close.setTitle(closeTitle); + if (!closeable) { + Timer time = new Timer() { + @Override + public void run() { + close(); + } + }; + time.schedule(fadeMills); + } + switch (level) { + case error: + icon.setResource(UserMessageImages.INST.error()); + break; + case important: + icon.setResource(UserMessageImages.INST.important()); + break; + case info: + icon.setResource(UserMessageImages.INST.info()); + break; + case veryImportant: + icon.setResource(UserMessageImages.INST.warning()); + break; + default: + break; + } + Show anim = new Show(this.getElement()); + anim.setDuration(0.5); + anim.play(); + } + + public UserMessage(String message) { + this(message, false); + } + + public UserMessage(String message, boolean closeable) { + this(UserMessageLevel.info, message, closeable); + } + + @Override + public void setText(String text) { + label.setText(text); + } + + @Override + public String getText() { + return label.getText(); + } + + @UiHandler("close") + void handleClick(ClickEvent e) { + close(); + } + + private void close() { + Fade fade = new Fade(this.getElement()); + fade.setDuration(0.7); + fade.play(); + fade.addEffectCompletedHandler(new EffectCompletedHandler() { + + @Override + public void onEffectCompleted(EffectCompletedEvent event) { + removeFromParent(); + } + }); + } + +} Property changes on: trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.ui.xml (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.ui.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,20 @@ +<!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"> + <ui:with field='img' type='cc.kune.msgs.client.resources.UserMessageImages' /> + <g:HorizontalPanel verticalAlignment="ALIGN_MIDDLE" + height="42px"> + <g:SimplePanel addStyleNames="k-msg-icon"> + <g:Image width="100%" ui:field="icon" height="100%" /> + </g:SimplePanel> + <g:Cell width="100%"> + <g:InlineHTML ui:field="label" width="100%" styleName="k-msg-label" /> + </g:Cell> + <g:PushButton ui:field="close" styleName="k-msg-close" + width="22px"> + <g:upHoveringFace image='{img.removeGrey}' /> + <g:downFace image='{img.removeOver}'/> + <g:upFace image='{img.remove}' /> + </g:PushButton> + </g:HorizontalPanel> +</ui:UiBinder> \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessage.ui.xml ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessageLevel.java =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessageLevel.java (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessageLevel.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,5 @@ +package cc.kune.msgs.client.msgs; + +public enum UserMessageLevel { + info, important, veryImportant, error +} \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/msgs/client/msgs/UserMessageLevel.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.java =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.java (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,40 @@ +package cc.kune.msgs.client.panel; + +import org.adamtacy.client.ui.effects.impl.SlideDown; + +import cc.kune.msgs.client.msgs.UserMessage; +import cc.kune.msgs.client.msgs.UserMessageLevel; +import cc.kune.msgs.client.panel.UserMessagesPresenter.MessagesView; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + +public class UserMessagesPanel extends Composite implements MessagesView { + + private static MessagesPanelUiBinder uiBinder = GWT.create(MessagesPanelUiBinder.class); + @UiField + VerticalPanel vp; + private final SlideDown anim; + + interface MessagesPanelUiBinder extends UiBinder<Widget, UserMessagesPanel> { + } + + public UserMessagesPanel() { + initWidget(uiBinder.createAndBindUi(this)); + anim = new SlideDown(this.getElement()); + anim.setDuration(2); + } + + @Override + public void add(UserMessageLevel info, String message, boolean closeable) { + UserMessage msg = new UserMessage(info, message, closeable); + vp.add(msg); + if (anim.isFinished()) { + // anim.play(); + } + } +} Property changes on: trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.ui.xml =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.ui.xml (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.ui.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,7 @@ +<!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 verticalAlignment="ALIGN_TOP" + ui:field="vp" width="100%" height="" styleName="k-msg-panel" spacing="10"> + </g:VerticalPanel> +</ui:UiBinder> \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPanel.ui.xml ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPresenter.java (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPresenter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,23 @@ +package cc.kune.msgs.client.panel; + +import cc.kune.msgs.client.msgs.UserMessageLevel; + +public class UserMessagesPresenter { + + private MessagesView view; + + public interface MessagesView { + void add(UserMessageLevel info, String message, boolean closable); + } + + public UserMessagesPresenter() { + } + + public void init(MessagesView view) { + this.view = view; + } + + public void add(UserMessageLevel info, String message, boolean closable) { + view.add(info, message, closable); + } +} Property changes on: trunk/src/main/java/cc/kune/msgs/client/panel/UserMessagesPresenter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/resources/UserMessageImages.java =================================================================== --- trunk/src/main/java/cc/kune/msgs/client/resources/UserMessageImages.java (rev 0) +++ trunk/src/main/java/cc/kune/msgs/client/resources/UserMessageImages.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,28 @@ +package cc.kune.msgs.client.resources; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; + +public interface UserMessageImages extends ClientBundle { + + public static final UserMessageImages INST = GWT.create(UserMessageImages.class); + + ImageResource error(); + + ImageResource info(); + + ImageResource warning(); + + ImageResource important(); + + ImageResource severe(); + + ImageResource remove(); + + @Source("remove-grey.png") + ImageResource removeGrey(); + + @Source("remove-over.png") + ImageResource removeOver(); +} Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/UserMessageImages.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/cc/kune/msgs/client/resources/error.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/error.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/msgs/client/resources/important.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/important.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/msgs/client/resources/info.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/info.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/msgs/client/resources/remove-grey.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/remove-grey.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/msgs/client/resources/remove-over.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/remove-over.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/msgs/client/resources/remove.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/remove.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/msgs/client/resources/severe.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/severe.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/msgs/client/resources/warning.png =================================================================== (Binary files differ) Property changes on: trunk/src/main/java/cc/kune/msgs/client/resources/warning.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/main/java/cc/kune/msgs/public/kune-message.css =================================================================== --- trunk/src/main/java/cc/kune/msgs/public/kune-message.css (rev 0) +++ trunk/src/main/java/cc/kune/msgs/public/kune-message.css 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,45 @@ +.k-msg-panel { + background-color: #892c00; + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-bottomright: 5px; + border-bottom-right-radius: 5px; + kfilter: alpha(opacity = 80); + -moz-opacity: 0.80; + -khtml-opacity: 0.80; + opacity: 0.80; +} + +.k-msg-panel-title { + color: #ffe9da; + font-weight: bold; + margin-bottom: 10px; +} + +.k-msg { + margin: 0 5px; + border: solid 1px #F2F2F2; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #fff0e6; + color: #280b0b; + filter: alpha(opacity = 80); + -moz-opacity: 0.80; + -khtml-opacity: 0.80; + opacity: 0.80; + font-weight: bold; +} + +.k-msg-close { + position: relative; + right: -14px; + top: 30px; +} + +.k-msg-icon { + padding: 10px 10px 5px; +} + +.k-msg-label { + font-size: 17px; +} \ No newline at end of file Property changes on: trunk/src/main/java/cc/kune/msgs/public/kune-message.css ___________________________________________________________________ Name: svn:mime-type + text/plain Modified: trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -99,6 +99,20 @@ builder.exclude("/stylesheets/.*"); builder.exclude("/javascripts/.*"); builder.exclude("/templates/.*"); + // wave servlets (see RackServletFilter) + // builder.exclude("/gadget.*"); + // builder.exclude("/attachment/*"); + // builder.exclude("/auth/signin"); + // builder.exclude("/auth/signout"); + // builder.exclude("/auth/register"); + // builder.exclude("/fetch/*"); + // builder.exclude("/gadgets.*"); + // // wave (from ServerRprcProvider) + // builder.exclude("/socket"); + // builder.exclude("/socket.io/*"); + // builder.exclude("/static/*"); + // FIXME (add robots and / WaveClientServlet) + builder.at(".*").install(new LogFilter()); builder.at(".*").install(new GuiceFilter()); @@ -119,6 +133,7 @@ } private void installGuiceModules(final RackBuilder builder) { + // https://code.google.com/p/google-guice/wiki/ServletModule builder.use(new ServletModule()); builder.use(new PlatformServerModule()); builder.use(new DocumentServerModule()); Added: trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcControllerImpl.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcControllerImpl.java (rev 0) +++ trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcControllerImpl.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -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 org.ourproject.kune.app.server.wave; + +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/org/ourproject/kune/app/server/wave/CustomServerRpcControllerImpl.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProvider.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProvider.java (rev 0) +++ trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProvider.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,494 @@ +/** + * 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 org.ourproject.kune.app.server.wave; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +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.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.nio.SelectChannelConnector; +import org.eclipse.jetty.servlet.DefaultServlet; +import org.eclipse.jetty.servlet.ServletContextHandler; +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.util.Pair; +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.name.Named; +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 CustomServerRpcProvider { + private static final Log LOG = Log.get(CustomServerRpcProvider.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; + } + } + + 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 CustomServerRpcProvider(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 CustomServerRpcProvider(InetSocketAddress[] httpAddresses, Integer flashsocketPolicyPort, + SessionManager sessionManager, org.eclipse.jetty.server.SessionManager jettySessionManager) { + this(httpAddresses, flashsocketPolicyPort, Executors.newCachedThreadPool(), sessionManager, jettySessionManager); + } + + @Inject + public CustomServerRpcProvider(@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); + } + + 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 + + // Servlet where the websocket connection is served from. + ServletHolder sioholder = new ServletHolder(new WaveSocketIOServlet()); + context.addServlet(sioholder, "/socket.io/*"); + // TODO(zamfi): fix to let messages span frames. + sioholder.setInitParameter("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"; + } + } + sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_SERVER_HOST_KEY, flashPolicyServerHost); + sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_SERVER_PORT_KEY, "" + flashsocketPolicyPort); + // TODO: Change to use the public http address and all other bound + // addresses. + sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_DOMAIN_KEY, "*"); + sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_PORTS_KEY, flashPolicyAllowedPorts.toString()); + + // 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/*"); + + for (Pair<String, ServletHolder> servlet : servletRegistry) { + 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("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()); + } + } + + /** + * 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(); + + /** + * 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 ServletHolder addServlet(String urlPattern, Servlet servlet) { + ServletHolder servletHolder = new ServletHolder(servlet); + servletRegistry.add(new Pair<String, ServletHolder>(urlPattern, servletHolder)); + return servletHolder; + } +} Property changes on: trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProvider.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProviderSamePort.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProviderSamePort.java (rev 0) +++ trunk/src/main/java/org/ourproject/kune/app/server/wave/CustomServerRpcProviderSamePort.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -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 org.ourproject.kune.app.server.wave; + +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-gui... + @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/org/ourproject/kune/app/server/wave/CustomServerRpcProviderSamePort.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/org/ourproject/kune/app/server/wave/Trio.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/app/server/wave/Trio.java (rev 0) +++ trunk/src/main/java/org/ourproject/kune/app/server/wave/Trio.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -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 org.ourproject.kune.app.server.wave; + +/** + * 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/org/ourproject/kune/app/server/wave/Trio.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveModule.java (rev 0) +++ trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveModule.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,28 @@ +package org.ourproject.kune.app.server.wave; + +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/org/ourproject/kune/app/server/wave/WaveModule.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarter.java (rev 0) +++ trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,137 @@ +package org.ourproject.kune.app.server.wave; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +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.authentication.AccountStoreHolder; +import org.waveprotocol.box.server.authentication.SessionManager; +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.passive.RobotsGateway; +import org.waveprotocol.box.server.rpc.AuthenticationServlet; +import org.waveprotocol.box.server.rpc.SignOutServlet; +import org.waveprotocol.box.server.rpc.WaveClientServlet; +import org.waveprotocol.box.server.waveserver.WaveBus; +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 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 PROPERTY_FILE = "wave-server.properties"; + + public WaveStarter() { + } + + public void run(Injector settingsInjector) { + + try { + Module coreSettings = CustomSettingsBinder.bindSettings(PROPERTY_FILE, CoreSettings.class); + settingsInjector = settingsInjector.createChildInjector(coreSettings); + // Injector settingsInjector = Guice.createInjector(coreSettings); + // settingsInjector.createChildInjector(coreSettings); + + boolean enableFederation = settingsInjector.getInstance(Key.get(Boolean.class, + Names.named(CoreSettings.ENABLE_FEDERATION))); + Module federationModule; + if (enableFederation) { + Module federationSettings = CustomSettingsBinder.bindSettings(PROPERTY_FILE, FederationSettings.class); + settingsInjector = settingsInjector.createChildInjector(federationSettings); + federationModule = settingsInjector.getInstance(XmppFederationModule.class); + } else { + federationModule = settingsInjector.getInstance(NoOpFederationModule.class); + } + + PersistenceModule persistenceModule = settingsInjector.getInstance(PersistenceModule.class); + + Injector injector = settingsInjector.createChildInjector(new CustomServerModule(enableFederation), + new RobotApiModule(), federationModule, persistenceModule); + + 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(); + } + + CustomServerRpcProvider server = injector.getInstance(CustomServerRpcProvider.class); + + server.addServlet("/attachment/*", injector.getInstance(CustomAttachmentServlet.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(CustomUserRegistrationServlet.class)); + + server.addServlet("/fetch/*", injector.getInstance(CustomFetchServlet.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"); + // FIXME ServletHolder proxyServletHolder = + Map<String, String> params = new HashMap<String, String>(); + // proxyServletHolder.setInitParameter("HostHeader", + // gadgetServerHostname); + params.put("HostHeader", gadgetServerHostname); + // server.addServlet("/gadgets/*", proxyServlet, params); + + server.addServlet("/", injector.getInstance(WaveClientServlet.class)); + + RobotsGateway robotsGateway = injector.getInstance(RobotsGateway.class); + WaveBus waveBus = injector.getInstance(WaveBus.class); + waveBus.subscribe(robotsGateway); + + ProtocolWaveClientRpc.Interface rpcImpl = injector.getInstance(ProtocolWaveClientRpc.Interface.class); + server.registerService(ProtocolWaveClientRpc.newReflectiveService(rpcImpl)); + + FederationTransport federationManager = injector.getInstance(FederationTransport.class); + federationManager.startFederation(); + // server.startWebSocketServer(); + // injector.createChildInjector(new WaveStarterModule(server)); + LOG.info("Starting wave server"); + server.startWebSocketServer(); + // } catch (IOException e) { + // LOG.error("IOException when running server:", e); + } catch (PersistenceException e) { + LOG.error("PersistenceException when running server:", e); + } catch (ConfigurationException e) { + LOG.error("ConfigurationException when running server:", e); + } + } + + public void runCont(Injector settingsInjector) { + } +} Property changes on: trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarterModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarterModule.java (rev 0) +++ trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarterModule.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -0,0 +1,18 @@ +package org.ourproject.kune.app.server.wave; + +import com.google.inject.AbstractModule; + +public class WaveStarterModule extends AbstractModule { + + private final CustomServerRpcProviderSamePort rpc; + + public WaveStarterModule(CustomServerRpcProviderSamePort rpc) { + this.rpc = rpc; + } + + @Override + protected void configure() { + install(rpc); + // rpc.startWebSocketServer(); + } +} Property changes on: trunk/src/main/java/org/ourproject/kune/app/server/wave/WaveStarterModule.java ___________________________________________________________________ Name: svn:mime-type + text/plain Modified: trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -30,54 +30,16 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -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.ourproject.kune.app.server.wave.CustomAttachmentServlet; -import org.ourproject.kune.app.server.wave.CustomFetchServlet; -import org.ourproject.kune.app.server.wave.CustomServerModule; -import org.ourproject.kune.app.server.wave.CustomSettingsBinder; -import org.ourproject.kune.app.server.wave.CustomUserRegistrationServlet; import org.ourproject.kune.platf.server.ServerException; import org.ourproject.kune.rack.dock.Dock; import org.ourproject.kune.rack.dock.RequestMatcher; -import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolWaveClientRpc; -import org.waveprotocol.box.server.CoreSettings; -import org.waveprotocol.box.server.authentication.AccountStoreHolder; -import org.waveprotocol.box.server.authentication.SessionManager; -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.passive.RobotsGateway; -import org.waveprotocol.box.server.rpc.AuthenticationServlet; -import org.waveprotocol.box.server.rpc.ServerRpcProvider; -import org.waveprotocol.box.server.rpc.SignOutServlet; -import org.waveprotocol.box.server.rpc.WaveClientServlet; -import org.waveprotocol.box.server.waveserver.WaveBus; -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 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 RackServletFilter implements Filter { - - /** - * This is the name of the system property used to find the server config - * file. - */ - private static final String PROPERTY_FILE = "wave-server.properties"; - public static class DockChain implements FilterChain { private final Iterator<Dock> iterator; @@ -107,6 +69,7 @@ filter.doFilter(request, response, this); } } + public static final String INJECTOR_ATTRIBUTE = Injector.class.getName(); private static final String MODULE_PARAMETER = RackModule.class.getName(); private static final Log LOG = LogFactory.getLog(RackServletFilter.class); @@ -141,37 +104,19 @@ @Override public void init(final FilterConfig filterConfig) throws ServletException { - try { - LOG.debug("INITIALIZING RackServletFilter..."); - final RackModule module = getModule(filterConfig); - final RackBuilder builder = new RackBuilder(); - module.configure(builder); + LOG.debug("INITIALIZING RackServletFilter..."); + final RackModule module = getModule(filterConfig); + final RackBuilder builder = new RackBuilder(); + module.configure(builder); - final Rack rack = builder.getRack(); - Module waveCoreSettings = CustomSettingsBinder.bindSettings(PROPERTY_FILE, CoreSettings.class); - rack.add(waveCoreSettings); - final Injector injector = installInjector(filterConfig, rack); - startContainerListeners(rack.getListeners(), injector); - docks = rack.getDocks(); - excludes = rack.getExcludes(); - initFilters(filterConfig); - - // This is a extract from Wave ServerMain.java don't integrate it - // more - // in our code to check for differences easily between this and the - // WIAB - // code - try { - runWaveServer(injector); - return; - } catch (IOException e) { - LOG.fatal("IOException when running server:", e); - } catch (PersistenceException e) { - LOG.fatal("PersistenceException when running server:", e); - } - } catch (ConfigurationException e) { - LOG.fatal("ConfigurationException when running server:", e); - } + final Rack rack = builder.getRack(); + // WaveStarter waveStarter = new WaveStarter(); + final Injector injector = installInjector(filterConfig, rack); + // waveStarter.run(injector); + startContainerListeners(rack.getListeners(), injector); + docks = rack.getDocks(); + excludes = rack.getExcludes(); + initFilters(filterConfig); LOG.debug("INITIALIZATION DONE!"); } @@ -226,78 +171,4 @@ } } - public static void runWaveServer(Injector settingsInjector) throws IOException, PersistenceException, - ConfigurationException { - // Injector settingsInjector = Guice.createInjector(coreSettings); - // settingsInjector.createChildInjector(coreSettings); - boolean enableFederation = settingsInjector.getInstance(Key.get(Boolean.class, - Names.named(CoreSettings.ENABLE_FEDERATION))); - Module federationModule; - if (enableFederation) { - Module federationSettings = CustomSettingsBinder.bindSettings(PROPERTY_FILE, FederationSettings.class); - settingsInjector = settingsInjector.createChildInjector(federationSettings); - federationModule = settingsInjector.getInstance(XmppFederationModule.class); - } else { - federationModule = settingsInjector.getInstance(NoOpFederationModule.class); - } - - PersistenceModule persistenceModule = settingsInjector.getInstance(PersistenceModule.class); - - Injector injector = settingsInjector.createChildInjector(new CustomServerModule(enableFederation), - new RobotApiModule(), federationModule, persistenceModule); - - 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(); - } - - ServerRpcProvider server = injector.getInstance(ServerRpcProvider.class); - - server.addServlet("/attachment/*", injector.getInstance(CustomAttachmentServlet.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(CustomUserRegistrationServlet.class)); - - server.addServlet("/fetch/*", injector.getInstance(CustomFetchServlet.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)); - - RobotsGateway robotsGateway = injector.getInstance(RobotsGateway.class); - WaveBus waveBus = injector.getInstance(WaveBus.class); - waveBus.subscribe(robotsGateway); - - ProtocolWaveClientRpc.Interface rpcImpl = injector.getInstance(ProtocolWaveClientRpc.Interface.class); - server.registerService(ProtocolWaveClientRpc.newReflectiveService(rpcImpl)); - - FederationTransport federationManager = injector.getInstance(FederationTransport.class); - federationManager.startFederation(); - - LOG.info("Starting server"); - server.startWebSocketServer(); - } } Modified: trunk/src/main/java/org/ourproject/kune/rack/filters/AbstractInjectedFilter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/rack/filters/AbstractInjectedFilter.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/org/ourproject/kune/rack/filters/AbstractInjectedFilter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -32,12 +32,14 @@ protected ServletContext ctx; + @Override public abstract void destroy(); public <T> T getInstance(final Class<T> type) { return getInjector().getInstance(type); } + @Override public void init(final FilterConfig filterConfig) throws ServletException { this.ctx = filterConfig.getServletContext(); getInjector().injectMembers(this); Modified: trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/ServletServiceFilter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/ServletServiceFilter.java 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/ServletServiceFilter.java 2011-01-09 04:44:25 UTC (rev 1178) @@ -45,6 +45,7 @@ public void destroy() { } + @Override public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { log.debug("SERVICE: " + RackHelper.getURI(request) + " - " + servletClass.getSimpleName()); Modified: trunk/src/main/resources/wave-server.properties =================================================================== --- trunk/src/main/resources/wave-server.properties 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/resources/wave-server.properties 2011-01-09 04:44:25 UTC (rev 1178) @@ -2,7 +2,7 @@ # # Domain name of the wave server -wave_server_domain = local +wave_server_domain = localhost # A comma separated list of address on which to listen for connections. # Each address is a comma separated host:port pair. @@ -45,7 +45,7 @@ delta_store_directory = _deltas # Set true to use Socket.IO instead of raw WebSockets in the webclient. -use_socketio = false +use_socketio = true # To enable federation, edit the server.federation.config file and uncomment the line below #include = server.federation.config Modified: trunk/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/src/main/webapp/WEB-INF/web.xml 2010-12-29 03:43:22 UTC (rev 1177) +++ trunk/src/main/webapp/WEB-INF/web.xml 2011-01-09 04:44:25 UTC (rev 1178) @@ -85,4 +85,12 @@ <servlet-name>Proxy</servlet-name> <url-pattern>/http-bind/</url-pattern> </servlet-mapping> + <servlet> + <servlet-name>remoteLoggerServiceImpl</servlet-name> + <servlet-class>com.allen_sauer.gwt.log.server.RemoteLoggerServiceImpl</servlet-class> + </servlet> + <servlet-mapping> + <servlet-name>remoteLoggerServiceImpl</servlet-name> + <url-pattern>/ws/gwt-log</url-pattern> + </servlet-mapping> </web-app> \ No newline at end of file
participants (1)
-
Vicente J. Ruiz Jurado