[kune-commits] r1329 - in trunk: . img src/main/java/cc/kune/common/client/ui src/main/java/cc/kune/common/public src/main/java/cc/kune/core/public src/main/java/cc/kune/core/server/content src/main/java/cc/kune/core/server/state src/main/java/cc/kune/domain src/main/java/cc/kune/gspace/client/actions src/main/java/cc/kune/gspace/client/resources src/main/java/cc/kune/gspace/client/tool/selector src/main/java/cc/kune/gspace/client/viewers src/main/java/cc/kune/wave/server src/test/java/cc/kune/wave/server
Vicente J. Ruiz Jurado
vjrj_ at ourproject.org
Fri Apr 29 14:02:17 CEST 2011
Author: vjrj_
Date: 2011-04-29 14:02:17 +0200 (Fri, 29 Apr 2011)
New Revision: 1329
Added:
trunk/img/kune-intro.png
trunk/img/kune-intro.svg
trunk/src/main/java/cc/kune/common/client/ui/EditEvent.java
trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.java
trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.ui.xml
trunk/src/main/java/cc/kune/common/client/ui/HasEditHandler.java
trunk/src/main/java/cc/kune/gspace/client/actions/RenameAction.java
trunk/src/main/java/cc/kune/gspace/client/actions/RenameListener.java
Modified:
trunk/README_FIRST
trunk/TODO
trunk/TODO_done
trunk/src/main/java/cc/kune/common/client/ui/IconLabel.ui.xml
trunk/src/main/java/cc/kune/common/public/kune-common.css
trunk/src/main/java/cc/kune/core/public/ws.css
trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
trunk/src/main/java/cc/kune/core/server/state/StateContent.java
trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java
trunk/src/main/java/cc/kune/domain/Content.java
trunk/src/main/java/cc/kune/gspace/client/resources/wsArmor.css
trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorItemPanel.ui.xml
trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.java
trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPresenter.java
trunk/src/main/java/cc/kune/gspace/client/viewers/FolderItemWidget.ui.xml
trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java
trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java
trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java
Log:
Content renaming
Modified: trunk/README_FIRST
===================================================================
--- trunk/README_FIRST 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/README_FIRST 2011-04-29 12:02:17 UTC (rev 1329)
@@ -1,2 +1,4 @@
WARNING
Please note that we are doing a big refactorization of Kune to adapt it to Wave. Also we are starting to use other libraries (for instance gin for IoC instead of our old Suco library). Then don't expect to much of /trunk/ because of that (for our old more stable code see tag 0.0.6-pre-wiab).
+
+New code (and refactorized) is under cc.kune package. Our old code (not yet refactorized or deprecated) is under org.ourproject.kune package waiting for be adapted or removed.
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/TODO 2011-04-29 12:02:17 UTC (rev 1329)
@@ -12,33 +12,108 @@
nick == assigned to
* SHORT-TERM (URGENT)
-** TODO WIAB History integration
-*** Initial defpage #home
-**** u: if logged: wave list (#inbox) else: signin
-**** g: def project
-**** p: idem
-*** #example.com/w+abcd
-**** u: if logged: this wave else: signin and return to this
-**** g: equivalent group page? no, only with a button-action
-**** p: idem
-*** #site.doc.1
-**** u: if logged: wave list else signin (or also a button-action to go to open in the user-list)
-**** g: group content
-**** p: idem
-*** Some javadoc:
-HistorySupport.java
-WaverefEncoder.java
- /**
- * Takes a path segment which includes the domain and wave ID,and optionally
- * the wavelet domain + ID and the blip ID, and converts it to a waveref
- * object. Further tokens after 5 are silently ignored. Examples of valid URI
- * path segments are: example.com/w+abcd example.com/w+abcd/~/conv+root
- * example.com/w+abcd/~/conv+root/b+45kg
- *
- * @param path The path containing the domain and wave ID.
- * @return The corresponding WaveRef object, or null if the path was invalid.
- * @throws InvalidWaveRefException If the path contains less than 2 tokens or 3 tokens.
- */
+** TODO Wiab EDitor in GSpace
+*** Logged
+**** -Status---
+**** Admins (view plain, create new, participate in all)
+**** Editors (view plain --> create new --> ask for participation)
+**** Viewers (view plain --> ask for participation)
+*** Not logged (view plain wave)
+
+** Perms in WIAB :ARCHIVE:
+27-abr-2011 16:59:01 org.waveprotocol.box.server.robots.OperationContextImpl openWavelet
+GRAVE: admin at localhost tried to open [WaveletName localhost/w+1v66qilgtl2o6E/localhost/conv+root] which it isn't participating in
+27-abr-2011 16:59:01 org.waveprotocol.box.server.robots.util.OperationUtil executeOperation
+ADVERTENCIA: Operation {'method':'robot.fetchWave','id':'op16','waveId':'localhost!w+1v66qilgtl2o6E','waveletId':'localhost!conv+root','blipId':'null','parameters':{WAVELET_ID=localhost!conv+root, WAVE_ID=localhost!w+1v66qilgtl2o6E}} failed to execute
+com.google.wave.api.InvalidRequestException: Wavelet [WaveletName localhost/w+1v66qilgtl2o6E/localhost/conv+root] couldn't be retrieved
+ at org.waveprotocol.box.server.robots.OperationContextImpl.openWavelet(OperationContextImpl.java:231)
+ at org.waveprotocol.box.server.robots.OperationContextImpl.openWavelet(OperationContextImpl.java:247)
+ at org.waveprotocol.box.server.robots.operations.FetchWaveService.execute(FetchWaveService.java:52)
+ at org.waveprotocol.box.server.robots.util.OperationUtil.executeOperation(OperationUtil.java:171)
+ at cc.kune.wave.server.KuneWaveManagerDefault.fetchWavelet(KuneWaveManagerDefault.java:138)
+ at cc.kune.wave.server.KuneWaveManagerDefault$$EnhancerByGuice$$eb69153f.CGLIB$fetchWavelet$2(<generated>)
+ at cc.kune.wave.server.KuneWaveManagerDefault$$EnhancerByGuice$$eb69153f$$FastClassByGuice$$53f72476.invoke(<generated>)
+ at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at cc.kune.core.server.LoggerMethodInterceptor.invoke(LoggerMethodInterceptor.java:87)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
+ at cc.kune.wave.server.KuneWaveManagerDefault$$EnhancerByGuice$$eb69153f.fetchWavelet(<generated>)
+ at cc.kune.core.server.state.StateServiceDefault.create(StateServiceDefault.java:111)
+ at cc.kune.core.server.state.StateServiceDefault$$EnhancerByGuice$$9d4970d0.CGLIB$create$1(<generated>)
+ at cc.kune.core.server.state.StateServiceDefault$$EnhancerByGuice$$9d4970d0$$FastClassByGuice$$9a3402d2.invoke(<generated>)
+ at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at cc.kune.core.server.LoggerMethodInterceptor.invoke(LoggerMethodInterceptor.java:87)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
+ at cc.kune.core.server.state.StateServiceDefault$$EnhancerByGuice$$9d4970d0.create(<generated>)
+ at cc.kune.core.server.rpc.ContentRPC.getContentOrDefContent(ContentRPC.java:263)
+ at cc.kune.core.server.rpc.ContentRPC.getContent(ContentRPC.java:246)
+ at cc.kune.core.server.rpc.ContentRPC$$EnhancerByGuice$$9d633676.CGLIB$getContent$1(<generated>)
+ at cc.kune.core.server.rpc.ContentRPC$$EnhancerByGuice$$9d633676$$FastClassByGuice$$8c7047c.invoke(<generated>)
+ at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at cc.kune.core.server.LoggerMethodInterceptor.invoke(LoggerMethodInterceptor.java:87)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:66)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at cc.kune.core.server.auth.AuthenticatedMethodInterceptor.invoke(AuthenticatedMethodInterceptor.java:84)
+ at cc.kune.core.server.OutermostCallInterceptor.invoke(OutermostCallInterceptor.java:66)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
+ at cc.kune.core.server.rpc.ContentRPC$$EnhancerByGuice$$9d633676.getContent(<generated>)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:616)
+ at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562)
+ at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:544)
+ at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:504)
+ at cc.kune.core.server.rack.filters.gwts.DelegatedRemoteServlet.processCall(DelegatedRemoteServlet.java:45)
+ at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:243)
+ at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
+ at cc.kune.core.server.rack.filters.gwts.GWTServiceFilter.doFilter(GWTServiceFilter.java:61)
+ at cc.kune.core.server.rack.RackServletFilter$DockChain.execute(RackServletFilter.java:70)
+ at cc.kune.core.server.rack.RackServletFilter$DockChain.doFilter(RackServletFilter.java:63)
+ at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:66)
+ at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
+ at com.google.inject.servlet.ManagedFilterPipeline$$EnhancerByGuice$$1af97b76.CGLIB$dispatch$0(<generated>)
+ at com.google.inject.servlet.ManagedFilterPipeline$$EnhancerByGuice$$1af97b76$$FastClassByGuice$$57398af4.invoke(<generated>)
+ at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at cc.kune.core.server.LoggerMethodInterceptor.invoke(LoggerMethodInterceptor.java:87)
+ at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
+ at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
+ at com.google.inject.servlet.ManagedFilterPipeline$$EnhancerByGuice$$1af97b76.dispatch(<generated>)
+ at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
+ at cc.kune.core.server.rack.RackServletFilter$DockChain.execute(RackServletFilter.java:70)
+ at cc.kune.core.server.rack.RackServletFilter$DockChain.doFilter(RackServletFilter.java:63)
+ at cc.kune.core.server.rack.filters.LogFilter.doFilter(LogFilter.java:46)
+ at cc.kune.core.server.rack.RackServletFilter$DockChain.execute(RackServletFilter.java:70)
+ at cc.kune.core.server.rack.RackServletFilter$DockChain.doFilter(RackServletFilter.java:63)
+ at cc.kune.core.server.rack.RackServletFilter.doFilter(RackServletFilter.java:105)
+ at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
+ at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:421)
+ at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
+ at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:493)
+ at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
+ at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:930)
+ at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:358)
+ at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
+ at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:866)
+ at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
+ at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
+ at org.eclipse.jetty.server.Server.handle(Server.java:351)
+ at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:594)
+ at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1059)
+ at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:764)
+ at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217)
+ at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:424)
+ at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:506)
+ at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
+ at java.lang.Thread.run(Thread.java:679)
+2011-04-27 16:59:01,904 [qtp2042579307-41] ERROR - Wavelet [WaveletName localhost/w+1v66qilgtl2o6E/localhost/conv+root] couldn't be retrieved
** TODO Server side extensions configuration menu
A way to specify the default extensions in a client of a wave server.
** TODO style injection:
@@ -294,7 +369,7 @@
2007-12-21 10:35:16,196 [btpool0-5] DEBUG - ContentManagerDefault.persist EXCEPTION => javax.persistence.EntityExistsException: org.hibernate.exception.ConstraintViolationException: could not insert: [org.ourproject.kune.platf.server.domain.Group]
2007-12-21 10:35:16,197 [btpool0-5] DEBUG - ContentManagerDefault.createContent EXCEPTION => javax.persistence.Entity
** vjrj <v> IconHyperlink.java and IconLabel.java to gwt1.5
-
+
* MID-TERM
** Enable two Waves per doc: 1 for the doc (no comments enabled), other for comments. Similar to docs.google.com comments approach.
** TODO start/stop init scripts
Modified: trunk/TODO_done
===================================================================
--- trunk/TODO_done 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/TODO_done 2011-04-29 12:02:17 UTC (rev 1329)
@@ -63,6 +63,74 @@
:ARCHIVE_OLPATH: SHORT-TERM (URGENT)
:ARCHIVE_CATEGORY: TODO
:END:
+* TODO WIAB History integration
+ :PROPERTIES:
+ :ARCHIVE_TIME: 2011-04-28 jue 23:50
+ :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO
+ :ARCHIVE_OLPATH: SHORT-TERM (URGENT)
+ :ARCHIVE_CATEGORY: TODO
+ :ARCHIVE_TODO: TODO
+ :END:
+** Initial defpage #home
+*** u: if logged: wave list (#inbox) else: signin
+*** g: def project
+*** p: idem
+** #example.com/w+abcd
+*** u: if logged: this wave else: signin and return to this
+*** g: equivalent group page? no, only with a button-action
+*** p: idem
+** #site.doc.1
+*** u: if logged: wave list else signin (or also a button-action to go to open in the user-list)
+*** g: group content
+*** p: idem
+** Some javadoc:
+HistorySupport.java
+WaverefEncoder.java
+ /**
+ * Takes a path segment which includes the domain and wave ID,and optionally
+ * the wavelet domain + ID and the blip ID, and converts it to a waveref
+ * object. Further tokens after 5 are silently ignored. Examples of valid URI
+ * path segments are: example.com/w+abcd example.com/w+abcd/~/conv+root
+ * example.com/w+abcd/~/conv+root/b+45kg
+ *
+ * @param path The path containing the domain and wave ID.
+ * @return The corresponding WaveRef object, or null if the path was invalid.
+ * @throws InvalidWaveRefException If the path contains less than 2 tokens or 3 tokens.
+ */
+* TODO WIAB History integration
+ :PROPERTIES:
+ :ARCHIVE_TIME: 2011-04-28 jue 23:50
+ :ARCHIVE_FILE: ~/proyectos/dev/kune/trunk/TODO
+ :ARCHIVE_OLPATH: SHORT-TERM (URGENT)
+ :ARCHIVE_CATEGORY: TODO
+ :ARCHIVE_TODO: TODO
+ :END:
+** Initial defpage #home
+*** u: if logged: wave list (#inbox) else: signin
+*** g: def project
+*** p: idem
+** #example.com/w+abcd
+*** u: if logged: this wave else: signin and return to this
+*** g: equivalent group page? no, only with a button-action
+*** p: idem
+** #site.doc.1
+*** u: if logged: wave list else signin (or also a button-action to go to open in the user-list)
+*** g: group content
+*** p: idem
+** Some javadoc:
+HistorySupport.java
+WaverefEncoder.java
+ /**
+ * Takes a path segment which includes the domain and wave ID,and optionally
+ * the wavelet domain + ID and the blip ID, and converts it to a waveref
+ * object. Further tokens after 5 are silently ignored. Examples of valid URI
+ * path segments are: example.com/w+abcd example.com/w+abcd/~/conv+root
+ * example.com/w+abcd/~/conv+root/b+45kg
+ *
+ * @param path The path containing the domain and wave ID.
+ * @return The corresponding WaveRef object, or null if the path was invalid.
+ * @throws InvalidWaveRefException If the path contains less than 2 tokens or 3 tokens.
+ */
@@ -71,3 +139,5 @@
+
+
Added: trunk/img/kune-intro.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/kune-intro.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/img/kune-intro.svg
===================================================================
--- trunk/img/kune-intro.svg (rev 0)
+++ trunk/img/kune-intro.svg 2011-04-29 12:02:17 UTC (rev 1329)
@@ -0,0 +1,763 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="210mm"
+ height="297mm"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.1 r9760"
+ sodipodi:docname="kune-intro.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="448.08112"
+ inkscape:cy="520"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1080"
+ inkscape:window-height="1847"
+ inkscape:window-x="0"
+ inkscape:window-y="21"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Capa 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ ry="15"
+ rx="15"
+ y="-23.259554"
+ x="51.411152"
+ height="643.46716"
+ width="759.63477"
+ id="rect3005"
+ style="color:#000000;fill:#ffe6d5;stroke:#a56941;stroke-width:4;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ ry="16.860992"
+ rx="14.920214"
+ y="112.55608"
+ x="53.431454"
+ height="506.29779"
+ width="755.59412"
+ id="rect10103"
+ style="color:#000000;fill:#ffccaa;fill-opacity:1;stroke:none;stroke-width:3.70400834000000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="color:#000000;fill:#a56941;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect9982"
+ width="151.52289"
+ height="91.923882"
+ x="52.421307"
+ y="111.09074"
+ rx="15.306123"
+ ry="17.278481"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
+ x="102.1117"
+ y="153.88293"
+ id="text2985"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan2987"
+ x="102.1117"
+ y="153.88293"
+ style="font-size:32px;font-weight:bold;fill:#ffffff;-inkscape-font-specification:Ubuntu Bold">Users</tspan></text>
+ <rect
+ style="opacity:1;color:#000000;fill:#b77549;fill-opacity:1;stroke:none;stroke-width:3.70400834000000012;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect2989"
+ width="763.67542"
+ height="448.75012"
+ x="49.39085"
+ y="172.64462"
+ rx="15.079786"
+ ry="14.94451"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text2991"
+ y="152.87277"
+ x="269.09149"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#dd8a3d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
+ xml:space="preserve"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ style="font-size:32px;font-weight:bold;fill:#dd8a3d;fill-opacity:1;-inkscape-font-specification:Ubuntu Bold"
+ y="152.87277"
+ x="269.09149"
+ id="tspan2993"
+ sodipodi:role="line">Groups</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#dd8a3d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
+ x="455.63461"
+ y="154.89308"
+ id="text2995"
+ sodipodi:linespacing="125%"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ sodipodi:role="line"
+ id="tspan2997"
+ x="455.63461"
+ y="154.89308"
+ style="font-size:32px;font-weight:bold;fill:#dd8a3d;fill-opacity:1;-inkscape-font-specification:Ubuntu Bold">Public</tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2999"
+ y="153.88293"
+ x="611.29456"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#dd8a3d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
+ xml:space="preserve"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ style="font-size:32px;font-weight:bold;fill:#dd8a3d;fill-opacity:1;-inkscape-font-specification:Ubuntu Bold"
+ y="153.88293"
+ x="611.29456"
+ sodipodi:role="line"
+ id="tspan3003">Institutions</tspan></text>
+ <g
+ id="g8708"
+ transform="matrix(0.69032837,0,0,0.69032837,-114.0733,304.29447)">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/userSpaceDisabled.png"
+ transform="matrix(1.1754752,0,0,2.3509505,-72.996319,700.21488)"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ sodipodi:ry="10"
+ sodipodi:rx="20"
+ sodipodi:cy="32.362183"
+ sodipodi:cx="90"
+ id="path3041"
+ style="color:#000000;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/userSpaceDisabled.png"
+ transform="matrix(4.9493694,0,0,4.9493694,-41.444089,695.31429)"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="16.362183"
+ sodipodi:cx="15"
+ id="path3063"
+ style="opacity:0.5;color:#000000;fill:#d45500;fill-opacity:1;stroke:#d45500;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ </g>
+ <g
+ id="g8712"
+ transform="matrix(0.69032837,0,0,0.69032837,-108.20704,393.09429)">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceDisabled.png"
+ inkscape:transform-center-x="1.0789987"
+ transform="matrix(2.331168,0.83049401,-0.83049401,2.331168,13.440652,718.62706)"
+ inkscape:transform-center-y="-0.10734487"
+ d="m 35,17.362183 -4.755283,-3.454915 1.816357,-5.5901703 5.877852,-10e-8 1.816357,5.5901694 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="2.1991149"
+ sodipodi:arg1="1.5707963"
+ sodipodi:r2="4.045085"
+ sodipodi:r1="5"
+ sodipodi:cy="12.362183"
+ sodipodi:cx="35"
+ sodipodi:sides="5"
+ id="path4171"
+ style="opacity:0.5;color:#000000;fill:none;stroke:#28220b;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="star" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceDisabled.png"
+ sodipodi:type="arc"
+ style="color:#000000;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3045"
+ sodipodi:cx="90"
+ sodipodi:cy="32.362183"
+ sodipodi:rx="20"
+ sodipodi:ry="10"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ transform="matrix(1.1754752,0,0,2.3509505,-21.027938,700.21488)" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceDisabled.png"
+ sodipodi:type="arc"
+ style="opacity:0.5;color:#000000;fill:#dd8a3d;fill-opacity:1;stroke:#dd8a3d;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3065"
+ sodipodi:cx="15"
+ sodipodi:cy="16.362183"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ transform="matrix(4.6623359,1.6609881,-1.6609881,4.6623359,52.358512,668.43223)" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceDisabled.png"
+ transform="matrix(4.6623359,1.6609881,-1.6609881,4.6623359,39.072522,663.0841)"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="16.362183"
+ sodipodi:cx="15"
+ id="path3067"
+ style="opacity:0.5;color:#000000;fill:#69312f;fill-opacity:1;stroke:#69312f;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceDisabled.png"
+ sodipodi:type="arc"
+ style="opacity:0.5;color:#000000;fill:#28220b;fill-opacity:1;stroke:#28220b;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3069"
+ sodipodi:cx="15"
+ sodipodi:cy="16.362183"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ transform="matrix(4.6623359,1.6609881,-1.6609881,4.6623359,51.571882,682.96918)" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceDisabled.png"
+ transform="matrix(4.6623359,1.6609881,-1.6609881,4.6623359,37.912422,686.69724)"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="16.362183"
+ sodipodi:cx="15"
+ id="path3071"
+ style="opacity:0.5;color:#000000;fill:#cc6633;fill-opacity:1;stroke:#cc6633;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceDisabled.png"
+ sodipodi:type="arc"
+ style="opacity:0.5;color:#000000;fill:#ffdb6b;fill-opacity:1;stroke:#dd8a3d;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3073"
+ sodipodi:cx="15"
+ sodipodi:cy="16.362183"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ transform="matrix(5.5489598,1.9768537,-1.9768537,5.5489598,21.615452,655.42435)" />
+ </g>
+ <g
+ id="g8695"
+ transform="matrix(0.69032837,0,0,0.69032837,56.354331,-430.15193)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/userSpaceEnabled.png"
+ sodipodi:type="arc"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#800000;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4961"
+ sodipodi:cx="90"
+ sodipodi:cy="32.362183"
+ sodipodi:rx="20"
+ sodipodi:ry="10"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ transform="matrix(1.1754752,0,0,2.3509505,-73.660121,753.33034)" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/userSpaceEnabled.png"
+ sodipodi:type="arc"
+ style="color:#000000;fill:#d45500;fill-opacity:1;stroke:#d45500;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4971"
+ sodipodi:cx="15"
+ sodipodi:cy="16.362183"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ transform="matrix(4.9493694,0,0,4.9493694,-42.107891,748.42974)" />
+ </g>
+ <g
+ id="g8699"
+ transform="matrix(0.69032837,0,0,0.69032837,186.96913,-430.15193)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ sodipodi:type="star"
+ style="color:#000000;fill:none;stroke:#28220b;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4963"
+ sodipodi:sides="5"
+ sodipodi:cx="35"
+ sodipodi:cy="12.362183"
+ sodipodi:r1="5"
+ sodipodi:r2="4.045085"
+ sodipodi:arg1="1.5707963"
+ sodipodi:arg2="2.1991149"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 35,17.362183 -4.755283,-3.454915 1.816357,-5.5901703 5.877852,-10e-8 1.816357,5.5901694 z"
+ inkscape:transform-center-y="-0.10735044"
+ transform="matrix(2.331168,0.83049401,-0.83049401,2.331168,12.776852,771.74251)"
+ inkscape:transform-center-x="1.078998" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceEnabled.png"
+ transform="matrix(1.1754752,0,0,2.3509505,-21.691738,753.33034)"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ sodipodi:ry="10"
+ sodipodi:rx="20"
+ sodipodi:cy="32.362183"
+ sodipodi:cx="90"
+ id="path4965"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#800000;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ transform="matrix(4.6623359,1.6609881,-1.6609881,4.6623359,51.694712,721.54769)"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="16.362183"
+ sodipodi:cx="15"
+ id="path4973"
+ style="color:#000000;fill:#dd8a3d;fill-opacity:1;stroke:#dd8a3d;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ sodipodi:type="arc"
+ style="color:#000000;fill:#69312f;fill-opacity:1;stroke:#69312f;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4975"
+ sodipodi:cx="15"
+ sodipodi:cy="16.362183"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ transform="matrix(4.6623359,1.6609881,-1.6609881,4.6623359,38.408722,716.19953)" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ transform="matrix(4.6623359,1.6609881,-1.6609881,4.6623359,50.908082,736.08463)"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="16.362183"
+ sodipodi:cx="15"
+ id="path4977"
+ style="color:#000000;fill:#28220b;fill-opacity:1;stroke:#28220b;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ sodipodi:type="arc"
+ style="color:#000000;fill:#cc6633;fill-opacity:1;stroke:#cc6633;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4979"
+ sodipodi:cx="15"
+ sodipodi:cy="16.362183"
+ sodipodi:rx="1"
+ sodipodi:ry="1"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ transform="matrix(4.6623359,1.6609881,-1.6609881,4.6623359,37.248612,739.8127)" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ transform="matrix(5.5489598,1.9768537,-1.9768537,5.5489598,20.951652,708.53981)"
+ d="m 16,16.362183 c 0,0.552284 -0.447715,1 -1,1 -0.552285,0 -1,-0.447716 -1,-1 0,-0.552285 0.447715,-1 1,-1 0.552285,0 1,0.447715 1,1 z"
+ sodipodi:ry="1"
+ sodipodi:rx="1"
+ sodipodi:cy="16.362183"
+ sodipodi:cx="15"
+ id="path4981"
+ style="color:#000000;fill:#ffdb6b;fill-opacity:1;stroke:#dd8a3d;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ </g>
+ <g
+ id="g8729"
+ transform="matrix(0.69032837,0,0,0.69032837,-226.87213,174.45352)">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ sodipodi:type="arc"
+ style="color:#000000;fill:#aaeeff;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4967"
+ sodipodi:cx="90"
+ sodipodi:cy="32.362183"
+ sodipodi:rx="20"
+ sodipodi:ry="10"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ transform="matrix(1.1754752,0,0,2.3509505,30.276632,753.33034)" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ style="color:#000000;fill:#2ca05a;fill-opacity:1;fill-rule:nonzero;stroke:#2ca05a;stroke-width:2.47468472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 130.79962,807.50532 c -2.85339,0.78923 -5.20625,2.69048 -7.74114,4.12698 -1.45578,1.08139 -3.17371,4.03552 -1.21347,5.32414 1.55176,0.2611 2.79811,-1.05921 4.32566,-1.15498 1.78407,-0.4112 3.60556,-0.7363 5.29696,-1.46265 2.88934,-0.9105 2.88934,-0.9105 3.18467,-1.97638 0.14032,-1.60483 -1.00047,-3.09256 -2.07745,-4.18939 -0.49137,-0.40285 -1.11497,-0.78049 -1.77523,-0.66772 z"
+ id="path4969"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ style="color:#000000;fill:#2ca05a;fill-opacity:1;fill-rule:nonzero;stroke:#2ca05a;stroke-width:2.47468472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 153.3922,823.22551 c -4.04703,2.06374 -8.81245,4.142 -10.56886,8.25203 -0.54013,1.26397 0.22272,2.75445 0.4124,4.10295 0.7708,1.43658 -1.11269,2.70312 -0.55672,4.14497 0.66534,1.49717 2.56652,1.27157 3.82727,0.79099 1.28493,-0.44158 -0.53582,-1.70575 0,0 0.58286,1.36335 5.36635,1.77935 6.80857,1.16016 1.38701,-0.50855 2.33091,-0.74837 2.99303,-1.90611 2.17102,-4.41676 3.23712,-9.41812 2.89588,-14.33661 -0.10641,-1.32539 -0.51397,-2.60792 -0.99259,-3.83098 -0.49507,-1.61389 -2.16711,0.0173 -2.82476,0.68071 -0.60256,0.42631 -1.2709,0.77633 -1.99422,0.94189 z"
+ id="path4983"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cacccccccccc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ inkscape:connector-curvature="0"
+ id="path4985"
+ d="m 121.52672,824.27304 c -2.3826,0.90534 -4.95654,1.52602 -7.13172,2.85353 -1.8032,1.51882 -1.57875,4.29287 -0.64391,6.22636 1.14716,2.47466 2.05723,5.06419 3.4281,7.43042 1.32587,1.74784 -0.0893,0.98747 1.52127,2.46832 0.45524,0.54208 3.2913,3.28282 4.94937,2.47469 0.82652,-0.40286 0.61983,-1.62095 0.54826,-2.70337 0.52083,-2.24499 -0.82476,-4.39163 -0.7175,-6.65278 -0.0579,-2.83898 0.49943,-5.64398 0.8377,-8.45265 0.19302,-1.55725 -0.68561,-4.455 -2.79157,-3.64452 z"
+ style="color:#000000;fill:#2ca05a;fill-opacity:1;fill-rule:nonzero;stroke:#2ca05a;stroke-width:2.47468472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:nodetypes="cccccacccc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/publicSpaceEnabled.png"
+ transform="matrix(1.1754752,0,0,2.3509505,30.276632,753.33034)"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ sodipodi:ry="10"
+ sodipodi:rx="20"
+ sodipodi:cy="32.362183"
+ sodipodi:cx="90"
+ id="path4987"
+ style="color:#000000;fill:none;stroke:#002255;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ </g>
+ <g
+ id="g8721"
+ transform="matrix(0.69032837,0,0,0.69032837,337.35987,-393.48482)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/publicSpaceDisabled.png"
+ transform="matrix(1.1754752,0,0,2.3509505,30.940442,700.21488)"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ sodipodi:ry="10"
+ sodipodi:rx="20"
+ sodipodi:cy="32.362183"
+ sodipodi:cx="90"
+ id="path3047"
+ style="color:#000000;fill:#d5e5ff;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/publicSpaceDisabled.png"
+ sodipodi:nodetypes="cccccccc"
+ inkscape:connector-curvature="0"
+ id="path3129"
+ d="m 131.46342,754.38987 c -2.85339,0.78922 -5.20625,2.69047 -7.74114,4.12697 -1.45578,1.08139 -3.17371,4.03552 -1.21347,5.32414 1.55176,0.26111 2.79811,-1.05921 4.32566,-1.15498 1.78407,-0.4112 3.60556,-0.7363 5.29696,-1.46264 2.88934,-0.91051 2.88934,-0.91051 3.18467,-1.97638 0.14032,-1.60484 -1.00047,-3.09257 -2.07744,-4.1894 -0.49138,-0.40285 -1.11498,-0.78048 -1.77524,-0.66771 z"
+ style="color:#000000;fill:#87deaa;fill-opacity:1;fill-rule:nonzero;stroke:#87deaa;stroke-width:2.47468472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/publicSpaceDisabled.png"
+ sodipodi:nodetypes="cacccccccccc"
+ inkscape:connector-curvature="0"
+ id="path4991"
+ d="m 154.056,770.13557 c -4.04703,2.06371 -8.81245,4.14198 -10.56886,8.252 -0.54013,1.26397 0.22272,2.75445 0.4124,4.10296 0.7708,1.43658 -1.11269,2.70312 -0.55672,4.14497 0.66534,1.49716 2.56652,1.27157 3.82727,0.79098 1.28493,-0.44158 -0.53582,-1.70574 0,0 0.58286,1.36336 5.36635,1.77935 6.80857,1.16016 1.38701,-0.50854 2.33091,-0.74836 2.99304,-1.90608 2.17101,-4.41678 3.23711,-9.41815 2.89587,-14.33663 -0.10641,-1.3254 -0.51397,-2.60792 -0.99259,-3.83099 -0.49507,-1.61389 -2.16711,0.0174 -2.82476,0.68074 -0.60256,0.42628 -1.2709,0.7763 -1.99422,0.94189 z"
+ style="color:#000000;fill:#87deaa;fill-opacity:1;fill-rule:nonzero;stroke:#87deaa;stroke-width:2.47468472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/publicSpaceDisabled.png"
+ sodipodi:nodetypes="cccccacccc"
+ style="color:#000000;fill:#87deaa;fill-opacity:1;fill-rule:nonzero;stroke:#87deaa;stroke-width:2.47468472;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="m 122.19052,771.15758 c -2.3826,0.90535 -4.95654,1.52602 -7.13172,2.85354 -1.8032,1.51881 -1.57875,4.29286 -0.64391,6.22635 1.14716,2.47467 2.05723,5.0642 3.42811,7.43042 1.32586,1.74785 -0.0893,0.98748 1.52126,2.46833 0.45524,0.54208 3.2913,3.28281 4.94937,2.47468 0.82652,-0.40286 0.61983,-1.62095 0.54826,-2.70337 0.52083,-2.24498 -0.82476,-4.39163 -0.7175,-6.65277 -0.0579,-2.83898 0.49944,-5.64399 0.8377,-8.45266 0.19303,-1.55724 -0.68561,-4.455 -2.79157,-3.64452 z"
+ id="path3125"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/publicSpaceDisabled.png"
+ sodipodi:type="arc"
+ style="color:#000000;fill:none;stroke:#b3b3b3;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3007"
+ sodipodi:cx="90"
+ sodipodi:cy="32.362183"
+ sodipodi:rx="20"
+ sodipodi:ry="10"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ transform="matrix(1.1754752,0,0,2.3509505,30.940442,700.21488)" />
+ <path
+ transform="matrix(1.1754752,0,0,2.3509505,30.940442,700.21488)"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ sodipodi:ry="10"
+ sodipodi:rx="20"
+ sodipodi:cy="32.362183"
+ sodipodi:cx="90"
+ id="path3141"
+ style="color:#000000;fill:none;stroke:#b3b3b3;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/publicSpaceDisabled.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+ <g
+ id="g9950"
+ transform="matrix(1.1267151,0,0,1.1267151,438.15736,-63.180454)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:export-ydpi="399.59854"
+ inkscape:export-xdpi="399.59854"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-logo-1200.png"
+ id="path2585"
+ d="m 273.08439,61.656431 c -0.94086,0 -1.84521,0.0038 -2.7527,0.06255 -0.0847,0.01722 -0.16503,0.0466 -0.25025,0.06255 -0.84477,0.157787 -1.67823,0.292338 -2.56501,0.312813 -0.12283,0.01722 -0.25319,-0.01836 -0.37537,0 -7.23791,1.089665 -13.35321,4.232391 -18.26793,9.446767 -5.73951,6.06158 -8.63346,13.323179 -8.63347,21.771374 0,8.542995 2.89397,15.853925 8.63347,21.896495 6.21303,6.51614 14.2855,9.75956 24.21126,9.75958 5.26591,-2e-5 10.3285,-1.30838 15.13985,-3.94137 4.81128,-2.55719 8.9947,-6.17652 12.57485,-10.76056 l -10.82313,-6.00589 c -4.65983,6.21305 -10.38519,9.32165 -17.20437,9.32165 -4.7356,0 -8.98159,-1.53619 -12.63741,-4.56698 -3.71271,-3.03077 -5.56801,-6.72237 -5.56796,-11.135945 l 49.48606,0 0,-2.50246 c -5e-5,-10.702335 -3.62514,-19.272304 -10.82312,-25.712732 -6.06157,-5.360601 -12.77627,-8.007783 -20.14477,-8.007859 z m -230.100847,0.43793 0,23.961011 -8.383224,0 0,12.262047 8.383224,0 0,25.024561 12.762525,0 0,-25.024561 7.695059,0 15.702918,25.024561 15.139855,0 -21.083194,-31.781201 20.144769,-28.277758 -15.452668,0 -15.577788,22.772351 -6.568951,0 0,-23.961011 -12.762525,0 z m 156.591197,0 c -2.19697,0.392104 -4.24408,1.030291 -6.13103,2.001968 -3.18232,1.704844 -5.69466,3.953222 -7.56992,6.756633 l 0,-7.569941 -12.82509,0 0,60.058959 12.82509,0 0,-33.658041 c -2e-5,-4.811275 1.35771,-8.502905 4.0665,-11.13593 2.72765,-2.632924 6.18568,-3.941333 10.44774,-3.941371 4.50823,3.8e-5 8.0288,1.20973 10.51032,3.691123 2.48138,2.481482 3.69105,6.370493 3.69113,11.636428 l 0,33.407791 12.82509,0 0,-36.223052 c -7e-5,-7.36852 -2.24843,-13.456553 -6.75664,-18.267934 -3.38123,-3.60845 -7.29356,-5.854486 -11.76155,-6.756633 l -9.32164,0 z m -97.22042,1.18866 0,34.784148 c -2e-5,8.145201 2.74589,14.730761 8.2581,19.769411 5.1144,4.73557 11.44922,7.13197 18.89354,7.13199 7.52004,-2e-5 13.82273,-2.39642 18.95611,-7.13199 5.51215,-5.03865 8.25804,-11.62421 8.25811,-19.769411 l 0,-34.784148 -12.82509,0 0,33.658038 c -7e-5,4.432511 -1.35779,8.038631 -4.06649,10.823121 -2.80351,2.87925 -6.21219,4.31674 -10.32264,4.31674 -3.95896,2e-5 -7.39407,-1.45642 -10.19751,-4.31674 -2.78453,-2.87919 -4.12909,-6.46636 -4.12905,-10.823121 l 0,-33.658038 -12.82508,0 z M 271.4578,73.16773 c 4.18619,6.4e-5 7.84165,1.173592 10.94824,3.503441 3.01177,2.386754 5.22976,5.863768 6.63151,10.447757 l -34.47133,0 c 1.00391,-4.413515 3.087,-7.841158 6.19357,-10.32264 3.0118,-2.40562 6.56857,-3.628494 10.69801,-3.628558 z"
+ 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"
+ inkscape:connector-curvature="0" />
+ <g
+ inkscape:export-ydpi="399.59854"
+ inkscape:export-xdpi="399.59854"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-logo-1200.png"
+ transform="matrix(0.43982058,0,0,0.4392609,-61.046168,-320.82474)"
+ id="g6020">
+ <path
+ transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)"
+ id="path6022"
+ d="m 60.321717,411.99998 377.014613,0"
+ 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"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)"
+ id="path6024"
+ d="m 252.61203,788.60332 0,-377.01178"
+ 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"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)"
+ id="path6026"
+ d="m 252.86937,597.15755 377.0124,0"
+ 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"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)"
+ id="path6028"
+ d="m 437.45588,596.97447 0,-377.01491"
+ 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"
+ inkscape:connector-curvature="0" />
+ <path
+ transform="matrix(0.240856,0.12287,-0.12287,0.240856,101.5762,778.871)"
+ id="path6030"
+ d="m 372.87905,411.27704 64.93441,0"
+ 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"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2991-0"
+ y="27.185909"
+ x="367.7084"
+ style="font-size:46.11235046px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:end;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:end;baseline-shift:baseline;color:#000000;fill:#69312f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
+ xml:space="preserve"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ style="font-size:46.11235046px;font-weight:bold;text-align:end;text-anchor:end;fill:#69312f;fill-opacity:1;-inkscape-font-specification:Ubuntu Bold"
+ y="27.185909"
+ x="367.7084"
+ id="tspan2993-2"
+ sodipodi:role="line">How can</tspan><tspan
+ style="font-size:46.11235046px;font-weight:bold;text-align:end;text-anchor:end;fill:#69312f;fill-opacity:1;-inkscape-font-specification:Ubuntu Bold"
+ y="84.826347"
+ x="367.7084"
+ sodipodi:role="line"
+ id="tspan10105">be useful for</tspan></text>
+ <g
+ id="g10062"
+ transform="matrix(1.708345,0,0,1.708345,116.80048,-314.21383)">
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#b3b3b3;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3145"
+ sodipodi:cx="90"
+ sodipodi:cy="32.362183"
+ sodipodi:rx="20"
+ sodipodi:ry="10"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ transform="matrix(0.475,0,0,0.95,-179.12059,360.07987)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceDisabled.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceDisabled.png"
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path3149"
+ d="m -140.69827,395.21049 0,-6.17998 3.95722,-3.78777 4.66874,4.1255 0,5.84225 z"
+ inkscape:transform-center-y="-0.48742846"
+ inkscape:transform-center-x="0.043758053"
+ style="color:#000000;fill:#e9c6af;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceDisabled.png"
+ inkscape:connector-curvature="0"
+ style="color:#000000;fill:#e9c6af;fill-opacity:1;fill-rule:nonzero;stroke:#e9c6af;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block"
+ d="m -136.35815,385.24274 5.97512,5.6056"
+ id="path3729" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceDisabled.png"
+ id="path3731"
+ d="m -136.38303,385.24274 -5.97512,5.6056"
+ style="color:#000000;fill:#e9c6af;fill-opacity:1;fill-rule:nonzero;stroke:#e9c6af;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g10068"
+ transform="matrix(1.708345,0,0,1.708345,823.08995,-562.83086)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceEnabled.png"
+ transform="matrix(0.475,0,0,0.95,-179.12059,382.07987)"
+ d="m 110,32.362183 c 0,5.522847 -8.95431,10 -20,10 -11.045695,0 -20,-4.477153 -20,-10 0,-5.522848 8.954305,-10 20,-10 11.04569,0 20,4.477152 20,10 z"
+ sodipodi:ry="10"
+ sodipodi:rx="20"
+ sodipodi:cy="32.362183"
+ sodipodi:cx="90"
+ id="path3757"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#800000;stroke-width:1.48864591;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceEnabled.png"
+ style="color:#000000;fill:#cc6633;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ inkscape:transform-center-x="0.043758053"
+ inkscape:transform-center-y="-0.48742846"
+ d="m -140.69827,417.21049 0,-6.17998 3.95722,-3.78777 4.66874,4.1255 0,5.84225 z"
+ id="path3759"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceEnabled.png"
+ id="path3761"
+ d="m -136.35815,407.24274 5.97512,5.6056"
+ style="color:#000000;fill:#cc6633;fill-opacity:1;fill-rule:nonzero;stroke:#cc6633;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceEnabled.png"
+ inkscape:connector-curvature="0"
+ style="color:#000000;fill:#cc6633;fill-opacity:1;fill-rule:nonzero;stroke:#cc6633;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block"
+ d="m -136.38303,407.24274 -5.97512,5.6056"
+ id="path3763" />
+ </g>
+ <text
+ sodipodi:linespacing="173.00001%"
+ id="text10115"
+ y="236.91339"
+ x="74.030479"
+ style="font-size:34px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:173.00001383%;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:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
+ xml:space="preserve"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/kune-intro.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><tspan
+ style="font-size:34px;font-weight:normal;line-height:173.00001383%;fill:#ffffff;-inkscape-font-specification:Ubuntu"
+ y="236.91339"
+ x="74.030479"
+ id="tspan10117"
+ sodipodi:role="line">You can see Kune as a web tool for:</tspan><tspan
+ style="font-size:34px;font-weight:normal;line-height:173.00001383%;fill:#ffffff;-inkscape-font-specification:Ubuntu"
+ y="295.7334"
+ x="74.030479"
+ sodipodi:role="line"
+ id="tspan10119"># create your blogs / webs easily</tspan><tspan
+ style="font-size:34px;font-weight:normal;line-height:173.00001383%;fill:#ffffff;-inkscape-font-specification:Ubuntu"
+ y="354.55341"
+ x="74.030479"
+ sodipodi:role="line"
+ id="tspan10121"># communicate with your friends an colleagues</tspan><tspan
+ style="font-size:34px;font-weight:normal;line-height:173.00001383%;fill:#ffffff;-inkscape-font-specification:Ubuntu"
+ y="413.37341"
+ x="74.030479"
+ sodipodi:role="line"
+ id="tspan10125"># create and edit documents with your friends</tspan><tspan
+ style="font-size:34px;font-weight:normal;line-height:173.00001383%;fill:#ffffff;-inkscape-font-specification:Ubuntu"
+ y="472.19342"
+ x="74.030479"
+ sodipodi:role="line"
+ id="tspan10129">in real time</tspan></text>
+ </g>
+</svg>
Added: trunk/src/main/java/cc/kune/common/client/ui/EditEvent.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/EditEvent.java (rev 0)
+++ trunk/src/main/java/cc/kune/common/client/ui/EditEvent.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -0,0 +1,38 @@
+package cc.kune.common.client.ui;
+
+import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.GwtEvent;
+
+public class EditEvent extends GwtEvent<EditEvent.EditHandler> {
+
+ public interface EditHandler extends EventHandler {
+
+ void fire(EditEvent event);
+ }
+
+ public static final GwtEvent.Type<EditHandler> TYPE = new GwtEvent.Type<EditHandler>();
+
+ public static Type<EditHandler> getType() {
+ return TYPE;
+ }
+
+ private final String text;
+
+ public EditEvent(final String text) {
+ this.text = text;
+ }
+
+ @Override
+ public com.google.gwt.event.shared.GwtEvent.Type<EditHandler> getAssociatedType() {
+ return TYPE;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ @Override
+ protected void dispatch(final EditHandler handler) {
+ handler.fire(this);
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/main/java/cc/kune/common/client/ui/EditEvent.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.java (rev 0)
+++ trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -0,0 +1,100 @@
+package cc.kune.common.client.ui;
+
+import cc.kune.common.client.tooltip.Tooltip;
+import cc.kune.common.client.ui.EditEvent.EditHandler;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.MouseOutEvent;
+import com.google.gwt.event.dom.client.MouseOverEvent;
+import com.google.gwt.event.shared.HandlerRegistration;
+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.ui.Composite;
+import com.google.gwt.user.client.ui.InlineLabel;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+public class EditableLabel extends Composite implements HasEditHandler {
+
+ interface EditableLabelUiBinder extends UiBinder<Widget, EditableLabel> {
+ }
+
+ private static EditableLabelUiBinder uiBinder = GWT.create(EditableLabelUiBinder.class);
+
+ private boolean editable;
+ @UiField
+ InlineLabel label;
+ @UiField
+ TextBox textbox;
+ private String tooltip;
+
+ public EditableLabel() {
+ initWidget(uiBinder.createAndBindUi(this));
+ label.setStylePrimaryName("k-editableLabel");
+ editable = false;
+ tooltip = "";
+ }
+
+ @Override
+ public HandlerRegistration addEditHandler(final EditHandler handler) {
+ return addHandler(handler, EditEvent.getType());
+ }
+
+ private void finishEdit() {
+ label.setText(textbox.getText());
+ label.setVisible(true);
+ textbox.setVisible(false);
+ fireEvent(new EditEvent(textbox.getValue()));
+ }
+
+ @UiHandler("textbox")
+ void handleKeys(final KeyDownEvent event) {
+ if (event.getNativeKeyCode() == 13) {
+ finishEdit();
+ }
+ }
+
+ @UiHandler("textbox")
+ void onBlur(final BlurEvent event) {
+ finishEdit();
+ }
+
+ @UiHandler("label")
+ void onClick(final ClickEvent e) {
+ if (editable) {
+ label.setVisible(false);
+ textbox.setVisible(true);
+ textbox.setFocus(true);
+ textbox.selectAll();
+ }
+ }
+
+ @UiHandler("label")
+ void onMouseOut(final MouseOutEvent event) {
+ label.removeStyleDependentName("high");
+ }
+
+ @UiHandler("label")
+ void onMouseOver(final MouseOverEvent event) {
+ label.addStyleDependentName("high");
+ }
+
+ public void setEditable(final boolean editable) {
+ this.editable = editable;
+ Tooltip.to(label, editable ? tooltip : "");
+ }
+
+ public void setText(final String text) {
+ label.setText(text);
+ textbox.setText(text);
+ }
+
+ public void setTooltip(final String tooltip) {
+ this.tooltip = tooltip;
+ }
+
+}
Property changes on: trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.ui.xml (rev 0)
+++ trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.ui.xml 2011-04-29 12:02:17 UTC (rev 1329)
@@ -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">
+ <ui:style>
+ .textbox { font-weight: bold; }
+ </ui:style>
+ <g:HTMLPanel>
+ <g:InlineLabel ui:field="label" />
+ <g:TextBox styleName="{style.textbox} .gwtTextBox" width="100%" ui:field="textbox" visible="false" />
+ </g:HTMLPanel>
+</ui:UiBinder>
\ No newline at end of file
Property changes on: trunk/src/main/java/cc/kune/common/client/ui/EditableLabel.ui.xml
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/src/main/java/cc/kune/common/client/ui/HasEditHandler.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/HasEditHandler.java (rev 0)
+++ trunk/src/main/java/cc/kune/common/client/ui/HasEditHandler.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -0,0 +1,11 @@
+package cc.kune.common.client.ui;
+
+import cc.kune.common.client.ui.EditEvent.EditHandler;
+
+import com.google.gwt.event.shared.HandlerRegistration;
+
+public interface HasEditHandler {
+
+ HandlerRegistration addEditHandler(EditHandler handler);
+
+}
Property changes on: trunk/src/main/java/cc/kune/common/client/ui/HasEditHandler.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/src/main/java/cc/kune/common/client/ui/IconLabel.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/IconLabel.ui.xml 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/common/client/ui/IconLabel.ui.xml 2011-04-29 12:02:17 UTC (rev 1329)
@@ -3,19 +3,23 @@
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.label {
- text-decoration: none;
+ text-decoration: none;
}
.label a:link {
- text-decoration: none;
- color: gray;
+ text-decoration: none;
+ color: gray;
}
- .pad {
- /* white-space: nowrap; */
+ .pad { /* white-space: nowrap; */
+ outline: 0 none;
}
+
+ .self {
+ outline: 0 none;
+ }
</ui:style>
- <g:FocusPanel ui:field="self">
+ <g:FocusPanel styleName="{style.self}" ui:field="self" >
<g:FlowPanel styleName="{style.pad}" ui:field="flow">
<g:Image ui:field="iconLeft" />
<g:Image ui:field="iconRight" />
Modified: trunk/src/main/java/cc/kune/common/public/kune-common.css
===================================================================
--- trunk/src/main/java/cc/kune/common/public/kune-common.css 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/common/public/kune-common.css 2011-04-29 12:02:17 UTC (rev 1329)
@@ -617,4 +617,20 @@
color: #999999;
}
-/* End tabbar */
\ No newline at end of file
+/* End tabbar */
+
+.k-editableLabel {
+ font-weight: bold;
+ padding: 3px
+}
+
+.k-editableLabel-high {
+ font-weight: bold;
+ background-color: #FFFBC1;
+ color: black !important;
+}
+
+.k-editableLabel-high span {
+ background-color: #FFFBC1;
+ color: black !important;
+}
Modified: trunk/src/main/java/cc/kune/core/public/ws.css
===================================================================
--- trunk/src/main/java/cc/kune/core/public/ws.css 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/core/public/ws.css 2011-04-29 12:02:17 UTC (rev 1329)
@@ -17,6 +17,10 @@
font: 'Ubuntu', Arial;
}
+div, span {
+ outline: 0 none;
+}
+
/*
a {
color: darkblue;
@@ -375,6 +379,7 @@
.k-space-sel-btn {
padding: 0 1px 0 1px;
margin: 0 0 -2px;
+ outline: 0 none;
}
.k-sitebar-logo {
@@ -862,6 +867,7 @@
border-radius: 5px;
vertical-align: middle;
line-height: 2em !important;
+ outline: 0 none;
/* height: 26px !important; */
font-weight: bold;
/*
@@ -873,11 +879,13 @@
.k-sn-mainpanel .x-btn button:hover,.k-sn-mainpanel button:hover,button.k-button:hover {
border: 2px orange solid;
+ outline: 0 none;
/* background: #f0f0f0; */
}
.k-sn-mainpanel .x-btn button:hover span,.k-sn-mainpanel button:hover span,button.k-button:hover span {
color: brown !important;
+ outline: 0 none;
}
.k-sn-mainpanel .x-btn button:active,.k-sn-mainpanel button:active,button.k-button:active {
@@ -1093,6 +1101,7 @@
.k-tool-item {
display: block;
cursor: pointer;
+ outline: 0 none;
}
.k-tool-item-focus {
Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -28,10 +28,10 @@
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
+import org.waveprotocol.wave.model.waveref.InvalidWaveRefException;
import org.waveprotocol.wave.model.waveref.WaveRef;
import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder;
-import cc.kune.blogs.shared.BlogsConstants;
import cc.kune.core.client.errors.DefaultException;
import cc.kune.core.client.errors.I18nNotFoundException;
import cc.kune.core.client.errors.NameInUseException;
@@ -45,7 +45,6 @@
import cc.kune.core.server.utils.FilenameUtils;
import cc.kune.core.shared.domain.ContentStatus;
import cc.kune.core.shared.domain.RateResult;
-import cc.kune.docs.shared.DocsConstants;
import cc.kune.domain.Container;
import cc.kune.domain.Content;
import cc.kune.domain.I18nLanguage;
@@ -66,235 +65,255 @@
@Singleton
public class ContentManagerDefault extends DefaultManager<Content, Long> implements ContentManager {
- private final ContainerFinder containerFinder;
- private final ContentFinder contentFinder;
- private final FinderService finder;
- private final KuneWaveManager kuneWaveManager;
- private final I18nLanguageFinder languageFinder;
- private final ParticipantUtils participantUtils;
- private final TagUserContentManager tagManager;
- private final UserFinder userFinder;
+ private final ContainerFinder containerFinder;
+ private final ContentFinder contentFinder;
+ private final FinderService finder;
+ private final KuneWaveManager kuneWaveManager;
+ private final I18nLanguageFinder languageFinder;
+ private final ParticipantUtils participantUtils;
+ private final TagUserContentManager tagManager;
+ private final UserFinder userFinder;
- @Inject
- public ContentManagerDefault(final ContentFinder contentFinder, final ContainerFinder containerFinder,
- final Provider<EntityManager> provider, final FinderService finder, final UserFinder userFinder,
- final I18nLanguageFinder languageFinder, final TagUserContentManager tagManager,
- final KuneWaveManager kuneWaveManager, final ParticipantUtils participantUtils) {
- super(provider, Content.class);
- this.contentFinder = contentFinder;
- this.containerFinder = containerFinder;
- this.finder = finder;
- this.userFinder = userFinder;
- this.languageFinder = languageFinder;
- this.tagManager = tagManager;
- this.kuneWaveManager = kuneWaveManager;
- this.participantUtils = participantUtils;
- }
+ @Inject
+ public ContentManagerDefault(final ContentFinder contentFinder, final ContainerFinder containerFinder,
+ final Provider<EntityManager> provider, final FinderService finder, final UserFinder userFinder,
+ final I18nLanguageFinder languageFinder, final TagUserContentManager tagManager,
+ final KuneWaveManager kuneWaveManager, final ParticipantUtils participantUtils) {
+ super(provider, Content.class);
+ this.contentFinder = contentFinder;
+ this.containerFinder = containerFinder;
+ this.finder = finder;
+ this.userFinder = userFinder;
+ this.languageFinder = languageFinder;
+ this.tagManager = tagManager;
+ this.kuneWaveManager = kuneWaveManager;
+ this.participantUtils = participantUtils;
+ }
- @Override
- public void addAuthor(final User user, final Long contentId, final String authorShortName) throws DefaultException {
- final Content content = finder.getContent(contentId);
- final User author = userFinder.getByShortName(authorShortName);
- if (author == null) {
- throw new UserNotFoundException();
- }
- content.addAuthor(author);
+ @Override
+ public void addAuthor(final User user, final Long contentId, final String authorShortName)
+ throws DefaultException {
+ final Content content = finder.getContent(contentId);
+ final User author = userFinder.getByShortName(authorShortName);
+ if (author == null) {
+ throw new UserNotFoundException();
}
+ content.addAuthor(author);
+ }
- @Override
- public Content createContent(final String title, final String body, final User author, final Container container,
- final String typeId) {
- String contentBody;
- FilenameUtils.checkBasicFilename(title);
- final String newtitle = findInexistentTitle(container, title);
- final Content newContent = new Content();
- newContent.addAuthor(author);
- newContent.setLanguage(author.getLanguage());
- newContent.setTypeId(typeId);
- container.addContent(newContent);
- newContent.setContainer(container);
- final Revision revision = new Revision(newContent);
- revision.setTitle(newtitle);
- // Duplicate in StateServiceDefault
- if ((typeId.equals(DocsConstants.TYPE_DOCUMENT)) || (typeId.equals(BlogsConstants.TYPE_POST))) {
- final WaveRef waveRef = kuneWaveManager.createWave(title, body, participantUtils.of(author.getShortName()));
- contentBody = JavaWaverefEncoder.encodeToUriPathSegment(waveRef);
- } else {
- contentBody = body;
- }
- revision.setBody(contentBody);
- newContent.addRevision(revision);
- return persist(newContent);
+ @Override
+ public Content createContent(final String title, final String body, final User author,
+ final Container container, final String typeId) {
+ String contentBody;
+ FilenameUtils.checkBasicFilename(title);
+ final String newtitle = findInexistentTitle(container, title);
+ final Content newContent = new Content();
+ newContent.addAuthor(author);
+ newContent.setLanguage(author.getLanguage());
+ newContent.setTypeId(typeId);
+ container.addContent(newContent);
+ newContent.setContainer(container);
+ final Revision revision = new Revision(newContent);
+ revision.setTitle(newtitle);
+ // Duplicate in StateServiceDefault
+ if (newContent.isWave()) {
+ final WaveRef waveRef = kuneWaveManager.createWave(title, body,
+ participantUtils.of(author.getShortName()));
+ contentBody = JavaWaverefEncoder.encodeToUriPathSegment(waveRef);
+ } else {
+ contentBody = body;
}
+ revision.setBody(contentBody);
+ newContent.addRevision(revision);
+ return persist(newContent);
+ }
- private MultiFieldQueryParser createMultiFieldParser() {
- final MultiFieldQueryParser parser = new MultiFieldQueryParser(DEF_GLOBAL_SEARCH_FIELDS, new StandardAnalyzer());
- return parser;
- }
+ private MultiFieldQueryParser createMultiFieldParser() {
+ final MultiFieldQueryParser parser = new MultiFieldQueryParser(DEF_GLOBAL_SEARCH_FIELDS,
+ new StandardAnalyzer());
+ return parser;
+ }
- @Override
- public boolean findIfExistsTitle(final Container container, final String title) {
- return (contentFinder.findIfExistsTitle(container, title) > 0)
- || (containerFinder.findIfExistsTitle(container, title) > 0);
- }
+ @Override
+ public boolean findIfExistsTitle(final Container container, final String title) {
+ return (contentFinder.findIfExistsTitle(container, title) > 0)
+ || (containerFinder.findIfExistsTitle(container, title) > 0);
+ }
- private String findInexistentTitle(final Container container, final String title) {
- String initialTitle = String.valueOf(title);
- while (findIfExistsTitle(container, initialTitle)) {
- initialTitle = FileUtils.getNextSequentialFileName(initialTitle);
- }
- return initialTitle;
+ private String findInexistentTitle(final Container container, final String title) {
+ String initialTitle = String.valueOf(title);
+ while (findIfExistsTitle(container, initialTitle)) {
+ initialTitle = FileUtils.getNextSequentialFileName(initialTitle);
}
+ return initialTitle;
+ }
- @Override
- public Double getRateAvg(final Content content) {
- return finder.getRateAvg(content);
- }
+ @Override
+ public Double getRateAvg(final Content content) {
+ return finder.getRateAvg(content);
+ }
- @Override
- public Long getRateByUsers(final Content content) {
- return finder.getRateByUsers(content);
- }
+ @Override
+ public Long getRateByUsers(final Content content) {
+ return finder.getRateByUsers(content);
+ }
- @Override
- public Double getRateContent(final User rater, final Content content) {
- final Rate rate = finder.getRate(rater, content);
- if (rate != null) {
- return rate.getValue();
- } else {
- return null;
- }
+ @Override
+ public Double getRateContent(final User rater, final Content content) {
+ final Rate rate = finder.getRate(rater, content);
+ if (rate != null) {
+ return rate.getValue();
+ } else {
+ return null;
}
+ }
- @Override
- public RateResult rateContent(final User rater, final Long contentId, final Double value) throws DefaultException {
- final Content content = finder.getContent(contentId);
- final Rate oldRate = finder.getRate(rater, content);
- if (oldRate == null) {
- final Rate rate = new Rate(rater, content, value);
- super.persist(rate, Rate.class);
- } else {
- oldRate.setValue(value);
- super.persist(oldRate, Rate.class);
- }
- final Double rateAvg = getRateAvg(content);
- final Long rateByUsers = getRateByUsers(content);
- return new RateResult(rateAvg != null ? rateAvg : 0D, rateByUsers != null ? rateByUsers.intValue() : 0, value);
+ @Override
+ public RateResult rateContent(final User rater, final Long contentId, final Double value)
+ throws DefaultException {
+ final Content content = finder.getContent(contentId);
+ final Rate oldRate = finder.getRate(rater, content);
+ if (oldRate == null) {
+ final Rate rate = new Rate(rater, content, value);
+ super.persist(rate, Rate.class);
+ } else {
+ oldRate.setValue(value);
+ super.persist(oldRate, Rate.class);
}
+ final Double rateAvg = getRateAvg(content);
+ final Long rateByUsers = getRateByUsers(content);
+ return new RateResult(rateAvg != null ? rateAvg : 0D, rateByUsers != null ? rateByUsers.intValue()
+ : 0, value);
+ }
- @Override
- public void removeAuthor(final User user, final Long contentId, final String authorShortName)
- throws DefaultException {
- final Content content = finder.getContent(contentId);
- final User author = userFinder.getByShortName(authorShortName);
- if (author == null) {
- throw new UserNotFoundException();
- }
- content.removeAuthor(author);
+ @Override
+ public void removeAuthor(final User user, final Long contentId, final String authorShortName)
+ throws DefaultException {
+ final Content content = finder.getContent(contentId);
+ final User author = userFinder.getByShortName(authorShortName);
+ if (author == null) {
+ throw new UserNotFoundException();
}
+ content.removeAuthor(author);
+ }
- @Override
- public Content renameContent(final User user, final Long contentId, final String newTitle) throws DefaultException {
- final String newTitleWithoutNL = FilenameUtils.chomp(newTitle);
- FilenameUtils.checkBasicFilename(newTitleWithoutNL);
- final Content content = finder.getContent(contentId);
- if (findIfExistsTitle(content.getContainer(), newTitleWithoutNL)) {
- throw new NameInUseException();
- }
- content.getLastRevision().setTitle(newTitleWithoutNL);
- return content;
+ @Override
+ public Content renameContent(final User user, final Long contentId, final String newTitle)
+ throws DefaultException {
+ final String newTitleWithoutNL = FilenameUtils.chomp(newTitle);
+ FilenameUtils.checkBasicFilename(newTitleWithoutNL);
+ final Content content = finder.getContent(contentId);
+ if (findIfExistsTitle(content.getContainer(), newTitleWithoutNL)) {
+ throw new NameInUseException();
}
-
- @Override
- public Content save(final User editor, final Content content) {
- return persist(content);
+ content.getLastRevision().setTitle(newTitleWithoutNL);
+ if (content.isWave()) {
+ final String author = content.getAuthors().get(0).getShortName();
+ try {
+ kuneWaveManager.setTitle(
+ JavaWaverefEncoder.decodeWaveRefFromPath(String.valueOf(content.getLastRevision().getBody())),
+ newTitle, author);
+ } catch (final InvalidWaveRefException e) {
+ throw new DefaultException("Error setting the wave title");
+ }
}
+ return content;
+ }
- @Override
- public Content save(final User editor, final Content content, final String body) {
- final Revision revision = new Revision(content);
- revision.setEditor(editor);
- revision.setTitle(content.getTitle());
- revision.setBody(body);
- content.addRevision(revision);
- return persist(content);
- }
+ @Override
+ public Content save(final User editor, final Content content) {
+ return persist(content);
+ }
- @Override
- public SearchResult<Content> search(final String search) {
- return this.search(search, null, null);
- }
+ @Override
+ public Content save(final User editor, final Content content, final String body) {
+ final Revision revision = new Revision(content);
+ revision.setEditor(editor);
+ revision.setTitle(content.getTitle());
+ revision.setBody(body);
+ content.addRevision(revision);
+ return persist(content);
+ }
- @Override
- public SearchResult<Content> search(final String search, final Integer firstResult, final Integer maxResults) {
- final MultiFieldQueryParser parser = createMultiFieldParser();
- Query query;
- try {
- query = parser.parse(search);
- } catch (final ParseException e) {
- throw new ServerManagerException("Error parsing search");
- }
- return super.search(query, firstResult, maxResults);
- }
+ @Override
+ public SearchResult<Content> search(final String search) {
+ return this.search(search, null, null);
+ }
- @Override
- public SearchResult<Content> searchMime(final String search, final Integer firstResult, final Integer maxResults,
- final String groupShortName, final String mimetype) {
- final List<Content> list = contentFinder.findMime(groupShortName, "%" + search + "%", mimetype, firstResult,
- maxResults);
- final Long count = contentFinder.findMimeCount(groupShortName, "%" + search + "%", mimetype);
- return new SearchResult<Content>(count.intValue(), list);
+ @Override
+ public SearchResult<Content> search(final String search, final Integer firstResult,
+ final Integer maxResults) {
+ final MultiFieldQueryParser parser = createMultiFieldParser();
+ Query query;
+ try {
+ query = parser.parse(search);
+ } catch (final ParseException e) {
+ throw new ServerManagerException("Error parsing search");
}
+ return super.search(query, firstResult, maxResults);
+ }
- @Override
- public SearchResult<?> searchMime(final String search, final Integer firstResult, final Integer maxResults,
- final String groupShortName, final String mimetype, final String mimetype2) {
- final List<Content> list = contentFinder.find2Mime(groupShortName, "%" + search + "%", mimetype, mimetype2,
- firstResult, maxResults);
- final Long count = contentFinder.find2MimeCount(groupShortName, "%" + search + "%", mimetype, mimetype2);
- return new SearchResult<Content>(count.intValue(), list);
- }
+ @Override
+ public SearchResult<Content> searchMime(final String search, final Integer firstResult,
+ final Integer maxResults, final String groupShortName, final String mimetype) {
+ final List<Content> list = contentFinder.findMime(groupShortName, "%" + search + "%", mimetype,
+ firstResult, maxResults);
+ final Long count = contentFinder.findMimeCount(groupShortName, "%" + search + "%", mimetype);
+ return new SearchResult<Content>(count.intValue(), list);
+ }
- @Override
- public I18nLanguage setLanguage(final User user, final Long contentId, final String languageCode)
- throws DefaultException {
- final Content content = finder.getContent(contentId);
- final I18nLanguage language = languageFinder.findByCode(languageCode);
- if (language == null) {
- throw new I18nNotFoundException();
- }
- content.setLanguage(language);
- return language;
- }
+ @Override
+ public SearchResult<?> searchMime(final String search, final Integer firstResult,
+ final Integer maxResults, final String groupShortName, final String mimetype,
+ final String mimetype2) {
+ final List<Content> list = contentFinder.find2Mime(groupShortName, "%" + search + "%", mimetype,
+ mimetype2, firstResult, maxResults);
+ final Long count = contentFinder.find2MimeCount(groupShortName, "%" + search + "%", mimetype,
+ mimetype2);
+ return new SearchResult<Content>(count.intValue(), list);
+ }
- @Override
- public void setPublishedOn(final User user, final Long contentId, final Date publishedOn) throws DefaultException {
- final Content content = finder.getContent(contentId);
- content.setPublishedOn(publishedOn);
+ @Override
+ public I18nLanguage setLanguage(final User user, final Long contentId, final String languageCode)
+ throws DefaultException {
+ final Content content = finder.getContent(contentId);
+ final I18nLanguage language = languageFinder.findByCode(languageCode);
+ if (language == null) {
+ throw new I18nNotFoundException();
}
+ content.setLanguage(language);
+ return language;
+ }
- @Override
- public Content setStatus(final Long contentId, final ContentStatus status) {
- final Content content = finder.getContent(contentId);
- content.setStatus(status);
- switch (status) {
- case publishedOnline:
- content.setPublishedOn(new Date());
- content.setDeletedOn(null);
- break;
- case inTheDustbin:
- content.setDeletedOn(new Date());
- content.setPublishedOn(null);
- break;
- default:
- break;
- }
- return content;
+ @Override
+ public void setPublishedOn(final User user, final Long contentId, final Date publishedOn)
+ throws DefaultException {
+ final Content content = finder.getContent(contentId);
+ content.setPublishedOn(publishedOn);
+ }
+
+ @Override
+ public Content setStatus(final Long contentId, final ContentStatus status) {
+ final Content content = finder.getContent(contentId);
+ content.setStatus(status);
+ switch (status) {
+ case publishedOnline:
+ content.setPublishedOn(new Date());
+ content.setDeletedOn(null);
+ break;
+ case inTheDustbin:
+ content.setDeletedOn(new Date());
+ content.setPublishedOn(null);
+ break;
+ default:
+ break;
}
+ return content;
+ }
- @Override
- public void setTags(final User user, final Long contentId, final String tags) throws DefaultException {
- final Content content = finder.getContent(contentId);
- tagManager.setTags(user, content, tags);
- }
+ @Override
+ public void setTags(final User user, final Long contentId, final String tags) throws DefaultException {
+ final Content content = finder.getContent(contentId);
+ tagManager.setTags(user, content, tags);
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/state/StateContent.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/state/StateContent.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/core/server/state/StateContent.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -29,130 +29,136 @@
public class StateContent extends StateContainer {
- private List<User> authors;
- private String content;
- private AccessRights contentRights;
- private Double currentUserRate;
- private String documentId;
- private BasicMimeType mimeType;
- private Date publishedOn;
- private Double rate;
- private Integer rateByUsers;
- private ContentStatus status;
- private String tags;
- private int version;
- private String waveRef;
+ private List<User> authors;
+ private String content;
+ private AccessRights contentRights;
+ private Double currentUserRate;
+ private String documentId;
+ private boolean isWave;
+ private BasicMimeType mimeType;
+ private Date publishedOn;
+ private Double rate;
+ private Integer rateByUsers;
+ private ContentStatus status;
+ private String tags;
+ private int version;
+ private String waveRef;
- public StateContent() {
- }
+ public StateContent() {
+ }
- public List<User> getAuthors() {
- return authors;
- }
+ public List<User> getAuthors() {
+ return authors;
+ }
- public String getContent() {
- return content;
- }
+ public String getContent() {
+ return content;
+ }
- public AccessRights getContentRights() {
- return contentRights;
- }
+ public AccessRights getContentRights() {
+ return contentRights;
+ }
- public Double getCurrentUserRate() {
- return currentUserRate;
- }
+ public Double getCurrentUserRate() {
+ return currentUserRate;
+ }
- public String getDocumentId() {
- return documentId;
- }
+ public String getDocumentId() {
+ return documentId;
+ }
- public BasicMimeType getMimeType() {
- return mimeType;
- }
+ public BasicMimeType getMimeType() {
+ return mimeType;
+ }
- public Date getPublishedOn() {
- return publishedOn;
- }
+ public Date getPublishedOn() {
+ return publishedOn;
+ }
- public Double getRate() {
- return rate;
- }
+ public Double getRate() {
+ return rate;
+ }
- public Integer getRateByUsers() {
- return rateByUsers;
- }
+ public Integer getRateByUsers() {
+ return rateByUsers;
+ }
- public ContentStatus getStatus() {
- return status;
- }
+ public ContentStatus getStatus() {
+ return status;
+ }
- public String getTags() {
- return tags;
- }
+ public String getTags() {
+ return tags;
+ }
- public int getVersion() {
- return version;
- }
+ public int getVersion() {
+ return version;
+ }
- public String getWaveRef() {
- return waveRef;
- }
+ public String getWaveRef() {
+ return waveRef;
+ }
- public void setAuthors(final List<User> authors) {
- this.authors = authors;
- }
+ public boolean isWave() {
+ return waveRef != null;
+ }
- public void setContent(final String content) {
- this.content = content;
- }
+ public void setAuthors(final List<User> authors) {
+ this.authors = authors;
+ }
- public void setContentRights(final AccessRights contentRights) {
- this.contentRights = contentRights;
- }
+ public void setContent(final String content) {
+ this.content = content;
+ }
- public void setCurrentUserRate(final Double currentUserRate) {
- this.currentUserRate = currentUserRate;
- }
+ public void setContentRights(final AccessRights contentRights) {
+ this.contentRights = contentRights;
+ }
- public void setDocumentId(final String documentId) {
- this.documentId = documentId;
- }
+ public void setCurrentUserRate(final Double currentUserRate) {
+ this.currentUserRate = currentUserRate;
+ }
- public void setMimeType(final BasicMimeType mimeType) {
- this.mimeType = mimeType;
- }
+ public void setDocumentId(final String documentId) {
+ this.documentId = documentId;
+ }
- public void setPublishedOn(final Date publishedOn) {
- this.publishedOn = publishedOn;
- }
+ public void setMimeType(final BasicMimeType mimeType) {
+ this.mimeType = mimeType;
+ }
- public void setRate(final Double rate) {
- this.rate = rate;
- }
+ public void setPublishedOn(final Date publishedOn) {
+ this.publishedOn = publishedOn;
+ }
- public void setRateByUsers(final Integer rateByUsers) {
- this.rateByUsers = rateByUsers;
- }
+ public void setRate(final Double rate) {
+ this.rate = rate;
+ }
- public void setStatus(final ContentStatus status) {
- this.status = status;
- }
+ public void setRateByUsers(final Integer rateByUsers) {
+ this.rateByUsers = rateByUsers;
+ }
- public void setTags(final String tags) {
- this.tags = tags;
- }
+ public void setStatus(final ContentStatus status) {
+ this.status = status;
+ }
- public void setVersion(final int version) {
- this.version = version;
- }
+ public void setTags(final String tags) {
+ this.tags = tags;
+ }
- public void setWaveRef(final String waveRef) {
- this.waveRef = waveRef;
- }
+ public void setVersion(final int version) {
+ this.version = version;
+ }
- @Override
- public String toString() {
- return "State[" + getStateToken() + "/" + getTypeId() + (mimeType != null ? "-" + mimeType : "") + "]";
- }
+ public void setWaveRef(final String waveRef) {
+ this.waveRef = waveRef;
+ }
+ @Override
+ public String toString() {
+ return "State[" + getStateToken() + "/" + getTypeId() + (mimeType != null ? "-" + mimeType : "")
+ + "]";
+ }
+
}
Modified: trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/core/server/state/StateServiceDefault.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -19,9 +19,6 @@
*/
package cc.kune.core.server.state;
-import static cc.kune.blogs.shared.BlogsConstants.TYPE_POST;
-import static cc.kune.docs.shared.DocsConstants.TYPE_DOCUMENT;
-
import org.waveprotocol.wave.model.waveref.InvalidWaveRefException;
import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder;
@@ -105,7 +102,7 @@
state.setVersion(content.getVersion());
final char[] text = revision.getBody();
final String textBody = text == null ? null : new String(text);
- if (typeId.equals(TYPE_DOCUMENT) || (typeId.equals(TYPE_POST))) {
+ if (content.isWave()) {
state.setWaveRef(textBody);
try {
final Wavelet wavelet = kuneWaveManager.fetchWavelet(
Modified: trunk/src/main/java/cc/kune/domain/Content.java
===================================================================
--- trunk/src/main/java/cc/kune/domain/Content.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/domain/Content.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -54,8 +54,10 @@
import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.validator.NotNull;
+import cc.kune.blogs.shared.BlogsConstants;
import cc.kune.core.shared.domain.ContentStatus;
import cc.kune.core.shared.domain.utils.StateToken;
+import cc.kune.docs.shared.DocsConstants;
import cc.kune.domain.utils.HasStateToken;
@Entity
@@ -64,278 +66,283 @@
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Content implements HasStateToken {
- public static final String GROUP = "group";
- public static final String MIMETYPE = "mimetype";
- public static final Content NO_CONTENT = new Content();
- public static final String TITLE = "title";
+ public static final String GROUP = "group";
+ public static final String MIMETYPE = "mimetype";
+ public static final Content NO_CONTENT = new Content();
+ public static final String TITLE = "title";
- @OneToOne(cascade = CascadeType.ALL)
- private AccessLists accessLists;
+ @OneToOne(cascade = CascadeType.ALL)
+ private AccessLists accessLists;
- @IndexedEmbedded
- @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
- private List<User> authors;
+ @IndexedEmbedded
+ @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
+ private List<User> authors;
- @Fetch(FetchMode.JOIN)
- @ContainedIn
- @OneToMany(mappedBy = "content", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
- private Set<Comment> comments;
+ @Fetch(FetchMode.JOIN)
+ @ContainedIn
+ @OneToMany(mappedBy = "content", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+ private Set<Comment> comments;
- @ManyToOne
- @JoinColumn
- @IndexedEmbedded
- private Container container;
+ @ManyToOne
+ @JoinColumn
+ @IndexedEmbedded
+ private Container container;
- @Basic(optional = false)
- private Long createdOn;
+ @Basic(optional = false)
+ private Long createdOn;
- @Basic(optional = true)
- private Date deletedOn;
+ @Basic(optional = true)
+ private Date deletedOn;
- /**
- * filename if is an uploaded content
- */
- private String filename;
+ /**
+ * filename if is an uploaded content
+ */
+ private String filename;
- @Id
- @DocumentId
- @GeneratedValue
- // @PMD:REVIEWED:ShortVariable: by vjrj on 21/05/09 15:28
- private Long id;
+ @Id
+ @DocumentId
+ @GeneratedValue
+ // @PMD:REVIEWED:ShortVariable: by vjrj on 21/05/09 15:28
+ private Long id;
- @IndexedEmbedded
- @NotNull
- @ManyToOne(fetch = FetchType.LAZY)
- private I18nLanguage language;
+ @IndexedEmbedded
+ @NotNull
+ @ManyToOne(fetch = FetchType.LAZY)
+ private I18nLanguage language;
- @IndexedEmbedded
- @OneToOne(cascade = { CascadeType.ALL })
- private Revision lastRevision;
+ @IndexedEmbedded
+ @OneToOne(cascade = { CascadeType.ALL })
+ private Revision lastRevision;
- @OneToOne
- private License license;
+ @OneToOne
+ private License license;
- @IndexedEmbedded
- @Embedded
- private BasicMimeType mimeType;
+ @IndexedEmbedded
+ @Embedded
+ private BasicMimeType mimeType;
- @Basic(optional = true)
- private Date publishedOn;
+ @Basic(optional = true)
+ private Date publishedOn;
- @Enumerated(EnumType.STRING)
- @Column(nullable = false)
- private ContentStatus status;
+ @Enumerated(EnumType.STRING)
+ @Column(nullable = false)
+ private ContentStatus status;
- @OneToMany(cascade = CascadeType.ALL)
- private List<ContentTranslation> translations;
+ @OneToMany(cascade = CascadeType.ALL)
+ private List<ContentTranslation> translations;
- // @NotNull??
- private String typeId;
+ // @NotNull??
+ private String typeId;
- @Version
- private int version;
+ @Version
+ private int version;
- public Content() {
- translations = new ArrayList<ContentTranslation>();
- authors = new ArrayList<User>();
- comments = new HashSet<Comment>();
- createdOn = System.currentTimeMillis();
- lastRevision = new Revision(this);
- accessLists = null;
- status = ContentStatus.editingInProgress;
- }
+ public Content() {
+ translations = new ArrayList<ContentTranslation>();
+ authors = new ArrayList<User>();
+ comments = new HashSet<Comment>();
+ createdOn = System.currentTimeMillis();
+ lastRevision = new Revision(this);
+ accessLists = null;
+ status = ContentStatus.editingInProgress;
+ }
- public void addAuthor(final User user) {
- if (!this.authors.contains(user)) {
- this.authors.add(user);
- }
+ public void addAuthor(final User user) {
+ if (!this.authors.contains(user)) {
+ this.authors.add(user);
}
+ }
- public void addComment(final Comment comment) {
- // FIXME: something related with lazy initialization (workaround using
- // size())
- comments.size();
- comments.add(comment);
- }
+ public void addComment(final Comment comment) {
+ // FIXME: something related with lazy initialization (workaround using
+ // size())
+ comments.size();
+ comments.add(comment);
+ }
- public void addRevision(final Revision revision) {
- if (lastRevision == null) {
- lastRevision = revision;
- } else {
- revision.setPrevious(lastRevision);
- lastRevision = revision;
- }
+ public void addRevision(final Revision revision) {
+ if (lastRevision == null) {
+ lastRevision = revision;
+ } else {
+ revision.setPrevious(lastRevision);
+ lastRevision = revision;
}
+ }
- @Transient
- public AccessLists getAccessLists() {
- return hasAccessList() ? accessLists : getContainer().getAccessLists();
- }
+ @Transient
+ public AccessLists getAccessLists() {
+ return hasAccessList() ? accessLists : getContainer().getAccessLists();
+ }
- public List<User> getAuthors() {
- return authors;
- }
+ public List<User> getAuthors() {
+ return authors;
+ }
- public Set<Comment> getComments() {
- return comments;
- }
+ public Set<Comment> getComments() {
+ return comments;
+ }
- public Container getContainer() {
- return container;
- }
+ public Container getContainer() {
+ return container;
+ }
- public Long getCreatedOn() {
- return createdOn;
- }
+ public Long getCreatedOn() {
+ return createdOn;
+ }
- public Date getDeletedOn() {
- return deletedOn;
- }
+ public Date getDeletedOn() {
+ return deletedOn;
+ }
- public String getFilename() {
- return filename;
- }
+ public String getFilename() {
+ return filename;
+ }
- public Long getId() {
- return id;
- }
+ public Long getId() {
+ return id;
+ }
- public I18nLanguage getLanguage() {
- return language;
- }
+ public I18nLanguage getLanguage() {
+ return language;
+ }
- public Revision getLastRevision() {
- return lastRevision;
- }
+ public Revision getLastRevision() {
+ return lastRevision;
+ }
- public License getLicense() {
- return license;
- }
+ public License getLicense() {
+ return license;
+ }
- public BasicMimeType getMimeType() {
- return mimeType;
- }
+ public BasicMimeType getMimeType() {
+ return mimeType;
+ }
- public Group getOwner(final Group group) {
- return container.getOwner();
- }
+ public Group getOwner(final Group group) {
+ return container.getOwner();
+ }
- public Date getPublishedOn() {
- return publishedOn;
- }
+ public Date getPublishedOn() {
+ return publishedOn;
+ }
- @Override
- @Transient
- public StateToken getStateToken() {
- return getContainer().getStateToken().copy().setDocument(getId());
- }
+ @Override
+ @Transient
+ public StateToken getStateToken() {
+ return getContainer().getStateToken().copy().setDocument(getId());
+ }
- @Transient
- public String getStateTokenEncoded() {
- return getStateToken().getEncoded();
- }
+ @Transient
+ public String getStateTokenEncoded() {
+ return getStateToken().getEncoded();
+ }
- public ContentStatus getStatus() {
- return status;
- }
+ public ContentStatus getStatus() {
+ return status;
+ }
- public String getTitle() {
- return lastRevision.getTitle();
- }
+ public String getTitle() {
+ return lastRevision.getTitle();
+ }
- public List<ContentTranslation> getTranslations() {
- return translations;
- }
+ public List<ContentTranslation> getTranslations() {
+ return translations;
+ }
- public String getTypeId() {
- return typeId;
- }
+ public String getTypeId() {
+ return typeId;
+ }
- public int getVersion() {
- return version;
- }
+ public int getVersion() {
+ return version;
+ }
- @Transient
- public boolean hasAccessList() {
- return accessLists != null;
- }
+ @Transient
+ public boolean hasAccessList() {
+ return accessLists != null;
+ }
- public void removeAuthor(final User user) {
- this.authors.remove(user);
- }
+ @Transient
+ public boolean isWave() {
+ return (typeId.equals(DocsConstants.TYPE_DOCUMENT)) || (typeId.equals(BlogsConstants.TYPE_POST));
+ }
- public void setAccessLists(final AccessLists accessLists) {
- this.accessLists = accessLists;
- }
+ public void removeAuthor(final User user) {
+ this.authors.remove(user);
+ }
- public void setAuthors(final List<User> authors) {
- this.authors = authors;
- }
+ public void setAccessLists(final AccessLists accessLists) {
+ this.accessLists = accessLists;
+ }
- public void setComments(final Set<Comment> comments) {
- this.comments = comments;
- }
+ public void setAuthors(final List<User> authors) {
+ this.authors = authors;
+ }
- public void setContainer(final Container container) {
- this.container = container;
- }
+ public void setComments(final Set<Comment> comments) {
+ this.comments = comments;
+ }
- public void setCreatedOn(final Long createdOn) {
- this.createdOn = createdOn;
- }
+ public void setContainer(final Container container) {
+ this.container = container;
+ }
- public void setDeletedOn(final Date date) {
- this.deletedOn = date;
- }
+ public void setCreatedOn(final Long createdOn) {
+ this.createdOn = createdOn;
+ }
- public void setFilename(final String filename) {
- this.filename = filename;
- }
+ public void setDeletedOn(final Date date) {
+ this.deletedOn = date;
+ }
- // @PMD:REVIEWED:ShortVariable: by vjrj on 21/05/09 15:28
- public void setId(final Long id) {
- this.id = id;
- }
+ public void setFilename(final String filename) {
+ this.filename = filename;
+ }
- public void setLanguage(final I18nLanguage language) {
- this.language = language;
- }
+ // @PMD:REVIEWED:ShortVariable: by vjrj on 21/05/09 15:28
+ public void setId(final Long id) {
+ this.id = id;
+ }
- public void setLastRevision(final Revision revision) {
- this.lastRevision = revision;
- }
+ public void setLanguage(final I18nLanguage language) {
+ this.language = language;
+ }
- public void setLicense(final License license) {
- this.license = license;
- }
+ public void setLastRevision(final Revision revision) {
+ this.lastRevision = revision;
+ }
- public void setMimeType(final BasicMimeType mimeType) {
- this.mimeType = mimeType;
- }
+ public void setLicense(final License license) {
+ this.license = license;
+ }
- public void setPublishedOn(final Date publishedOn) {
- this.publishedOn = publishedOn;
- }
+ public void setMimeType(final BasicMimeType mimeType) {
+ this.mimeType = mimeType;
+ }
- public void setStatus(final ContentStatus status) {
- this.status = status;
- }
+ public void setPublishedOn(final Date publishedOn) {
+ this.publishedOn = publishedOn;
+ }
- public void setTranslations(final List<ContentTranslation> translations) {
- this.translations = translations;
- }
+ public void setStatus(final ContentStatus status) {
+ this.status = status;
+ }
- public void setTypeId(final String typeId) {
- this.typeId = typeId;
- }
+ public void setTranslations(final List<ContentTranslation> translations) {
+ this.translations = translations;
+ }
- public void setVersion(final int version) {
- this.version = version;
- }
+ public void setTypeId(final String typeId) {
+ this.typeId = typeId;
+ }
- @Override
- public String toString() {
- return "Content[(" + getStateTokenEncoded() + "): " + getTitle() + "]";
- }
+ public void setVersion(final int version) {
+ this.version = version;
+ }
+ @Override
+ public String toString() {
+ return "Content[(" + getStateTokenEncoded() + "): " + getTitle() + "]";
+ }
+
}
Added: trunk/src/main/java/cc/kune/gspace/client/actions/RenameAction.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/RenameAction.java (rev 0)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/RenameAction.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -0,0 +1,82 @@
+/*
+ *
+ * Copyright (C) 2007-2011 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.gspace.client.actions;
+
+import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.core.client.errors.NameInUseException;
+import cc.kune.core.client.errors.NameNotPermittedException;
+import cc.kune.core.client.rpcservices.ContentServiceAsync;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.shared.domain.utils.StateToken;
+import cc.kune.core.shared.dto.StateAbstractDTO;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class RenameAction {
+ private final Provider<ContentServiceAsync> contentService;
+ private final I18nTranslationService i18n;
+ private final Session session;
+
+ @Inject
+ public RenameAction(final I18nTranslationService i18n, final Session session,
+ final Provider<ContentServiceAsync> contentService) {
+ this.i18n = i18n;
+ this.session = session;
+ this.contentService = contentService;
+ }
+
+ public void rename(final StateToken token, final String oldName, final String newName,
+ final RenameListener listener) {
+ if (!newName.equals(oldName)) {
+ NotifyUser.showProgress(i18n.t("Renaming"));
+ final AsyncCallback<StateAbstractDTO> asyncCallback = new AsyncCallback<StateAbstractDTO>() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ NotifyUser.hideProgress();
+ if (caught instanceof NameInUseException) {
+ NotifyUser.error(i18n.tWithNT("This name already exists",
+ "It is used when a file or a folder with the same name already exists"));
+ } else if (caught instanceof NameNotPermittedException) {
+ NotifyUser.error(i18n.tWithNT("This name is not permitted",
+ "It is used when a file or a folder does not have a permitted name"));
+ } else {
+ NotifyUser.error(i18n.t("Error renaming"));
+ }
+ listener.onFail(token, newName);
+ }
+
+ @Override
+ public void onSuccess(final StateAbstractDTO state) {
+ NotifyUser.hideProgress();
+ session.setCurrentState(state);
+ listener.onSuccess(token, state.getTitle());
+ }
+ };
+ if (token.isComplete()) {
+ contentService.get().renameContent(session.getUserHash(), token, newName, asyncCallback);
+ } else {
+ contentService.get().renameContainer(session.getUserHash(), token, newName, asyncCallback);
+ }
+ }
+ }
+}
Property changes on: trunk/src/main/java/cc/kune/gspace/client/actions/RenameAction.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/src/main/java/cc/kune/gspace/client/actions/RenameListener.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/actions/RenameListener.java (rev 0)
+++ trunk/src/main/java/cc/kune/gspace/client/actions/RenameListener.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -0,0 +1,11 @@
+package cc.kune.gspace.client.actions;
+
+import cc.kune.core.shared.domain.utils.StateToken;
+
+public interface RenameListener {
+
+ void onFail(StateToken token, String oldTitle);
+
+ void onSuccess(StateToken token, String title);
+
+}
Property changes on: trunk/src/main/java/cc/kune/gspace/client/actions/RenameListener.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/src/main/java/cc/kune/gspace/client/resources/wsArmor.css
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/resources/wsArmor.css 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/gspace/client/resources/wsArmor.css 2011-04-29 12:02:17 UTC (rev 1329)
@@ -63,14 +63,21 @@
left: 10px;
}
-.docHeader span {
+.docHeader span,.docHeader input {
color: #FFF;
font-size: 26px;
font-weight: bold;
margin-left: 15px;
font: 'UbuntuBold', Arial;
+ line-height: 1.3em;
}
+.docHeader input {
+ float: left;
+ width: 95% !important;
+ color: black !important;
+}
+
.docHeader img {
float: left;
margin: 10px -10px 0 10px;
@@ -124,8 +131,11 @@
-moz-border-radius-topright: 7px;
border-top-right-radius: 7px;
}
-.docEditor div { overflow-y: visible; }
+.docEditor div {
+ overflow-y: visible;
+}
+
.docFooter {
border-left: 1px solid #959595;
border-right: 1px solid #959595;
Modified: trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorItemPanel.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorItemPanel.ui.xml 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorItemPanel.ui.xml 2011-04-29 12:02:17 UTC (rev 1329)
@@ -23,6 +23,7 @@
padding: 5px 10px;
-moz-user-select: none;
-khtml-user-select: none;
+ outline: 0;
}
.iconLeft {
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPanel.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -20,14 +20,15 @@
import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
import cc.kune.common.client.errors.UIException;
-import cc.kune.common.client.ui.IconLabel;
+import cc.kune.common.client.ui.EditableLabel;
+import cc.kune.common.client.ui.HasEditHandler;
import cc.kune.common.client.ui.UiUtils;
import cc.kune.core.client.registry.ContentCapabilitiesRegistry;
import cc.kune.core.client.registry.IconsRegistry;
import cc.kune.core.shared.dto.StateContentDTO;
+import cc.kune.core.shared.i18n.I18nTranslationService;
import cc.kune.gspace.client.GSpaceArmor;
import cc.kune.gspace.client.viewers.DocViewerPresenter.DocViewerView;
-import cc.kune.wave.client.WaveClientManager;
import cc.kune.wave.client.WebClient;
import com.google.gwt.core.client.GWT;
@@ -39,6 +40,8 @@
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.DeckPanel;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.InlineHTML;
import com.google.gwt.user.client.ui.InsertPanel.ForIsWidget;
import com.google.gwt.user.client.ui.Widget;
@@ -54,6 +57,7 @@
private RemoteViewServiceMultiplexer channel;
@UiField
DeckPanel deck;
+ private final EditableLabel editableTitle;
private final GSpaceArmor gsArmor;
private final IconsRegistry iconRegistry;
private IdGenerator idGenerator;
@@ -61,9 +65,10 @@
@UiField
InlineHTML onlyViewPanel;
private ProfileManager profiles;
+ private final FlowPanel title;
+ private final Image titleIcon;
/** The wave panel, if a wave is open. */
private StagesProvider wave;
- private final WaveClientManager waveClientManager;
@UiField
FramedPanel waveFrame;
@UiField
@@ -72,12 +77,17 @@
private final Widget widget;
@Inject
- public DocViewerPanel(final GSpaceArmor wsArmor, final WaveClientManager waveClientManager,
- final ContentCapabilitiesRegistry capabilitiesRegistry) {
+ public DocViewerPanel(final GSpaceArmor wsArmor,
+ final ContentCapabilitiesRegistry capabilitiesRegistry, final I18nTranslationService i18n) {
this.gsArmor = wsArmor;
this.iconRegistry = capabilitiesRegistry.getIconsRegistry();
- this.waveClientManager = waveClientManager;
widget = uiBinder.createAndBindUi(this);
+ title = new FlowPanel();
+ titleIcon = new Image();
+ editableTitle = new EditableLabel();
+ editableTitle.setTooltip(i18n.t("Click to edit"));
+ title.add(titleIcon);
+ title.add(editableTitle);
}
@Override
@@ -104,6 +114,11 @@
clear();
}
+ @Override
+ public HasEditHandler getEditTitle() {
+ return editableTitle;
+ }
+
private WaveRef getWaveRef(final String waveRefS) {
try {
return GwtWaverefEncoder.decodeWaveRefFromPath(waveRefS);
@@ -132,11 +147,8 @@
@Override
public void setContent(final StateContentDTO state) {
- final ForIsWidget docHeader = gsArmor.getDocHeader();
- UiUtils.clear(docHeader);
- docHeader.add(new IconLabel((ImageResource) iconRegistry.getContentTypeIcon(state.getTypeId(),
- state.getMimeType()), state.getTitle()));
final boolean editable = state.getContentRights().isEditable();
+ setTitle(state, editable);
if (editable) {
initWaveClientIfNeeded();
setEditableWaveContent(state.getWaveRef(), false);
@@ -151,6 +163,11 @@
deck.showWidget(1);
}
+ @Override
+ public void setEditableTitle(final String title) {
+ editableTitle.setText(title);
+ }
+
private void setEditableWaveContent(final String waveRefS, final boolean isNewWave) {
final WaveRef waveRef = getWaveRef(waveRefS);
@@ -173,4 +190,19 @@
}
});
}
+
+ private void setTitle(final StateContentDTO state, final boolean editable) {
+ final ForIsWidget docHeader = gsArmor.getDocHeader();
+ UiUtils.clear(docHeader);
+ final ImageResource resource = (ImageResource) iconRegistry.getContentTypeIcon(state.getTypeId(),
+ state.getMimeType());
+ final boolean hasIcon = resource != null;
+ if (hasIcon) {
+ titleIcon.setResource(resource);
+ }
+ titleIcon.setVisible(hasIcon);
+ editableTitle.setText(state.getTitle());
+ editableTitle.setEditable(editable);
+ docHeader.add(title);
+ }
}
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPresenter.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/DocViewerPresenter.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -5,83 +5,122 @@
import cc.kune.blogs.client.actions.BlogsClientActions;
import cc.kune.blogs.shared.BlogsConstants;
import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
+import cc.kune.common.client.ui.EditEvent;
+import cc.kune.common.client.ui.EditEvent.EditHandler;
+import cc.kune.common.client.ui.HasEditHandler;
import cc.kune.core.client.actions.ActionRegistryByType;
import cc.kune.core.client.state.Session;
import cc.kune.core.shared.domain.utils.AccessRights;
+import cc.kune.core.shared.domain.utils.StateToken;
import cc.kune.core.shared.dto.HasContent;
import cc.kune.core.shared.dto.StateContentDTO;
import cc.kune.docs.client.actions.DocsClientActions;
import cc.kune.docs.shared.DocsConstants;
import cc.kune.gspace.client.actions.ActionGroups;
+import cc.kune.gspace.client.actions.RenameAction;
+import cc.kune.gspace.client.actions.RenameListener;
import cc.kune.gspace.client.tool.ContentViewer;
import cc.kune.gspace.client.tool.ContentViewerSelector;
import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.event.shared.HandlerRegistration;
import com.google.inject.Inject;
+import com.google.inject.Provider;
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;
import com.gwtplatform.mvp.client.proxy.RevealRootContentEvent;
-public class DocViewerPresenter extends Presenter<DocViewerPresenter.DocViewerView, DocViewerPresenter.DocViewerProxy>
- implements ContentViewer {
+public class DocViewerPresenter extends
+ Presenter<DocViewerPresenter.DocViewerView, DocViewerPresenter.DocViewerProxy> implements
+ ContentViewer {
- @ProxyCodeSplit
- public interface DocViewerProxy extends Proxy<DocViewerPresenter> {
- }
+ @ProxyCodeSplit
+ public interface DocViewerProxy extends Proxy<DocViewerPresenter> {
+ }
- public interface DocViewerView extends View {
+ public interface DocViewerView extends View {
- void attach();
+ void attach();
- void clear();
+ void clear();
- void detach();
+ void detach();
- void setActions(GuiActionDescCollection actions);
+ HasEditHandler getEditTitle();
- void setContent(StateContentDTO state);
- }
+ void setActions(GuiActionDescCollection actions);
- private final ActionRegistryByType actionsRegistry;
- private final Session session;
+ void setContent(StateContentDTO state);
- @Inject
- public DocViewerPresenter(final EventBus eventBus, final DocViewerView view, final DocViewerProxy proxy,
- final Session session, final ContentViewerSelector viewerSelector,
- final ActionRegistryByType actionsRegistry, final DocsClientActions docsActions,
- final BlogsClientActions blogActions) {
- super(eventBus, view, proxy);
- this.session = session;
- this.actionsRegistry = actionsRegistry;
- viewerSelector.register(this, true, DocsConstants.TYPE_DOCUMENT);
- viewerSelector.register(this, true, BlogsConstants.TYPE_POST);
- }
+ void setEditableTitle(String title);
+ }
- @Override
- public void attach() {
- getView().attach();
- }
+ private final ActionRegistryByType actionsRegistry;
+ private HandlerRegistration editHandler;
+ private final Provider<RenameAction> renameAction;
+ private final Session session;
- @Override
- public void detach() {
- getView().detach();
- }
+ @Inject
+ public DocViewerPresenter(final EventBus eventBus, final DocViewerView view,
+ final DocViewerProxy proxy, final Session session, final ContentViewerSelector viewerSelector,
+ final ActionRegistryByType actionsRegistry, final DocsClientActions docsActions,
+ final BlogsClientActions blogActions, final Provider<RenameAction> renameAction) {
+ super(eventBus, view, proxy);
+ this.session = session;
+ this.actionsRegistry = actionsRegistry;
+ this.renameAction = renameAction;
+ viewerSelector.register(this, true, DocsConstants.TYPE_DOCUMENT);
+ viewerSelector.register(this, true, BlogsConstants.TYPE_POST);
+ }
- @Override
- protected void revealInParent() {
- RevealRootContentEvent.fire(this, this);
+ @Override
+ public void attach() {
+ getView().attach();
+ if (editHandler == null) {
+ createEditHandler();
}
+ }
- @Override
- public void setContent(@Nonnull final HasContent state) {
- getView().clear();
- final StateContentDTO stateContent = (StateContentDTO) state;
- final AccessRights rights = stateContent.getContentRights();
- final GuiActionDescCollection actions = actionsRegistry.getCurrentActions(stateContent.getGroup(),
- stateContent.getTypeId(), session.isLogged(), rights, ActionGroups.VIEW);
- getView().setActions(actions);
- getView().setContent(stateContent);
- }
+ private void createEditHandler() {
+ editHandler = getView().getEditTitle().addEditHandler(new EditHandler() {
+ @Override
+ public void fire(final EditEvent event) {
+ renameAction.get().rename(session.getCurrentStateToken(), session.getCurrentState().getTitle(),
+ event.getText(), new RenameListener() {
+ @Override
+ public void onFail(final StateToken token, final String oldTitle) {
+ getView().setEditableTitle(oldTitle);
+ }
+
+ @Override
+ public void onSuccess(final StateToken token, final String title) {
+ getView().setEditableTitle(title);
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public void detach() {
+ getView().detach();
+ }
+
+ @Override
+ protected void revealInParent() {
+ RevealRootContentEvent.fire(this, this);
+ }
+
+ @Override
+ public void setContent(@Nonnull final HasContent state) {
+ getView().clear();
+ final StateContentDTO stateContent = (StateContentDTO) state;
+ final AccessRights rights = stateContent.getContentRights();
+ final GuiActionDescCollection actions = actionsRegistry.getCurrentActions(stateContent.getGroup(),
+ stateContent.getTypeId(), session.isLogged(), rights, ActionGroups.VIEW);
+ getView().setActions(actions);
+ getView().setContent(stateContent);
+ }
}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderItemWidget.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderItemWidget.ui.xml 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderItemWidget.ui.xml 2011-04-29 12:02:17 UTC (rev 1329)
@@ -32,6 +32,7 @@
border-bottom: 1px solid #F3F3F3;
line-height: 1.3em;
height: 28px;
+ outline: 0;
}
.title {
Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/wave/server/KuneWaveManager.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -7,10 +7,12 @@
public interface KuneWaveManager {
- WaveRef createWave(String message, ParticipantId participants);
+ WaveRef createWave(String message, ParticipantId participants);
- WaveRef createWave(String title, String message, ParticipantId... participantsArray);
+ WaveRef createWave(String title, String message, ParticipantId... participantsArray);
- Wavelet fetchWavelet(WaveRef waveRef, String author);
+ Wavelet fetchWavelet(WaveRef waveRef, String author);
+ void setTitle(WaveRef waveName, String title, String author);
+
}
Modified: trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/main/java/cc/kune/wave/server/KuneWaveManagerDefault.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -140,33 +140,31 @@
OperationUtil.executeOperation(request, operationRegistry, context, participantUtils.of(author));
final String reqId = request.getId();
final JsonRpcResponse response = context.getResponse(reqId);
- if (response != null) {
- if (response.isError()) {
- onFailure(context.getResponse(reqId).getErrorMessage());
- } else {
- // Duplicate code from WaveService
- final WaveletData waveletData = (WaveletData) response.getData().get(ParamsProperty.WAVELET_DATA);
- final Map<String, Blip> blips = new HashMap<String, Blip>();
- final Map<String, BlipThread> threads = new HashMap<String, BlipThread>();
- wavelet = Wavelet.deserialize(opQueue, blips, threads, waveletData);
+ if (response != null && response.isError()) {
+ onFailure(context.getResponse(reqId).getErrorMessage());
+ } else {
+ // Duplicate code from WaveService
+ final WaveletData waveletData = (WaveletData) response.getData().get(ParamsProperty.WAVELET_DATA);
+ final Map<String, Blip> blips = new HashMap<String, Blip>();
+ final Map<String, BlipThread> threads = new HashMap<String, BlipThread>();
+ wavelet = Wavelet.deserialize(opQueue, blips, threads, waveletData);
- // Deserialize threads.
- @SuppressWarnings("unchecked")
- final Map<String, BlipThread> tempThreads = (Map<String, BlipThread>) response.getData().get(
- ParamsProperty.THREADS);
- for (final Map.Entry<String, BlipThread> entry : tempThreads.entrySet()) {
- final BlipThread thread = entry.getValue();
- threads.put(entry.getKey(),
- new BlipThread(thread.getId(), thread.getLocation(), thread.getBlipIds(), blips));
- }
+ // Deserialize threads.
+ @SuppressWarnings("unchecked")
+ final Map<String, BlipThread> tempThreads = (Map<String, BlipThread>) response.getData().get(
+ ParamsProperty.THREADS);
+ for (final Map.Entry<String, BlipThread> entry : tempThreads.entrySet()) {
+ final BlipThread thread = entry.getValue();
+ threads.put(entry.getKey(),
+ new BlipThread(thread.getId(), thread.getLocation(), thread.getBlipIds(), blips));
+ }
- // Deserialize blips.
- @SuppressWarnings("unchecked")
- final Map<String, BlipData> blipDatas = (Map<String, BlipData>) response.getData().get(
- ParamsProperty.BLIPS);
- for (final Map.Entry<String, BlipData> entry : blipDatas.entrySet()) {
- blips.put(entry.getKey(), Blip.deserialize(opQueue, wavelet, entry.getValue()));
- }
+ // Deserialize blips.
+ @SuppressWarnings("unchecked")
+ final Map<String, BlipData> blipDatas = (Map<String, BlipData>) response.getData().get(
+ ParamsProperty.BLIPS);
+ for (final Map.Entry<String, BlipData> entry : blipDatas.entrySet()) {
+ blips.put(entry.getKey(), Blip.deserialize(opQueue, wavelet, entry.getValue()));
}
}
return wavelet;
@@ -177,4 +175,31 @@
LOG.error(errorMsg);
throw new DefaultException(errorMsg);
}
+
+ @Override
+ public void setTitle(final WaveRef waveName, final String title, final String author) {
+ final Wavelet wavelet = fetchWavelet(waveName, author);
+ final OperationQueue opQueue = new OperationQueue();
+ opQueue.setTitleOfWavelet(wavelet, title);
+ final OperationContextImpl context = new OperationContextImpl(waveletProvider,
+ converterManager.getEventDataConverter(ProtocolVersion.DEFAULT), conversationUtil);
+ final OperationRequest request = opQueue.getPendingOperations().get(0);
+ OperationUtil.executeOperation(request, operationRegistry, context, participantUtils.of(author));
+ final String reqId = request.getId();
+ final JsonRpcResponse response = context.getResponse(reqId);
+ if (response != null && response.isError()) {
+ onFailure(context.getResponse(reqId).getErrorMessage());
+ }
+ OperationUtil.submitDeltas(context, waveletProvider, new SubmitRequestListener() {
+ @Override
+ public void onFailure(final String arg0) {
+ KuneWaveManagerDefault.this.onFailure("Wave set title failed, onFailure: " + arg0);
+ }
+
+ @Override
+ public void onSuccess(final int arg0, final HashedVersion arg1, final long arg2) {
+ LOG.info("Wave set title success: " + arg1);
+ }
+ });
+ }
}
Modified: trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java
===================================================================
--- trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java 2011-04-28 19:05:37 UTC (rev 1328)
+++ trunk/src/test/java/cc/kune/wave/server/KuneWaveManagerDefaultTest.java 2011-04-29 12:02:17 UTC (rev 1329)
@@ -1,5 +1,6 @@
package cc.kune.wave.server;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -18,36 +19,53 @@
public class KuneWaveManagerDefaultTest extends IntegrationTest {
- private static final String MESSAGE = "testing";
- private static final String TITLE = "title";
- @Inject
- KuneWaveManagerDefault manager;
- @Inject
- ParticipantUtils participantUtils;
+ private static final String MESSAGE = "testing";
+ private static final String TITLE = "title";
+ private static final String TITLENEW = "titleNew";
+ @Inject
+ KuneWaveManagerDefault manager;
+ @Inject
+ ParticipantUtils participantUtils;
- @Before
- public void before() {
- new IntegrationTestHelper(this);
+ @Before
+ public void before() {
+ new IntegrationTestHelper(this);
- }
+ }
- @Test
- public void createWave() throws DefaultException, IOException {
- doLogin();
- final WaveRef waveletName = manager.createWave(MESSAGE, participantUtils.of(getSiteAdminShortName()));
- assertNotNull(waveletName);
- final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName());
- assertNotNull(fetchWavelet);
- assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE));
- }
+ @Test
+ public void createWave() throws DefaultException, IOException {
+ doLogin();
+ final WaveRef waveletName = manager.createWave(MESSAGE, participantUtils.of(getSiteAdminShortName()));
+ assertNotNull(waveletName);
+ final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName());
+ assertNotNull(fetchWavelet);
+ assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE));
+ }
- @Test
- public void createWaveWithTitle() throws DefaultException, IOException {
- doLogin();
- final WaveRef waveletName = manager.createWave(TITLE, MESSAGE, participantUtils.of(getSiteAdminShortName()));
- assertNotNull(waveletName);
- final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName());
- assertNotNull(fetchWavelet);
- assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE));
- }
+ @Test
+ public void createWaveWithTitle() throws DefaultException, IOException {
+ doLogin();
+ final WaveRef waveletName = manager.createWave(TITLE, MESSAGE,
+ participantUtils.of(getSiteAdminShortName()));
+ assertNotNull(waveletName);
+ final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName());
+ assertNotNull(fetchWavelet);
+ assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE));
+ assertEquals(TITLE, fetchWavelet.getTitle());
+ }
+
+ @Test
+ public void setTitle() throws DefaultException, IOException {
+ doLogin();
+ final WaveRef waveletName = manager.createWave(TITLE, MESSAGE,
+ participantUtils.of(getSiteAdminShortName()));
+ assertNotNull(waveletName);
+ manager.setTitle(waveletName, TITLENEW, getSiteAdminShortName());
+ final Wavelet fetchWavelet = manager.fetchWavelet(waveletName, getSiteAdminShortName());
+ assertNotNull(fetchWavelet);
+ assertTrue(fetchWavelet.getRootBlip().getContent().contains(MESSAGE));
+ assertEquals(TITLENEW, fetchWavelet.getTitle());
+ }
+
}
More information about the kune-commits
mailing list