[kune-commits] r1269 - in trunk: . img/icons src/main/java/cc/kune/chat/client src/main/java/cc/kune/client src/main/java/cc/kune/common/client/actions/ui src/main/java/cc/kune/common/client/actions/ui/descrip src/main/java/cc/kune/core/client src/main/java/cc/kune/core/client/resources src/main/java/cc/kune/core/client/sn src/main/java/cc/kune/core/client/sn/actions src/main/java/cc/kune/core/client/sn/actions/conditions src/main/java/cc/kune/core/client/sn/actions/registry src/main/java/cc/kune/core/client/state src/main/java/cc/kune/core/public/images src/main/java/cc/kune/core/shared/dto src/main/java/cc/kune/wave src/main/java/cc/kune/wave/client src/main/java/cc/kune/wave/server src/main/java/org/ourproject/kune/platf/server/i18n src/main/java/org/ourproject/kune/platf/server/rpc src/main/java/org/ourproject/kune/rack src/main/resources src/test/java/org/ourproject/kune/platf/server/mapper
Vicente J. Ruiz Jurado
vjrj_ at ourproject.org
Mon Mar 7 18:08:08 CET 2011
Author: vjrj_
Date: 2011-03-07 18:08:07 +0100 (Mon, 07 Mar 2011)
New Revision: 1269
Added:
trunk/img/icons/group-def-new.png
trunk/src/main/java/cc/kune/chat/client/StartChatWithThisBuddieAction.java
trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPresenter.java
trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java
trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java
trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java
trunk/src/main/java/cc/kune/core/client/sn/UserSNPresenter.java
trunk/src/main/java/cc/kune/core/client/sn/actions/AddNewBuddiesAction.java
trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityAction.java
trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityMenuItem.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersConfActions.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNAdminsMenuItemsRegistry.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNBottomActionsRegistry.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNCollabsMenuItemsRegistry.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNPendingsMenuItemsRegistry.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNBottomActionsRegistry.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNConfActions.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java
trunk/src/main/java/cc/kune/core/public/images/group-def-icon.png
trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java.txt
Removed:
trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPanel.java
trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPresenter.java
trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPanel.java
trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPresenter.java
trunk/src/main/java/cc/kune/core/client/sn/actions/GroupMembersConfActions.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersActionsRegistry.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNAdminsMenuItemsRegistry.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNCollabsMenuItemsRegistry.java
trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNPendingsMenuItemsRegistry.java
trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java
trunk/src/main/java/cc/kune/wave/server/WaveStarter.java
Modified:
trunk/.classpath
trunk/.project
trunk/img/icons/from-private-to-public.svg
trunk/img/icons/person.svg
trunk/img/icons/unknown-gen.png
trunk/pom.xml
trunk/src/main/java/cc/kune/chat/client/ChatParts.java
trunk/src/main/java/cc/kune/chat/client/StartChatWithMemberAction.java
trunk/src/main/java/cc/kune/chat/client/StartChatWithUserAction.java
trunk/src/main/java/cc/kune/client/KuneGinjector.java
trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java
trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuItemDescriptor.java
trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuTitleItemDescriptor.java
trunk/src/main/java/cc/kune/core/client/CoreGinModule.java
trunk/src/main/java/cc/kune/core/client/CoreParts.java
trunk/src/main/java/cc/kune/core/client/resources/CoreMessages.java
trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java
trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml
trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsGroupCondition.java
trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotMeCondition.java
trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsPersonCondition.java
trunk/src/main/java/cc/kune/core/client/state/HistoryWrapperDefault.java
trunk/src/main/java/cc/kune/core/public/images/group-def-icon.gif
trunk/src/main/java/cc/kune/core/public/images/unknown.jpg
trunk/src/main/java/cc/kune/core/shared/dto/SocialNetworkDataDTO.java
trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml
trunk/src/main/java/cc/kune/wave/client/WaveClientSimpleAuthenticator.java
trunk/src/main/java/cc/kune/wave/client/WebClient.java
trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml
trunk/src/main/java/cc/kune/wave/server/CustomAuthenticationServlet.java
trunk/src/main/java/cc/kune/wave/server/CustomUserRegistrationServlet.java
trunk/src/main/java/cc/kune/wave/server/CustomWaveClientServlet.java
trunk/src/main/java/cc/kune/wave/server/WaveMain.java
trunk/src/main/java/org/ourproject/kune/platf/server/i18n/I18nTranslationServiceDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/UserRPC.java
trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java
trunk/src/main/resources/wave-server.properties
trunk/src/test/java/org/ourproject/kune/platf/server/mapper/MapperTest.java
Log:
SN updated, WIAB integration updated
Modified: trunk/.classpath
===================================================================
--- trunk/.classpath 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/.classpath 2011-03-07 17:08:07 UTC (rev 1269)
@@ -93,7 +93,7 @@
<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar" sourcepath="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.jar" sourcepath="M2_REPO/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar" sourcepath="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/waveprotocol/proto-gwt/0.3.1/proto-gwt-0.3.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/waveprotocol/proto-gwt/0.3.7/proto-gwt-0.3.7.jar"/>
<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar" sourcepath="M2_REPO/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/jivesoftware/smack/smack/3.0.4/smack-3.0.4.jar"/>
@@ -101,7 +101,7 @@
<classpathentry kind="var" path="M2_REPO/org/jivesoftware/smackx/debugger/smackx-debugger/3.0.4/smackx-debugger-3.0.4.jar"/>
<classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0.1/stax-api-1.0.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.jar" sourcepath="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/waveprotocol/waveinabox-server-custom/0.3.6/waveinabox-server-custom-0.3.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/waveprotocol/waveinabox-server-custom/0.3.7/waveinabox-server-custom-0.3.7.jar"/>
<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar" sourcepath="M2_REPO/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
<classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar" sourcepath="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2-sources.jar"/>
Modified: trunk/.project
===================================================================
--- trunk/.project 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/.project 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,48 +1,34 @@
-<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>kune</name>
- <comment>kune free/open/libre collaboration platform. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>com.google.gwt.eclipse.core.gwtProjectValidator</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.common.project.facet.core.builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.validation.validationbuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
- <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
- <nature>org.eclipse.ajdt.ui.ajnature</nature>
- <nature>com.google.gwt.eclipse.core.gwtNature</nature>
- <nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
- </natures>
-</projectDescription>
+ <name>kune</name>
+ <comment>kune free/open/libre collaboration platform. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
+ </buildCommand>
+ <buildCommand>
+ <name>com.google.gwt.eclipse.core.gwtProjectValidator</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>edu.umd.cs.findbugs.plugin.eclipse.findbugsBuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.ajdt.ui.ajnature</nature>
+ <nature>com.google.gwt.eclipse.core.gwtNature</nature>
+ <nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
Modified: trunk/img/icons/from-private-to-public.svg
===================================================================
--- trunk/img/icons/from-private-to-public.svg 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/img/icons/from-private-to-public.svg 2011-03-07 17:08:07 UTC (rev 1269)
@@ -7,6 +7,7 @@
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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
@@ -24,16 +25,16 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="3.1190476"
- inkscape:cx="74.064362"
+ inkscape:zoom="1"
+ inkscape:cx="-59.935638"
inkscape:cy="1024"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
- inkscape:window-height="747"
+ inkscape:window-height="975"
inkscape:window-x="0"
- inkscape:window-y="1024"
+ inkscape:window-y="21"
inkscape:window-maximized="1"
showguides="true"
inkscape:guide-bbox="true"
@@ -509,5 +510,122 @@
inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/homeSpaceEnabled.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
+ <g
+ id="g32861"
+ transform="translate(-41,-38.175573)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/grop-def-new.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ inkscape:transform-center-x="2.1800737"
+ transform="matrix(4.71003,1.6779794,-1.6779794,4.71003,-33.10757,48.018455)"
+ inkscape:transform-center-y="-0.21689042"
+ 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="path32845"
+ 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"
+ sodipodi:type="star"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ 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="path32847"
+ 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(2.375,0,0,4.7499998,-102.75,10.817397)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/src/main/java/cc/kune/wspace/client/resources/groupSpaceEnabled.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ sodipodi:type="arc"
+ 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"
+ id="path32849"
+ 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(9.4200602,3.355959,-3.355959,9.4200602,45.524372,-53.39817)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ transform="matrix(9.4200602,3.355959,-3.355959,9.4200602,18.680548,-64.20388)"
+ 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="path32851"
+ 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"
+ sodipodi:type="arc"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ sodipodi:type="arc"
+ 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"
+ id="path32853"
+ 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(9.4200602,3.355959,-3.355959,9.4200602,43.935022,-24.026857)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ transform="matrix(9.4200602,3.355959,-3.355959,9.4200602,16.336633,-16.494463)"
+ 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="path32855"
+ 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"
+ sodipodi:type="arc"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ sodipodi:type="arc"
+ 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"
+ id="path32857"
+ 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(11.211448,3.9941526,-3.9941526,11.211448,-16.590722,-79.68006)"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/from-private-to-public.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g32861"
+ id="use32889"
+ transform="matrix(0.22,0,0,0.22,167.6,120.5625)"
+ width="744.09448"
+ height="1052.3622"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/group-def-new.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
</g>
</svg>
Added: trunk/img/icons/group-def-new.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/icons/group-def-new.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/img/icons/person.svg
===================================================================
--- trunk/img/icons/person.svg 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/img/icons/person.svg 2011-03-07 17:08:07 UTC (rev 1269)
@@ -43,8 +43,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
- inkscape:cx="578.54963"
- inkscape:cy="375.39768"
+ inkscape:cx="1018.0008"
+ inkscape:cy="187.75619"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
@@ -737,39 +737,7 @@
y="428.36218"
x="11"
id="image3279"
- xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
-HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
-MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABkAGQDASIA
-AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
-AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
-ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
-p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
-AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
-BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
-U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
-uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii
-gAooooAKY7rGpZ2Cj1JxWZqmqfZAYoQDLjknoo9ff6Vzsksksu+RmdiTgk5IH9KuMG9SHNJ2OxS7
-t5DtSeJm9A4JqeuAkQFeeTn86bZ67d6VMAXMttnDRk5x9Cen8v5hunbYFPueg0VXtbmK8to7iFw0
-bjKkVYrMsKKKKACiiigAooooASmSyLFE8jfdVST9AKkqjqr+Xpk59QB+ZA/rQtxM5WSVppXlc5Zi
-SeeB7e1M5ySSDx+VAIx1PToKDyTxj6iuowGuODxkkevSsm+HBHBPt2rWkPB4zwayb08Ec/lQxo3v
-A98xe50+RjgASxg9hnDfqR+tdrXmXhCUp4ngUDiRXQ8+ik/j0Fem1zzWprHYKKKKkoKKKKACiiig
-AqnqieZps6+ilvy5/pVymSIJI2RujAgj60LRiZw579h/OgnoScDHAFDApIyMCHUkN7GkJGB06+vT
-/GuowGSnCEDIH0rFvXySMkjPY9K0rqXg9ck81hXMm44BwPek2M2fBsYl8SRt/wA80duvTIx/WvSx
-XDeAbbMt5dEYAVY1Prnk/wAh+ddzWE3qax2CiiipKCiiigAooooAKKKKAOL8QQGx1IygHy58sMDo
-3cf1/Gsh7sADnt0B6V3er2UF9p8sNwwRfvCQn7hHQ15XK7xyFCc4OMjoa3hLQyktSzc3OSew+tZ5
-JcjHJz6fp70E5JyMn3NdH4MsbS81NpZ5EMkADRxHALH+97gfzIP1G7K4Ja2Ox8OaadL0aGCQYmb9
-5J/vHt+AwPwrXNFJWD1NRaKKKACiiigAoo7VSvr9LKIMRuduFUd6EribLbMEUsxAA6knisu71y3g
-ysX71/Y4X8+/4ZrBub2e7YtMxIB4UHAH4f1qD19cdMVtGn3Ic+xLfXlxfZEj/KOQo+6P8awbu0yT
-gcVs4Bzkkk+9RtGrk9CMHv1rSySsiLtnLNAwONpwT370+CGVZQ6MyuDlShIII7gjp9a3mtFJJwMC
-nR2ip2ANKwGxpPiK4WNYr8GUY/1q8MPqOn+e9dJb3cF2m6CVXHcA4I+o6iuLVAFHtTGDKwdGZWBy
-GU4I+hFQ6aexam+p6BRXH6X4meKZbfUG3RkgLMeCp/2vUe/866+smmty077C0UUUhiZwMnpXHX10
-by6eTtnCj2H8v/r10uqS+Tp0zDqV2/mcVyJOBwCTjsela0l1M5voB4AGMnPbvQAc4GRkY5/zxSYx
-xwCBSnggDk/yrYzADgdScdh0oPAPTpQc4POKOAcZJP8AKgAI5PA6dqTqAegzwAOv+NL256+nrRwA
-ACSfYUABxk8frTWAK46nH+fpTiMEdc5/KkY/KcZJx2PSgDKvkwDwM57d66zwhqZvNOa1kJMtsQuT
-3U9PywR+ArlrwYUjjIHNS+ErkweJI4x92ZGRvbjI/UD86zmrouL1PSaKKKwNTK14/wCgKPWQA/ka
-5odvpRRW9LYxnuIOh/GjFFFaEinv9f6U0nCgiiigBcdKF+YjNFFAAOWx7Udh9KKKAM27+4341U0p
-jHr9gV4JuIx+bYooqHsyo7nrFFFFc5sf/9k=
-"
+ xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABkAGQDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii gAooooAKY7rGpZ2Cj1JxWZqmqfZAYoQDLjknoo9ff6Vzsksksu+RmdiTgk5IH9KuMG9SHNJ2OxS7 t5DtSeJm9A4JqeuAkQFeeTn86bZ67d6VMAXMttnDRk5x9Cen8v5hunbYFPueg0VXtbmK8to7iFw0 bjKkVYrMsKKKKACiiigAooooASmSyLFE8jfdVST9AKkqjqr+Xpk59QB+ZA/rQtxM5WSVppXlc5Zi SeeB7e1M5ySSDx+VAIx1PToKDyTxj6iuowGuODxkkevSsm+HBHBPt2rWkPB4zwayb08Ec/lQxo3v A98xe50+RjgASxg9hnDfqR+tdrXmXhCUp4ngUDiRXQ8+ik/j0Fem1zzWprHYKKKKkoKKKKACiiig AqnqieZps6+ilvy5/pVymSIJI2RujAgj60LRiZw579h/OgnoScDHAFDApIyMCHUkN7GkJGB06+vT /GuowGSnCEDIH0rFvXySMkjPY9K0rqXg9ck81hXMm44BwPek2M2fBsYl8SRt/wA80duvTIx/WvSx XDeAbbMt5dEYAVY1Prnk/wAh+ddzWE3qax2CiiipKCiiigAooooAKKKKAOL8QQGx1IygHy58sMDo 3cf1/Gsh7sADnt0B6V3er2UF9p8sNwwRfvCQn7hHQ15XK7xyFCc4OMjoa3hLQyktSzc3OSew+tZ5 JcjHJz6fp70E5JyMn3NdH4MsbS81NpZ5EMkADRxHALH+97gfzIP1G7K4Ja2Ox8OaadL0aGCQYmb9 5J/vHt+AwPwrXNFJWD1NRaKKKACiiigAoo7VSvr9LKIMRuduFUd6EribLbMEUsxAA6knisu71y3g ysX71/Y4X8+/4ZrBub2e7YtMxIB4UHAH4f1qD19cdMVtGn3Ic+xLfXlxfZEj/KOQo+6P8awbu0yT gcVs4Bzkkk+9RtGrk9CMHv1rSySsiLtnLNAwONpwT370+CGVZQ6MyuDlShIII7gjp9a3mtFJJwMC nR2ip2ANKwGxpPiK4WNYr8GUY/1q8MPqOn+e9dJb3cF2m6CVXHcA4I+o6iuLVAFHtTGDKwdGZWBy GU4I+hFQ6aexam+p6BRXH6X4meKZbfUG3RkgLMeCp/2vUe/866+smmty077C0UUUhiZwMnpXHX10 by6eTtnCj2H8v/r10uqS+Tp0zDqV2/mcVyJOBwCTjsela0l1M5voB4AGMnPbvQAc4GRkY5/zxSYx xwCBSnggDk/yrYzADgdScdh0oPAPTpQc4POKOAcZJP8AKgAI5PA6dqTqAegzwAOv+NL256+nrRwA ACSfYUABxk8frTWAK46nH+fpTiMEdc5/KkY/KcZJx2PSgDKvkwDwM57d66zwhqZvNOa1kJMtsQuT 3U9PywR+ArlrwYUjjIHNS+ErkweJI4x92ZGRvbjI/UD86zmrouL1PSaKKKwNTK14/wCgKPWQA/ka 5odvpRRW9LYxnuIOh/GjFFFaEinv9f6U0nCgiiigBcdKF+YjNFFAAOWx7Udh9KKKAM27+4341U0p jHr9gV4JuIx+bYooqHsyo7nrFFFFc5sf/9k= "
height="100"
width="100" />
<g
@@ -1602,8 +1570,8 @@
sodipodi:sides="3"
sodipodi:cx="595"
sodipodi:cy="701.36218"
- sodipodi:r1="41.012193"
- sodipodi:r2="20.506097"
+ sodipodi:r1="41.012192"
+ sodipodi:r2="20.506098"
sodipodi:arg1="1.5464109"
sodipodi:arg2="2.5936085"
inkscape:flatsided="true"
@@ -1611,7 +1579,8 @@
inkscape:randomized="0"
d="m 596,742.36218 -37.00704,-60.63397 71.01408,-1.73205 z"
inkscape:transform-center-x="0.5"
- inkscape:transform-center-y="9.8169873" />
+ inkscape:transform-center-y="9.8169873"
+ transform="translate(554,-32)" />
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
@@ -1786,5 +1755,853 @@
id="path4525"
inkscape:connector-curvature="0" />
</g>
+ <g
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ id="g32891"
+ transform="translate(350,0)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path32893"
+ d="m 552.51419,862.96792 c 0.0102,-5.30143 1.60593,-10.6248 3.78149,-15.43929 4.32123,-8.8444 14.216,-12.22658 22.33805,-16.5859 4.68059,-1.37584 9.07114,-5.52844 4.7426,-10.02046 -6.39489,-12.22902 -8.7729,-27.8219 -2.10653,-40.43961 3.65467,-7.37162 12.38903,-12.01132 20.49326,-9.67176 7.28637,1.44287 13.14475,7.15895 15.34035,14.18101 4.51436,13.20733 1.2153,28.11579 -6.53662,39.43979 -1.32968,3.95225 5.89572,5.24121 8.44,7.53545 5.40393,3.00388 11.60589,4.85759 15.86832,9.59775 5.12248,5.30858 9.79259,12.48585 8.66416,20.18284 -2.66598,2.93451 -8.40865,1.41927 -12.30136,2.20861 -23.95296,0.89934 -47.95935,1.13829 -71.90915,0.0384 -2.25654,-0.26203 -4.73152,-0.0739 -6.81457,-1.02681 z"
+ style="fill:#dce2e8" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32895"
+ d="m 552.86191,863.98091 c -0.3001,-10.49202 6.03728,-20.13978 14.66257,-25.69496 5.51969,-4.0779 12.40955,-5.84192 17.80822,-10.06232 2.84965,-4.01312 -2.37245,-8.04948 -3.34535,-11.96125 -5.17334,-11.94737 -5.914,-27.08139 2.25625,-37.90341 5.89413,-8.20878 18.85242,-9.23957 26.20711,-2.50691 7.92198,7.8665 8.99588,20.23178 7.07876,30.70563 -1.07732,6.52092 -4.2598,12.37274 -7.80043,17.84376 -0.63942,4.72644 5.99701,6.29571 9.15658,8.71794 5.67067,3.14875 12.42699,4.70876 16.62391,10.05061 4.55195,5.13638 7.7383,11.97169 7.26449,18.94209 -3.42877,3.13676 -9.17326,1.57453 -13.56039,2.19728 -25.14284,0.17847 -50.29403,0.26439 -75.43326,-0.23791 l -0.91846,-0.0906 0,0 z"
+ style="fill:#d4dbe2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32897"
+ d="m 597.40625,773.21875 c -2.08437,0.0218 -4.06879,0.82425 -5.78008,1.97408 -1.79052,1.15879 -3.40619,2.56842 -5.10341,3.85771 -2.07314,1.7046 -4.13064,3.52243 -5.54313,5.83208 -1.4246,2.63374 -2.01431,5.62903 -2.3241,8.58199 -0.33035,2.74853 -0.32823,5.52241 -0.43678,8.28539 -0.005,3.82444 -0.15351,7.64782 -0.13884,11.4717 0.0859,5.10181 0.52206,10.19115 0.63884,15.29078 -0.0171,1.6471 0.0169,3.30988 -0.14185,4.94514 -0.24522,0.76103 -0.56607,2.26102 0.57466,2.38613 1.06002,-0.019 1.23511,-1.39535 1.15554,-2.21222 0.22952,-1.68105 1.32505,-3.13394 2.6304,-4.16278 0.85251,-0.49875 1.97306,-0.491 2.84375,-0.0625 1.32761,1.06993 2.37232,2.46316 3.74962,3.48406 1.78793,1.52488 3.51798,3.13357 5.27748,4.67984 0.9866,0.7019 2.27026,0.71795 3.42985,0.66919 1.06796,-0.16832 2.13534,-0.35487 3.21952,-0.36775 0.89406,0.16109 2.32802,-0.70942 1.38603,-1.62159 -0.8042,-0.70337 -1.88743,-0.23431 -2.83365,-0.39781 -1.84267,-0.0672 -3.62098,-1.11476 -4.59764,-2.66893 -1.00336,-1.75997 -1.59857,-3.7098 -2.42704,-5.55243 -1.66116,-3.95349 -2.91032,-8.07322 -3.85039,-12.25354 -0.4782,-2.16238 -0.94931,-4.33361 -1.04039,-6.55414 -0.44284,-5.17654 -0.0164,-10.36675 0.21786,-15.5419 0.43161,-2.80874 0.93864,-5.71235 2.52365,-8.13079 1.40946,-2.34955 3.21165,-4.47033 5.33501,-6.20561 1.34968,-1.17749 2.79007,-2.24805 4.17259,-3.38235 0.65717,-0.78426 0.12822,-2.21425 -0.93003,-2.28177 -0.66037,-0.14562 -1.33846,-0.0725 -2.00747,-0.062 z"
+ style="fill:#a9b6c7;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32899"
+ d="m 595.0625,771.09375 c -3.49998,0.58518 -6.82593,1.96099 -9.87152,3.75664 -1.46593,0.9392 -2.89772,1.9504 -4.10149,3.21637 -2.26374,2.18699 -4.05772,4.84626 -5.3102,7.72931 -1.72442,4.45631 -3.18147,9.00923 -4.54622,13.58674 -1.17863,3.81878 -2.29249,7.66048 -3.58633,11.44147 -0.98068,2.31904 -2.25569,4.50522 -3.14674,6.86322 -0.0717,0.83217 -0.52076,1.71408 -0.15625,2.53125 0.34391,0.63556 0.61295,-0.72716 0.90409,-1.00196 0.70785,-1.17012 1.67865,-2.15857 2.50216,-3.24804 2.02564,-2.4413 4.09249,-4.85803 6.34375,-7.09375 0.89228,-0.67775 1.93115,-1.14621 3,-1.46875 0.9592,-0.27381 2.04572,-0.0942 2.7855,0.6034 0.79827,0.68845 1.05228,1.81659 0.92648,2.82928 -0.069,2.24614 -0.62186,4.43634 -0.94161,6.65146 -0.37717,1.50747 -0.59603,3.04826 -0.89537,4.57211 -0.0187,0.88489 0.803,1.89802 1.75,1.65625 1.2052,-0.41761 1.68611,-1.71186 2.01212,-2.83444 1.08092,-3.47552 1.16417,-7.147 1.31178,-10.75426 0.25256,-3.87574 0.43014,-7.76125 0.90064,-11.61815 0.52097,-3.65166 1.24649,-7.28074 2.27546,-10.8244 0.50779,-1.47275 1.28525,-2.82251 2.13241,-4.12255 1.04514,-1.54481 2.4259,-2.97532 4.21134,-3.62745 3.77193,-1.53211 7.85601,-2.03477 11.71875,-3.28125 0.85611,-0.41385 1.66942,-1.37746 1.34375,-2.375 -0.36579,-1.12201 -1.57323,-1.602 -2.61278,-1.89568 -2.30278,-0.66163 -4.68142,-1.03339 -7.06477,-1.2496 -0.62852,-0.0212 -1.25644,-0.11142 -1.88495,-0.0422 z"
+ style="fill:#b6c5d8;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32901"
+ d="m 553.31861,862.68392 c 2.03973,-6.75845 2.62673,-14.59993 8.28246,-19.57905 6.86653,-6.55449 16.49277,-8.81781 23.9521,-14.46458 3.64474,-4.45932 -2.81051,-9.08083 -3.56202,-13.60484 -4.14323,-11.16786 -4.98166,-24.68811 1.49566,-35.15189 5.68463,-8.73332 19.85553,-10.9347 27.19403,-3.0481 8.41394,8.94249 8.77611,22.65299 5.27347,33.81426 -1.49442,5.581 -4.99844,10.28747 -7.0924,15.6006 2.76177,3.52771 7.14927,5.48724 10.93492,7.7964 6.119,3.22073 13.58338,5.02515 17.48348,11.27477 2.96987,4.63969 4.42192,10.08731 5.80917,15.35231 -1.50165,4.96315 -8.81816,2.91096 -12.85889,3.69351 -22.80335,0.12179 -45.61168,0.15756 -68.41429,-0.11428 -2.31171,-0.50334 -7.53241,0.74503 -8.49769,-1.56911 z"
+ style="fill:#c9cfd7" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32903"
+ d="m 554.235,862.68169 c 2.05635,-7.41778 3.349,-16.08468 10.1767,-20.8097 6.61828,-5.16685 15.1606,-7.20405 21.59504,-12.59203 3.54453,-4.88336 -2.47561,-9.88767 -3.35341,-14.75239 -3.47406,-10.8555 -4.1294,-23.33186 0.8597,-33.82801 1.72632,-3.59701 5.23944,-6.62494 9.42916,-6.35645 4.19219,-1.15696 8.52724,-4.11292 12.93873,-1.76941 7.46152,3.81566 10.06429,12.7832 10.99601,20.5469 1.16372,10.51462 -1.47428,21.3696 -7.47449,30.09882 -3.05921,4.5826 3.82783,7.04871 6.59279,9.43949 4.45298,3.31782 9.92768,4.58376 14.70417,7.25683 7.68513,4.50047 10.74405,13.62794 11.74428,22.00374 -2.9167,3.42132 -8.87906,1.6959 -13.0442,2.37973 -23.01389,0.17734 -46.03587,0.29901 -69.04708,-0.12448 -1.47707,-0.46732 -5.78821,0.53078 -6.1174,-1.49304 z"
+ style="fill:#b6c5d8" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32905"
+ d="m 605.41576,831.51882 c -6.51092,-0.17414 1.89613,-8.32488 2.10973,-2.13677 0.25514,1.05824 -0.90992,3.45218 -2.10973,2.13677 z m -9.19222,-2.58713 c -5.03005,-3.26087 3.80688,-5.55701 3.71501,-0.9855 -0.33166,1.64802 -2.69765,2.53253 -3.71501,0.9855 z m 8.27957,-8.19213 c 5.41236,-4.28675 4.18648,-12.49507 9.14189,-17.11237 0.29556,5.93898 -0.81537,13.05465 -6.06482,16.64412 -0.94557,0.45813 -2.03685,0.66185 -3.07707,0.46825 z"
+ style="fill:#89929e" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32907"
+ d="m 555.48691,863.63394 c -0.70857,-2.12774 2.22704,-4.3804 1.34135,-0.66819 0.10193,0.98814 -0.65203,2.27111 -1.34135,0.66819 z m 37.375,-0.1401 c 1.38595,-2.43696 5.53173,0.89636 1.42887,0.91541 -0.49532,-0.004 -1.42499,-0.23332 -1.42887,-0.91541 z m 7.69692,-0.45528 c -1.76626,-3.1746 2.23873,-3.26451 1.11193,0.0649 -0.32817,2.3234 -0.6929,0.92535 -1.11193,-0.0649 z m 26.80308,-0.60687 c -0.14118,-3.37799 -6.35613,-0.78227 -3.14715,-4.41577 3.46144,-3.84128 -0.91256,-6.50536 0.32867,-10.70489 -1.35343,-4.87174 -4.44598,3.58742 -6.3126,-0.95498 -2.28645,-0.76047 -6.14616,-2.25962 -7.84378,-1.85811 1.7928,4.16671 -5.07612,3.88297 -4.6571,8.23859 -2.87822,4.77401 -4.21355,-5.23107 0.41677,-4.75641 3.01773,-1.66128 2.63528,-6.07232 -1.10546,-3.24125 -4.1035,2.38594 -8.10134,0.13188 -10.98005,-2.65973 -1.57462,1.027 -7.19053,5.94236 -6.22979,1.16697 3.10847,-2.66186 -0.58671,-8.92294 -4.2926,-8.18935 -5.10673,-0.52325 2.44631,-4.85414 3.57641,-6.66771 1.85925,-4.36472 -3.17296,-7.83742 -3.70804,-12.04941 -1.26507,-5.08051 -2.83005,-10.57026 -1.53095,-15.77259 2.64643,-1.80932 -6.03903,-6.34583 -0.12744,-6.57829 2.97426,2.18718 10.86096,-0.73904 8.66403,-4.74784 1.43269,-4.1299 6.02584,3.62463 2.18105,5.45085 -2.59742,0.10573 -7.4936,3.34663 -3.62767,5.54395 1.64345,-0.82217 6.49317,-5.71297 6.67294,-2.49044 -2.78532,3.31115 -8.67094,4.59991 -5.95043,10.09851 -0.14706,1.93717 2.22289,5.8417 2.38345,1.69036 -0.29174,-2.60942 -0.27466,-9.86038 3.64824,-6.05741 -1.55047,2.76367 1.65839,4.017 1.46611,0.70751 1.23126,-3.60319 4.16329,-6.90216 1.96148,-10.6292 1.08569,-3.44275 2.47527,-8.92278 -1.1456,-10.9983 -0.27587,-2.38485 4.39556,-5.73004 -0.72382,-6.12506 -5.30946,-0.90828 1.67648,-3.69288 4.04177,-2.6646 4.32549,0.22232 9.16923,1.37034 11.4584,5.44637 6.2849,9.7073 5.68438,22.38166 2.17074,32.98508 -0.92944,4.64278 -5.22217,8.12432 -5.20477,12.92114 1.20847,6.56432 8.01624,9.99242 13.78201,11.95844 5.17953,1.02044 10.13826,3.62424 13.03186,8.19359 3.20397,4.79647 5.21645,10.49318 5.73671,16.22196 -2.35585,3.8145 -7.90047,3.87439 -11.89521,3.17059 -1.22451,-0.32543 -2.60284,-0.92802 -3.03818,-2.23257 z m -6.09078,-20.1003 c -1.41893,-3.47946 -9.20211,-2.51084 -5.13746,1.1248 1.04916,0.55257 8.14925,1.55777 5.13746,-1.1248 z m -35.40922,-40.45872 c -2.16266,-4.30335 -2.56624,5.59099 0,0 z m -10.77214,57.4647 c 0.9739,-2.58634 6.2446,-4.23216 3.35785,-0.21672 -0.93252,2.57294 -7.05087,4.43368 -3.35785,0.21672 z m 15.26777,1.08726 c -0.46155,-3.123 5.92769,-1.79651 2.3333,0.70108 -0.7844,0.59532 -1.93502,0.11193 -2.3333,-0.70108 z m 17.19822,0.36758 c -1.40203,-3.70988 5.69463,-2.0316 1.50018,0.56139 l -0.7246,-0.0276 -0.77558,-0.53379 z m -46.69385,-2.34909 c 0.2511,-3.17228 6.70537,-7.64119 4.5997,-1.5241 -0.30291,1.59959 -3.88314,3.82735 -4.5997,1.5241 z m 56,-0.51143 c 2.51293,-5.65641 2.40656,5.5417 0,0 z m -47.8,-2.7 c -4.0511,-2.74409 2.86178,-11.29262 3.00074,-4.49156 -2.27342,1.19476 -2.94972,4.14273 0.2778,3.98531 0.44919,2.1979 -2.50337,1.86609 -3.27854,0.50625 z m 17.04379,-0.05 c 1.31653,-2.24916 8.58375,-2.15975 3.4328,0.33832 -0.75747,0.55533 -3.95209,1.81288 -3.4328,-0.33832 z m 28.41342,-2.29909 c 1.98887,-3.91758 6.85421,2.62004 1.31167,1.52967 -0.84991,0.0565 -1.92843,-0.52139 -1.31167,-1.52967 z m -56.65721,-0.39189 c 1.68789,-4.90927 2.99691,2.75221 0.0789,0.36537 l -0.0789,-0.36537 z m 16.64757,-4.24293 c -1.89148,-2.61234 0.84049,-5.75092 1.68838,-1.54504 0.84852,1.72586 -0.70234,5.1602 -1.68838,1.54504 z m 4.5919,-1.82793 c 1.60255,-1.85967 3.66348,-1.43607 5.26053,-2.98816 3.96262,1.46685 -2.62956,3.48646 -3.72862,4.9303 -1.99518,0.50428 -2.92151,-0.26884 -1.53191,-1.94214 z m -9.23947,-3.57149 c 0.59993,-5.93389 4.17587,2.63959 0.61172,2.37949 -0.52277,-0.66971 -0.58181,-1.56896 -0.61172,-2.37949 z m -5.42997,0.69664 c -0.36608,-3.22691 5.22742,-3.96176 2.51439,-0.12486 -0.51631,1.26584 -1.79625,1.28548 -2.51439,0.12486 z m 16.42997,-54.05429 c -0.30675,-2.8402 2.78573,-3.62344 2.3713,-0.3321 1.77753,2.89278 -2.53827,3.01913 -2.3713,0.3321 z m 7,-4.85902 c -0.4203,-5.12456 8.43626,-1.94337 4.35831,0.72111 -1.36922,0.0212 -3.34407,0.40232 -4.35831,-0.72111 z m -1,-5.82423 c 0.17102,-4.09108 9.38834,-5.68544 7.35975,-0.21811 -2.21937,0.24293 -4.55297,-2.11058 -6.7961,0.31894 l -0.41224,0.0536 -0.15141,-0.1544 0,0 z"
+ style="fill:#b4c3d5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32909"
+ d="m 628.86191,861.63169 c -0.6243,-3.55935 -2.69727,-6.3569 -0.72148,-9.98987 0.12528,-5.45244 -2.79115,-10.65923 -7.09669,-13.89447 -1.2068,-2.85452 5.32777,0.70573 6.92377,1.01004 7.6726,3.41307 13.86355,11.22205 14.0998,19.78329 0.20205,5.97005 -6.54891,6.42322 -10.9269,5.80556 -1.73227,0.15131 -2.58324,-1.0909 -2.2785,-2.71455 z m -32.0895,-20.80784 c -4.43403,-1.14416 -6.64242,-4.93813 -9.61832,-8.11599 -5.8032,-0.96373 3.57616,-5.23189 -0.12424,-8.64226 -1.28875,-3.82859 -5.19745,-7.73842 -3.91246,-11.88366 3.57632,0.77406 7.98145,4.56157 11.43042,0.4736 4.54424,-4.37751 7.17602,-10.57138 8.26123,-16.71192 0.40261,-6.44762 0.58793,-13.17942 -1.38634,-19.39442 -3.68525,-5.04182 5.4099,-3.08901 7.46282,-1.22179 7.18838,5.3533 8.70986,15.22614 8.49736,23.6257 -0.24925,8.4967 -3.14336,16.73146 -7.72751,23.84074 -2.88991,4.70712 3.78023,7.4172 6.17011,10.48571 2.37199,1.75978 2.7988,3.59039 -0.47087,3.94333 -4.93227,3.54041 -11.38158,5.84263 -17.44005,4.36937 l -0.65495,-0.33776 -0.48717,-0.43065 -3e-5,0 z"
+ style="fill:#b3bcc9" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32911"
+ d="m 629.67696,857.68169 c 0.69544,-5.83229 -1.1934,-11.42869 -3.06233,-16.84619 1.70492,-4.06189 7.7076,2.15936 9.08169,4.7283 3.47472,5.23289 5.9898,11.23822 6.74935,17.4968 -2.74907,2.48603 -8.71268,1.53936 -12.25687,0.52734 -1.14099,-1.73296 -0.47804,-3.96643 -0.51184,-5.90625 z m -35.07897,-19.01192 c -4.35373,-1.9881 -8.73775,-7.05736 -6.26711,-11.96771 0.37899,-3.87987 -6.19721,-8.74866 -2.61552,-11.649 3.81737,-0.0455 7.92323,-0.57969 10.70088,-3.51648 7.53861,-7.6238 9.37318,-19.29758 8.11009,-29.5788 -0.29347,-2.73658 -3.48318,-10.05061 2.13834,-6.90166 5.59048,2.86145 9.3559,8.5583 9.95363,14.79053 1.45238,11.54814 -0.99935,23.83469 -7.78522,33.40876 -3.2246,5.24149 5.70344,6.58552 5.5499,11.37054 -1.14464,5.117 -7.75884,5.97682 -12.15638,5.8855 -2.62827,-0.12443 -5.23793,-0.7377 -7.62861,-1.84168 z"
+ style="fill:#a9b6c7" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32913"
+ d="m 631.86191,856.01273 c 0.17627,-4.74944 -0.35601,-9.57132 -2.75943,-13.74195 1.4975,-4.03011 6.82738,2.83782 8.07858,5.41566 2.90201,4.84584 4.29026,10.45516 5.38214,15.90906 -3.35146,1.42092 -11.5911,2.28284 -10.66459,-3.67955 -0.043,-1.30058 -0.0346,-2.60214 -0.0367,-3.90322 z m -32,-17.72887 c -5.84776,-1.14965 -11.42672,-6.22518 -11.15451,-12.52353 -1.5003,-2.03434 -5.71528,-8.53816 -0.0642,-7.68024 6.73246,0.44741 11.31314,-5.91275 13.97222,-11.28778 4.52892,-9.55307 5.82631,-20.85993 2.53341,-31.00041 2.18117,-2.95131 6.79462,3.62386 8.51281,5.81939 4.3355,6.99236 3.55623,15.74508 2.3456,23.52395 -1.04534,6.26492 -3.43738,12.23617 -6.89396,17.55368 -4.11636,5.37273 4.86346,7.17375 5.40003,11.35344 -3.34598,2.78013 -7.84307,4.85802 -12.30072,4.56282 -0.78868,-0.0649 -1.57191,-0.18321 -2.35071,-0.32132 z"
+ style="fill:#a5aeba" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32915"
+ d="m 634.44264,862.18169 c -1.18835,-6.44151 -0.7153,-13.29528 -3.22346,-19.40763 5.2155,1.71368 7.21913,7.68437 8.61488,12.50189 0.46756,3.74753 5.9571,10.77397 -1.54689,9.15113 -1.59711,0.0659 -3.7451,-0.21664 -3.84453,-2.24539 z M 597.36191,836.4722 c -5.21371,-2.6559 -8.38811,-8.12562 -9.45075,-13.73768 -3.02381,-5.26702 5.32539,-2.26568 7.46203,-5.22634 8.49017,-5.8936 12.46598,-16.48626 13.51852,-26.43011 1.08258,-4.83991 -1.47198,-10.13976 -0.95483,-14.48335 7.03021,4.3261 9.10897,13.3759 8.64448,21.14239 -0.4724,9.88319 -4.21327,19.33825 -9.42908,27.6489 0.19598,3.60522 8.59405,7.29794 2.21847,10.91971 -3.64557,2.02664 -8.25272,1.70657 -12.00884,0.16648 z"
+ style="fill:#99a5b4" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32917"
+ d="m 597.625,771.4375 c -3.21749,0.80995 -6.35889,1.89093 -9.49855,2.95674 -0.97154,0.37142 -1.85289,0.9729 -2.5952,1.69951 -0.85286,0.75372 -1.5183,1.68678 -2.24295,2.5579 -1.43359,1.82026 -2.70936,3.75542 -4.06955,5.6296 -0.88196,1.49498 -1.70097,3.03188 -2.28734,4.66945 -0.773,1.87386 -1.3796,3.81126 -2.03693,5.7276 -1.48856,4.58577 -2.86664,9.20755 -4.15527,13.85304 -0.38084,1.5389 -0.8175,3.06718 -1.11421,4.62491 -0.0983,1.32482 0.42765,2.57219 0.8125,3.8125 0.65443,1.89642 1.24797,3.81318 1.875,5.71875 0.4387,1.03708 1.53192,1.69185 2.625,1.8125 1.24203,-0.0193 2.52075,0.0375 3.71875,-0.34375 1.02063,-0.39402 1.60505,-1.36074 1.86562,-2.3781 0.73273,-2.56005 1.01952,-5.21766 1.50049,-7.83083 0.4005,-2.37627 0.77571,-4.75672 1.16514,-7.13482 0.60941,-2.21748 1.28797,-4.41783 2.03973,-6.59038 0.78279,-2.02938 1.71569,-3.99664 2.55402,-6.00337 0.89003,-1.89943 1.86665,-3.76562 3.01491,-5.52201 1.40777,-2.01133 3.33858,-3.57662 5.32812,-4.9803 1.23992,-0.75485 2.42213,-1.59957 3.68923,-2.3108 1.42795,-0.88217 2.95575,-1.58776 4.46774,-2.31189 0.99896,-0.30772 1.95269,-0.81445 2.99484,-0.95052 0.94868,-0.0968 1.93298,0.0577 2.84891,-0.26823 0.92455,-0.56794 0.73006,-1.98773 -0.15625,-2.5 -0.80724,-0.63096 -1.7434,-1.0782 -2.63346,-1.5793 -1.68129,-0.84475 -3.47432,-1.44213 -5.30345,-1.87163 -1.35714,-0.28247 -2.73917,-0.47084 -4.12559,-0.51782 l -0.18169,0.0202 -0.0996,0.0111 z"
+ style="fill:#99a5b4;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32919"
+ d="m 637.65036,862.68169 c -2.12222,-4.15541 -2.62958,-9.16791 -2.11037,-13.77435 2.73632,-0.59646 3.48937,6.19672 4.61588,8.71136 0.50969,2.43464 4.44929,8.54497 -0.88647,6.29893 l -0.88201,-0.55645 -0.73703,-0.67949 0,0 z m -43.75608,-31 c -2.94588,-2.28349 -7.18933,-8.93795 -1.36293,-10.29495 8.07323,-2.18725 12.69247,-10.20871 15.48792,-17.52164 2.75397,-7.08868 3.00962,-14.78608 2.34575,-22.27209 0.57168,-3.73359 4.26846,3.25102 4.56293,4.83879 2.8335,10.0499 1.08542,21.07617 -3.26319,30.43572 -1.47318,3.78479 -7.24627,8.22354 -2.8605,12.027 4.90812,2.55146 1.57086,6.14222 -2.55813,6.40295 -4.41484,1.02741 -9.15214,-0.44638 -12.35185,-3.61578 z"
+ style="fill:#929ca9" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32921"
+ d="m 604.07679,778.57601 c -2.07993,0.18622 -4.16688,0.39931 -6.19063,0.93582 -1.96265,0.5268 -3.86859,1.26151 -5.67823,2.18771 -1.2785,0.72607 -2.59489,1.40817 -3.73224,2.35094 -1.87066,1.41739 -3.50157,3.11504 -5.0864,4.83803 -0.8029,1.1366 -1.66147,2.24315 -2.35815,3.44834 -1.04606,1.93489 -1.92687,3.96033 -2.55709,6.06935 -1.02826,3.17356 -1.89607,6.39655 -2.77337,9.61433 -0.79085,2.99079 -1.58802,5.98101 -2.3162,8.9875 -0.72532,3.0427 -1.21047,6.14099 -1.45053,9.25973 -0.0808,1.12348 -0.27816,2.24516 -0.13834,3.37206 0.0627,1.15775 0.14707,2.31618 0.28118,3.46744 0.0295,0.43529 0.64114,0.88693 0.8125,0.28125 0.43782,-0.93637 0.98489,-1.88776 2.03125,-2.21875 0.77048,-0.37522 1.64462,-0.58501 2.49468,-0.42232 0.99503,0.20928 2.02353,0.51766 2.87283,1.09107 1.15247,0.76152 2.17094,1.75918 2.82587,2.98452 0.67432,0.79355 0.86715,1.92774 1.49412,2.69048 0.55618,0.0517 0.46735,-0.84631 0.60893,-1.24468 0.20794,-1.87479 -0.22577,-3.73167 -0.54643,-5.56782 -0.32562,-1.64053 -0.80423,-3.25041 -0.99895,-4.91491 -0.27135,-1.81202 -0.60341,-3.6237 -0.59359,-5.46277 -0.0577,-1.99807 -0.16648,-3.99431 -0.14423,-5.99405 -0.0352,-1.23626 -10e-4,-2.47036 0.11341,-3.70195 0.24423,-2.90098 0.56334,-5.79741 0.99836,-8.67632 0.6275,-2.95685 1.33887,-5.92442 2.64286,-8.66725 0.61629,-1.36529 1.23898,-2.73456 1.95854,-4.04735 0.72079,-1.14986 1.59611,-2.22584 2.73697,-2.98238 1.71322,-1.17297 3.55581,-2.14034 5.44826,-2.98937 1.80419,-0.81317 3.6119,-1.62339 5.33837,-2.5949 0.82255,-0.40084 1.88367,-0.6713 2.3005,-1.56976 0.12731,-0.30615 0.0397,-0.72575 -0.39425,-0.52399 z"
+ style="fill:#8a95a3;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32923"
+ d="m 638.56908,861.68169 c -1.01336,-1.80767 1.28793,-7.15927 1.24215,-2.50022 0.42403,2.21568 -0.44461,7.79222 -1.24215,2.50022 l 0,0 z m -43.0654,-31 c -2.9868,-1.67058 -7.00655,-6.75545 -1.26272,-7.50408 4.83247,-2.49559 9.8284,-5.69893 12.52164,-10.55778 1.11545,-4.62828 4.11893,-8.61975 4.84147,-13.41654 0.98527,-4.74585 2.52559,-9.7007 1.45289,-14.54866 3.4059,4.0618 2.72684,9.97803 2.40567,14.94875 -0.99576,8.63373 -3.58356,17.28503 -8.78479,24.35117 -2.28719,3.74841 7.19829,8.26089 -0.21265,9.84972 -3.91814,1.46539 -7.97066,-0.66912 -10.96151,-3.12258 z"
+ style="fill:#8a95a3" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path32959"
+ d="m 902.51419,862.96792 c 0.0102,-5.30143 1.60593,-10.6248 3.78149,-15.43929 4.32123,-8.8444 14.216,-12.22658 22.33805,-16.5859 4.68059,-1.37584 9.07114,-5.52844 4.7426,-10.02046 -6.39489,-12.22902 -8.7729,-27.8219 -2.10653,-40.43961 3.65467,-7.37162 12.38903,-12.01132 20.49326,-9.67176 7.28637,1.44287 13.14475,7.15895 15.34035,14.18101 4.51436,13.20733 1.2153,28.11579 -6.53662,39.43979 -1.32968,3.95225 5.89572,5.24121 8.44,7.53545 5.40393,3.00388 11.60589,4.85759 15.86832,9.59775 5.12248,5.30858 9.79259,12.48585 8.66416,20.18284 -2.66598,2.93451 -8.40865,1.41927 -12.30136,2.20861 -23.95296,0.89934 -47.95935,1.13829 -71.90915,0.0384 -2.25654,-0.26203 -4.73152,-0.0739 -6.81457,-1.02681 z"
+ style="fill:#dce2e8" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32961"
+ d="m 902.86191,863.98091 c -0.3001,-10.49202 6.03728,-20.13978 14.66257,-25.69496 5.51969,-4.0779 12.40955,-5.84192 17.80822,-10.06232 2.84965,-4.01312 -2.37245,-8.04948 -3.34535,-11.96125 -5.17334,-11.94737 -5.914,-27.08139 2.25625,-37.90341 5.89413,-8.20878 18.85242,-9.23957 26.20711,-2.50691 7.92198,7.8665 8.99588,20.23178 7.07876,30.70563 -1.07732,6.52092 -4.2598,12.37274 -7.80043,17.84376 -0.63942,4.72644 5.99701,6.29571 9.15658,8.71794 5.67067,3.14875 12.42699,4.70876 16.62391,10.05061 4.55195,5.13638 7.7383,11.97169 7.26449,18.94209 -3.42877,3.13676 -9.17326,1.57453 -13.56039,2.19728 -25.14284,0.17847 -50.29403,0.26439 -75.43326,-0.23791 l -0.91846,-0.0906 0,0 z"
+ style="fill:#d4dbe2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32963"
+ d="m 947.40625,773.21875 c -2.08437,0.0218 -4.06879,0.82425 -5.78008,1.97408 -1.79052,1.15879 -3.40619,2.56842 -5.10341,3.85771 -2.07314,1.7046 -4.13064,3.52243 -5.54313,5.83208 -1.4246,2.63374 -2.01431,5.62903 -2.3241,8.58199 -0.33035,2.74853 -0.32823,5.52241 -0.43678,8.28539 -0.005,3.82444 -0.15351,7.64782 -0.13884,11.4717 0.0859,5.10181 0.52206,10.19115 0.63884,15.29078 -0.0171,1.6471 0.0169,3.30988 -0.14185,4.94514 -0.24522,0.76103 -0.56607,2.26102 0.57466,2.38613 1.06002,-0.019 1.23511,-1.39535 1.15554,-2.21222 0.22952,-1.68105 1.32505,-3.13394 2.6304,-4.16278 0.85251,-0.49875 1.97306,-0.491 2.84375,-0.0625 1.32761,1.06993 2.37232,2.46316 3.74962,3.48406 1.78793,1.52488 3.51798,3.13357 5.27748,4.67984 0.9866,0.7019 2.27026,0.71795 3.42985,0.66919 1.06796,-0.16832 2.13534,-0.35487 3.21952,-0.36775 0.89406,0.16109 2.32802,-0.70942 1.38603,-1.62159 -0.8042,-0.70337 -1.88743,-0.23431 -2.83365,-0.39781 -1.84267,-0.0672 -3.62098,-1.11476 -4.59764,-2.66893 -1.00336,-1.75997 -1.59857,-3.7098 -2.42704,-5.55243 -1.66116,-3.95349 -2.91032,-8.07322 -3.85039,-12.25354 -0.4782,-2.16238 -0.94931,-4.33361 -1.04039,-6.55414 -0.44284,-5.17654 -0.0164,-10.36675 0.21786,-15.5419 0.43161,-2.80874 0.93864,-5.71235 2.52365,-8.13079 1.40946,-2.34955 3.21165,-4.47033 5.33501,-6.20561 1.34968,-1.17749 2.79007,-2.24805 4.17259,-3.38235 0.65717,-0.78426 0.12822,-2.21425 -0.93003,-2.28177 -0.66037,-0.14562 -1.33846,-0.0725 -2.00747,-0.062 z"
+ style="fill:#a9b6c7;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32965"
+ d="m 945.0625,771.09375 c -3.49998,0.58518 -6.82593,1.96099 -9.87152,3.75664 -1.46593,0.9392 -2.89772,1.9504 -4.10149,3.21637 -2.26374,2.18699 -4.05772,4.84626 -5.3102,7.72931 -1.72442,4.45631 -3.18147,9.00923 -4.54622,13.58674 -1.17863,3.81878 -2.29249,7.66048 -3.58633,11.44147 -0.98068,2.31904 -2.25569,4.50522 -3.14674,6.86322 -0.0717,0.83217 -0.52076,1.71408 -0.15625,2.53125 0.34391,0.63556 0.61295,-0.72716 0.90409,-1.00196 0.70785,-1.17012 1.67865,-2.15857 2.50216,-3.24804 2.02564,-2.4413 4.09249,-4.85803 6.34375,-7.09375 0.89228,-0.67775 1.93115,-1.14621 3,-1.46875 0.9592,-0.27381 2.04572,-0.0942 2.7855,0.6034 0.79827,0.68845 1.05228,1.81659 0.92648,2.82928 -0.069,2.24614 -0.62186,4.43634 -0.94161,6.65146 -0.37717,1.50747 -0.59603,3.04826 -0.89537,4.57211 -0.0187,0.88489 0.803,1.89802 1.75,1.65625 1.2052,-0.41761 1.68611,-1.71186 2.01212,-2.83444 1.08092,-3.47552 1.16417,-7.147 1.31178,-10.75426 0.25256,-3.87574 0.43014,-7.76125 0.90064,-11.61815 0.52097,-3.65166 1.24649,-7.28074 2.27546,-10.8244 0.50779,-1.47275 1.28525,-2.82251 2.13241,-4.12255 1.04514,-1.54481 2.4259,-2.97532 4.21134,-3.62745 3.77193,-1.53211 7.85601,-2.03477 11.71875,-3.28125 0.85611,-0.41385 1.66942,-1.37746 1.34375,-2.375 -0.36579,-1.12201 -1.57323,-1.602 -2.61278,-1.89568 -2.30278,-0.66163 -4.68142,-1.03339 -7.06477,-1.2496 -0.62852,-0.0212 -1.25644,-0.11142 -1.88495,-0.0422 z"
+ style="fill:#b6c5d8;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32967"
+ d="m 903.31861,862.68392 c 2.03973,-6.75845 2.62673,-14.59993 8.28246,-19.57905 6.86653,-6.55449 16.49277,-8.81781 23.9521,-14.46458 3.64474,-4.45932 -2.81051,-9.08083 -3.56202,-13.60484 -4.14323,-11.16786 -4.98166,-24.68811 1.49566,-35.15189 5.68463,-8.73332 19.85553,-10.9347 27.19403,-3.0481 8.41394,8.94249 8.77611,22.65299 5.27347,33.81426 -1.49442,5.581 -4.99844,10.28747 -7.0924,15.6006 2.76177,3.52771 7.14927,5.48724 10.93492,7.7964 6.119,3.22073 13.58338,5.02515 17.48348,11.27477 2.96987,4.63969 4.42192,10.08731 5.80917,15.35231 -1.50165,4.96315 -8.81816,2.91096 -12.85889,3.69351 -22.80335,0.12179 -45.61168,0.15756 -68.41429,-0.11428 -2.31171,-0.50334 -7.53241,0.74503 -8.49769,-1.56911 z"
+ style="fill:#c9cfd7" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32969"
+ d="m 904.235,862.68169 c 2.05635,-7.41778 3.349,-16.08468 10.1767,-20.8097 6.61828,-5.16685 15.1606,-7.20405 21.59504,-12.59203 3.54453,-4.88336 -2.47561,-9.88767 -3.35341,-14.75239 -3.47406,-10.8555 -4.1294,-23.33186 0.8597,-33.82801 1.72632,-3.59701 5.23944,-6.62494 9.42916,-6.35645 4.19219,-1.15696 8.52724,-4.11292 12.93873,-1.76941 7.46152,3.81566 10.06429,12.7832 10.99601,20.5469 1.16372,10.51462 -1.47428,21.3696 -7.47449,30.09882 -3.05921,4.5826 3.82783,7.04871 6.59279,9.43949 4.45298,3.31782 9.92768,4.58376 14.70417,7.25683 7.68513,4.50047 10.74405,13.62794 11.74428,22.00374 -2.9167,3.42132 -8.87906,1.6959 -13.0442,2.37973 -23.01389,0.17734 -46.03587,0.29901 -69.04708,-0.12448 -1.47707,-0.46732 -5.78821,0.53078 -6.1174,-1.49304 z"
+ style="fill:#b6c5d8" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32971"
+ d="m 955.41576,831.51882 c -6.51092,-0.17414 1.89613,-8.32488 2.10973,-2.13677 0.25514,1.05824 -0.90992,3.45218 -2.10973,2.13677 z m -9.19222,-2.58713 c -5.03005,-3.26087 3.80688,-5.55701 3.71501,-0.9855 -0.33166,1.64802 -2.69765,2.53253 -3.71501,0.9855 z m 8.27957,-8.19213 c 5.41236,-4.28675 4.18648,-12.49507 9.14189,-17.11237 0.29556,5.93898 -0.81537,13.05465 -6.06482,16.64412 -0.94557,0.45813 -2.03685,0.66185 -3.07707,0.46825 z"
+ style="fill:#89929e" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32973"
+ d="m 905.48691,863.63394 c -0.70857,-2.12774 2.22704,-4.3804 1.34135,-0.66819 0.10193,0.98814 -0.65203,2.27111 -1.34135,0.66819 z m 37.375,-0.1401 c 1.38595,-2.43696 5.53173,0.89636 1.42887,0.91541 -0.49532,-0.004 -1.42499,-0.23332 -1.42887,-0.91541 z m 7.69692,-0.45528 c -1.76626,-3.1746 2.23873,-3.26451 1.11193,0.0649 -0.32817,2.3234 -0.6929,0.92535 -1.11193,-0.0649 z m 26.80308,-0.60687 c -0.14118,-3.37799 -6.35613,-0.78227 -3.14715,-4.41577 3.46144,-3.84128 -0.91256,-6.50536 0.32867,-10.70489 -1.35343,-4.87174 -4.44598,3.58742 -6.3126,-0.95498 -2.28645,-0.76047 -6.14616,-2.25962 -7.84378,-1.85811 1.7928,4.16671 -5.07612,3.88297 -4.6571,8.23859 -2.87822,4.77401 -4.21355,-5.23107 0.41677,-4.75641 3.01773,-1.66128 2.63528,-6.07232 -1.10546,-3.24125 -4.1035,2.38594 -8.10134,0.13188 -10.98005,-2.65973 -1.57462,1.027 -7.19053,5.94236 -6.22979,1.16697 3.10847,-2.66186 -0.58671,-8.92294 -4.2926,-8.18935 -5.10673,-0.52325 2.44631,-4.85414 3.57641,-6.66771 1.85925,-4.36472 -3.17296,-7.83742 -3.70804,-12.04941 -1.26507,-5.08051 -2.83005,-10.57026 -1.53095,-15.77259 2.64643,-1.80932 -6.03903,-6.34583 -0.12744,-6.57829 2.97426,2.18718 10.86096,-0.73904 8.66403,-4.74784 1.43269,-4.1299 6.02584,3.62463 2.18105,5.45085 -2.59742,0.10573 -7.4936,3.34663 -3.62767,5.54395 1.64345,-0.82217 6.49317,-5.71297 6.67294,-2.49044 -2.78532,3.31115 -8.67094,4.59991 -5.95043,10.09851 -0.14706,1.93717 2.22289,5.8417 2.38345,1.69036 -0.29174,-2.60942 -0.27466,-9.86038 3.64824,-6.05741 -1.55047,2.76367 1.65839,4.017 1.46611,0.70751 1.23126,-3.60319 4.16329,-6.90216 1.96148,-10.6292 1.08569,-3.44275 2.47527,-8.92278 -1.1456,-10.9983 -0.27587,-2.38485 4.39556,-5.73004 -0.72382,-6.12506 -5.30946,-0.90828 1.67648,-3.69288 4.04177,-2.6646 4.32549,0.22232 9.16923,1.37034 11.4584,5.44637 6.2849,9.7073 5.68438,22.38166 2.17074,32.98508 -0.92944,4.64278 -5.22217,8.12432 -5.20477,12.92114 1.20847,6.56432 8.01624,9.99242 13.78201,11.95844 5.17953,1.02044 10.13826,3.62424 13.03186,8.19359 3.20397,4.79647 5.21645,10.49318 5.73671,16.22196 -2.35585,3.8145 -7.90047,3.87439 -11.89521,3.17059 -1.22451,-0.32543 -2.60284,-0.92802 -3.03818,-2.23257 z m -6.09078,-20.1003 c -1.41893,-3.47946 -9.20211,-2.51084 -5.13746,1.1248 1.04916,0.55257 8.14925,1.55777 5.13746,-1.1248 z m -35.40922,-40.45872 c -2.16266,-4.30335 -2.56624,5.59099 0,0 z m -10.77214,57.4647 c 0.9739,-2.58634 6.2446,-4.23216 3.35785,-0.21672 -0.93252,2.57294 -7.05087,4.43368 -3.35785,0.21672 z m 15.26777,1.08726 c -0.46155,-3.123 5.92769,-1.79651 2.3333,0.70108 -0.7844,0.59532 -1.93502,0.11193 -2.3333,-0.70108 z m 17.19822,0.36758 c -1.40203,-3.70988 5.69463,-2.0316 1.50018,0.56139 l -0.7246,-0.0276 -0.77558,-0.53379 z m -46.69385,-2.34909 c 0.2511,-3.17228 6.70537,-7.64119 4.5997,-1.5241 -0.30291,1.59959 -3.88314,3.82735 -4.5997,1.5241 z m 56,-0.51143 c 2.51293,-5.65641 2.40656,5.5417 0,0 z m -47.8,-2.7 c -4.0511,-2.74409 2.86178,-11.29262 3.00074,-4.49156 -2.27342,1.19476 -2.94972,4.14273 0.2778,3.98531 0.44919,2.1979 -2.50337,1.86609 -3.27854,0.50625 z m 17.04379,-0.05 c 1.31653,-2.24916 8.58375,-2.15975 3.4328,0.33832 -0.75747,0.55533 -3.95209,1.81288 -3.4328,-0.33832 z m 28.41342,-2.29909 c 1.98887,-3.91758 6.85421,2.62004 1.31167,1.52967 -0.84991,0.0565 -1.92843,-0.52139 -1.31167,-1.52967 z m -56.65721,-0.39189 c 1.68789,-4.90927 2.99691,2.75221 0.0789,0.36537 l -0.0789,-0.36537 z m 16.64757,-4.24293 c -1.89148,-2.61234 0.84049,-5.75092 1.68838,-1.54504 0.84852,1.72586 -0.70234,5.1602 -1.68838,1.54504 z m 4.5919,-1.82793 c 1.60255,-1.85967 3.66348,-1.43607 5.26053,-2.98816 3.96262,1.46685 -2.62956,3.48646 -3.72862,4.9303 -1.99518,0.50428 -2.92151,-0.26884 -1.53191,-1.94214 z m -9.23947,-3.57149 c 0.59993,-5.93389 4.17587,2.63959 0.61172,2.37949 -0.52277,-0.66971 -0.58181,-1.56896 -0.61172,-2.37949 z m -5.42997,0.69664 c -0.36608,-3.22691 5.22742,-3.96176 2.51439,-0.12486 -0.51631,1.26584 -1.79625,1.28548 -2.51439,0.12486 z m 16.42997,-54.05429 c -0.30675,-2.8402 2.78573,-3.62344 2.3713,-0.3321 1.77753,2.89278 -2.53827,3.01913 -2.3713,0.3321 z m 7,-4.85902 c -0.4203,-5.12456 8.43626,-1.94337 4.35831,0.72111 -1.36922,0.0212 -3.34407,0.40232 -4.35831,-0.72111 z m -1,-5.82423 c 0.17102,-4.09108 9.38834,-5.68544 7.35975,-0.21811 -2.21937,0.24293 -4.55297,-2.11058 -6.7961,0.31894 l -0.41224,0.0536 -0.15141,-0.1544 0,0 z"
+ style="fill:#b4c3d5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32975"
+ d="m 978.86191,861.63169 c -0.6243,-3.55935 -2.69727,-6.3569 -0.72148,-9.98987 0.12528,-5.45244 -2.79115,-10.65923 -7.09669,-13.89447 -1.2068,-2.85452 5.32777,0.70573 6.92377,1.01004 7.6726,3.41307 13.86355,11.22205 14.0998,19.78329 0.20205,5.97005 -6.54891,6.42322 -10.9269,5.80556 -1.73227,0.15131 -2.58324,-1.0909 -2.2785,-2.71455 z m -32.0895,-20.80784 c -4.43403,-1.14416 -6.64242,-4.93813 -9.61832,-8.11599 -5.8032,-0.96373 3.57616,-5.23189 -0.12424,-8.64226 -1.28875,-3.82859 -5.19745,-7.73842 -3.91246,-11.88366 3.57632,0.77406 7.98145,4.56157 11.43042,0.4736 4.54424,-4.37751 7.17602,-10.57138 8.26123,-16.71192 0.40261,-6.44762 0.58793,-13.17942 -1.38634,-19.39442 -3.68525,-5.04182 5.4099,-3.08901 7.46282,-1.22179 7.18838,5.3533 8.70986,15.22614 8.49736,23.6257 -0.24925,8.4967 -3.14336,16.73146 -7.72751,23.84074 -2.88991,4.70712 3.78023,7.4172 6.17011,10.48571 2.37199,1.75978 2.7988,3.59039 -0.47087,3.94333 -4.93227,3.54041 -11.38158,5.84263 -17.44005,4.36937 l -0.65495,-0.33776 -0.48717,-0.43065 -3e-5,0 z"
+ style="fill:#b3bcc9" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32977"
+ d="m 979.67696,857.68169 c 0.69544,-5.83229 -1.1934,-11.42869 -3.06233,-16.84619 1.70492,-4.06189 7.7076,2.15936 9.08169,4.7283 3.47472,5.23289 5.9898,11.23822 6.74935,17.4968 -2.74907,2.48603 -8.71268,1.53936 -12.25687,0.52734 -1.14099,-1.73296 -0.47804,-3.96643 -0.51184,-5.90625 z m -35.07897,-19.01192 c -4.35373,-1.9881 -8.73775,-7.05736 -6.26711,-11.96771 0.37899,-3.87987 -6.19721,-8.74866 -2.61552,-11.649 3.81737,-0.0455 7.92323,-0.57969 10.70088,-3.51648 7.53861,-7.6238 9.37318,-19.29758 8.11009,-29.5788 -0.29347,-2.73658 -3.48318,-10.05061 2.13834,-6.90166 5.59048,2.86145 9.3559,8.5583 9.95363,14.79053 1.45238,11.54814 -0.99935,23.83469 -7.78522,33.40876 -3.2246,5.24149 5.70344,6.58552 5.5499,11.37054 -1.14464,5.117 -7.75884,5.97682 -12.15638,5.8855 -2.62827,-0.12443 -5.23793,-0.7377 -7.62861,-1.84168 z"
+ style="fill:#a9b6c7" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32979"
+ d="m 981.86191,856.01273 c 0.17627,-4.74944 -0.35601,-9.57132 -2.75943,-13.74195 1.4975,-4.03011 6.82738,2.83782 8.07858,5.41566 2.90201,4.84584 4.29026,10.45516 5.38214,15.90906 -3.35146,1.42092 -11.5911,2.28284 -10.66459,-3.67955 -0.043,-1.30058 -0.0346,-2.60214 -0.0367,-3.90322 z m -32,-17.72887 c -5.84776,-1.14965 -11.42672,-6.22518 -11.15451,-12.52353 -1.5003,-2.03434 -5.71528,-8.53816 -0.0642,-7.68024 6.73246,0.44741 11.31314,-5.91275 13.97222,-11.28778 4.52892,-9.55307 5.82631,-20.85993 2.53341,-31.00041 2.18117,-2.95131 6.79462,3.62386 8.51281,5.81939 4.3355,6.99236 3.55623,15.74508 2.3456,23.52395 -1.04534,6.26492 -3.43738,12.23617 -6.89396,17.55368 -4.11636,5.37273 4.86346,7.17375 5.40003,11.35344 -3.34598,2.78013 -7.84307,4.85802 -12.30072,4.56282 -0.78868,-0.0649 -1.57191,-0.18321 -2.35071,-0.32132 z"
+ style="fill:#a5aeba" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32981"
+ d="m 984.44264,862.18169 c -1.18835,-6.44151 -0.7153,-13.29528 -3.22346,-19.40763 5.2155,1.71368 7.21913,7.68437 8.61488,12.50189 0.46756,3.74753 5.9571,10.77397 -1.54689,9.15113 -1.59711,0.0659 -3.7451,-0.21664 -3.84453,-2.24539 z M 947.36191,836.4722 c -5.21371,-2.6559 -8.38811,-8.12562 -9.45075,-13.73768 -3.02381,-5.26702 5.32539,-2.26568 7.46203,-5.22634 8.49017,-5.8936 12.46598,-16.48626 13.51852,-26.43011 1.08258,-4.83991 -1.47198,-10.13976 -0.95483,-14.48335 7.03021,4.3261 9.10897,13.3759 8.64448,21.14239 -0.4724,9.88319 -4.21327,19.33825 -9.42908,27.6489 0.19598,3.60522 8.59405,7.29794 2.21847,10.91971 -3.64557,2.02664 -8.25272,1.70657 -12.00884,0.16648 z"
+ style="fill:#99a5b4" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32985"
+ d="m 987.65036,862.68169 c -2.12222,-4.15541 -2.62958,-9.16791 -2.11037,-13.77435 2.73632,-0.59646 3.48937,6.19672 4.61588,8.71136 0.50969,2.43464 4.44929,8.54497 -0.88647,6.29893 l -0.88201,-0.55645 -0.73703,-0.67949 0,0 z m -43.75608,-31 c -2.94588,-2.28349 -7.18933,-8.93795 -1.36293,-10.29495 8.07323,-2.18725 12.69247,-10.20871 15.48792,-17.52164 2.75397,-7.08868 3.00962,-14.78608 2.34575,-22.27209 0.57168,-3.73359 4.26846,3.25102 4.56293,4.83879 2.8335,10.0499 1.08542,21.07617 -3.26319,30.43572 -1.47318,3.78479 -7.24627,8.22354 -2.8605,12.027 4.90812,2.55146 1.57086,6.14222 -2.55813,6.40295 -4.41484,1.02741 -9.15214,-0.44638 -12.35185,-3.61578 z"
+ style="fill:#929ca9" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32989"
+ d="m 988.56908,861.68169 c -1.01336,-1.80767 1.28793,-7.15927 1.24215,-2.50022 0.42403,2.21568 -0.44461,7.79222 -1.24215,2.50022 l 0,0 z m -43.0654,-31 c -2.9868,-1.67058 -7.00655,-6.75545 -1.26272,-7.50408 4.83247,-2.49559 9.8284,-5.69893 12.52164,-10.55778 1.11545,-4.62828 4.11893,-8.61975 4.84147,-13.41654 0.98527,-4.74585 2.52559,-9.7007 1.45289,-14.54866 3.4059,4.0618 2.72684,9.97803 2.40567,14.94875 -0.99576,8.63373 -3.58356,17.28503 -8.78479,24.35117 -2.28719,3.74841 7.19829,8.26089 -0.21265,9.84972 -3.91814,1.46539 -7.97066,-0.66912 -10.96151,-3.12258 z"
+ style="fill:#8a95a3" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32987"
+ d="m 954.07679,778.57601 c -2.07993,0.18622 -4.16688,0.39931 -6.19063,0.93582 -1.96265,0.5268 -3.86859,1.26151 -5.67823,2.18771 -1.2785,0.72607 -2.59489,1.40817 -3.73224,2.35094 -1.87066,1.41739 -3.50157,3.11504 -5.0864,4.83803 -0.8029,1.1366 -1.66147,2.24315 -2.35815,3.44834 -1.04606,1.93489 -1.92687,3.96033 -2.55709,6.06935 -1.02826,3.17356 -1.89607,6.39655 -2.77337,9.61433 -0.79085,2.99079 -1.58802,5.98101 -2.3162,8.9875 -0.72532,3.0427 -1.21047,6.14099 -1.45053,9.25973 -0.0808,1.12348 -0.27816,2.24516 -0.13834,3.37206 0.0627,1.15775 0.14707,2.31618 0.28118,3.46744 0.0295,0.43529 0.64114,0.88693 0.8125,0.28125 0.43782,-0.93637 0.98489,-1.88776 2.03125,-2.21875 0.77048,-0.37522 1.64462,-0.58501 2.49468,-0.42232 0.99503,0.20928 2.02353,0.51766 2.87283,1.09107 1.15247,0.76152 2.17094,1.75918 2.82587,2.98452 0.67432,0.79355 0.86715,1.92774 1.49412,2.69048 0.55618,0.0517 0.46735,-0.84631 0.60893,-1.24468 0.20794,-1.87479 -0.22577,-3.73167 -0.54643,-5.56782 -0.32562,-1.64053 -0.80423,-3.25041 -0.99895,-4.91491 -0.27135,-1.81202 -0.60341,-3.6237 -0.59359,-5.46277 -0.0577,-1.99807 -0.16648,-3.99431 -0.14423,-5.99405 -0.0352,-1.23626 -10e-4,-2.47036 0.11341,-3.70195 0.24423,-2.90098 0.56334,-5.79741 0.99836,-8.67632 0.6275,-2.95685 1.33887,-5.92442 2.64286,-8.66725 0.61629,-1.36529 1.23898,-2.73456 1.95854,-4.04735 0.72079,-1.14986 1.59611,-2.22584 2.73697,-2.98238 1.71322,-1.17297 3.55581,-2.14034 5.44826,-2.98937 1.80419,-0.81317 3.6119,-1.62339 5.33837,-2.5949 0.82255,-0.40084 1.88367,-0.6713 2.3005,-1.56976 0.12731,-0.30615 0.0397,-0.72575 -0.39425,-0.52399 z"
+ style="fill:#8a95a3;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32983"
+ d="M 946.9375 772.125 C 937.37035 773.87339 929.68293 781.76987 926.96875 790.9375 C 922.13998 801.82267 919.89821 813.96996 921.35039 825.83894 C 921.3702 826.9122 921.49629 827.99688 921.3125 829.0625 C 925.06442 824.55868 925.115 818.39094 927.2936 813.16564 C 930.66518 802.48404 936.08714 791.99145 944.96875 784.875 C 949.33478 781.19151 954.446 778.4942 959.6875 776.28125 C 960.40964 774.46268 958.21168 773.03627 956.59375 773.15625 C 953.47654 772.23318 950.17742 771.92625 946.9375 772.125 z "
+ style="fill:#99a5b4;fill-opacity:1"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ <g
+ transform="matrix(0.24124111,0,0,0.24124111,797.29989,735.99371)"
+ id="g33007"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <path
+ style="fill:#dce2e8"
+ d="m 552.51419,862.96792 c 0.0102,-5.30143 1.60593,-10.6248 3.78149,-15.43929 4.32123,-8.8444 14.216,-12.22658 22.33805,-16.5859 4.68059,-1.37584 9.07114,-5.52844 4.7426,-10.02046 -6.39489,-12.22902 -8.7729,-27.8219 -2.10653,-40.43961 3.65467,-7.37162 12.38903,-12.01132 20.49326,-9.67176 7.28637,1.44287 13.14475,7.15895 15.34035,14.18101 4.51436,13.20733 1.2153,28.11579 -6.53662,39.43979 -1.32968,3.95225 5.89572,5.24121 8.44,7.53545 5.40393,3.00388 11.60589,4.85759 15.86832,9.59775 5.12248,5.30858 9.79259,12.48585 8.66416,20.18284 -2.66598,2.93451 -8.40865,1.41927 -12.30136,2.20861 -23.95296,0.89934 -47.95935,1.13829 -71.90915,0.0384 -2.25654,-0.26203 -4.73152,-0.0739 -6.81457,-1.02681 z"
+ id="path33009"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#d4dbe2"
+ d="m 552.86191,863.98091 c -0.3001,-10.49202 6.03728,-20.13978 14.66257,-25.69496 5.51969,-4.0779 12.40955,-5.84192 17.80822,-10.06232 2.84965,-4.01312 -2.37245,-8.04948 -3.34535,-11.96125 -5.17334,-11.94737 -5.914,-27.08139 2.25625,-37.90341 5.89413,-8.20878 18.85242,-9.23957 26.20711,-2.50691 7.92198,7.8665 8.99588,20.23178 7.07876,30.70563 -1.07732,6.52092 -4.2598,12.37274 -7.80043,17.84376 -0.63942,4.72644 5.99701,6.29571 9.15658,8.71794 5.67067,3.14875 12.42699,4.70876 16.62391,10.05061 4.55195,5.13638 7.7383,11.97169 7.26449,18.94209 -3.42877,3.13676 -9.17326,1.57453 -13.56039,2.19728 -25.14284,0.17847 -50.29403,0.26439 -75.43326,-0.23791 l -0.91846,-0.0906 0,0 z"
+ id="path33011"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a9b6c7;fill-opacity:1"
+ d="m 597.40625,773.21875 c -2.08437,0.0218 -4.06879,0.82425 -5.78008,1.97408 -1.79052,1.15879 -3.40619,2.56842 -5.10341,3.85771 -2.07314,1.7046 -4.13064,3.52243 -5.54313,5.83208 -1.4246,2.63374 -2.01431,5.62903 -2.3241,8.58199 -0.33035,2.74853 -0.32823,5.52241 -0.43678,8.28539 -0.005,3.82444 -0.15351,7.64782 -0.13884,11.4717 0.0859,5.10181 0.52206,10.19115 0.63884,15.29078 -0.0171,1.6471 0.0169,3.30988 -0.14185,4.94514 -0.24522,0.76103 -0.56607,2.26102 0.57466,2.38613 1.06002,-0.019 1.23511,-1.39535 1.15554,-2.21222 0.22952,-1.68105 1.32505,-3.13394 2.6304,-4.16278 0.85251,-0.49875 1.97306,-0.491 2.84375,-0.0625 1.32761,1.06993 2.37232,2.46316 3.74962,3.48406 1.78793,1.52488 3.51798,3.13357 5.27748,4.67984 0.9866,0.7019 2.27026,0.71795 3.42985,0.66919 1.06796,-0.16832 2.13534,-0.35487 3.21952,-0.36775 0.89406,0.16109 2.32802,-0.70942 1.38603,-1.62159 -0.8042,-0.70337 -1.88743,-0.23431 -2.83365,-0.39781 -1.84267,-0.0672 -3.62098,-1.11476 -4.59764,-2.66893 -1.00336,-1.75997 -1.59857,-3.7098 -2.42704,-5.55243 -1.66116,-3.95349 -2.91032,-8.07322 -3.85039,-12.25354 -0.4782,-2.16238 -0.94931,-4.33361 -1.04039,-6.55414 -0.44284,-5.17654 -0.0164,-10.36675 0.21786,-15.5419 0.43161,-2.80874 0.93864,-5.71235 2.52365,-8.13079 1.40946,-2.34955 3.21165,-4.47033 5.33501,-6.20561 1.34968,-1.17749 2.79007,-2.24805 4.17259,-3.38235 0.65717,-0.78426 0.12822,-2.21425 -0.93003,-2.28177 -0.66037,-0.14562 -1.33846,-0.0725 -2.00747,-0.062 z"
+ id="path33013"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b6c5d8;fill-opacity:1"
+ d="m 595.0625,771.09375 c -3.49998,0.58518 -6.82593,1.96099 -9.87152,3.75664 -1.46593,0.9392 -2.89772,1.9504 -4.10149,3.21637 -2.26374,2.18699 -4.05772,4.84626 -5.3102,7.72931 -1.72442,4.45631 -3.18147,9.00923 -4.54622,13.58674 -1.17863,3.81878 -2.29249,7.66048 -3.58633,11.44147 -0.98068,2.31904 -2.25569,4.50522 -3.14674,6.86322 -0.0717,0.83217 -0.52076,1.71408 -0.15625,2.53125 0.34391,0.63556 0.61295,-0.72716 0.90409,-1.00196 0.70785,-1.17012 1.67865,-2.15857 2.50216,-3.24804 2.02564,-2.4413 4.09249,-4.85803 6.34375,-7.09375 0.89228,-0.67775 1.93115,-1.14621 3,-1.46875 0.9592,-0.27381 2.04572,-0.0942 2.7855,0.6034 0.79827,0.68845 1.05228,1.81659 0.92648,2.82928 -0.069,2.24614 -0.62186,4.43634 -0.94161,6.65146 -0.37717,1.50747 -0.59603,3.04826 -0.89537,4.57211 -0.0187,0.88489 0.803,1.89802 1.75,1.65625 1.2052,-0.41761 1.68611,-1.71186 2.01212,-2.83444 1.08092,-3.47552 1.16417,-7.147 1.31178,-10.75426 0.25256,-3.87574 0.43014,-7.76125 0.90064,-11.61815 0.52097,-3.65166 1.24649,-7.28074 2.27546,-10.8244 0.50779,-1.47275 1.28525,-2.82251 2.13241,-4.12255 1.04514,-1.54481 2.4259,-2.97532 4.21134,-3.62745 3.77193,-1.53211 7.85601,-2.03477 11.71875,-3.28125 0.85611,-0.41385 1.66942,-1.37746 1.34375,-2.375 -0.36579,-1.12201 -1.57323,-1.602 -2.61278,-1.89568 -2.30278,-0.66163 -4.68142,-1.03339 -7.06477,-1.2496 -0.62852,-0.0212 -1.25644,-0.11142 -1.88495,-0.0422 z"
+ id="path33015"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#c9cfd7"
+ d="m 553.31861,862.68392 c 2.03973,-6.75845 2.62673,-14.59993 8.28246,-19.57905 6.86653,-6.55449 16.49277,-8.81781 23.9521,-14.46458 3.64474,-4.45932 -2.81051,-9.08083 -3.56202,-13.60484 -4.14323,-11.16786 -4.98166,-24.68811 1.49566,-35.15189 5.68463,-8.73332 19.85553,-10.9347 27.19403,-3.0481 8.41394,8.94249 8.77611,22.65299 5.27347,33.81426 -1.49442,5.581 -4.99844,10.28747 -7.0924,15.6006 2.76177,3.52771 7.14927,5.48724 10.93492,7.7964 6.119,3.22073 13.58338,5.02515 17.48348,11.27477 2.96987,4.63969 4.42192,10.08731 5.80917,15.35231 -1.50165,4.96315 -8.81816,2.91096 -12.85889,3.69351 -22.80335,0.12179 -45.61168,0.15756 -68.41429,-0.11428 -2.31171,-0.50334 -7.53241,0.74503 -8.49769,-1.56911 z"
+ id="path33017"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b6c5d8"
+ d="m 554.235,862.68169 c 2.05635,-7.41778 3.349,-16.08468 10.1767,-20.8097 6.61828,-5.16685 15.1606,-7.20405 21.59504,-12.59203 3.54453,-4.88336 -2.47561,-9.88767 -3.35341,-14.75239 -3.47406,-10.8555 -4.1294,-23.33186 0.8597,-33.82801 1.72632,-3.59701 5.23944,-6.62494 9.42916,-6.35645 4.19219,-1.15696 8.52724,-4.11292 12.93873,-1.76941 7.46152,3.81566 10.06429,12.7832 10.99601,20.5469 1.16372,10.51462 -1.47428,21.3696 -7.47449,30.09882 -3.05921,4.5826 3.82783,7.04871 6.59279,9.43949 4.45298,3.31782 9.92768,4.58376 14.70417,7.25683 7.68513,4.50047 10.74405,13.62794 11.74428,22.00374 -2.9167,3.42132 -8.87906,1.6959 -13.0442,2.37973 -23.01389,0.17734 -46.03587,0.29901 -69.04708,-0.12448 -1.47707,-0.46732 -5.78821,0.53078 -6.1174,-1.49304 z"
+ id="path33019"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#89929e"
+ d="m 605.41576,831.51882 c -6.51092,-0.17414 1.89613,-8.32488 2.10973,-2.13677 0.25514,1.05824 -0.90992,3.45218 -2.10973,2.13677 z m -9.19222,-2.58713 c -5.03005,-3.26087 3.80688,-5.55701 3.71501,-0.9855 -0.33166,1.64802 -2.69765,2.53253 -3.71501,0.9855 z m 8.27957,-8.19213 c 5.41236,-4.28675 4.18648,-12.49507 9.14189,-17.11237 0.29556,5.93898 -0.81537,13.05465 -6.06482,16.64412 -0.94557,0.45813 -2.03685,0.66185 -3.07707,0.46825 z"
+ id="path33021"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b4c3d5"
+ d="m 555.48691,863.63394 c -0.70857,-2.12774 2.22704,-4.3804 1.34135,-0.66819 0.10193,0.98814 -0.65203,2.27111 -1.34135,0.66819 z m 37.375,-0.1401 c 1.38595,-2.43696 5.53173,0.89636 1.42887,0.91541 -0.49532,-0.004 -1.42499,-0.23332 -1.42887,-0.91541 z m 7.69692,-0.45528 c -1.76626,-3.1746 2.23873,-3.26451 1.11193,0.0649 -0.32817,2.3234 -0.6929,0.92535 -1.11193,-0.0649 z m 26.80308,-0.60687 c -0.14118,-3.37799 -6.35613,-0.78227 -3.14715,-4.41577 3.46144,-3.84128 -0.91256,-6.50536 0.32867,-10.70489 -1.35343,-4.87174 -4.44598,3.58742 -6.3126,-0.95498 -2.28645,-0.76047 -6.14616,-2.25962 -7.84378,-1.85811 1.7928,4.16671 -5.07612,3.88297 -4.6571,8.23859 -2.87822,4.77401 -4.21355,-5.23107 0.41677,-4.75641 3.01773,-1.66128 2.63528,-6.07232 -1.10546,-3.24125 -4.1035,2.38594 -8.10134,0.13188 -10.98005,-2.65973 -1.57462,1.027 -7.19053,5.94236 -6.22979,1.16697 3.10847,-2.66186 -0.58671,-8.92294 -4.2926,-8.18935 -5.10673,-0.52325 2.44631,-4.85414 3.57641,-6.66771 1.85925,-4.36472 -3.17296,-7.83742 -3.70804,-12.04941 -1.26507,-5.08051 -2.83005,-10.57026 -1.53095,-15.77259 2.64643,-1.80932 -6.03903,-6.34583 -0.12744,-6.57829 2.97426,2.18718 10.86096,-0.73904 8.66403,-4.74784 1.43269,-4.1299 6.02584,3.62463 2.18105,5.45085 -2.59742,0.10573 -7.4936,3.34663 -3.62767,5.54395 1.64345,-0.82217 6.49317,-5.71297 6.67294,-2.49044 -2.78532,3.31115 -8.67094,4.59991 -5.95043,10.09851 -0.14706,1.93717 2.22289,5.8417 2.38345,1.69036 -0.29174,-2.60942 -0.27466,-9.86038 3.64824,-6.05741 -1.55047,2.76367 1.65839,4.017 1.46611,0.70751 1.23126,-3.60319 4.16329,-6.90216 1.96148,-10.6292 1.08569,-3.44275 2.47527,-8.92278 -1.1456,-10.9983 -0.27587,-2.38485 4.39556,-5.73004 -0.72382,-6.12506 -5.30946,-0.90828 1.67648,-3.69288 4.04177,-2.6646 4.32549,0.22232 9.16923,1.37034 11.4584,5.44637 6.2849,9.7073 5.68438,22.38166 2.17074,32.98508 -0.92944,4.64278 -5.22217,8.12432 -5.20477,12.92114 1.20847,6.56432 8.01624,9.99242 13.78201,11.95844 5.17953,1.02044 10.13826,3.62424 13.03186,8.19359 3.20397,4.79647 5.21645,10.49318 5.73671,16.22196 -2.35585,3.8145 -7.90047,3.87439 -11.89521,3.17059 -1.22451,-0.32543 -2.60284,-0.92802 -3.03818,-2.23257 z m -6.09078,-20.1003 c -1.41893,-3.47946 -9.20211,-2.51084 -5.13746,1.1248 1.04916,0.55257 8.14925,1.55777 5.13746,-1.1248 z m -35.40922,-40.45872 c -2.16266,-4.30335 -2.56624,5.59099 0,0 z m -10.77214,57.4647 c 0.9739,-2.58634 6.2446,-4.23216 3.35785,-0.21672 -0.93252,2.57294 -7.05087,4.43368 -3.35785,0.21672 z m 15.26777,1.08726 c -0.46155,-3.123 5.92769,-1.79651 2.3333,0.70108 -0.7844,0.59532 -1.93502,0.11193 -2.3333,-0.70108 z m 17.19822,0.36758 c -1.40203,-3.70988 5.69463,-2.0316 1.50018,0.56139 l -0.7246,-0.0276 -0.77558,-0.53379 z m -46.69385,-2.34909 c 0.2511,-3.17228 6.70537,-7.64119 4.5997,-1.5241 -0.30291,1.59959 -3.88314,3.82735 -4.5997,1.5241 z m 56,-0.51143 c 2.51293,-5.65641 2.40656,5.5417 0,0 z m -47.8,-2.7 c -4.0511,-2.74409 2.86178,-11.29262 3.00074,-4.49156 -2.27342,1.19476 -2.94972,4.14273 0.2778,3.98531 0.44919,2.1979 -2.50337,1.86609 -3.27854,0.50625 z m 17.04379,-0.05 c 1.31653,-2.24916 8.58375,-2.15975 3.4328,0.33832 -0.75747,0.55533 -3.95209,1.81288 -3.4328,-0.33832 z m 28.41342,-2.29909 c 1.98887,-3.91758 6.85421,2.62004 1.31167,1.52967 -0.84991,0.0565 -1.92843,-0.52139 -1.31167,-1.52967 z m -56.65721,-0.39189 c 1.68789,-4.90927 2.99691,2.75221 0.0789,0.36537 l -0.0789,-0.36537 z m 16.64757,-4.24293 c -1.89148,-2.61234 0.84049,-5.75092 1.68838,-1.54504 0.84852,1.72586 -0.70234,5.1602 -1.68838,1.54504 z m 4.5919,-1.82793 c 1.60255,-1.85967 3.66348,-1.43607 5.26053,-2.98816 3.96262,1.46685 -2.62956,3.48646 -3.72862,4.9303 -1.99518,0.50428 -2.92151,-0.26884 -1.53191,-1.94214 z m -9.23947,-3.57149 c 0.59993,-5.93389 4.17587,2.63959 0.61172,2.37949 -0.52277,-0.66971 -0.58181,-1.56896 -0.61172,-2.37949 z m -5.42997,0.69664 c -0.36608,-3.22691 5.22742,-3.96176 2.51439,-0.12486 -0.51631,1.26584 -1.79625,1.28548 -2.51439,0.12486 z m 16.42997,-54.05429 c -0.30675,-2.8402 2.78573,-3.62344 2.3713,-0.3321 1.77753,2.89278 -2.53827,3.01913 -2.3713,0.3321 z m 7,-4.85902 c -0.4203,-5.12456 8.43626,-1.94337 4.35831,0.72111 -1.36922,0.0212 -3.34407,0.40232 -4.35831,-0.72111 z m -1,-5.82423 c 0.17102,-4.09108 9.38834,-5.68544 7.35975,-0.21811 -2.21937,0.24293 -4.55297,-2.11058 -6.7961,0.31894 l -0.41224,0.0536 -0.15141,-0.1544 0,0 z"
+ id="path33023"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b3bcc9"
+ d="m 628.86191,861.63169 c -0.6243,-3.55935 -2.69727,-6.3569 -0.72148,-9.98987 0.12528,-5.45244 -2.79115,-10.65923 -7.09669,-13.89447 -1.2068,-2.85452 5.32777,0.70573 6.92377,1.01004 7.6726,3.41307 13.86355,11.22205 14.0998,19.78329 0.20205,5.97005 -6.54891,6.42322 -10.9269,5.80556 -1.73227,0.15131 -2.58324,-1.0909 -2.2785,-2.71455 z m -32.0895,-20.80784 c -4.43403,-1.14416 -6.64242,-4.93813 -9.61832,-8.11599 -5.8032,-0.96373 3.57616,-5.23189 -0.12424,-8.64226 -1.28875,-3.82859 -5.19745,-7.73842 -3.91246,-11.88366 3.57632,0.77406 7.98145,4.56157 11.43042,0.4736 4.54424,-4.37751 7.17602,-10.57138 8.26123,-16.71192 0.40261,-6.44762 0.58793,-13.17942 -1.38634,-19.39442 -3.68525,-5.04182 5.4099,-3.08901 7.46282,-1.22179 7.18838,5.3533 8.70986,15.22614 8.49736,23.6257 -0.24925,8.4967 -3.14336,16.73146 -7.72751,23.84074 -2.88991,4.70712 3.78023,7.4172 6.17011,10.48571 2.37199,1.75978 2.7988,3.59039 -0.47087,3.94333 -4.93227,3.54041 -11.38158,5.84263 -17.44005,4.36937 l -0.65495,-0.33776 -0.48717,-0.43065 -3e-5,0 z"
+ id="path33025"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a9b6c7"
+ d="m 629.67696,857.68169 c 0.69544,-5.83229 -1.1934,-11.42869 -3.06233,-16.84619 1.70492,-4.06189 7.7076,2.15936 9.08169,4.7283 3.47472,5.23289 5.9898,11.23822 6.74935,17.4968 -2.74907,2.48603 -8.71268,1.53936 -12.25687,0.52734 -1.14099,-1.73296 -0.47804,-3.96643 -0.51184,-5.90625 z m -35.07897,-19.01192 c -4.35373,-1.9881 -8.73775,-7.05736 -6.26711,-11.96771 0.37899,-3.87987 -6.19721,-8.74866 -2.61552,-11.649 3.81737,-0.0455 7.92323,-0.57969 10.70088,-3.51648 7.53861,-7.6238 9.37318,-19.29758 8.11009,-29.5788 -0.29347,-2.73658 -3.48318,-10.05061 2.13834,-6.90166 5.59048,2.86145 9.3559,8.5583 9.95363,14.79053 1.45238,11.54814 -0.99935,23.83469 -7.78522,33.40876 -3.2246,5.24149 5.70344,6.58552 5.5499,11.37054 -1.14464,5.117 -7.75884,5.97682 -12.15638,5.8855 -2.62827,-0.12443 -5.23793,-0.7377 -7.62861,-1.84168 z"
+ id="path33027"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a5aeba"
+ d="m 631.86191,856.01273 c 0.17627,-4.74944 -0.35601,-9.57132 -2.75943,-13.74195 1.4975,-4.03011 6.82738,2.83782 8.07858,5.41566 2.90201,4.84584 4.29026,10.45516 5.38214,15.90906 -3.35146,1.42092 -11.5911,2.28284 -10.66459,-3.67955 -0.043,-1.30058 -0.0346,-2.60214 -0.0367,-3.90322 z m -32,-17.72887 c -5.84776,-1.14965 -11.42672,-6.22518 -11.15451,-12.52353 -1.5003,-2.03434 -5.71528,-8.53816 -0.0642,-7.68024 6.73246,0.44741 11.31314,-5.91275 13.97222,-11.28778 4.52892,-9.55307 5.82631,-20.85993 2.53341,-31.00041 2.18117,-2.95131 6.79462,3.62386 8.51281,5.81939 4.3355,6.99236 3.55623,15.74508 2.3456,23.52395 -1.04534,6.26492 -3.43738,12.23617 -6.89396,17.55368 -4.11636,5.37273 4.86346,7.17375 5.40003,11.35344 -3.34598,2.78013 -7.84307,4.85802 -12.30072,4.56282 -0.78868,-0.0649 -1.57191,-0.18321 -2.35071,-0.32132 z"
+ id="path33029"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#99a5b4"
+ d="m 634.44264,862.18169 c -1.18835,-6.44151 -0.7153,-13.29528 -3.22346,-19.40763 5.2155,1.71368 7.21913,7.68437 8.61488,12.50189 0.46756,3.74753 5.9571,10.77397 -1.54689,9.15113 -1.59711,0.0659 -3.7451,-0.21664 -3.84453,-2.24539 z M 597.36191,836.4722 c -5.21371,-2.6559 -8.38811,-8.12562 -9.45075,-13.73768 -3.02381,-5.26702 5.32539,-2.26568 7.46203,-5.22634 8.49017,-5.8936 12.46598,-16.48626 13.51852,-26.43011 1.08258,-4.83991 -1.47198,-10.13976 -0.95483,-14.48335 7.03021,4.3261 9.10897,13.3759 8.64448,21.14239 -0.4724,9.88319 -4.21327,19.33825 -9.42908,27.6489 0.19598,3.60522 8.59405,7.29794 2.21847,10.91971 -3.64557,2.02664 -8.25272,1.70657 -12.00884,0.16648 z"
+ id="path33031"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#99a5b4;fill-opacity:1"
+ d="m 597.625,771.4375 c -3.21749,0.80995 -6.35889,1.89093 -9.49855,2.95674 -0.97154,0.37142 -1.85289,0.9729 -2.5952,1.69951 -0.85286,0.75372 -1.5183,1.68678 -2.24295,2.5579 -1.43359,1.82026 -2.70936,3.75542 -4.06955,5.6296 -0.88196,1.49498 -1.70097,3.03188 -2.28734,4.66945 -0.773,1.87386 -1.3796,3.81126 -2.03693,5.7276 -1.48856,4.58577 -2.86664,9.20755 -4.15527,13.85304 -0.38084,1.5389 -0.8175,3.06718 -1.11421,4.62491 -0.0983,1.32482 0.42765,2.57219 0.8125,3.8125 0.65443,1.89642 1.24797,3.81318 1.875,5.71875 0.4387,1.03708 1.53192,1.69185 2.625,1.8125 1.24203,-0.0193 2.52075,0.0375 3.71875,-0.34375 1.02063,-0.39402 1.60505,-1.36074 1.86562,-2.3781 0.73273,-2.56005 1.01952,-5.21766 1.50049,-7.83083 0.4005,-2.37627 0.77571,-4.75672 1.16514,-7.13482 0.60941,-2.21748 1.28797,-4.41783 2.03973,-6.59038 0.78279,-2.02938 1.71569,-3.99664 2.55402,-6.00337 0.89003,-1.89943 1.86665,-3.76562 3.01491,-5.52201 1.40777,-2.01133 3.33858,-3.57662 5.32812,-4.9803 1.23992,-0.75485 2.42213,-1.59957 3.68923,-2.3108 1.42795,-0.88217 2.95575,-1.58776 4.46774,-2.31189 0.99896,-0.30772 1.95269,-0.81445 2.99484,-0.95052 0.94868,-0.0968 1.93298,0.0577 2.84891,-0.26823 0.92455,-0.56794 0.73006,-1.98773 -0.15625,-2.5 -0.80724,-0.63096 -1.7434,-1.0782 -2.63346,-1.5793 -1.68129,-0.84475 -3.47432,-1.44213 -5.30345,-1.87163 -1.35714,-0.28247 -2.73917,-0.47084 -4.12559,-0.51782 l -0.18169,0.0202 -0.0996,0.0111 z"
+ id="path33033"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#929ca9"
+ d="m 637.65036,862.68169 c -2.12222,-4.15541 -2.62958,-9.16791 -2.11037,-13.77435 2.73632,-0.59646 3.48937,6.19672 4.61588,8.71136 0.50969,2.43464 4.44929,8.54497 -0.88647,6.29893 l -0.88201,-0.55645 -0.73703,-0.67949 0,0 z m -43.75608,-31 c -2.94588,-2.28349 -7.18933,-8.93795 -1.36293,-10.29495 8.07323,-2.18725 12.69247,-10.20871 15.48792,-17.52164 2.75397,-7.08868 3.00962,-14.78608 2.34575,-22.27209 0.57168,-3.73359 4.26846,3.25102 4.56293,4.83879 2.8335,10.0499 1.08542,21.07617 -3.26319,30.43572 -1.47318,3.78479 -7.24627,8.22354 -2.8605,12.027 4.90812,2.55146 1.57086,6.14222 -2.55813,6.40295 -4.41484,1.02741 -9.15214,-0.44638 -12.35185,-3.61578 z"
+ id="path33035"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#8a95a3;fill-opacity:1"
+ d="m 604.07679,778.57601 c -2.07993,0.18622 -4.16688,0.39931 -6.19063,0.93582 -1.96265,0.5268 -3.86859,1.26151 -5.67823,2.18771 -1.2785,0.72607 -2.59489,1.40817 -3.73224,2.35094 -1.87066,1.41739 -3.50157,3.11504 -5.0864,4.83803 -0.8029,1.1366 -1.66147,2.24315 -2.35815,3.44834 -1.04606,1.93489 -1.92687,3.96033 -2.55709,6.06935 -1.02826,3.17356 -1.89607,6.39655 -2.77337,9.61433 -0.79085,2.99079 -1.58802,5.98101 -2.3162,8.9875 -0.72532,3.0427 -1.21047,6.14099 -1.45053,9.25973 -0.0808,1.12348 -0.27816,2.24516 -0.13834,3.37206 0.0627,1.15775 0.14707,2.31618 0.28118,3.46744 0.0295,0.43529 0.64114,0.88693 0.8125,0.28125 0.43782,-0.93637 0.98489,-1.88776 2.03125,-2.21875 0.77048,-0.37522 1.64462,-0.58501 2.49468,-0.42232 0.99503,0.20928 2.02353,0.51766 2.87283,1.09107 1.15247,0.76152 2.17094,1.75918 2.82587,2.98452 0.67432,0.79355 0.86715,1.92774 1.49412,2.69048 0.55618,0.0517 0.46735,-0.84631 0.60893,-1.24468 0.20794,-1.87479 -0.22577,-3.73167 -0.54643,-5.56782 -0.32562,-1.64053 -0.80423,-3.25041 -0.99895,-4.91491 -0.27135,-1.81202 -0.60341,-3.6237 -0.59359,-5.46277 -0.0577,-1.99807 -0.16648,-3.99431 -0.14423,-5.99405 -0.0352,-1.23626 -10e-4,-2.47036 0.11341,-3.70195 0.24423,-2.90098 0.56334,-5.79741 0.99836,-8.67632 0.6275,-2.95685 1.33887,-5.92442 2.64286,-8.66725 0.61629,-1.36529 1.23898,-2.73456 1.95854,-4.04735 0.72079,-1.14986 1.59611,-2.22584 2.73697,-2.98238 1.71322,-1.17297 3.55581,-2.14034 5.44826,-2.98937 1.80419,-0.81317 3.6119,-1.62339 5.33837,-2.5949 0.82255,-0.40084 1.88367,-0.6713 2.3005,-1.56976 0.12731,-0.30615 0.0397,-0.72575 -0.39425,-0.52399 z"
+ id="path33037"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#8a95a3"
+ d="m 638.56908,861.68169 c -1.01336,-1.80767 1.28793,-7.15927 1.24215,-2.50022 0.42403,2.21568 -0.44461,7.79222 -1.24215,2.50022 l 0,0 z m -43.0654,-31 c -2.9868,-1.67058 -7.00655,-6.75545 -1.26272,-7.50408 4.83247,-2.49559 9.8284,-5.69893 12.52164,-10.55778 1.11545,-4.62828 4.11893,-8.61975 4.84147,-13.41654 0.98527,-4.74585 2.52559,-9.7007 1.45289,-14.54866 3.4059,4.0618 2.72684,9.97803 2.40567,14.94875 -0.99576,8.63373 -3.58356,17.28503 -8.78479,24.35117 -2.28719,3.74841 7.19829,8.26089 -0.21265,9.84972 -3.91814,1.46539 -7.97066,-0.66912 -10.96151,-3.12258 z"
+ id="path33039"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="fill:#dce2e8"
+ d="m 930.58903,944.17704 c 0.002,-1.27891 0.38742,-2.56313 0.91225,-3.72458 1.04246,-2.13363 3.42948,-2.94956 5.38886,-4.0012 1.12915,-0.33191 2.18833,-1.33369 1.14411,-2.41735 -1.54271,-2.95014 -2.11639,-6.71179 -0.50818,-9.7557 0.88165,-1.77833 2.98874,-2.89762 4.94381,-2.33322 1.75777,0.34808 3.17106,1.72703 3.70073,3.42104 1.08904,3.18615 0.29318,6.78268 -1.57691,9.5145 -0.32077,0.95344 1.42229,1.26439 2.03608,1.81786 1.30365,0.72466 2.79982,1.17185 3.82809,2.31537 1.23575,1.28065 2.36238,3.01211 2.09015,4.86892 -0.64314,0.70795 -2.02851,0.3424 -2.96759,0.53283 -5.77844,0.21695 -11.56977,0.27458 -17.34745,0.009 -0.54437,-0.0632 -1.14143,-0.0178 -1.64395,-0.24773 z"
+ id="path33041"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#d4dbe2"
+ d="m 930.67291,944.42142 c -0.0724,-2.5311 1.45644,-4.85854 3.53722,-6.19868 1.33158,-0.98375 2.99369,-1.40931 4.29607,-2.42744 0.68746,-0.96813 -0.57233,-1.94187 -0.80703,-2.88555 -1.24802,-2.88219 -1.4267,-6.53314 0.5443,-9.14386 1.4219,-1.98029 4.54798,-2.22896 6.32223,-0.60477 1.91111,1.89773 2.17018,4.88074 1.70769,7.40746 -0.2599,1.57312 -1.02764,2.98482 -1.88179,4.30465 -0.15425,1.14021 1.44673,1.51879 2.20895,2.10313 1.368,0.75961 2.9979,1.13594 4.01037,2.42462 1.09812,1.2391 1.86679,2.88806 1.75249,4.56961 -0.82716,0.75673 -2.21297,0.37983 -3.27132,0.53008 -6.06549,0.043 -12.13299,0.0638 -18.19761,-0.0574 l -0.22157,-0.0219 0,0 z"
+ id="path33043"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a9b6c7;fill-opacity:1"
+ d="m 941.41884,922.52586 c -0.50284,0.005 -0.98156,0.19884 -1.39439,0.47623 -0.43195,0.27955 -0.82172,0.61961 -1.23115,0.93064 -0.50013,0.41122 -0.99648,0.84975 -1.33724,1.40694 -0.34367,0.63536 -0.48593,1.35795 -0.56066,2.07032 -0.0797,0.66306 -0.0792,1.33224 -0.10537,1.99878 -10e-4,0.92261 -0.037,1.84497 -0.0335,2.76745 0.0207,1.23076 0.12595,2.45852 0.15412,3.68876 -0.004,0.39735 0.004,0.79848 -0.0342,1.19297 -0.0592,0.18359 -0.13656,0.54545 0.13863,0.57563 0.25572,-0.005 0.29796,-0.33661 0.27876,-0.53367 0.0554,-0.40554 0.31966,-0.75604 0.63456,-1.00424 0.20566,-0.12032 0.47599,-0.11845 0.68603,-0.0151 0.32028,0.25811 0.5723,0.59421 0.90457,0.84049 0.43132,0.36787 0.84868,0.75595 1.27314,1.12897 0.23801,0.16933 0.54768,0.1732 0.82742,0.16144 0.25764,-0.0406 0.51513,-0.0856 0.77668,-0.0887 0.21569,0.0389 0.56162,-0.17114 0.33437,-0.39119 -0.19401,-0.16968 -0.45533,-0.0565 -0.68359,-0.096 -0.44453,-0.0162 -0.87353,-0.26893 -1.10914,-0.64385 -0.24206,-0.42458 -0.38564,-0.89496 -0.58551,-1.33948 -0.40074,-0.95374 -0.70208,-1.94759 -0.92887,-2.95606 -0.11536,-0.52165 -0.22901,-1.04544 -0.25098,-1.58112 -0.10683,-1.2488 -0.004,-2.50089 0.0525,-3.74935 0.10413,-0.67758 0.22644,-1.37805 0.60881,-1.96148 0.34002,-0.56681 0.77478,-1.07843 1.28703,-1.49705 0.32559,-0.28406 0.67308,-0.54232 1.0066,-0.81596 0.15853,-0.1892 0.0309,-0.53417 -0.22437,-0.55046 -0.1593,-0.0351 -0.32289,-0.0175 -0.48428,-0.0149 z"
+ id="path33045"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b6c5d8;fill-opacity:1"
+ d="m 940.85343,922.01322 c -0.84434,0.14117 -1.64669,0.47307 -2.38141,0.90626 -0.35365,0.22657 -0.69905,0.47052 -0.98945,0.77592 -0.54611,0.52759 -0.97889,1.16912 -1.28104,1.86463 -0.416,1.07504 -0.7675,2.17339 -1.09674,3.27768 -0.28433,0.92124 -0.55304,1.84802 -0.86517,2.76015 -0.23658,0.55945 -0.54416,1.08684 -0.75912,1.65569 -0.0173,0.20075 -0.12563,0.41351 -0.0377,0.61064 0.083,0.15333 0.14786,-0.17542 0.2181,-0.24171 0.17076,-0.28228 0.40496,-0.52074 0.60362,-0.78356 0.48867,-0.58894 0.98728,-1.17196 1.53038,-1.71131 0.21525,-0.1635 0.46587,-0.27651 0.72372,-0.35432 0.2314,-0.0661 0.49351,-0.0227 0.67198,0.14557 0.19257,0.16608 0.25385,0.43823 0.2235,0.68253 -0.0166,0.54187 -0.15002,1.07023 -0.22715,1.60461 -0.091,0.36366 -0.14379,0.73537 -0.216,1.10298 -0.005,0.21347 0.19371,0.45788 0.42217,0.39956 0.29074,-0.10075 0.40676,-0.41297 0.48541,-0.68379 0.26076,-0.83844 0.28084,-1.72415 0.31645,-2.59437 0.0609,-0.93498 0.10377,-1.87233 0.21727,-2.80277 0.12568,-0.88093 0.30071,-1.75642 0.54894,-2.61129 0.1225,-0.35529 0.31005,-0.68091 0.51442,-0.99453 0.25213,-0.37267 0.58523,-0.71777 1.01595,-0.87509 0.90994,-0.36961 1.89519,-0.49087 2.82704,-0.79157 0.20653,-0.0998 0.40274,-0.3323 0.32417,-0.57295 -0.0882,-0.27068 -0.37953,-0.38647 -0.63031,-0.45732 -0.55552,-0.15961 -1.12935,-0.24929 -1.70431,-0.30145 -0.15163,-0.005 -0.30311,-0.0269 -0.45473,-0.0102 z"
+ id="path33047"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#c9cfd7"
+ d="m 930.78309,944.10853 c 0.49207,-1.6304 0.63367,-3.5221 1.99807,-4.72326 1.65649,-1.58122 3.97873,-2.12722 5.77823,-3.48946 0.87926,-1.07577 -0.67801,-2.19067 -0.85931,-3.28204 -0.99951,-2.69415 -1.20178,-5.95579 0.36082,-8.48008 1.37137,-2.10684 4.78997,-2.6379 6.56032,-0.73533 2.02979,2.1573 2.11716,5.46483 1.27218,8.15739 -0.36052,1.34637 -1.20583,2.48176 -1.71098,3.76351 0.66625,0.85102 1.72469,1.32374 2.63795,1.88081 1.47615,0.77697 3.27687,1.21227 4.21773,2.71994 0.71646,1.11928 1.06675,2.43347 1.40141,3.7036 -0.36226,1.19731 -2.1273,0.70226 -3.10209,0.89103 -5.5011,0.0294 -11.00341,0.038 -16.50434,-0.0276 -0.55768,-0.12141 -1.81713,0.17975 -2.04999,-0.37853 z"
+ id="path33049"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b6c5d8"
+ d="m 931.00416,944.108 c 0.49608,-1.78948 0.80792,-3.88029 2.45504,-5.02016 1.5966,-1.24645 3.65736,-1.73791 5.20961,-3.03771 0.85509,-1.17807 -0.59722,-2.38531 -0.80898,-3.55888 -0.83809,-2.6188 -0.99618,-5.62861 0.20739,-8.16071 0.41646,-0.86775 1.26397,-1.59821 2.27471,-1.53344 1.01132,-0.2791 2.05712,-0.9922 3.12135,-0.42685 1.80002,0.92049 2.42792,3.08383 2.65269,4.95675 0.28074,2.53656 -0.35566,5.15523 -1.80316,7.26108 -0.738,1.10551 0.92343,1.70044 1.59046,2.27719 1.07424,0.8004 2.39496,1.10579 3.54725,1.75065 1.85397,1.08569 2.5919,3.28762 2.8332,5.30821 -0.70363,0.82536 -2.14199,0.40912 -3.1468,0.57408 -5.55189,0.0428 -11.10574,0.0721 -16.65699,-0.03 -0.35633,-0.11273 -1.39636,0.12806 -1.47577,-0.36017 z"
+ id="path33051"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#89929e"
+ d="m 943.35106,936.59023 c -1.5707,-0.042 0.45743,-2.0083 0.50896,-0.51547 0.0616,0.25529 -0.21951,0.8328 -0.50896,0.51547 z m -2.21754,-0.62412 c -1.21345,-0.78665 0.91838,-1.34058 0.89622,-0.23774 -0.08,0.39757 -0.65079,0.61095 -0.89622,0.23774 z m 1.99737,-1.97628 c 1.30569,-1.03414 1.00996,-3.01432 2.2054,-4.1282 0.0713,1.43272 -0.1967,3.14931 -1.46308,4.01524 -0.22811,0.11052 -0.49137,0.15967 -0.74232,0.11296 z"
+ id="path33053"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b4c3d5"
+ d="m 931.30617,944.33771 c -0.17093,-0.51329 0.53726,-1.05673 0.32359,-0.16117 0.0246,0.23837 -0.1573,0.54788 -0.32359,0.16117 z m 9.01639,-0.0338 c 0.33435,-0.58788 1.33448,0.21625 0.3447,0.22086 -0.11949,0 -0.34377,-0.0563 -0.3447,-0.22086 z m 1.85681,-0.10981 c -0.42609,-0.76584 0.54008,-0.78753 0.26825,0.0157 -0.0792,0.5605 -0.16716,0.22322 -0.26825,-0.0157 z m 6.46601,-0.14641 c -0.0341,-0.81491 -1.53336,-0.18872 -0.75922,-1.06527 0.83504,-0.92668 -0.22015,-1.56935 0.0793,-2.58246 -0.3265,-1.17526 -1.07255,0.86545 -1.52285,-0.23038 -0.55159,-0.18345 -1.48271,-0.54511 -1.89225,-0.44825 0.4325,1.00518 -1.22457,0.93673 -1.12348,1.98748 -0.69435,1.15169 -1.01648,-1.26194 0.10054,-1.14743 0.728,-0.40077 0.63574,-1.4649 -0.26668,-0.78193 -0.98993,0.57559 -1.95438,0.0318 -2.64884,-0.64163 -0.37986,0.24775 -1.73465,1.43354 -1.50288,0.28152 0.74989,-0.64215 -0.14154,-2.15258 -1.03555,-1.97561 -1.23196,-0.12623 0.59015,-1.17102 0.86277,-1.60853 0.44853,-1.05295 -0.76544,-1.8907 -0.89453,-2.90681 -0.30519,-1.22563 -0.68272,-2.54998 -0.36933,-3.805 0.63843,-0.43648 -1.45686,-1.53087 -0.0307,-1.58695 0.71751,0.52764 2.62011,-0.17829 2.09012,-1.14537 0.34562,-0.99631 1.45368,0.87441 0.52616,1.31497 -0.62661,0.0255 -1.80777,0.80734 -0.87514,1.33742 0.39646,-0.19834 1.56642,-1.3782 1.60978,-0.60079 -0.67193,0.79878 -2.09178,1.10968 -1.43548,2.43617 -0.0355,0.46733 0.53625,1.40926 0.57498,0.40779 -0.0704,-0.6295 -0.0663,-2.37873 0.88011,-1.4613 -0.37404,0.66671 0.40007,0.96907 0.35368,0.17068 0.29703,-0.86924 1.00436,-1.66508 0.47319,-2.5642 0.26192,-0.83053 0.59714,-2.15254 -0.27636,-2.65324 -0.0666,-0.57532 1.06039,-1.38232 -0.17462,-1.47762 -1.28086,-0.21911 0.40444,-0.89087 0.97504,-0.64281 1.04349,0.0536 2.212,0.33058 2.76424,1.31389 1.51618,2.3418 1.37131,5.39938 0.52367,7.95736 -0.22422,1.12003 -1.2598,1.95992 -1.2556,3.11711 0.29153,1.58358 1.93384,2.41058 3.32478,2.88487 1.24952,0.24617 2.44577,0.87431 3.14382,1.97663 0.77293,1.15711 1.25843,2.53139 1.38393,3.91341 -0.56832,0.92021 -1.90591,0.93466 -2.86961,0.76488 -0.2954,-0.0785 -0.62791,-0.2239 -0.73293,-0.5386 z m -1.46935,-4.84902 c -0.3423,-0.83939 -2.21993,-0.60572 -1.23937,0.27135 0.2531,0.1333 1.96594,0.3758 1.23937,-0.27135 z m -8.54216,-9.76031 c -0.52172,-1.03814 -0.61908,1.34878 0,0 z m -2.59868,13.86286 c 0.23494,-0.62395 1.50645,-1.02098 0.81005,-0.0523 -0.22496,0.62069 -1.70096,1.06957 -0.81005,0.0523 z m 3.68321,0.26228 c -0.11134,-0.7534 1.43,-0.43339 0.56289,0.16913 -0.18923,0.14361 -0.46681,0.027 -0.56289,-0.16913 z m 4.14892,0.0887 c -0.33823,-0.89498 1.37378,-0.49011 0.3619,0.13543 l -0.1748,-0.007 -0.1871,-0.12877 z m -11.26448,-0.5667 c 0.0606,-0.76529 1.61761,-1.84337 1.10964,-0.36768 -0.0731,0.38589 -0.93677,0.92333 -1.10964,0.36768 z m 13.50951,-0.12337 c 0.60622,-1.36456 0.58056,1.33688 0,0 z m -11.53133,-0.65135 c -0.97729,-0.66199 0.69038,-2.72425 0.7239,-1.08356 -0.54844,0.28823 -0.71159,0.99941 0.067,0.96142 0.10836,0.53022 -0.60392,0.45018 -0.79092,0.12214 z m 4.11166,-0.0121 c 0.3176,-0.5426 2.07076,-0.52103 0.82814,0.0816 -0.18274,0.13396 -0.95341,0.43734 -0.82814,-0.0816 z m 6.85449,-0.55463 c 0.4798,-0.94509 1.65352,0.63205 0.31643,0.36902 -0.20504,0.0138 -0.46522,-0.12578 -0.31643,-0.36902 z m -13.66805,-0.0946 c 0.40719,-1.18431 0.72298,0.66395 0.019,0.0882 l -0.019,-0.0882 z m 4.01608,-1.02356 c -0.4563,-0.63021 0.20276,-1.38736 0.4073,-0.37273 0.2047,0.41635 -0.16943,1.24484 -0.4073,0.37273 z m 1.10775,-0.44098 c 0.3866,-0.44862 0.88379,-0.34643 1.26906,-0.72086 0.95595,0.35386 -0.63436,0.84108 -0.8995,1.18939 -0.48132,0.12165 -0.70479,-0.0649 -0.36956,-0.46853 z m -2.22894,-0.86159 c 0.14473,-1.43149 1.00739,0.63678 0.14758,0.57404 -0.12612,-0.16157 -0.14036,-0.3785 -0.14758,-0.57404 z m -1.30993,0.16806 c -0.0883,-0.77846 1.26107,-0.95574 0.60658,-0.0301 -0.12456,0.30537 -0.43333,0.31011 -0.60658,0.0301 z m 3.96359,-13.04011 c -0.074,-0.68518 0.67203,-0.87413 0.57205,-0.0801 0.42881,0.69786 -0.61233,0.72834 -0.57205,0.0801 z m 1.68868,-1.1722 c -0.10139,-1.23625 2.03518,-0.46882 1.05141,0.17396 -0.33032,0.005 -0.80673,0.0971 -1.05141,-0.17396 z m -0.24124,-1.40504 c 0.0413,-0.98694 2.26486,-1.37157 1.77548,-0.0526 -0.53541,0.0586 -1.09837,-0.50916 -1.6395,0.0769 l -0.0994,0.0129 -0.0365,-0.0372 0,0 z"
+ id="path33055"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b3bcc9"
+ d="m 949.00724,943.8547 c -0.15061,-0.85868 -0.65069,-1.53355 -0.17405,-2.40998 0.0302,-1.31534 -0.67334,-2.57144 -1.71202,-3.35191 -0.29112,-0.68863 1.28528,0.17025 1.6703,0.24366 1.85095,0.82338 3.34446,2.70722 3.40145,4.77255 0.0488,1.44021 -1.57986,1.54954 -2.63601,1.40053 -0.4179,0.0365 -0.62319,-0.26317 -0.54967,-0.65485 z m -7.74131,-5.01971 c -1.06967,-0.27602 -1.60242,-1.19128 -2.32033,-1.95791 -1.39997,-0.23249 0.86271,-1.26215 -0.03,-2.08487 -0.3109,-0.92361 -1.25384,-1.86682 -0.94385,-2.86683 0.86276,0.18674 1.92545,1.10044 2.75749,0.11426 1.09625,-1.05604 1.73115,-2.55026 1.99295,-4.03161 0.0971,-1.55543 0.14183,-3.17941 -0.33445,-4.67873 -0.88903,-1.21629 1.30509,-0.74519 1.80034,-0.29474 1.73414,1.29143 2.10118,3.67317 2.04991,5.69949 -0.0601,2.04975 -0.7583,4.03631 -1.86419,5.75136 -0.69716,1.13555 0.91195,1.78934 1.48849,2.52959 0.57222,0.42453 0.67518,0.86615 -0.1136,0.95129 -1.18986,0.85409 -2.7457,1.40948 -4.20725,1.05407 l -0.15801,-0.0815 -0.11752,-0.10389 -10e-6,0 z"
+ id="path33057"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a9b6c7"
+ d="m 949.20386,942.9018 c 0.16777,-1.40699 -0.28789,-2.75708 -0.73876,-4.064 0.4113,-0.97989 1.85939,0.52093 2.19088,1.14066 0.83824,1.26239 1.44499,2.71112 1.62822,4.22095 -0.66319,0.59972 -2.10186,0.37136 -2.95686,0.1272 -0.27525,-0.41804 -0.11532,-0.95685 -0.12348,-1.42481 z m -8.46249,-4.58646 c -1.0503,-0.47961 -2.1079,-1.70253 -1.51188,-2.88711 0.0914,-0.93598 -1.49502,-2.11053 -0.63097,-2.81021 0.9209,-0.011 1.91141,-0.13985 2.58149,-0.84832 1.81862,-1.83918 2.2612,-4.65537 1.95649,-7.13563 -0.0708,-0.66017 -0.84029,-2.42462 0.51585,-1.66496 1.34866,0.6903 2.25703,2.06461 2.40123,3.56808 0.35037,2.78589 -0.24109,5.74991 -1.87812,8.05957 -0.7779,1.26446 1.37591,1.5887 1.33887,2.74304 -0.27614,1.23443 -1.87176,1.44186 -2.93262,1.41983 -0.63405,-0.03 -1.26361,-0.17797 -1.84034,-0.44429 z"
+ id="path33059"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#a5aeba"
+ d="m 949.73096,942.49916 c 0.0425,-1.14575 -0.0859,-2.30898 -0.66569,-3.31511 0.36126,-0.97223 1.64705,0.6846 1.94889,1.30648 0.70008,1.16902 1.03499,2.52221 1.29839,3.83792 -0.80851,0.34278 -2.79625,0.5507 -2.57273,-0.88765 -0.0104,-0.31376 -0.008,-0.62776 -0.009,-0.94164 z m -7.71971,-4.27692 c -1.41072,-0.27734 -2.7566,-1.50177 -2.69093,-3.02119 -0.36193,-0.49077 -1.37876,-2.05976 -0.0155,-1.85279 1.62415,0.10793 2.7292,-1.4264 3.37068,-2.72308 1.09256,-2.30459 1.40554,-5.03227 0.61116,-7.47857 0.52619,-0.71198 1.63914,0.87422 2.05364,1.40388 1.0459,1.68684 0.85791,3.79836 0.56585,5.67494 -0.25217,1.51136 -0.82923,2.95187 -1.6631,4.23467 -0.99304,1.29612 1.17326,1.7306 1.30271,2.73892 -0.80719,0.67068 -1.89207,1.17195 -2.96744,1.10074 -0.19026,-0.0157 -0.37921,-0.0442 -0.56709,-0.0775 z"
+ id="path33061"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#99a5b4"
+ d="m 950.35354,943.98738 c -0.28668,-1.55395 -0.17256,-3.20737 -0.77763,-4.68192 1.25819,0.41341 1.74155,1.85378 2.07826,3.01596 0.1128,0.90407 1.4371,2.59913 -0.37317,2.20764 -0.38529,0.0159 -0.90347,-0.0523 -0.92746,-0.54168 z m -8.9454,-6.20219 c -1.25776,-0.64071 -2.02355,-1.96023 -2.27991,-3.31409 -0.72946,-1.27062 1.28471,-0.54658 1.80015,-1.26081 2.04818,-1.42178 3.00731,-3.97716 3.26123,-6.37603 0.26116,-1.16758 -0.35511,-2.44612 -0.23035,-3.49398 1.69598,1.04364 2.19746,3.22682 2.08541,5.10042 -0.11397,2.38423 -1.01642,4.66518 -2.27469,6.67005 0.0473,0.86973 2.07324,1.76056 0.53519,2.63428 -0.87946,0.48891 -1.9909,0.4117 -2.89703,0.0402 z"
+ id="path33063"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#929ca9"
+ d="m 951.12737,944.108 c -0.51196,-1.00245 -0.63436,-2.21167 -0.5091,-3.32294 0.66011,-0.14389 0.84178,1.49491 1.11354,2.10154 0.12295,0.58732 1.07335,2.0614 -0.21386,1.51955 l -0.21277,-0.13422 -0.17781,-0.16393 0,0 z m -10.55576,-7.47848 c -0.71067,-0.55087 -1.73436,-2.1562 -0.3288,-2.48356 1.9476,-0.52766 3.06195,-2.46276 3.73633,-4.22694 0.66437,-1.71008 0.72604,-3.56701 0.56589,-5.37294 0.13791,-0.9007 1.02973,0.78428 1.10076,1.16731 0.68356,2.42445 0.26185,5.08444 -0.78721,7.34235 -0.35539,0.91304 -1.7481,1.98385 -0.69007,2.9014 1.18404,0.61552 0.37896,1.48176 -0.61713,1.54466 -1.06504,0.24785 -2.20787,-0.10769 -2.97977,-0.87228 z"
+ id="path33065"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#8a95a3"
+ d="m 951.34901,943.86676 c -0.24447,-0.43609 0.3107,-1.72712 0.29966,-0.60315 0.10229,0.53449 -0.10726,1.8798 -0.29966,0.60315 l 0,0 z m -10.38915,-7.47848 c -0.72054,-0.40301 -1.69027,-1.62969 -0.30462,-1.81029 1.16579,-0.60204 2.37102,-1.37482 3.02074,-2.54697 0.26909,-1.11653 0.99365,-2.07944 1.16796,-3.23662 0.23769,-1.14489 0.60927,-2.34021 0.3505,-3.50974 0.82164,0.97988 0.65782,2.40712 0.58034,3.60626 -0.24022,2.08281 -0.8645,4.16986 -2.11925,5.8745 -0.55177,0.90427 1.73652,1.99287 -0.0513,2.37616 -0.94522,0.35351 -1.92285,-0.16142 -2.64437,-0.7533 z"
+ id="path33067"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#8a95a3;fill-opacity:1"
+ d="m 943.02805,923.81825 c -0.50177,0.0449 -1.00522,0.0963 -1.49344,0.22576 -0.47347,0.12709 -0.93326,0.30433 -1.36982,0.52777 -0.30842,0.17515 -0.62599,0.3397 -0.90037,0.56714 -0.45128,0.34193 -0.84472,0.75147 -1.22705,1.16713 -0.19369,0.2742 -0.40081,0.54114 -0.56888,0.83188 -0.25235,0.46678 -0.46484,0.9554 -0.61687,1.46418 -0.24806,0.76559 -0.45741,1.54311 -0.66906,2.31937 -0.19078,0.7215 -0.38309,1.44287 -0.55876,2.16815 -0.17498,0.73403 -0.29201,1.48146 -0.34993,2.23383 -0.0195,0.27103 -0.0671,0.54163 -0.0334,0.81348 0.0151,0.2793 0.0355,0.55876 0.0678,0.83649 0.007,0.10501 0.15467,0.21396 0.19601,0.0679 0.10562,-0.22589 0.2376,-0.45541 0.49002,-0.53525 0.18587,-0.0905 0.39675,-0.14113 0.60182,-0.10188 0.24004,0.0505 0.48816,0.12488 0.69305,0.26321 0.27802,0.18371 0.52372,0.42438 0.68171,0.71999 0.16268,0.19143 0.2092,0.46505 0.36045,0.64905 0.13417,0.0125 0.11274,-0.20417 0.1469,-0.30027 0.0502,-0.45227 -0.0545,-0.90023 -0.13183,-1.34319 -0.0785,-0.39576 -0.19401,-0.78413 -0.24098,-1.18567 -0.0655,-0.43714 -0.14557,-0.87419 -0.1432,-1.31785 -0.0139,-0.48202 -0.0402,-0.96359 -0.0348,-1.44601 -0.008,-0.29824 -2.4e-4,-0.59595 0.0274,-0.89306 0.0589,-0.69984 0.1359,-1.39858 0.24085,-2.09309 0.15138,-0.71331 0.32299,-1.42921 0.63756,-2.09089 0.14868,-0.32937 0.2989,-0.65969 0.47248,-0.97639 0.17389,-0.2774 0.38505,-0.53697 0.66027,-0.71947 0.4133,-0.28297 0.85781,-0.51634 1.31435,-0.72116 0.43524,-0.19617 0.87134,-0.39163 1.28783,-0.626 0.19844,-0.0967 0.45442,-0.16195 0.55498,-0.37869 0.0307,-0.0739 0.01,-0.17508 -0.0951,-0.12641 z"
+ id="path33069"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
+ style="fill:#99a5b4;fill-opacity:1"
+ d="m 941.30576,922.262 c -2.30799,0.42179 -4.16251,2.32674 -4.81728,4.53835 -1.1649,2.62595 -1.70571,5.55638 -1.35538,8.41966 0.005,0.25892 0.0352,0.52059 -0.009,0.77766 0.90512,-1.08651 0.91732,-2.57442 1.44289,-3.83498 0.81336,-2.57684 2.12136,-5.10808 4.26397,-6.82486 1.05327,-0.88861 2.28631,-1.53931 3.55077,-2.07317 0.17421,-0.43871 -0.35603,-0.78282 -0.74634,-0.75388 -0.752,-0.22268 -1.54788,-0.29672 -2.32948,-0.24878 z"
+ id="path33071"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#dce2e8"
+ d="m 1092.5142,862.96792 c 0.01,-5.30143 1.6059,-10.6248 3.7815,-15.43929 4.3212,-8.8444 14.216,-12.22658 22.338,-16.5859 4.6806,-1.37584 9.0712,-5.52844 4.7426,-10.02046 -6.3949,-12.22902 -8.7729,-27.8219 -2.1065,-40.43961 3.6547,-7.37162 12.389,-12.01132 20.4933,-9.67176 7.2863,1.44287 13.1447,7.15895 15.3403,14.18101 4.5144,13.20733 1.2153,28.11579 -6.5366,39.43979 -1.3297,3.95225 5.8957,5.24121 8.44,7.53545 5.4039,3.00388 11.6059,4.85759 15.8683,9.59775 5.1225,5.30858 9.7926,12.48585 8.6642,20.18284 -2.666,2.93451 -8.4087,1.41927 -12.3014,2.20861 -23.9529,0.89934 -47.9593,1.13829 -71.9091,0.0384 -2.2566,-0.26203 -4.7316,-0.0739 -6.8146,-1.02681 z"
+ id="path33075"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#d4dbe2"
+ d="m 1092.8619,863.98091 c -0.3001,-10.49202 6.0373,-20.13978 14.6626,-25.69496 5.5197,-4.0779 12.4095,-5.84192 17.8082,-10.06232 2.8497,-4.01312 -2.3724,-8.04948 -3.3454,-11.96125 -5.1733,-11.94737 -5.914,-27.08139 2.2563,-37.90341 5.8941,-8.20878 18.8524,-9.23957 26.2071,-2.50691 7.922,7.8665 8.9959,20.23178 7.0788,30.70563 -1.0774,6.52092 -4.2598,12.37274 -7.8005,17.84376 -0.6394,4.72644 5.997,6.29571 9.1566,8.71794 5.6707,3.14875 12.427,4.70876 16.6239,10.05061 4.552,5.13638 7.7383,11.97169 7.2645,18.94209 -3.4288,3.13676 -9.1732,1.57453 -13.5604,2.19728 -25.1428,0.17847 -50.294,0.26439 -75.4332,-0.23791 l -0.9185,-0.0906 0,0 z"
+ id="path33077"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#a9b6c7;fill-opacity:1"
+ d="m 1137.4063,773.21875 c -2.0844,0.0218 -4.0688,0.82425 -5.7801,1.97408 -1.7905,1.15879 -3.4062,2.56842 -5.1034,3.85771 -2.0732,1.7046 -4.1307,3.52243 -5.5432,5.83208 -1.4246,2.63374 -2.0143,5.62903 -2.3241,8.58199 -0.3303,2.74853 -0.3282,5.52241 -0.4367,8.28539 -0.01,3.82444 -0.1536,7.64782 -0.1389,11.4717 0.086,5.10181 0.5221,10.19115 0.6389,15.29078 -0.017,1.6471 0.017,3.30988 -0.1419,4.94514 -0.2452,0.76103 -0.5661,2.26102 0.5747,2.38613 1.06,-0.019 1.2351,-1.39535 1.1555,-2.21222 0.2295,-1.68105 1.3251,-3.13394 2.6304,-4.16278 0.8525,-0.49875 1.9731,-0.491 2.8438,-0.0625 1.3276,1.06993 2.3723,2.46316 3.7496,3.48406 1.7879,1.52488 3.518,3.13357 5.2774,4.67984 0.9867,0.7019 2.2703,0.71795 3.4299,0.66919 1.068,-0.16832 2.1353,-0.35487 3.2195,-0.36775 0.8941,0.16109 2.328,-0.70942 1.3861,-1.62159 -0.8042,-0.70337 -1.8875,-0.23431 -2.8337,-0.39781 -1.8427,-0.0672 -3.621,-1.11476 -4.5976,-2.66893 -1.0034,-1.75997 -1.5986,-3.7098 -2.4271,-5.55243 -1.6611,-3.95349 -2.9103,-8.07322 -3.8504,-12.25354 -0.4782,-2.16238 -0.9493,-4.33361 -1.0404,-6.55414 -0.4428,-5.17654 -0.016,-10.36675 0.2179,-15.5419 0.4316,-2.80874 0.9386,-5.71235 2.5236,-8.13079 1.4095,-2.34955 3.2117,-4.47033 5.3351,-6.20561 1.3496,-1.17749 2.79,-2.24805 4.1726,-3.38235 0.6571,-0.78426 0.1282,-2.21425 -0.9301,-2.28177 -0.6603,-0.14562 -1.3384,-0.0725 -2.0074,-0.062 z"
+ id="path33079"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#b6c5d8;fill-opacity:1"
+ d="m 1135.0625,771.09375 c -3.5,0.58518 -6.8259,1.96099 -9.8715,3.75664 -1.4659,0.9392 -2.8977,1.9504 -4.1015,3.21637 -2.2637,2.18699 -4.0577,4.84626 -5.3102,7.72931 -1.7244,4.45631 -3.1815,9.00923 -4.5462,13.58674 -1.1787,3.81878 -2.2925,7.66048 -3.5864,11.44147 -0.9806,2.31904 -2.2556,4.50522 -3.1467,6.86322 -0.072,0.83217 -0.5208,1.71408 -0.1562,2.53125 0.3439,0.63556 0.6129,-0.72716 0.904,-1.00196 0.7079,-1.17012 1.6787,-2.15857 2.5022,-3.24804 2.0256,-2.4413 4.0925,-4.85803 6.3438,-7.09375 0.8922,-0.67775 1.9311,-1.14621 3,-1.46875 0.9592,-0.27381 2.0457,-0.0942 2.7855,0.6034 0.7982,0.68845 1.0522,1.81659 0.9264,2.82928 -0.069,2.24614 -0.6218,4.43634 -0.9416,6.65146 -0.3771,1.50747 -0.596,3.04826 -0.8953,4.57211 -0.019,0.88489 0.8029,1.89802 1.75,1.65625 1.2051,-0.41761 1.6861,-1.71186 2.0121,-2.83444 1.0809,-3.47552 1.1641,-7.147 1.3117,-10.75426 0.2526,-3.87574 0.4302,-7.76125 0.9007,-11.61815 0.521,-3.65166 1.2465,-7.28074 2.2755,-10.8244 0.5077,-1.47275 1.2852,-2.82251 2.1324,-4.12255 1.0451,-1.54481 2.4259,-2.97532 4.2113,-3.62745 3.7719,-1.53211 7.856,-2.03477 11.7188,-3.28125 0.8561,-0.41385 1.6694,-1.37746 1.3437,-2.375 -0.3658,-1.12201 -1.5732,-1.602 -2.6128,-1.89568 -2.3028,-0.66163 -4.6814,-1.03339 -7.0648,-1.2496 -0.6285,-0.0212 -1.2564,-0.11142 -1.8849,-0.0422 z"
+ id="path33081"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#c9cfd7"
+ d="m 1093.3186,862.68392 c 2.0397,-6.75845 2.6267,-14.59993 8.2825,-19.57905 6.8665,-6.55449 16.4927,-8.81781 23.9521,-14.46458 3.6447,-4.45932 -2.8105,-9.08083 -3.562,-13.60484 -4.1433,-11.16786 -4.9817,-24.68811 1.4956,-35.15189 5.6846,-8.73332 19.8555,-10.9347 27.194,-3.0481 8.414,8.94249 8.7762,22.65299 5.2735,33.81426 -1.4944,5.581 -4.9984,10.28747 -7.0924,15.6006 2.7618,3.52771 7.1493,5.48724 10.9349,7.7964 6.119,3.22073 13.5834,5.02515 17.4835,11.27477 2.9699,4.63969 4.4219,10.08731 5.8092,15.35231 -1.5017,4.96315 -8.8182,2.91096 -12.8589,3.69351 -22.8034,0.12179 -45.6117,0.15756 -68.4143,-0.11428 -2.3117,-0.50334 -7.5324,0.74503 -8.4977,-1.56911 z"
+ id="path33083"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#b6c5d8"
+ d="m 1094.235,862.68169 c 2.0564,-7.41778 3.349,-16.08468 10.1767,-20.8097 6.6183,-5.16685 15.1606,-7.20405 21.595,-12.59203 3.5446,-4.88336 -2.4756,-9.88767 -3.3534,-14.75239 -3.474,-10.8555 -4.1294,-23.33186 0.8597,-33.82801 1.7263,-3.59701 5.2395,-6.62494 9.4292,-6.35645 4.1922,-1.15696 8.5272,-4.11292 12.9387,-1.76941 7.4615,3.81566 10.0643,12.7832 10.996,20.5469 1.1638,10.51462 -1.4742,21.3696 -7.4745,30.09882 -3.0592,4.5826 3.8279,7.04871 6.5928,9.43949 4.453,3.31782 9.9277,4.58376 14.7042,7.25683 7.6851,4.50047 10.7441,13.62794 11.7443,22.00374 -2.9167,3.42132 -8.8791,1.6959 -13.0442,2.37973 -23.0139,0.17734 -46.0359,0.29901 -69.0471,-0.12448 -1.4771,-0.46732 -5.7882,0.53078 -6.1174,-1.49304 z"
+ id="path33085"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#89929e"
+ d="m 1145.4158,831.51882 c -6.511,-0.17414 1.8961,-8.32488 2.1097,-2.13677 0.2551,1.05824 -0.9099,3.45218 -2.1097,2.13677 z m -9.1923,-2.58713 c -5.03,-3.26087 3.8069,-5.55701 3.715,-0.9855 -0.3316,1.64802 -2.6976,2.53253 -3.715,0.9855 z m 8.2796,-8.19213 c 5.4124,-4.28675 4.1865,-12.49507 9.1419,-17.11237 0.2956,5.93898 -0.8154,13.05465 -6.0648,16.64412 -0.9456,0.45813 -2.0369,0.66185 -3.0771,0.46825 z"
+ id="path33087"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#b4c3d5"
+ d="m 1095.4869,863.63394 c -0.7086,-2.12774 2.227,-4.3804 1.3414,-0.66819 0.1019,0.98814 -0.6521,2.27111 -1.3414,0.66819 z m 37.375,-0.1401 c 1.386,-2.43696 5.5317,0.89636 1.4289,0.91541 -0.4953,-0.004 -1.425,-0.23332 -1.4289,-0.91541 z m 7.6969,-0.45528 c -1.7662,-3.1746 2.2388,-3.26451 1.112,0.0649 -0.3282,2.3234 -0.6929,0.92535 -1.112,-0.0649 z m 26.8031,-0.60687 c -0.1412,-3.37799 -6.3561,-0.78227 -3.1471,-4.41577 3.4614,-3.84128 -0.9126,-6.50536 0.3286,-10.70489 -1.3534,-4.87174 -4.4459,3.58742 -6.3126,-0.95498 -2.2864,-0.76047 -6.1461,-2.25962 -7.8438,-1.85811 1.7929,4.16671 -5.0761,3.88297 -4.657,8.23859 -2.8783,4.77401 -4.2136,-5.23107 0.4167,-4.75641 3.0178,-1.66128 2.6353,-6.07232 -1.1054,-3.24125 -4.1035,2.38594 -8.1014,0.13188 -10.9801,-2.65973 -1.5746,1.027 -7.1905,5.94236 -6.2298,1.16697 3.1085,-2.66186 -0.5867,-8.92294 -4.2926,-8.18935 -5.1067,-0.52325 2.4463,-4.85414 3.5764,-6.66771 1.8593,-4.36472 -3.1729,-7.83742 -3.708,-12.04941 -1.2651,-5.08051 -2.8301,-10.57026 -1.531,-15.77259 2.6465,-1.80932 -6.039,-6.34583 -0.1274,-6.57829 2.9743,2.18718 10.861,-0.73904 8.664,-4.74784 1.4327,-4.1299 6.0259,3.62463 2.1811,5.45085 -2.5974,0.10573 -7.4936,3.34663 -3.6277,5.54395 1.6435,-0.82217 6.4932,-5.71297 6.673,-2.49044 -2.7854,3.31115 -8.671,4.59991 -5.9505,10.09851 -0.147,1.93717 2.2229,5.8417 2.3835,1.69036 -0.2918,-2.60942 -0.2747,-9.86038 3.6482,-6.05741 -1.5505,2.76367 1.6584,4.017 1.4661,0.70751 1.2313,-3.60319 4.1633,-6.90216 1.9615,-10.6292 1.0857,-3.44275 2.4753,-8.92278 -1.1456,-10.9983 -0.2759,-2.38485 4.3956,-5.73004 -0.7238,-6.12506 -5.3095,-0.90828 1.6765,-3.69288 4.0418,-2.6646 4.3254,0.22232 9.1692,1.37034 11.4584,5.44637 6.2849,9.7073 5.6843,22.38166 2.1707,32.98508 -0.9294,4.64278 -5.2222,8.12432 -5.2048,12.92114 1.2085,6.56432 8.0163,9.99242 13.782,11.95844 5.1796,1.02044 10.1383,3.62424 13.0319,8.19359 3.204,4.79647 5.2164,10.49318 5.7367,16.22196 -2.3558,3.8145 -7.9005,3.87439 -11.8952,3.17059 -1.2245,-0.32543 -2.6028,-0.92802 -3.0382,-2.23257 z m -6.0908,-20.1003 c -1.4189,-3.47946 -9.2021,-2.51084 -5.1374,1.1248 1.0491,0.55257 8.1492,1.55777 5.1374,-1.1248 z m -35.4092,-40.45872 c -2.1626,-4.30335 -2.5662,5.59099 0,0 z m -10.7721,57.4647 c 0.9739,-2.58634 6.2446,-4.23216 3.3578,-0.21672 -0.9325,2.57294 -7.0509,4.43368 -3.3578,0.21672 z m 15.2677,1.08726 c -0.4615,-3.123 5.9277,-1.79651 2.3333,0.70108 -0.7844,0.59532 -1.935,0.11193 -2.3333,-0.70108 z m 17.1983,0.36758 c -1.4021,-3.70988 5.6946,-2.0316 1.5001,0.56139 l -0.7246,-0.0276 -0.7755,-0.53379 z m -46.6939,-2.34909 c 0.2511,-3.17228 6.7054,-7.64119 4.5997,-1.5241 -0.3029,1.59959 -3.8831,3.82735 -4.5997,1.5241 z m 56,-0.51143 c 2.5129,-5.65641 2.4066,5.5417 0,0 z m -47.8,-2.7 c -4.0511,-2.74409 2.8618,-11.29262 3.0007,-4.49156 -2.2734,1.19476 -2.9497,4.14273 0.2779,3.98531 0.4491,2.1979 -2.5034,1.86609 -3.2786,0.50625 z m 17.0438,-0.05 c 1.3165,-2.24916 8.5838,-2.15975 3.4328,0.33832 -0.7575,0.55533 -3.9521,1.81288 -3.4328,-0.33832 z m 28.4134,-2.29909 c 1.9889,-3.91758 6.8542,2.62004 1.3117,1.52967 -0.8499,0.0565 -1.9284,-0.52139 -1.3117,-1.52967 z m -56.6572,-0.39189 c 1.6879,-4.90927 2.9969,2.75221 0.079,0.36537 l -0.079,-0.36537 z m 16.6476,-4.24293 c -1.8915,-2.61234 0.8405,-5.75092 1.6884,-1.54504 0.8485,1.72586 -0.7024,5.1602 -1.6884,1.54504 z m 4.5919,-1.82793 c 1.6025,-1.85967 3.6635,-1.43607 5.2605,-2.98816 3.9626,1.46685 -2.6295,3.48646 -3.7286,4.9303 -1.9952,0.50428 -2.9215,-0.26884 -1.5319,-1.94214 z m -9.2395,-3.57149 c 0.5999,-5.93389 4.1759,2.63959 0.6117,2.37949 -0.5227,-0.66971 -0.5818,-1.56896 -0.6117,-2.37949 z m -5.43,0.69664 c -0.366,-3.22691 5.2275,-3.96176 2.5144,-0.12486 -0.5163,1.26584 -1.7962,1.28548 -2.5144,0.12486 z m 16.43,-54.05429 c -0.3067,-2.8402 2.7857,-3.62344 2.3713,-0.3321 1.7775,2.89278 -2.5383,3.01913 -2.3713,0.3321 z m 7,-4.85902 c -0.4203,-5.12456 8.4363,-1.94337 4.3583,0.72111 -1.3692,0.0212 -3.344,0.40232 -4.3583,-0.72111 z m -1,-5.82423 c 0.171,-4.09108 9.3884,-5.68544 7.3598,-0.21811 -2.2194,0.24293 -4.553,-2.11058 -6.7961,0.31894 l -0.4123,0.0536 -0.1514,-0.1544 0,0 z"
+ id="path33089"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#b3bcc9"
+ d="m 1168.8619,861.63169 c -0.6243,-3.55935 -2.6973,-6.3569 -0.7215,-9.98987 0.1253,-5.45244 -2.7911,-10.65923 -7.0967,-13.89447 -1.2068,-2.85452 5.3278,0.70573 6.9238,1.01004 7.6726,3.41307 13.8636,11.22205 14.0998,19.78329 0.2021,5.97005 -6.5489,6.42322 -10.9269,5.80556 -1.7323,0.15131 -2.5832,-1.0909 -2.2785,-2.71455 z m -32.0895,-20.80784 c -4.434,-1.14416 -6.6424,-4.93813 -9.6183,-8.11599 -5.8032,-0.96373 3.5761,-5.23189 -0.1243,-8.64226 -1.2887,-3.82859 -5.1974,-7.73842 -3.9124,-11.88366 3.5763,0.77406 7.9814,4.56157 11.4304,0.4736 4.5442,-4.37751 7.176,-10.57138 8.2612,-16.71192 0.4026,-6.44762 0.588,-13.17942 -1.3863,-19.39442 -3.6853,-5.04182 5.4099,-3.08901 7.4628,-1.22179 7.1884,5.3533 8.7099,15.22614 8.4974,23.6257 -0.2493,8.4967 -3.1434,16.73146 -7.7275,23.84074 -2.8899,4.70712 3.7802,7.4172 6.1701,10.48571 2.372,1.75978 2.7988,3.59039 -0.4709,3.94333 -4.9323,3.54041 -11.3816,5.84263 -17.44,4.36937 l -0.655,-0.33776 -0.4872,-0.43065 0,0 z"
+ id="path33091"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#a9b6c7"
+ d="m 1169.677,857.68169 c 0.6954,-5.83229 -1.1934,-11.42869 -3.0624,-16.84619 1.705,-4.06189 7.7076,2.15936 9.0817,4.7283 3.4747,5.23289 5.9898,11.23822 6.7494,17.4968 -2.7491,2.48603 -8.7127,1.53936 -12.2569,0.52734 -1.141,-1.73296 -0.478,-3.96643 -0.5118,-5.90625 z m -35.079,-19.01192 c -4.3537,-1.9881 -8.7378,-7.05736 -6.2671,-11.96771 0.379,-3.87987 -6.1972,-8.74866 -2.6155,-11.649 3.8173,-0.0455 7.9232,-0.57969 10.7008,-3.51648 7.5387,-7.6238 9.3732,-19.29758 8.1101,-29.5788 -0.2934,-2.73658 -3.4831,-10.05061 2.1384,-6.90166 5.5905,2.86145 9.3559,8.5583 9.9536,14.79053 1.4524,11.54814 -0.9993,23.83469 -7.7852,33.40876 -3.2246,5.24149 5.7034,6.58552 5.5499,11.37054 -1.1447,5.117 -7.7589,5.97682 -12.1564,5.8855 -2.6283,-0.12443 -5.2379,-0.7377 -7.6286,-1.84168 z"
+ id="path33093"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#a5aeba"
+ d="m 1171.8619,856.01273 c 0.1763,-4.74944 -0.356,-9.57132 -2.7594,-13.74195 1.4975,-4.03011 6.8274,2.83782 8.0786,5.41566 2.902,4.84584 4.2902,10.45516 5.3821,15.90906 -3.3515,1.42092 -11.5911,2.28284 -10.6646,-3.67955 -0.043,-1.30058 -0.035,-2.60214 -0.037,-3.90322 z m -32,-17.72887 c -5.8477,-1.14965 -11.4267,-6.22518 -11.1545,-12.52353 -1.5003,-2.03434 -5.7153,-8.53816 -0.064,-7.68024 6.7325,0.44741 11.3131,-5.91275 13.9722,-11.28778 4.5289,-9.55307 5.8263,-20.85993 2.5334,-31.00041 2.1812,-2.95131 6.7947,3.62386 8.5128,5.81939 4.3355,6.99236 3.5563,15.74508 2.3456,23.52395 -1.0453,6.26492 -3.4373,12.23617 -6.8939,17.55368 -4.1164,5.37273 4.8634,7.17375 5.4,11.35344 -3.346,2.78013 -7.8431,4.85802 -12.3007,4.56282 -0.7887,-0.0649 -1.5719,-0.18321 -2.3507,-0.32132 z"
+ id="path33095"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#99a5b4"
+ d="m 1174.4426,862.18169 c -1.1883,-6.44151 -0.7153,-13.29528 -3.2234,-19.40763 5.2155,1.71368 7.2191,7.68437 8.6149,12.50189 0.4675,3.74753 5.9571,10.77397 -1.5469,9.15113 -1.5971,0.0659 -3.7451,-0.21664 -3.8446,-2.24539 z m -37.0807,-25.70949 c -5.2137,-2.6559 -8.3881,-8.12562 -9.4507,-13.73768 -3.0238,-5.26702 5.3254,-2.26568 7.462,-5.22634 8.4902,-5.8936 12.466,-16.48626 13.5185,-26.43011 1.0826,-4.83991 -1.472,-10.13976 -0.9548,-14.48335 7.0302,4.3261 9.109,13.3759 8.6445,21.14239 -0.4724,9.88319 -4.2133,19.33825 -9.4291,27.6489 0.196,3.60522 8.594,7.29794 2.2185,10.91971 -3.6456,2.02664 -8.2528,1.70657 -12.0089,0.16648 z"
+ id="path33097"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#99a5b4;fill-opacity:1"
+ d="m 1137.625,771.4375 c -3.2175,0.80995 -6.3589,1.89093 -9.4985,2.95674 -0.9716,0.37142 -1.8529,0.9729 -2.5952,1.69951 -0.8529,0.75372 -1.5183,1.68678 -2.243,2.5579 -1.4336,1.82026 -2.7094,3.75542 -4.0695,5.6296 -0.882,1.49498 -1.701,3.03188 -2.2874,4.66945 -0.773,1.87386 -1.3796,3.81126 -2.0369,5.7276 -1.4886,4.58577 -2.8667,9.20755 -4.1553,13.85304 -0.3808,1.5389 -0.8175,3.06718 -1.1142,4.62491 -0.098,1.32482 0.4277,2.57219 0.8125,3.8125 0.6544,1.89642 1.248,3.81318 1.875,5.71875 0.4387,1.03708 1.5319,1.69185 2.625,1.8125 1.242,-0.0193 2.5208,0.0375 3.7188,-0.34375 1.0206,-0.39402 1.605,-1.36074 1.8656,-2.3781 0.7327,-2.56005 1.0195,-5.21766 1.5005,-7.83083 0.4005,-2.37627 0.7757,-4.75672 1.1651,-7.13482 0.6094,-2.21748 1.288,-4.41783 2.0397,-6.59038 0.7828,-2.02938 1.7157,-3.99664 2.5541,-6.00337 0.89,-1.89943 1.8666,-3.76562 3.0149,-5.52201 1.4077,-2.01133 3.3385,-3.57662 5.3281,-4.9803 1.2399,-0.75485 2.4221,-1.59957 3.6892,-2.3108 1.428,-0.88217 2.9558,-1.58776 4.4678,-2.31189 0.9989,-0.30772 1.9526,-0.81445 2.9948,-0.95052 0.9487,-0.0968 1.933,0.0577 2.8489,-0.26823 0.9246,-0.56794 0.7301,-1.98773 -0.1562,-2.5 -0.8073,-0.63096 -1.7434,-1.0782 -2.6335,-1.5793 -1.6813,-0.84475 -3.4743,-1.44213 -5.3035,-1.87163 -1.3571,-0.28247 -2.7391,-0.47084 -4.1255,-0.51782 l -0.1817,0.0202 -0.1,0.0111 z"
+ id="path33099"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#929ca9"
+ d="m 1177.6504,862.68169 c -2.1223,-4.15541 -2.6296,-9.16791 -2.1104,-13.77435 2.7363,-0.59646 3.4894,6.19672 4.6159,8.71136 0.5097,2.43464 4.4493,8.54497 -0.8865,6.29893 l -0.882,-0.55645 -0.737,-0.67949 0,0 z m -43.7561,-31 c -2.9459,-2.28349 -7.1894,-8.93795 -1.3629,-10.29495 8.0732,-2.18725 12.6924,-10.20871 15.4879,-17.52164 2.7539,-7.08868 3.0096,-14.78608 2.3457,-22.27209 0.5717,-3.73359 4.2685,3.25102 4.563,4.83879 2.8335,10.0499 1.0854,21.07617 -3.2632,30.43572 -1.4732,3.78479 -7.2463,8.22354 -2.8605,12.027 4.9081,2.55146 1.5708,6.14222 -2.5582,6.40295 -4.4148,1.02741 -9.1521,-0.44638 -12.3518,-3.61578 z"
+ id="path33101"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#8a95a3;fill-opacity:1"
+ d="m 1144.0768,778.57601 c -2.0799,0.18622 -4.1669,0.39931 -6.1906,0.93582 -1.9627,0.5268 -3.8686,1.26151 -5.6783,2.18771 -1.2785,0.72607 -2.5949,1.40817 -3.7322,2.35094 -1.8707,1.41739 -3.5016,3.11504 -5.0864,4.83803 -0.8029,1.1366 -1.6615,2.24315 -2.3582,3.44834 -1.046,1.93489 -1.9268,3.96033 -2.5571,6.06935 -1.0282,3.17356 -1.896,6.39655 -2.7733,9.61433 -0.7909,2.99079 -1.588,5.98101 -2.3162,8.9875 -0.7253,3.0427 -1.2105,6.14099 -1.4506,9.25973 -0.081,1.12348 -0.2781,2.24516 -0.1383,3.37206 0.063,1.15775 0.1471,2.31618 0.2812,3.46744 0.029,0.43529 0.6411,0.88693 0.8125,0.28125 0.4378,-0.93637 0.9849,-1.88776 2.0312,-2.21875 0.7705,-0.37522 1.6447,-0.58501 2.4947,-0.42232 0.9951,0.20928 2.0235,0.51766 2.8728,1.09107 1.1525,0.76152 2.171,1.75918 2.8259,2.98452 0.6743,0.79355 0.8672,1.92774 1.4941,2.69048 0.5562,0.0517 0.4674,-0.84631 0.609,-1.24468 0.2079,-1.87479 -0.2258,-3.73167 -0.5465,-5.56782 -0.3256,-1.64053 -0.8042,-3.25041 -0.9989,-4.91491 -0.2714,-1.81202 -0.6034,-3.6237 -0.5936,-5.46277 -0.058,-1.99807 -0.1665,-3.99431 -0.1442,-5.99405 -0.035,-1.23626 -10e-4,-2.47036 0.1134,-3.70195 0.2442,-2.90098 0.5633,-5.79741 0.9983,-8.67632 0.6275,-2.95685 1.3389,-5.92442 2.6429,-8.66725 0.6163,-1.36529 1.239,-2.73456 1.9585,-4.04735 0.7208,-1.14986 1.5962,-2.22584 2.737,-2.98238 1.7132,-1.17297 3.5558,-2.14034 5.4483,-2.98937 1.8042,-0.81317 3.6119,-1.62339 5.3383,-2.5949 0.8226,-0.40084 1.8837,-0.6713 2.3005,-1.56976 0.1274,-0.30615 0.04,-0.72575 -0.3942,-0.52399 z"
+ id="path33103"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#8a95a3"
+ d="m 1178.5691,861.68169 c -1.0134,-1.80767 1.2879,-7.15927 1.2421,-2.50022 0.4241,2.21568 -0.4446,7.79222 -1.2421,2.50022 l 0,0 z m -43.0654,-31 c -2.9868,-1.67058 -7.0066,-6.75545 -1.2627,-7.50408 4.8324,-2.49559 9.8284,-5.69893 12.5216,-10.55778 1.1155,-4.62828 4.1189,-8.61975 4.8415,-13.41654 0.9852,-4.74585 2.5256,-9.7007 1.4529,-14.54866 3.4059,4.0618 2.7268,9.97803 2.4056,14.94875 -0.9957,8.63373 -3.5835,17.28503 -8.7848,24.35117 -2.2871,3.74841 7.1983,8.26089 -0.2126,9.84972 -3.9181,1.46539 -7.9707,-0.66912 -10.9615,-3.12258 z"
+ id="path33105"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33141"
+ d="m 1092.5142,862.96792 c 0.01,-5.30143 1.6059,-10.6248 3.7815,-15.43929 4.3212,-8.8444 14.216,-12.22658 22.338,-16.5859 4.6806,-1.37584 9.0712,-5.52844 4.7426,-10.02046 -6.3949,-12.22902 -8.7729,-27.8219 -2.1065,-40.43961 3.6547,-7.37162 12.389,-12.01132 20.4933,-9.67176 7.2863,1.44287 13.1447,7.15895 15.3403,14.18101 4.5144,13.20733 1.2153,28.11579 -6.5366,39.43979 -1.3297,3.95225 5.8957,5.24121 8.44,7.53545 5.4039,3.00388 11.6059,4.85759 15.8683,9.59775 5.1225,5.30858 9.7926,12.48585 8.6642,20.18284 -2.666,2.93451 -8.4087,1.41927 -12.3014,2.20861 -23.9529,0.89934 -47.9593,1.13829 -71.9091,0.0384 -2.2566,-0.26203 -4.7316,-0.0739 -6.8146,-1.02681 z"
+ style="fill:#dce2e8"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33143"
+ d="m 1092.8619,863.98091 c -0.3001,-10.49202 6.0373,-20.13978 14.6626,-25.69496 5.5197,-4.0779 12.4095,-5.84192 17.8082,-10.06232 2.8497,-4.01312 -2.3724,-8.04948 -3.3454,-11.96125 -5.1733,-11.94737 -5.914,-27.08139 2.2563,-37.90341 5.8941,-8.20878 18.8524,-9.23957 26.2071,-2.50691 7.922,7.8665 8.9959,20.23178 7.0788,30.70563 -1.0774,6.52092 -4.2598,12.37274 -7.8005,17.84376 -0.6394,4.72644 5.997,6.29571 9.1566,8.71794 5.6707,3.14875 12.427,4.70876 16.6239,10.05061 4.552,5.13638 7.7383,11.97169 7.2645,18.94209 -3.4288,3.13676 -9.1732,1.57453 -13.5604,2.19728 -25.1428,0.17847 -50.294,0.26439 -75.4332,-0.23791 l -0.9185,-0.0906 0,0 z"
+ style="fill:#d4dbe2"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33145"
+ d="m 1137.4063,773.21875 c -2.0844,0.0218 -4.0688,0.82425 -5.7801,1.97408 -1.7905,1.15879 -3.4062,2.56842 -5.1034,3.85771 -2.0732,1.7046 -4.1307,3.52243 -5.5432,5.83208 -1.4246,2.63374 -2.0143,5.62903 -2.3241,8.58199 -0.3303,2.74853 -0.3282,5.52241 -0.4367,8.28539 -0.01,3.82444 -0.1536,7.64782 -0.1389,11.4717 0.086,5.10181 0.5221,10.19115 0.6389,15.29078 -0.017,1.6471 0.017,3.30988 -0.1419,4.94514 -0.2452,0.76103 -0.5661,2.26102 0.5747,2.38613 1.06,-0.019 1.2351,-1.39535 1.1555,-2.21222 0.2295,-1.68105 1.3251,-3.13394 2.6304,-4.16278 0.8525,-0.49875 1.9731,-0.491 2.8438,-0.0625 1.3276,1.06993 2.3723,2.46316 3.7496,3.48406 1.7879,1.52488 3.518,3.13357 5.2774,4.67984 0.9867,0.7019 2.2703,0.71795 3.4299,0.66919 1.068,-0.16832 2.1353,-0.35487 3.2195,-0.36775 0.8941,0.16109 2.328,-0.70942 1.3861,-1.62159 -0.8042,-0.70337 -1.8875,-0.23431 -2.8337,-0.39781 -1.8427,-0.0672 -3.621,-1.11476 -4.5976,-2.66893 -1.0034,-1.75997 -1.5986,-3.7098 -2.4271,-5.55243 -1.6611,-3.95349 -2.9103,-8.07322 -3.8504,-12.25354 -0.4782,-2.16238 -0.9493,-4.33361 -1.0404,-6.55414 -0.4428,-5.17654 -0.016,-10.36675 0.2179,-15.5419 0.4316,-2.80874 0.9386,-5.71235 2.5236,-8.13079 1.4095,-2.34955 3.2117,-4.47033 5.3351,-6.20561 1.3496,-1.17749 2.79,-2.24805 4.1726,-3.38235 0.6571,-0.78426 0.1282,-2.21425 -0.9301,-2.28177 -0.6603,-0.14562 -1.3384,-0.0725 -2.0074,-0.062 z"
+ style="fill:#a9b6c7;fill-opacity:1"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33147"
+ d="m 1135.0625,771.09375 c -3.5,0.58518 -6.8259,1.96099 -9.8715,3.75664 -1.4659,0.9392 -2.8977,1.9504 -4.1015,3.21637 -2.2637,2.18699 -4.0577,4.84626 -5.3102,7.72931 -1.7244,4.45631 -3.1815,9.00923 -4.5462,13.58674 -1.1787,3.81878 -2.2925,7.66048 -3.5864,11.44147 -0.9806,2.31904 -2.2556,4.50522 -3.1467,6.86322 -0.072,0.83217 -0.5208,1.71408 -0.1562,2.53125 0.3439,0.63556 0.6129,-0.72716 0.904,-1.00196 0.7079,-1.17012 1.6787,-2.15857 2.5022,-3.24804 2.0256,-2.4413 4.0925,-4.85803 6.3438,-7.09375 0.8922,-0.67775 1.9311,-1.14621 3,-1.46875 0.9592,-0.27381 2.0457,-0.0942 2.7855,0.6034 0.7982,0.68845 1.0522,1.81659 0.9264,2.82928 -0.069,2.24614 -0.6218,4.43634 -0.9416,6.65146 -0.3771,1.50747 -0.596,3.04826 -0.8953,4.57211 -0.019,0.88489 0.8029,1.89802 1.75,1.65625 1.2051,-0.41761 1.6861,-1.71186 2.0121,-2.83444 1.0809,-3.47552 1.1641,-7.147 1.3117,-10.75426 0.2526,-3.87574 0.4302,-7.76125 0.9007,-11.61815 0.521,-3.65166 1.2465,-7.28074 2.2755,-10.8244 0.5077,-1.47275 1.2852,-2.82251 2.1324,-4.12255 1.0451,-1.54481 2.4259,-2.97532 4.2113,-3.62745 3.7719,-1.53211 7.856,-2.03477 11.7188,-3.28125 0.8561,-0.41385 1.6694,-1.37746 1.3437,-2.375 -0.3658,-1.12201 -1.5732,-1.602 -2.6128,-1.89568 -2.3028,-0.66163 -4.6814,-1.03339 -7.0648,-1.2496 -0.6285,-0.0212 -1.2564,-0.11142 -1.8849,-0.0422 z"
+ style="fill:#8a95a3;fill-opacity:1"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33149"
+ d="m 1093.3186,862.68392 c 2.0397,-6.75845 2.6267,-14.59993 8.2825,-19.57905 6.8665,-6.55449 16.4927,-8.81781 23.9521,-14.46458 3.6447,-4.45932 -2.8105,-9.08083 -3.562,-13.60484 -4.1433,-11.16786 -4.9817,-24.68811 1.4956,-35.15189 5.6846,-8.73332 19.8555,-10.9347 27.194,-3.0481 8.414,8.94249 8.7762,22.65299 5.2735,33.81426 -1.4944,5.581 -4.9984,10.28747 -7.0924,15.6006 2.7618,3.52771 7.1493,5.48724 10.9349,7.7964 6.119,3.22073 13.5834,5.02515 17.4835,11.27477 2.9699,4.63969 4.4219,10.08731 5.8092,15.35231 -1.5017,4.96315 -8.8182,2.91096 -12.8589,3.69351 -22.8034,0.12179 -45.6117,0.15756 -68.4143,-0.11428 -2.3117,-0.50334 -7.5324,0.74503 -8.4977,-1.56911 z"
+ style="fill:#c9cfd7"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33151"
+ d="m 1094.235,862.68169 c 2.0564,-7.41778 3.349,-16.08468 10.1767,-20.8097 6.6183,-5.16685 15.1606,-7.20405 21.595,-12.59203 3.5446,-4.88336 -2.4756,-9.88767 -3.3534,-14.75239 -3.474,-10.8555 -4.1294,-23.33186 0.8597,-33.82801 1.7263,-3.59701 5.2395,-6.62494 9.4292,-6.35645 4.1922,-1.15696 8.5272,-4.11292 12.9387,-1.76941 7.4615,3.81566 10.0643,12.7832 10.996,20.5469 1.1638,10.51462 -1.4742,21.3696 -7.4745,30.09882 -3.0592,4.5826 3.8279,7.04871 6.5928,9.43949 4.453,3.31782 9.9277,4.58376 14.7042,7.25683 7.6851,4.50047 10.7441,13.62794 11.7443,22.00374 -2.9167,3.42132 -8.8791,1.6959 -13.0442,2.37973 -23.0139,0.17734 -46.0359,0.29901 -69.0471,-0.12448 -1.4771,-0.46732 -5.7882,0.53078 -6.1174,-1.49304 z"
+ style="fill:#b6c5d8"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33153"
+ d="m 1145.4158,831.51882 c -6.511,-0.17414 1.8961,-8.32488 2.1097,-2.13677 0.2551,1.05824 -0.9099,3.45218 -2.1097,2.13677 z m -9.1923,-2.58713 c -5.03,-3.26087 3.8069,-5.55701 3.715,-0.9855 -0.3316,1.64802 -2.6976,2.53253 -3.715,0.9855 z m 8.2796,-8.19213 c 5.4124,-4.28675 4.1865,-12.49507 9.1419,-17.11237 0.2956,5.93898 -0.8154,13.05465 -6.0648,16.64412 -0.9456,0.45813 -2.0369,0.66185 -3.0771,0.46825 z"
+ style="fill:#89929e"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33155"
+ d="m 1095.4869,863.63394 c -0.7086,-2.12774 2.227,-4.3804 1.3414,-0.66819 0.1019,0.98814 -0.6521,2.27111 -1.3414,0.66819 z m 37.375,-0.1401 c 1.386,-2.43696 5.5317,0.89636 1.4289,0.91541 -0.4953,-0.004 -1.425,-0.23332 -1.4289,-0.91541 z m 7.6969,-0.45528 c -1.7662,-3.1746 2.2388,-3.26451 1.112,0.0649 -0.3282,2.3234 -0.6929,0.92535 -1.112,-0.0649 z m 26.8031,-0.60687 c -0.1412,-3.37799 -6.3561,-0.78227 -3.1471,-4.41577 3.4614,-3.84128 -0.9126,-6.50536 0.3286,-10.70489 -1.3534,-4.87174 -4.4459,3.58742 -6.3126,-0.95498 -2.2864,-0.76047 -6.1461,-2.25962 -7.8438,-1.85811 1.7929,4.16671 -5.0761,3.88297 -4.657,8.23859 -2.8783,4.77401 -4.2136,-5.23107 0.4167,-4.75641 3.0178,-1.66128 2.6353,-6.07232 -1.1054,-3.24125 -4.1035,2.38594 -8.1014,0.13188 -10.9801,-2.65973 -1.5746,1.027 -7.1905,5.94236 -6.2298,1.16697 3.1085,-2.66186 -0.5867,-8.92294 -4.2926,-8.18935 -5.1067,-0.52325 2.4463,-4.85414 3.5764,-6.66771 1.8593,-4.36472 -3.1729,-7.83742 -3.708,-12.04941 -1.2651,-5.08051 -2.8301,-10.57026 -1.531,-15.77259 2.6465,-1.80932 -6.039,-6.34583 -0.1274,-6.57829 2.9743,2.18718 10.861,-0.73904 8.664,-4.74784 1.4327,-4.1299 6.0259,3.62463 2.1811,5.45085 -2.5974,0.10573 -7.4936,3.34663 -3.6277,5.54395 1.6435,-0.82217 6.4932,-5.71297 6.673,-2.49044 -2.7854,3.31115 -8.671,4.59991 -5.9505,10.09851 -0.147,1.93717 2.2229,5.8417 2.3835,1.69036 -0.2918,-2.60942 -0.2747,-9.86038 3.6482,-6.05741 -1.5505,2.76367 1.6584,4.017 1.4661,0.70751 1.2313,-3.60319 4.1633,-6.90216 1.9615,-10.6292 1.0857,-3.44275 2.4753,-8.92278 -1.1456,-10.9983 -0.2759,-2.38485 4.3956,-5.73004 -0.7238,-6.12506 -5.3095,-0.90828 1.6765,-3.69288 4.0418,-2.6646 4.3254,0.22232 9.1692,1.37034 11.4584,5.44637 6.2849,9.7073 5.6843,22.38166 2.1707,32.98508 -0.9294,4.64278 -5.2222,8.12432 -5.2048,12.92114 1.2085,6.56432 8.0163,9.99242 13.782,11.95844 5.1796,1.02044 10.1383,3.62424 13.0319,8.19359 3.204,4.79647 5.2164,10.49318 5.7367,16.22196 -2.3558,3.8145 -7.9005,3.87439 -11.8952,3.17059 -1.2245,-0.32543 -2.6028,-0.92802 -3.0382,-2.23257 z m -6.0908,-20.1003 c -1.4189,-3.47946 -9.2021,-2.51084 -5.1374,1.1248 1.0491,0.55257 8.1492,1.55777 5.1374,-1.1248 z m -35.4092,-40.45872 c -2.1626,-4.30335 -2.5662,5.59099 0,0 z m -10.7721,57.4647 c 0.9739,-2.58634 6.2446,-4.23216 3.3578,-0.21672 -0.9325,2.57294 -7.0509,4.43368 -3.3578,0.21672 z m 15.2677,1.08726 c -0.4615,-3.123 5.9277,-1.79651 2.3333,0.70108 -0.7844,0.59532 -1.935,0.11193 -2.3333,-0.70108 z m 17.1983,0.36758 c -1.4021,-3.70988 5.6946,-2.0316 1.5001,0.56139 l -0.7246,-0.0276 -0.7755,-0.53379 z m -46.6939,-2.34909 c 0.2511,-3.17228 6.7054,-7.64119 4.5997,-1.5241 -0.3029,1.59959 -3.8831,3.82735 -4.5997,1.5241 z m 56,-0.51143 c 2.5129,-5.65641 2.4066,5.5417 0,0 z m -47.8,-2.7 c -4.0511,-2.74409 2.8618,-11.29262 3.0007,-4.49156 -2.2734,1.19476 -2.9497,4.14273 0.2779,3.98531 0.4491,2.1979 -2.5034,1.86609 -3.2786,0.50625 z m 17.0438,-0.05 c 1.3165,-2.24916 8.5838,-2.15975 3.4328,0.33832 -0.7575,0.55533 -3.9521,1.81288 -3.4328,-0.33832 z m 28.4134,-2.29909 c 1.9889,-3.91758 6.8542,2.62004 1.3117,1.52967 -0.8499,0.0565 -1.9284,-0.52139 -1.3117,-1.52967 z m -56.6572,-0.39189 c 1.6879,-4.90927 2.9969,2.75221 0.079,0.36537 l -0.079,-0.36537 z m 16.6476,-4.24293 c -1.8915,-2.61234 0.8405,-5.75092 1.6884,-1.54504 0.8485,1.72586 -0.7024,5.1602 -1.6884,1.54504 z m 4.5919,-1.82793 c 1.6025,-1.85967 3.6635,-1.43607 5.2605,-2.98816 3.9626,1.46685 -2.6295,3.48646 -3.7286,4.9303 -1.9952,0.50428 -2.9215,-0.26884 -1.5319,-1.94214 z m -9.2395,-3.57149 c 0.5999,-5.93389 4.1759,2.63959 0.6117,2.37949 -0.5227,-0.66971 -0.5818,-1.56896 -0.6117,-2.37949 z m -5.43,0.69664 c -0.366,-3.22691 5.2275,-3.96176 2.5144,-0.12486 -0.5163,1.26584 -1.7962,1.28548 -2.5144,0.12486 z m 16.43,-54.05429 c -0.3067,-2.8402 2.7857,-3.62344 2.3713,-0.3321 1.7775,2.89278 -2.5383,3.01913 -2.3713,0.3321 z m 7,-4.85902 c -0.4203,-5.12456 8.4363,-1.94337 4.3583,0.72111 -1.3692,0.0212 -3.344,0.40232 -4.3583,-0.72111 z m -1,-5.82423 c 0.171,-4.09108 9.3884,-5.68544 7.3598,-0.21811 -2.2194,0.24293 -4.553,-2.11058 -6.7961,0.31894 l -0.4123,0.0536 -0.1514,-0.1544 0,0 z"
+ style="fill:#b4c3d5"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33157"
+ d="m 1168.8619,861.63169 c -0.6243,-3.55935 -2.6973,-6.3569 -0.7215,-9.98987 0.1253,-5.45244 -2.7911,-10.65923 -7.0967,-13.89447 -1.2068,-2.85452 5.3278,0.70573 6.9238,1.01004 7.6726,3.41307 13.8636,11.22205 14.0998,19.78329 0.2021,5.97005 -6.5489,6.42322 -10.9269,5.80556 -1.7323,0.15131 -2.5832,-1.0909 -2.2785,-2.71455 z m -32.0895,-20.80784 c -4.434,-1.14416 -6.6424,-4.93813 -9.6183,-8.11599 -5.8032,-0.96373 3.5761,-5.23189 -0.1243,-8.64226 -1.2887,-3.82859 -5.1974,-7.73842 -3.9124,-11.88366 3.5763,0.77406 7.9814,4.56157 11.4304,0.4736 4.5442,-4.37751 7.176,-10.57138 8.2612,-16.71192 0.4026,-6.44762 0.588,-13.17942 -1.3863,-19.39442 -3.6853,-5.04182 5.4099,-3.08901 7.4628,-1.22179 7.1884,5.3533 8.7099,15.22614 8.4974,23.6257 -0.2493,8.4967 -3.1434,16.73146 -7.7275,23.84074 -2.8899,4.70712 3.7802,7.4172 6.1701,10.48571 2.372,1.75978 2.7988,3.59039 -0.4709,3.94333 -4.9323,3.54041 -11.3816,5.84263 -17.44,4.36937 l -0.655,-0.33776 -0.4872,-0.43065 0,0 z"
+ style="fill:#b3bcc9"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33159"
+ d="m 1169.677,857.68169 c 0.6954,-5.83229 -1.1934,-11.42869 -3.0624,-16.84619 1.705,-4.06189 7.7076,2.15936 9.0817,4.7283 3.4747,5.23289 5.9898,11.23822 6.7494,17.4968 -2.7491,2.48603 -8.7127,1.53936 -12.2569,0.52734 -1.141,-1.73296 -0.478,-3.96643 -0.5118,-5.90625 z m -35.079,-19.01192 c -4.3537,-1.9881 -8.7378,-7.05736 -6.2671,-11.96771 0.379,-3.87987 -6.1972,-8.74866 -2.6155,-11.649 3.8173,-0.0455 7.9232,-0.57969 10.7008,-3.51648 7.5387,-7.6238 9.3732,-19.29758 8.1101,-29.5788 -0.2934,-2.73658 -3.4831,-10.05061 2.1384,-6.90166 5.5905,2.86145 9.3559,8.5583 9.9536,14.79053 1.4524,11.54814 -0.9993,23.83469 -7.7852,33.40876 -3.2246,5.24149 5.7034,6.58552 5.5499,11.37054 -1.1447,5.117 -7.7589,5.97682 -12.1564,5.8855 -2.6283,-0.12443 -5.2379,-0.7377 -7.6286,-1.84168 z"
+ style="fill:#a9b6c7"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33161"
+ d="m 1171.8619,856.01273 c 0.1763,-4.74944 -0.356,-9.57132 -2.7594,-13.74195 1.4975,-4.03011 6.8274,2.83782 8.0786,5.41566 2.902,4.84584 4.2902,10.45516 5.3821,15.90906 -3.3515,1.42092 -11.5911,2.28284 -10.6646,-3.67955 -0.043,-1.30058 -0.035,-2.60214 -0.037,-3.90322 z m -32,-17.72887 c -5.8477,-1.14965 -11.4267,-6.22518 -11.1545,-12.52353 -1.5003,-2.03434 -5.7153,-8.53816 -0.064,-7.68024 6.7325,0.44741 11.3131,-5.91275 13.9722,-11.28778 4.5289,-9.55307 5.8263,-20.85993 2.5334,-31.00041 2.1812,-2.95131 6.7947,3.62386 8.5128,5.81939 4.3355,6.99236 3.5563,15.74508 2.3456,23.52395 -1.0453,6.26492 -3.4373,12.23617 -6.8939,17.55368 -4.1164,5.37273 4.8634,7.17375 5.4,11.35344 -3.346,2.78013 -7.8431,4.85802 -12.3007,4.56282 -0.7887,-0.0649 -1.5719,-0.18321 -2.3507,-0.32132 z"
+ style="fill:#a5aeba"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33163"
+ d="m 1174.4426,862.18169 c -1.1883,-6.44151 -0.7153,-13.29528 -3.2234,-19.40763 5.2155,1.71368 7.2191,7.68437 8.6149,12.50189 0.4675,3.74753 5.9571,10.77397 -1.5469,9.15113 -1.5971,0.0659 -3.7451,-0.21664 -3.8446,-2.24539 z m -37.0807,-25.70949 c -5.2137,-2.6559 -8.3881,-8.12562 -9.4507,-13.73768 -3.0238,-5.26702 5.3254,-2.26568 7.462,-5.22634 8.4902,-5.8936 12.466,-16.48626 13.5185,-26.43011 1.0826,-4.83991 -1.472,-10.13976 -0.9548,-14.48335 7.0302,4.3261 9.109,13.3759 8.6445,21.14239 -0.4724,9.88319 -4.2133,19.33825 -9.4291,27.6489 0.196,3.60522 8.594,7.29794 2.2185,10.91971 -3.6456,2.02664 -8.2528,1.70657 -12.0089,0.16648 z"
+ style="fill:#99a5b4"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#a5aeba;fill-opacity:1"
+ d="m 1137.625,771.4375 c -3.6671,1.06383 -7.4523,1.96161 -10.8672,3.68958 -3.3601,2.52275 -5.3983,6.30741 -7.8225,9.64449 -3.2743,5.92464 -4.7689,12.59418 -6.8342,18.98785 -0.8946,3.19887 -1.9543,6.39515 -2.4616,9.67244 0.274,3.22935 1.9063,6.12977 2.634,9.24893 1.556,2.56144 6.3235,2.61939 7.8721,0.001 1.1858,-2.35978 1.0134,-5.10166 1.7006,-7.61029 0.7858,-5.21212 1.5444,-10.48577 3.6263,-15.37326 1.7541,-4.33647 3.4935,-8.8399 6.5285,-12.46053 3.3879,-3.5886 7.8318,-5.96537 12.2205,-8.10315 1.8391,-1.62624 5.7259,0.0661 6.4438,-2.51986 -1.0379,-2.43936 -3.9525,-3.05083 -6.1812,-3.99677 -2.2038,-0.75251 -4.5258,-1.19495 -6.8591,-1.1805 z"
+ id="path33165"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33167"
+ d="m 1177.6504,862.68169 c -2.1223,-4.15541 -2.6296,-9.16791 -2.1104,-13.77435 2.7363,-0.59646 3.4894,6.19672 4.6159,8.71136 0.5097,2.43464 4.4493,8.54497 -0.8865,6.29893 l -0.882,-0.55645 -0.737,-0.67949 0,0 z m -43.7561,-31 c -2.9459,-2.28349 -7.1894,-8.93795 -1.3629,-10.29495 8.0732,-2.18725 12.6924,-10.20871 15.4879,-17.52164 2.7539,-7.08868 3.0096,-14.78608 2.3457,-22.27209 0.5717,-3.73359 4.2685,3.25102 4.563,4.83879 2.8335,10.0499 1.0854,21.07617 -3.2632,30.43572 -1.4732,3.78479 -7.2463,8.22354 -2.8605,12.027 4.9081,2.55146 1.5708,6.14222 -2.5582,6.40295 -4.4148,1.02741 -9.1521,-0.44638 -12.3518,-3.61578 z"
+ style="fill:#929ca9"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33169"
+ d="m 1145.9405,777.3343 c -2.0799,0.18884 -4.1669,0.40492 -6.1906,0.94896 -1.9627,0.5342 -3.8686,1.27922 -5.6783,2.21843 -1.2785,0.73626 -2.5949,1.42794 -3.7322,2.38395 -1.8707,1.43729 -3.5016,3.15878 -5.0864,4.90596 -0.8029,1.15256 -1.6615,2.27465 -2.3582,3.49676 -1.046,1.96206 -1.9268,4.01594 -2.5571,6.15457 -1.0282,3.21812 -1.896,6.48637 -2.7733,9.74933 -0.7909,3.03279 -1.588,6.06499 -2.3162,9.1137 -0.7253,3.08542 -1.2105,6.22721 -1.4506,9.38975 -0.081,1.13925 -0.2781,2.27668 -0.1383,3.4194 0.063,1.17401 0.1471,2.34871 0.2812,3.51613 0.029,0.4414 0.6411,0.89938 0.8125,0.2852 0.4378,-0.94952 0.9849,-1.91427 2.0312,-2.2499 0.7705,-0.38049 1.6447,-0.59323 2.4947,-0.42825 0.9951,0.21221 2.0235,0.52492 2.8728,1.10639 1.1525,0.77221 2.171,1.78388 2.8259,3.02642 0.6743,0.80469 0.8672,1.95481 1.4941,2.72826 0.5562,0.0524 0.4674,-0.85819 0.609,-1.26216 0.2079,-1.90111 -0.2258,-3.78406 -0.5465,-5.646 -0.3256,-1.66356 -0.8042,-3.29605 -0.9989,-4.98392 -0.2714,-1.83746 -0.6034,-3.67458 -0.5936,-5.53947 -0.058,-2.02613 -0.1665,-4.0504 -0.1442,-6.07822 -0.035,-1.25362 -10e-4,-2.50504 0.1134,-3.75393 0.2442,-2.94171 0.5633,-5.87881 0.9983,-8.79814 0.6275,-2.99837 1.3389,-6.00761 2.6429,-8.78895 0.6163,-1.38446 1.239,-2.77296 1.9585,-4.10418 0.7208,-1.16601 1.5962,-2.2571 2.737,-3.02426 1.7132,-1.18944 3.5558,-2.17039 5.4483,-3.03134 1.8042,-0.82459 3.6119,-1.64619 5.3383,-2.63134 0.8226,-0.40647 1.8837,-0.68073 2.3005,-1.5918 0.1274,-0.31045 0.04,-0.73594 -0.3942,-0.53135 z"
+ style="fill:#929daa;fill-opacity:1"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path33171"
+ d="m 1178.5691,861.68169 c -1.0134,-1.80767 1.2879,-7.15927 1.2421,-2.50022 0.4241,2.21568 -0.4446,7.79222 -1.2421,2.50022 l 0,0 z m -43.0654,-31 c -2.9868,-1.67058 -7.0066,-6.75545 -1.2627,-7.50408 4.8324,-2.49559 9.8284,-5.69893 12.5216,-10.55778 1.1155,-4.62828 4.1189,-8.61975 4.8415,-13.41654 0.9852,-4.74585 2.5256,-9.7007 1.4529,-14.54866 3.4059,4.0618 2.7268,9.97803 2.4056,14.94875 -0.9957,8.63373 -3.5835,17.28503 -8.7848,24.35117 -2.2871,3.74841 7.1983,8.26089 -0.2126,9.84972 -3.9181,1.46539 -7.9707,-0.66912 -10.9615,-3.12258 z"
+ style="fill:#8a95a3"
+ inkscape:export-filename="/home/vjrj/proyectos/dev/kune/trunk/img/icons/unknown-gen.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33075"
+ id="use33273"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33077"
+ id="use33275"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33079"
+ id="use33277"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33081"
+ id="use33279"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33083"
+ id="use33281"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33085"
+ id="use33283"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33087"
+ id="use33285"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33089"
+ id="use33287"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33091"
+ id="use33289"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33093"
+ id="use33291"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33095"
+ id="use33293"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33097"
+ id="use33295"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33099"
+ id="use33297"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33101"
+ id="use33299"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33103"
+ id="use33301"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33105"
+ id="use33303"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33141"
+ id="use33305"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33143"
+ id="use33307"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33145"
+ id="use33309"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33147"
+ id="use33311"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33149"
+ id="use33313"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33151"
+ id="use33315"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33153"
+ id="use33317"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33155"
+ id="use33319"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33157"
+ id="use33321"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33159"
+ id="use33323"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33161"
+ id="use33325"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33163"
+ id="use33327"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33165"
+ id="use33329"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33167"
+ id="use33331"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33169"
+ id="use33333"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
+ <use
+ x="0"
+ y="0"
+ xlink:href="#path33171"
+ id="use33335"
+ transform="matrix(0.24124108,0,0,0.24124108,859.95489,750.3348)"
+ width="744.09448"
+ height="1052.3622" />
</g>
</svg>
Modified: trunk/img/icons/unknown-gen.png
===================================================================
(Binary files differ)
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/pom.xml 2011-03-07 17:08:07 UTC (rev 1269)
@@ -542,12 +542,12 @@
<dependency>
<groupId>org.waveprotocol</groupId>
<artifactId>waveinabox-server-custom</artifactId>
- <version>0.3.6</version>
+ <version>0.3.7</version>
</dependency>
<dependency>
<groupId>org.waveprotocol</groupId>
<artifactId>proto-gwt</artifactId>
- <version>0.3.1</version>
+ <version>0.3.7</version>
</dependency>
<dependency>
<groupId>org.waveprotocol</groupId>
Modified: trunk/src/main/java/cc/kune/chat/client/ChatParts.java
===================================================================
--- trunk/src/main/java/cc/kune/chat/client/ChatParts.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/chat/client/ChatParts.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -6,9 +6,10 @@
import cc.kune.core.client.sn.actions.conditions.IsLoggedCondition;
import cc.kune.core.client.sn.actions.conditions.IsNotMeCondition;
import cc.kune.core.client.sn.actions.conditions.IsPersonCondition;
-import cc.kune.core.client.sn.actions.registry.SNAdminsMenuItemsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNCollabsMenuItemsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNPendingsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNAdminsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNCollabsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNPendingsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.UserSNMenuItemsRegistry;
import cc.kune.core.client.state.Session;
import com.google.inject.Inject;
@@ -19,12 +20,14 @@
@Inject
public ChatParts(final Session session, final Provider<ChatSitebarActions> chatActionsProvider,
final Provider<AddAsBuddieHeaderButton> buddieButton,
- final Provider<SNAdminsMenuItemsRegistry> snAdminsRegistry,
- final Provider<SNCollabsMenuItemsRegistry> snCollabsItemsRegistry,
- final Provider<SNPendingsMenuItemsRegistry> snPendingItemsRegistry, final IsNotMeCondition isNotMe,
+ final Provider<GroupSNAdminsMenuItemsRegistry> snAdminsRegistry,
+ final Provider<GroupSNCollabsMenuItemsRegistry> snCollabsItemsRegistry,
+ final Provider<GroupSNPendingsMenuItemsRegistry> snPendingItemsRegistry,
+ final Provider<UserSNMenuItemsRegistry> userItemsRegistry, final IsNotMeCondition isNotMe,
final IsPersonCondition isPersonCondition,
final Provider<StartChatWithMemberAction> startChatWithMemberAction, final IsLoggedCondition isLogged,
- final Provider<StartChatWithUserAction> startChatWithUserAction) {
+ final Provider<StartChatWithUserAction> startChatWithUserAction,
+ final Provider<StartChatWithThisBuddieAction> startChatWithBuddieAction) {
session.onInitDataReceived(true, new AppStartHandler() {
@Override
public void onAppStart(final AppStartEvent event) {
@@ -39,6 +42,15 @@
return item;
}
};
+ final Provider<MenuItemDescriptor> startChatWithBuddieItem = new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(startChatWithBuddieAction.get());
+ item.add(isLogged);
+ item.add(isPersonCondition);
+ return item;
+ }
+ };
final Provider<MenuItemDescriptor> startChatWithUserItem = new Provider<MenuItemDescriptor>() {
@Override
public MenuItemDescriptor get() {
@@ -52,6 +64,7 @@
snAdminsRegistry.get().add(startChatWithMemberItem);
snCollabsItemsRegistry.get().add(startChatWithMemberItem);
snPendingItemsRegistry.get().add(startChatWithUserItem);
+ userItemsRegistry.get().add(startChatWithBuddieItem);
buddieButton.get();
}
});
Modified: trunk/src/main/java/cc/kune/chat/client/StartChatWithMemberAction.java
===================================================================
--- trunk/src/main/java/cc/kune/chat/client/StartChatWithMemberAction.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/chat/client/StartChatWithMemberAction.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -21,7 +21,7 @@
final Provider<ChatClient> chatClient) {
this.i18n = i18n;
this.chatClient = chatClient;
- putValue(NAME, i18n.t("Start a chat with this member"));
+ putValue(NAME, i18n.t("Chat with this member"));
putValue(Action.SMALL_ICON, res.newChat());
}
Added: trunk/src/main/java/cc/kune/chat/client/StartChatWithThisBuddieAction.java
===================================================================
--- trunk/src/main/java/cc/kune/chat/client/StartChatWithThisBuddieAction.java (rev 0)
+++ trunk/src/main/java/cc/kune/chat/client/StartChatWithThisBuddieAction.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,16 @@
+package cc.kune.chat.client;
+
+import cc.kune.core.client.resources.CoreResources;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class StartChatWithThisBuddieAction extends StartChatWithMemberAction {
+ @Inject
+ public StartChatWithThisBuddieAction(final I18nTranslationService i18n, final CoreResources res,
+ final Provider<ChatClient> chatClient) {
+ super(i18n, res, chatClient);
+ putValue(NAME, i18n.t("Chat with your buddie"));
+ }
+}
Modified: trunk/src/main/java/cc/kune/chat/client/StartChatWithUserAction.java
===================================================================
--- trunk/src/main/java/cc/kune/chat/client/StartChatWithUserAction.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/chat/client/StartChatWithUserAction.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -11,6 +11,6 @@
public StartChatWithUserAction(final I18nTranslationService i18n, final CoreResources res,
final Provider<ChatClient> chatClient) {
super(i18n, res, chatClient);
- putValue(NAME, i18n.t("Start a chat with this person"));
+ putValue(NAME, i18n.t("Chat with this person"));
}
}
Modified: trunk/src/main/java/cc/kune/client/KuneGinjector.java
===================================================================
--- trunk/src/main/java/cc/kune/client/KuneGinjector.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/client/KuneGinjector.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -40,8 +40,8 @@
import cc.kune.core.client.sitebar.SitebarActionsPresenter;
import cc.kune.core.client.sitebar.logo.SiteLogoPresenter;
import cc.kune.core.client.sitebar.spaces.SpaceSelectorPresenter;
-import cc.kune.core.client.sn.BuddiesAndParticipationPresenter;
-import cc.kune.core.client.sn.GroupMembersPresenter;
+import cc.kune.core.client.sn.UserSNPresenter;
+import cc.kune.core.client.sn.GroupSNPresenter;
import cc.kune.core.client.state.SiteTokenListeners;
import cc.kune.core.client.state.StateManager;
import cc.kune.core.client.ui.footer.license.EntityLicensePresenter;
@@ -66,7 +66,7 @@
* see the GWTPlatform doc
*/
- AsyncProvider<BuddiesAndParticipationPresenter> getBuddiesAndParticipationPresenter();
+ AsyncProvider<UserSNPresenter> getBuddiesAndParticipationPresenter();
ChatClient getChatClient();
@@ -90,7 +90,7 @@
GlobalShortcutRegister getGlobalShortcutRegister();
- AsyncProvider<GroupMembersPresenter> getGroupMembersPresenter();
+ AsyncProvider<GroupSNPresenter> getGroupMembersPresenter();
GuiProvider getGuiProvider();
Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -47,11 +47,13 @@
}
protected void addStyle(final String style) {
- super.addStyleName(style);
+ if (super.isOrWasAttached()) {
+ super.addStyleName(style);
+ }
}
protected void clearStyles() {
- if (super.isAttached()) {
+ if (super.isOrWasAttached()) {
super.setStyleName("");
}
}
Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuItemDescriptor.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuItemDescriptor.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuItemDescriptor.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -20,15 +20,31 @@
package cc.kune.common.client.actions.ui.descrip;
import cc.kune.common.client.actions.AbstractAction;
-import cc.kune.common.client.log.Log;
public class MenuItemDescriptor extends AbstractGuiActionDescrip {
+ /**
+ * A simple menu item definition.
+ *
+ * You must define a menu item with its parent menu. Only use this
+ * constructor if you'll set the parent menu in the future (before render)
+ *
+ * @param action
+ */
public MenuItemDescriptor(final AbstractAction action) {
super(action);
- Log.debug("You must define a menu item with its parent menu");
}
+ /**
+ *
+ * A simple menu item definition.
+ *
+ * This is the preferred and more common used constructor.
+ *
+ * @param parent
+ * menu
+ * @param action
+ */
public MenuItemDescriptor(final MenuDescriptor parent, final AbstractAction action) {
super(action);
setParent(parent);
Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuTitleItemDescriptor.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuTitleItemDescriptor.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/MenuTitleItemDescriptor.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -24,16 +24,30 @@
public class MenuTitleItemDescriptor extends MenuItemDescriptor {
- public MenuTitleItemDescriptor(final MenuDescriptor parent) {
+ /**
+ * This GUI element only show a title (or header) in the menu, in the
+ * position you add it to the menu. Useful before a radio group, etc This is
+ * the preferred and more common used constructor.
+ *
+ * @param parent
+ * menu
+ * @param title
+ * the menu title
+ */
+ public MenuTitleItemDescriptor(final MenuDescriptor parent, final String title) {
super(AbstractAction.NO_ACTION);
- setParent(parent);
- }
-
- public MenuTitleItemDescriptor(final MenuDescriptor parent, final String title) {
- this(parent);
putValue(Action.NAME, title);
}
+ /**
+ * This GUI element only show a title (or header) in the menu, in the
+ * position you add it to the menu. Useful before a radio group, etc You
+ * must define a menu item with its parent menu. Only use this constructor
+ * if you'll set the parent menu in the future (before render)
+ *
+ * @param title
+ * the menu title
+ */
public MenuTitleItemDescriptor(final String title) {
super(AbstractAction.NO_ACTION);
putValue(Action.NAME, title);
Modified: trunk/src/main/java/cc/kune/core/client/CoreGinModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/CoreGinModule.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -68,14 +68,16 @@
import cc.kune.core.client.sitebar.logo.SiteLogoViewImpl;
import cc.kune.core.client.sitebar.spaces.SpaceSelectorPresenter;
import cc.kune.core.client.sitebar.spaces.SpaceSelectorViewImpl;
-import cc.kune.core.client.sn.BuddiesAndParticipationPanel;
-import cc.kune.core.client.sn.BuddiesAndParticipationPresenter;
-import cc.kune.core.client.sn.GroupMembersPanel;
-import cc.kune.core.client.sn.GroupMembersPresenter;
-import cc.kune.core.client.sn.actions.registry.GroupMembersActionsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNAdminsMenuItemsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNCollabsMenuItemsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNPendingsMenuItemsRegistry;
+import cc.kune.core.client.sn.GroupSNPanel;
+import cc.kune.core.client.sn.GroupSNPresenter;
+import cc.kune.core.client.sn.UserSNPanel;
+import cc.kune.core.client.sn.UserSNPresenter;
+import cc.kune.core.client.sn.actions.registry.GroupSNAdminsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNBottomActionsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNCollabsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNPendingsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.UserSNBottomActionsRegistry;
+import cc.kune.core.client.sn.actions.registry.UserSNMenuItemsRegistry;
import cc.kune.core.client.state.AccessRightsClientManager;
import cc.kune.core.client.state.ContentProvider;
import cc.kune.core.client.state.ContentProviderDefault;
@@ -141,11 +143,10 @@
SitebarActionsPanel.class, SitebarActionsPresenter.SitebarActionsProxy.class);
bindPresenter(NewGroupPresenter.class, NewGroupView.class, NewGroupPanel.class,
NewGroupPresenter.NewGroupProxy.class);
- bindPresenter(GroupMembersPresenter.class, GroupMembersPresenter.GroupMembersView.class,
- GroupMembersPanel.class, GroupMembersPresenter.GroupMembersProxy.class);
- bindPresenter(BuddiesAndParticipationPresenter.class,
- BuddiesAndParticipationPresenter.BuddiesAndParticipationView.class, BuddiesAndParticipationPanel.class,
- BuddiesAndParticipationPresenter.BuddiesAndParticipationProxy.class);
+ bindPresenter(GroupSNPresenter.class, GroupSNPresenter.GroupSNView.class, GroupSNPanel.class,
+ GroupSNPresenter.GroupSNProxy.class);
+ bindPresenter(UserSNPresenter.class, UserSNPresenter.UserSNView.class, UserSNPanel.class,
+ UserSNPresenter.UserSNProxy.class);
bindPresenter(EntityLicensePresenter.class, EntityLicensePresenter.EntityLicenseView.class,
EntityLicensePanel.class, EntityLicensePresenter.EntityLicenseProxy.class);
bindPresenter(EntityHeaderPresenter.class, EntityHeaderPresenter.EntityHeaderView.class,
@@ -192,16 +193,17 @@
bind(CoreParts.class).asEagerSingleton();
// SN
- bind(SNAdminsMenuItemsRegistry.class).in(Singleton.class);
- bind(SNCollabsMenuItemsRegistry.class).in(Singleton.class);
- bind(SNPendingsMenuItemsRegistry.class).in(Singleton.class);
- bind(GroupMembersActionsRegistry.class).in(Singleton.class);
+ bind(GroupSNAdminsMenuItemsRegistry.class).in(Singleton.class);
+ bind(GroupSNCollabsMenuItemsRegistry.class).in(Singleton.class);
+ bind(GroupSNPendingsMenuItemsRegistry.class).in(Singleton.class);
+ bind(GroupSNBottomActionsRegistry.class).in(Singleton.class);
+ bind(UserSNBottomActionsRegistry.class).in(Singleton.class);
+ bind(UserSNMenuItemsRegistry.class).in(Singleton.class);
bind(SiteUserOptionsPresenter.class).in(Singleton.class);
bind(SiteUserOptions.class).to(SiteUserOptionsPresenter.class).in(Singleton.class);
bind(SitebarNewGroupLink.class).in(Singleton.class);
bind(SitebarSignInLink.class).in(Singleton.class);
bind(SitebarSignOutLink.class).in(Singleton.class);
-
}
}
Modified: trunk/src/main/java/cc/kune/core/client/CoreParts.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/CoreParts.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/CoreParts.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -3,9 +3,10 @@
import cc.kune.core.client.init.AppStartEvent;
import cc.kune.core.client.init.AppStartEvent.AppStartHandler;
import cc.kune.core.client.sitebar.SiteUserOptionsPresenter;
-import cc.kune.core.client.sn.BuddiesAndParticipationPresenter;
-import cc.kune.core.client.sn.GroupMembersPresenter;
-import cc.kune.core.client.sn.actions.GroupMembersConfActions;
+import cc.kune.core.client.sn.UserSNPresenter;
+import cc.kune.core.client.sn.GroupSNPresenter;
+import cc.kune.core.client.sn.actions.registry.GroupMembersConfActions;
+import cc.kune.core.client.sn.actions.registry.UserSNConfActions;
import cc.kune.core.client.state.Session;
import cc.kune.core.client.ui.footer.license.EntityLicensePresenter;
@@ -15,14 +16,16 @@
public class CoreParts {
@Inject
- public CoreParts(final Session session, final Provider<GroupMembersPresenter> groupMembersPresenter,
- final Provider<BuddiesAndParticipationPresenter> buddiesAndParticipationPresenter,
+ public CoreParts(final Session session, final Provider<GroupSNPresenter> groupMembersPresenter,
+ final Provider<UserSNPresenter> buddiesAndParticipationPresenter,
final Provider<GroupMembersConfActions> groupMembersConfActions,
- final Provider<SiteUserOptionsPresenter> userOptions, final Provider<EntityLicensePresenter> licenseFooter) {
+ final Provider<UserSNConfActions> userSNConfActions, final Provider<SiteUserOptionsPresenter> userOptions,
+ final Provider<EntityLicensePresenter> licenseFooter) {
session.onInitDataReceived(true, new AppStartHandler() {
@Override
public void onAppStart(final AppStartEvent event) {
groupMembersConfActions.get();
+ userSNConfActions.get();
groupMembersPresenter.get();
buddiesAndParticipationPresenter.get();
userOptions.get();
Modified: trunk/src/main/java/cc/kune/core/client/resources/CoreMessages.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/resources/CoreMessages.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/resources/CoreMessages.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -20,7 +20,7 @@
package cc.kune.core.client.resources;
public final class CoreMessages {
- public final static String BUDDIES_NOT_PUBLIC = "The buddies of this user are not public";
+ public final static String BUDDIES_NOT_PUBLIC = "The buddies and group participation of this user are not public";
public final static String EMAIL_IN_USE = "This email address is being used by another user. Please, try with another one";
public final static String ENT_LOGO_SELECTOR_NORMAL_TITLE = "Logo";
public final static String ENT_LOGO_SELECTOR_PERSON_TITLE = "Avatar";
Modified: trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -9,7 +9,6 @@
import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip;
import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
import cc.kune.common.client.ui.BasicThumb;
-import cc.kune.core.shared.dto.GroupDTO;
import cc.kune.core.shared.i18n.I18nTranslationService;
import cc.kune.gspace.client.WsArmor;
@@ -50,6 +49,8 @@
@UiField
Label firstCategoryLabel;
@UiField
+ DockLayoutPanel firstCategoryPanel;
+ @UiField
Label firstDeckLabel;
@UiField
FlowPanel mainPanel;
@@ -97,9 +98,9 @@
actions.clear();
}
- public BasicThumb createThumb(final GroupDTO group, final String avatarUrl, final String tooltip,
+ public BasicThumb createThumb(final String text, final String avatarUrl, final String tooltip,
final String tooltipTitle, final GuiActionDescCollection menuitems) {
- final BasicThumb thumb = new BasicThumb(avatarUrl, AVATARSIZE, group.getShortName(), AVATARLABELMAXSIZE, false);
+ final BasicThumb thumb = new BasicThumb(avatarUrl, AVATARSIZE, text, AVATARLABELMAXSIZE, false);
final MenuDescriptor menu = new MenuDescriptor();
menu.setStandalone(true);
menu.putValue(AbstractGxtMenuGui.MENU_POSITION, AbstractGxtMenuGui.MenuPosition.bl);
Modified: trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml 2011-03-07 17:08:07 UTC (rev 1269)
@@ -14,7 +14,7 @@
<g:Label ui:field="firstDeckLabel" addStyleNames="k-sn-novisible-label" />
<g:Label ui:field="sndDeckLabel" addStyleNames="k-sn-orphan-label" />
<g:FlowPanel width="100%" ui:field="categoriesFlow">
- <g:DockLayoutPanel unit="EM" width="100%"
+ <g:DockLayoutPanel unit="EM" width="100%" ui:field="firstCategoryPanel"
addStyleNames="k-sn-adminspanel" height="80px">
<g:north size="1.2">
<g:FlowPanel>
Added: trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPresenter.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPresenter.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,44 @@
+package cc.kune.core.client.sn;
+
+import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.common.client.actions.ui.descrip.MenuTitleItemDescriptor;
+import cc.kune.core.client.services.FileDownloadUtils;
+import cc.kune.core.client.sn.actions.registry.AbstractSNMembersActionsRegistry;
+import cc.kune.core.shared.dto.GroupDTO;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Provider;
+import com.gwtplatform.mvp.client.Presenter;
+import com.gwtplatform.mvp.client.View;
+import com.gwtplatform.mvp.client.proxy.Proxy;
+
+public abstract class AbstractSNPresenter<V extends View, Proxy_ extends Proxy<?>> extends Presenter<View, Proxy<?>> {
+ protected static final String GROUP_NO_AVATAR_IMAGE = "images/group-def-icon.png";
+ protected static final String PERSON_NO_AVATAR_IMAGE = "images/unknown.jpg";
+ protected final Provider<FileDownloadUtils> downloadProvider;
+
+ public AbstractSNPresenter(final EventBus eventBus, final View view, final Proxy<?> proxy,
+ final Provider<FileDownloadUtils> downloadProvider) {
+ super(eventBus, view, proxy);
+ this.downloadProvider = downloadProvider;
+ }
+
+ protected GuiActionDescCollection createMenuItems(final Object target,
+ final AbstractSNMembersActionsRegistry registry, final String title) {
+ final GuiActionDescCollection items = new GuiActionDescCollection();
+ items.add(new MenuTitleItemDescriptor(title));
+ for (final Provider<MenuItemDescriptor> provider : registry) {
+ final MenuItemDescriptor menuItem = provider.get();
+ menuItem.setTarget(target);
+ items.add(menuItem);
+ }
+ return items;
+ }
+
+ protected String getAvatar(final GroupDTO group) {
+ return group.hasLogo() ? downloadProvider.get().getLogoImageUrl(group.getStateToken())
+ : group.isPersonal() ? PERSON_NO_AVATAR_IMAGE : GROUP_NO_AVATAR_IMAGE;
+ }
+
+}
Deleted: trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPanel.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPanel.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,84 +0,0 @@
-package cc.kune.core.client.sn;
-
-import cc.kune.common.client.actions.ui.ActionFlowPanel;
-import cc.kune.common.client.actions.ui.bind.GuiProvider;
-import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
-import cc.kune.common.client.ui.BasicThumb;
-import cc.kune.core.client.resources.CoreMessages;
-import cc.kune.core.client.sn.BuddiesAndParticipationPresenter.BuddiesAndParticipationView;
-import cc.kune.core.shared.dto.GroupDTO;
-import cc.kune.core.shared.i18n.I18nTranslationService;
-import cc.kune.gspace.client.WsArmor;
-
-import com.google.inject.Inject;
-
-public class BuddiesAndParticipationPanel extends AbstractSNPanel implements BuddiesAndParticipationView {
-
- @Inject
- public BuddiesAndParticipationPanel(final I18nTranslationService i18n, final GuiProvider guiProvider,
- final WsArmor armor) {
- super(i18n, guiProvider, armor);
- setVisible(false);
- mainTitle.setText(i18n.t("His/her Net:"));
- mainTitle.setTitle(i18n.t("This user buddies and groups where participes"));
- firstCategoryLabel.setText(i18n.t("Buddies"));
- firstCategoryLabel.setTitle(i18n.t("This user buddies"));
- sndCategoryLabel.setText(i18n.t("and participates in"));
- sndCategoryLabel.setTitle(i18n.t("Groups in which this user participates"));
- firstDeckLabel.setText(i18n.t(CoreMessages.BUDDIES_NOT_PUBLIC));
- trdCategoryLabel.setText("NOT USED");
- trdCategoryLabel.setTitle("NOT USED");
- trdCategoryPanel.setVisible(false);
- sndDeckLabel.setText("NOT USED");
- bottomActionsToolbar = new ActionFlowPanel(guiProvider);
- bottomPanel.add(bottomActionsToolbar);
- bottomActionsToolbar.setStyleName("k-sn-bottomPanel-actions");
- armor.getEntityToolsNorth().add(widget);
- deck.showWidget(2);
- }
-
- @Override
- public void addBuddie(final GroupDTO group, final String avatarUrl, final String tooltip,
- final String tooltipTitle, final GuiActionDescCollection menu) {
- final BasicThumb thumb = createThumb(group, avatarUrl, tooltip, tooltipTitle, menu);
- firstCategoryFlow.add(thumb);
- }
-
- @Override
- public void addParticipation(final GroupDTO group, final String avatarUrl, final String tooltip,
- final String tooltipTitle, final GuiActionDescCollection menu) {
- final BasicThumb thumb = createThumb(group, avatarUrl, tooltip, tooltipTitle, menu);
- sndCategoryFlow.add(thumb);
- }
-
- @Override
- public void setBuddiesCount(final int count) {
- firstCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
- }
-
- @Override
- public void setParticipationCount(final int count) {
- sndCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
- }
-
- @Override
- public void setParticipationVisible(final boolean visible) {
- sndCategoryPanel.setVisible(visible);
- }
-
- @Override
- public void setVisible(final boolean visible) {
- mainPanel.setVisible(visible);
- }
-
- @Override
- public void showBuddies() {
- deck.showWidget(2);
- }
-
- @Override
- public void showBuddiesNotPublic() {
- deck.showWidget(0);
- }
-
-}
Deleted: trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPresenter.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPresenter.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,220 +0,0 @@
-package cc.kune.core.client.sn;
-
-import java.util.List;
-
-import cc.kune.common.client.actions.ui.IsActionExtensible;
-import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
-import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
-import cc.kune.core.client.services.FileDownloadUtils;
-import cc.kune.core.client.sn.actions.registry.AbstractSNMembersActionsRegistry;
-import cc.kune.core.client.sn.actions.registry.GroupMembersActionsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNAdminsMenuItemsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNCollabsMenuItemsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNPendingsMenuItemsRegistry;
-import cc.kune.core.client.state.Session;
-import cc.kune.core.client.state.SocialNetworkChangedEvent;
-import cc.kune.core.client.state.StateChangedEvent;
-import cc.kune.core.client.state.StateManager;
-import cc.kune.core.shared.domain.utils.AccessRights;
-import cc.kune.core.shared.dto.GroupDTO;
-import cc.kune.core.shared.dto.ParticipationDataDTO;
-import cc.kune.core.shared.dto.StateAbstractDTO;
-
-import com.google.gwt.event.shared.EventBus;
-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 BuddiesAndParticipationPresenter
- extends
- Presenter<BuddiesAndParticipationPresenter.BuddiesAndParticipationView, BuddiesAndParticipationPresenter.BuddiesAndParticipationProxy> {
-
- @ProxyCodeSplit
- public interface BuddiesAndParticipationProxy extends Proxy<BuddiesAndParticipationPresenter> {
- }
-
- public interface BuddiesAndParticipationView extends View {
-
- void addBuddie(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
- GuiActionDescCollection menu);
-
- void addParticipation(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
- GuiActionDescCollection menu);
-
- void clear();
-
- IsActionExtensible getBottomToolbar();
-
- void setBuddiesCount(int count);
-
- void setParticipationCount(int count);
-
- void setParticipationVisible(boolean visible);
-
- void setVisible(boolean visible);
-
- void showBuddies();
-
- void showBuddiesNotPublic();
- }
-
- private final GroupMembersActionsRegistry actionsRegistry;
- private final SNAdminsMenuItemsRegistry adminsMenuItemsRegistry;
- private final SNCollabsMenuItemsRegistry collabsMenuItemsRegistry;
- private final Provider<FileDownloadUtils> downloadProvider;
- private final SNPendingsMenuItemsRegistry pendingsMenuItemsRegistry;
-
- @Inject
- public BuddiesAndParticipationPresenter(final EventBus eventBus, final BuddiesAndParticipationView view,
- final BuddiesAndParticipationProxy proxy, final StateManager stateManager, final Session session,
- final Provider<FileDownloadUtils> downloadProvider,
- final SNAdminsMenuItemsRegistry adminsMenuItemsRegistry,
- final SNCollabsMenuItemsRegistry collabsMenuItemsRegistry,
- final SNPendingsMenuItemsRegistry pendingsMenuItemsRegistry,
- final GroupMembersActionsRegistry actionsRegistry) {
- super(eventBus, view, proxy);
- this.downloadProvider = downloadProvider;
- this.adminsMenuItemsRegistry = adminsMenuItemsRegistry;
- this.collabsMenuItemsRegistry = collabsMenuItemsRegistry;
- this.pendingsMenuItemsRegistry = pendingsMenuItemsRegistry;
- this.actionsRegistry = actionsRegistry;
- stateManager.onStateChanged(true, new StateChangedEvent.StateChangedHandler() {
- @Override
- public void onStateChanged(final StateChangedEvent event) {
- BuddiesAndParticipationPresenter.this.onStateChanged(event.getState());
- }
- });
- stateManager.onSocialNetworkChanged(true, new SocialNetworkChangedEvent.SocialNetworkChangedHandler() {
-
- @Override
- public void onSocialNetworkChanged(final SocialNetworkChangedEvent event) {
- BuddiesAndParticipationPresenter.this.onStateChanged(event.getState());
- }
- });
- createActions();
- }
-
- private void createActions() {
- getView().getBottomToolbar().addActions(actionsRegistry);
- }
-
- private GuiActionDescCollection createMenuItems(final GroupDTO group,
- final AbstractSNMembersActionsRegistry registry) {
- final GuiActionDescCollection items = new GuiActionDescCollection();
- for (final Provider<MenuItemDescriptor> provider : registry) {
- final MenuItemDescriptor menuItem = provider.get();
- menuItem.setTarget(group);
- items.add(menuItem);
- }
- return items;
- }
-
- private String getAvatar(final GroupDTO admin) {
- return admin.hasLogo() ? downloadProvider.get().getLogoImageUrl(admin.getStateToken()) : "images/unknown.jpg";
- }
-
- private void onStateChanged(final StateAbstractDTO state) {
- if (state.getGroup().isNotPersonal()) {
- getView().setVisible(false);
- } else {
- setParticipationState(state);
- if (state.getSocialNetworkData().isBuddiesVisible()) {
- getView().clear();
- // setGroupMembers(state.getGroupMembers(),
- // state.getGroupRights());
- } else {
- getView().clear();
- getView().showBuddiesNotPublic();
- }
- getView().setVisible(true);
- }
- }
-
- @Override
- protected void revealInParent() {
- RevealRootContentEvent.fire(this, this);
- }
-
- // private void setGroupMembers(final SocialNetworkDTO socialNetwork, final
- // AccessRights rights) {
- // final AccessListsDTO accessLists = socialNetwork.getAccessLists();
- //
- // final List<GroupDTO> adminsList = accessLists.getAdmins().getList();
- // final List<GroupDTO> collabList = accessLists.getEditors().getList();
- // final List<GroupDTO> pendingCollabsList =
- // socialNetwork.getPendingCollaborators().getList();
- //
- // final int numAdmins = adminsList.size();
- // final int numCollabs = collabList.size();
- // final int numPendings = pendingCollabsList.size();
- //
- // getView().setAdminsCount(numAdmins);
- // getView().setCollabsCount(numCollabs);
- // getView().setPendingsCount(numPendings);
- //
- // if ((numAdmins + numCollabs) == 0) {
- // getView().showOrphan();
- // } else {
- // final boolean userIsAdmin = rights.isAdministrable();
- // final boolean userCanView = rights.isVisible();
- //
- // if (userCanView) {
- // for (final GroupDTO admin : adminsList) {
- // final String avatar = getAvatar(admin);
- // getView().addAdmin(admin, avatar, admin.getLongName(), "",
- // createMenuItems(admin, adminsMenuItemsRegistry));
- // }
- // getView().setCollabsVisible(numCollabs > 0);
- // for (final GroupDTO collab : collabList) {
- // final String avatar = getAvatar(collab);
- // getView().addCollab(collab, avatar, collab.getLongName(), "",
- // createMenuItems(collab, collabsMenuItemsRegistry));
- // }
- // if (userIsAdmin) {
- // getView().setPendingVisible(numPendings > 0);
- // for (final GroupDTO pendingCollab : pendingCollabsList) {
- // final String avatar = getAvatar(pendingCollab);
- // getView().addPending(pendingCollab, avatar, pendingCollab.getLongName(),
- // "",
- // createMenuItems(pendingCollab, pendingsMenuItemsRegistry));
- // }
- // } else {
- // getView().setPendingVisible(false);
- // }
- // getView().showMembers();
- // }
- // }
- // getView().setVisible(true);
- // }
-
- private void setParticipationState(final StateAbstractDTO state) {
- final ParticipationDataDTO participation = state.getParticipation();
- final AccessRights rights = state.getGroupRights();
- getView().clear();
- final List<GroupDTO> groupsIsAdmin = participation.getGroupsIsAdmin();
- final List<GroupDTO> groupsIsCollab = participation.getGroupsIsCollab();
- final int numAdmins = groupsIsAdmin.size();
- final int numCollaborators = groupsIsCollab.size();
- for (final GroupDTO group : groupsIsAdmin) {
- // getView().addParticipation(group, null, null, null,
- // actionsRegistry);
- // view.addItem(createGridItem(adminCategory, group, rights,
- // unJoinMenuItem));
- }
- for (final GroupDTO group : groupsIsCollab) {
- // view.addItem(createGridItem(collabCategory, group, rights,
- // unJoinMenuItem));
- }
- final int totalGroups = numAdmins + numCollaborators;
- if (totalGroups > 0) {
- getView().setParticipationCount(totalGroups);
- getView().setParticipationVisible(true);
- } else {
- getView().setParticipationVisible(false);
- }
- }
-}
\ No newline at end of file
Deleted: trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPanel.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPanel.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,103 +0,0 @@
-package cc.kune.core.client.sn;
-
-import cc.kune.common.client.actions.ui.ActionFlowPanel;
-import cc.kune.common.client.actions.ui.bind.GuiProvider;
-import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
-import cc.kune.common.client.ui.BasicThumb;
-import cc.kune.core.client.sn.GroupMembersPresenter.GroupMembersView;
-import cc.kune.core.shared.dto.GroupDTO;
-import cc.kune.core.shared.i18n.I18nTranslationService;
-import cc.kune.gspace.client.WsArmor;
-
-import com.google.inject.Inject;
-
-public class GroupMembersPanel extends AbstractSNPanel implements GroupMembersView {
-
- @Inject
- public GroupMembersPanel(final I18nTranslationService i18n, final GuiProvider guiProvider, final WsArmor armor) {
- super(i18n, guiProvider, armor);
- setVisible(false);
- mainTitle.setText(i18n.t("Group members"));
- mainTitle.setTitle(i18n.t("People and groups collaborating in this group"));
- firstCategoryLabel.setText(i18n.t("Admins"));
- firstCategoryLabel.setTitle(i18n.t("People that can admin this group"));
- sndCategoryLabel.setText(i18n.t("Collaborators"));
- sndCategoryLabel.setTitle(i18n.t("Other people that collaborate with this group"));
- trdCategoryLabel.setText(i18n.t("Pending"));
- trdCategoryLabel.setTitle(i18n.t("People pending to be accepted in this group by the admins"));
- sndDeckLabel.setText(i18n.t("This is an orphaned project, if you are interested please request to join to work on it"));
- firstDeckLabel.setText(i18n.t("The members of this group are not public"));
- bottomActionsToolbar = new ActionFlowPanel(guiProvider);
- bottomPanel.add(bottomActionsToolbar);
- bottomActionsToolbar.setStyleName("k-sn-bottomPanel-actions");
- armor.getEntityToolsNorth().add(widget);
- deck.showWidget(2);
- }
-
- @Override
- public void addAdmin(final GroupDTO group, final String avatarUrl, final String tooltip, final String tooltipTitle,
- final GuiActionDescCollection menu) {
- final BasicThumb thumb = createThumb(group, avatarUrl, tooltip, tooltipTitle, menu);
- firstCategoryFlow.add(thumb);
- }
-
- @Override
- public void addCollab(final GroupDTO group, final String avatarUrl, final String tooltip,
- final String tooltipTitle, final GuiActionDescCollection menu) {
- final BasicThumb thumb = createThumb(group, avatarUrl, tooltip, tooltipTitle, menu);
- sndCategoryFlow.add(thumb);
- }
-
- @Override
- public void addPending(final GroupDTO group, final String avatarUrl, final String tooltip,
- final String tooltipTitle, final GuiActionDescCollection menu) {
- final BasicThumb thumb = createThumb(group, avatarUrl, tooltip, tooltipTitle, menu);
- trdCategoryFlow.add(thumb);
- }
-
- @Override
- public void setAdminsCount(final int count) {
- firstCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
- }
-
- @Override
- public void setCollabsCount(final int count) {
- sndCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
- }
-
- @Override
- public void setCollabsVisible(final boolean visible) {
- sndCategoryPanel.setVisible(visible);
- }
-
- @Override
- public void setPendingsCount(final int count) {
- trdCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
- }
-
- @Override
- public void setPendingVisible(final boolean visible) {
- trdCategoryPanel.setVisible(visible);
- }
-
- @Override
- public void setVisible(final boolean visible) {
- mainPanel.setVisible(visible);
- }
-
- @Override
- public void showMemberNotPublic() {
- deck.showWidget(0);
- }
-
- @Override
- public void showMembers() {
- deck.showWidget(2);
- }
-
- @Override
- public void showOrphan() {
- deck.showWidget(1);
- }
-
-}
Deleted: trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPresenter.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPresenter.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,198 +0,0 @@
-package cc.kune.core.client.sn;
-
-import java.util.List;
-
-import cc.kune.common.client.actions.ui.IsActionExtensible;
-import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
-import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
-import cc.kune.common.client.actions.ui.descrip.MenuTitleItemDescriptor;
-import cc.kune.core.client.services.FileDownloadUtils;
-import cc.kune.core.client.sn.actions.registry.AbstractSNMembersActionsRegistry;
-import cc.kune.core.client.sn.actions.registry.GroupMembersActionsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNAdminsMenuItemsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNCollabsMenuItemsRegistry;
-import cc.kune.core.client.sn.actions.registry.SNPendingsMenuItemsRegistry;
-import cc.kune.core.client.state.Session;
-import cc.kune.core.client.state.SocialNetworkChangedEvent;
-import cc.kune.core.client.state.StateChangedEvent;
-import cc.kune.core.client.state.StateManager;
-import cc.kune.core.shared.domain.utils.AccessRights;
-import cc.kune.core.shared.dto.AccessListsDTO;
-import cc.kune.core.shared.dto.GroupDTO;
-import cc.kune.core.shared.dto.SocialNetworkDTO;
-import cc.kune.core.shared.dto.StateAbstractDTO;
-
-import com.google.gwt.event.shared.EventBus;
-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 GroupMembersPresenter extends
- Presenter<GroupMembersPresenter.GroupMembersView, GroupMembersPresenter.GroupMembersProxy> {
-
- @ProxyCodeSplit
- public interface GroupMembersProxy extends Proxy<GroupMembersPresenter> {
- }
-
- public interface GroupMembersView extends View {
-
- void addAdmin(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
- GuiActionDescCollection menu);
-
- void addCollab(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
- GuiActionDescCollection menu);
-
- void addPending(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
- GuiActionDescCollection menu);
-
- void clear();
-
- IsActionExtensible getBottomToolbar();
-
- void setAdminsCount(int count);
-
- void setCollabsCount(int count);
-
- void setCollabsVisible(boolean visible);
-
- void setPendingsCount(int count);
-
- void setPendingVisible(boolean visible);
-
- void setVisible(boolean visible);
-
- void showMemberNotPublic();
-
- void showMembers();
-
- void showOrphan();
- }
-
- private final GroupMembersActionsRegistry actionsRegistry;
- private final SNAdminsMenuItemsRegistry adminsMenuItemsRegistry;
- private final SNCollabsMenuItemsRegistry collabsMenuItemsRegistry;
- private final Provider<FileDownloadUtils> downloadProvider;
- private final SNPendingsMenuItemsRegistry pendingsMenuItemsRegistry;
-
- @Inject
- public GroupMembersPresenter(final EventBus eventBus, final GroupMembersView view, final GroupMembersProxy proxy,
- final StateManager stateManager, final Session session, final Provider<FileDownloadUtils> downloadProvider,
- final SNAdminsMenuItemsRegistry adminsMenuItemsRegistry,
- final SNCollabsMenuItemsRegistry collabsMenuItemsRegistry,
- final SNPendingsMenuItemsRegistry pendingsMenuItemsRegistry,
- final GroupMembersActionsRegistry actionsRegistry) {
- super(eventBus, view, proxy);
- this.downloadProvider = downloadProvider;
- this.adminsMenuItemsRegistry = adminsMenuItemsRegistry;
- this.collabsMenuItemsRegistry = collabsMenuItemsRegistry;
- this.pendingsMenuItemsRegistry = pendingsMenuItemsRegistry;
- this.actionsRegistry = actionsRegistry;
- stateManager.onStateChanged(true, new StateChangedEvent.StateChangedHandler() {
- @Override
- public void onStateChanged(final StateChangedEvent event) {
- GroupMembersPresenter.this.onStateChanged(event.getState());
- }
- });
- stateManager.onSocialNetworkChanged(true, new SocialNetworkChangedEvent.SocialNetworkChangedHandler() {
-
- @Override
- public void onSocialNetworkChanged(final SocialNetworkChangedEvent event) {
- GroupMembersPresenter.this.onStateChanged(event.getState());
- }
- });
- createActions();
- }
-
- private void createActions() {
- getView().getBottomToolbar().addActions(actionsRegistry);
- }
-
- private GuiActionDescCollection createMenuItems(final GroupDTO group,
- final AbstractSNMembersActionsRegistry registry) {
- final GuiActionDescCollection items = new GuiActionDescCollection();
- items.add(new MenuTitleItemDescriptor(group.getLongName()));
- for (final Provider<MenuItemDescriptor> provider : registry) {
- final MenuItemDescriptor menuItem = provider.get();
- menuItem.setTarget(group);
- items.add(menuItem);
- }
- return items;
- }
-
- private String getAvatar(final GroupDTO admin) {
- return admin.hasLogo() ? downloadProvider.get().getLogoImageUrl(admin.getStateToken()) : "images/unknown.jpg";
- }
-
- private void onStateChanged(final StateAbstractDTO state) {
- if (state.getGroup().isPersonal()) {
- getView().setVisible(false);
- } else {
- if (state.getSocialNetworkData().isMembersVisible()) {
- getView().clear();
- setGroupMembers(state.getGroupMembers(), state.getGroupRights());
- } else {
- getView().clear();
- getView().showMemberNotPublic();
- getView().setVisible(true);
- }
- }
- }
-
- @Override
- protected void revealInParent() {
- RevealRootContentEvent.fire(this, this);
- }
-
- private void setGroupMembers(final SocialNetworkDTO socialNetwork, final AccessRights rights) {
- final AccessListsDTO accessLists = socialNetwork.getAccessLists();
-
- final List<GroupDTO> adminsList = accessLists.getAdmins().getList();
- final List<GroupDTO> collabList = accessLists.getEditors().getList();
- final List<GroupDTO> pendingCollabsList = socialNetwork.getPendingCollaborators().getList();
-
- final int numAdmins = adminsList.size();
- final int numCollabs = collabList.size();
- final int numPendings = pendingCollabsList.size();
-
- getView().setAdminsCount(numAdmins);
- getView().setCollabsCount(numCollabs);
- getView().setPendingsCount(numPendings);
-
- if ((numAdmins + numCollabs) == 0) {
- getView().showOrphan();
- } else {
- final boolean userIsAdmin = rights.isAdministrable();
- final boolean userCanView = rights.isVisible();
-
- if (userCanView) {
- for (final GroupDTO admin : adminsList) {
- final String avatar = getAvatar(admin);
- getView().addAdmin(admin, avatar, admin.getLongName(), "",
- createMenuItems(admin, adminsMenuItemsRegistry));
- }
- getView().setCollabsVisible(numCollabs > 0);
- for (final GroupDTO collab : collabList) {
- final String avatar = getAvatar(collab);
- getView().addCollab(collab, avatar, collab.getLongName(), "",
- createMenuItems(collab, collabsMenuItemsRegistry));
- }
- if (userIsAdmin) {
- getView().setPendingVisible(numPendings > 0);
- for (final GroupDTO pendingCollab : pendingCollabsList) {
- final String avatar = getAvatar(pendingCollab);
- getView().addPending(pendingCollab, avatar, pendingCollab.getLongName(), "",
- createMenuItems(pendingCollab, pendingsMenuItemsRegistry));
- }
- } else {
- getView().setPendingVisible(false);
- }
- getView().showMembers();
- }
- }
- getView().setVisible(true);
- }
-}
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java (from rev 1267, trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPanel.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,103 @@
+package cc.kune.core.client.sn;
+
+import cc.kune.common.client.actions.ui.ActionFlowPanel;
+import cc.kune.common.client.actions.ui.bind.GuiProvider;
+import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
+import cc.kune.common.client.ui.BasicThumb;
+import cc.kune.core.client.sn.GroupSNPresenter.GroupSNView;
+import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+import cc.kune.gspace.client.WsArmor;
+
+import com.google.inject.Inject;
+
+public class GroupSNPanel extends AbstractSNPanel implements GroupSNView {
+
+ @Inject
+ public GroupSNPanel(final I18nTranslationService i18n, final GuiProvider guiProvider, final WsArmor armor) {
+ super(i18n, guiProvider, armor);
+ setVisible(false);
+ mainTitle.setText(i18n.t("Group members"));
+ mainTitle.setTitle(i18n.t("People and groups collaborating in this group"));
+ firstCategoryLabel.setText(i18n.t("Admins"));
+ firstCategoryPanel.setTitle(i18n.t("People that can admin this group"));
+ sndCategoryLabel.setText(i18n.t("Collaborators"));
+ sndCategoryPanel.setTitle(i18n.t("Other people that collaborate with this group"));
+ trdCategoryLabel.setText(i18n.t("Pending"));
+ trdCategoryPanel.setTitle(i18n.t("People pending to be accepted in this group by the admins"));
+ sndDeckLabel.setText(i18n.t("This is an orphaned project, if you are interested please request to join to work on it"));
+ firstDeckLabel.setText(i18n.t("The members of this group are not public"));
+ bottomActionsToolbar = new ActionFlowPanel(guiProvider);
+ bottomPanel.add(bottomActionsToolbar);
+ bottomActionsToolbar.setStyleName("k-sn-bottomPanel-actions");
+ armor.getEntityToolsNorth().add(widget);
+ deck.showWidget(2);
+ }
+
+ @Override
+ public void addAdmin(final GroupDTO group, final String avatarUrl, final String tooltip, final String tooltipTitle,
+ final GuiActionDescCollection menu) {
+ final BasicThumb thumb = createThumb(group.getShortName(), avatarUrl, tooltip, tooltipTitle, menu);
+ firstCategoryFlow.add(thumb);
+ }
+
+ @Override
+ public void addCollab(final GroupDTO group, final String avatarUrl, final String tooltip,
+ final String tooltipTitle, final GuiActionDescCollection menu) {
+ final BasicThumb thumb = createThumb(group.getShortName(), avatarUrl, tooltip, tooltipTitle, menu);
+ sndCategoryFlow.add(thumb);
+ }
+
+ @Override
+ public void addPending(final GroupDTO group, final String avatarUrl, final String tooltip,
+ final String tooltipTitle, final GuiActionDescCollection menu) {
+ final BasicThumb thumb = createThumb(group.getShortName(), avatarUrl, tooltip, tooltipTitle, menu);
+ trdCategoryFlow.add(thumb);
+ }
+
+ @Override
+ public void setAdminsCount(final int count) {
+ firstCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
+ }
+
+ @Override
+ public void setCollabsCount(final int count) {
+ sndCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
+ }
+
+ @Override
+ public void setCollabsVisible(final boolean visible) {
+ sndCategoryPanel.setVisible(visible);
+ }
+
+ @Override
+ public void setPendingsCount(final int count) {
+ trdCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
+ }
+
+ @Override
+ public void setPendingVisible(final boolean visible) {
+ trdCategoryPanel.setVisible(visible);
+ }
+
+ @Override
+ public void setVisible(final boolean visible) {
+ mainPanel.setVisible(visible);
+ }
+
+ @Override
+ public void showMemberNotPublic() {
+ deck.showWidget(0);
+ }
+
+ @Override
+ public void showMembers() {
+ deck.showWidget(2);
+ }
+
+ @Override
+ public void showOrphan() {
+ deck.showWidget(1);
+ }
+
+}
Property changes on: trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Copied: trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java (from rev 1268, trunk/src/main/java/cc/kune/core/client/sn/GroupMembersPresenter.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,203 @@
+package cc.kune.core.client.sn;
+
+import java.util.List;
+
+import cc.kune.common.client.actions.ui.IsActionExtensible;
+import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
+import cc.kune.core.client.services.FileDownloadUtils;
+import cc.kune.core.client.sn.actions.registry.GroupSNAdminsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNBottomActionsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNCollabsMenuItemsRegistry;
+import cc.kune.core.client.sn.actions.registry.GroupSNPendingsMenuItemsRegistry;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.client.state.SocialNetworkChangedEvent;
+import cc.kune.core.client.state.StateChangedEvent;
+import cc.kune.core.client.state.StateManager;
+import cc.kune.core.client.state.UserSignInEvent;
+import cc.kune.core.client.state.UserSignInEvent.UserSignInHandler;
+import cc.kune.core.client.state.UserSignOutEvent;
+import cc.kune.core.client.state.UserSignOutEvent.UserSignOutHandler;
+import cc.kune.core.shared.domain.utils.AccessRights;
+import cc.kune.core.shared.dto.AccessListsDTO;
+import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.dto.SocialNetworkDTO;
+import cc.kune.core.shared.dto.StateAbstractDTO;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+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 GroupSNPresenter extends AbstractSNPresenter<GroupSNPresenter.GroupSNView, GroupSNPresenter.GroupSNProxy> {
+
+ @ProxyCodeSplit
+ public interface GroupSNProxy extends Proxy<GroupSNPresenter> {
+ }
+
+ public interface GroupSNView extends View {
+
+ void addAdmin(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
+ GuiActionDescCollection menu);
+
+ void addCollab(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
+ GuiActionDescCollection menu);
+
+ void addPending(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
+ GuiActionDescCollection menu);
+
+ void clear();
+
+ IsActionExtensible getBottomToolbar();
+
+ void setAdminsCount(int count);
+
+ void setCollabsCount(int count);
+
+ void setCollabsVisible(boolean visible);
+
+ void setPendingsCount(int count);
+
+ void setPendingVisible(boolean visible);
+
+ void setVisible(boolean visible);
+
+ void showMemberNotPublic();
+
+ void showMembers();
+
+ void showOrphan();
+ }
+
+ private final GroupSNBottomActionsRegistry actionsRegistry;
+ private final GroupSNAdminsMenuItemsRegistry adminsMenuItemsRegistry;
+ private final GroupSNCollabsMenuItemsRegistry collabsMenuItemsRegistry;
+ private final GroupSNPendingsMenuItemsRegistry pendingsMenuItemsRegistry;
+
+ @Inject
+ public GroupSNPresenter(final EventBus eventBus, final GroupSNView view, final GroupSNProxy proxy,
+ final StateManager stateManager, final Session session, final Provider<FileDownloadUtils> downloadProvider,
+ final GroupSNAdminsMenuItemsRegistry adminsMenuItemsRegistry,
+ final GroupSNCollabsMenuItemsRegistry collabsMenuItemsRegistry,
+ final GroupSNPendingsMenuItemsRegistry pendingsMenuItemsRegistry,
+ final GroupSNBottomActionsRegistry actionsRegistry) {
+ super(eventBus, view, proxy, downloadProvider);
+ this.adminsMenuItemsRegistry = adminsMenuItemsRegistry;
+ this.collabsMenuItemsRegistry = collabsMenuItemsRegistry;
+ this.pendingsMenuItemsRegistry = pendingsMenuItemsRegistry;
+ this.actionsRegistry = actionsRegistry;
+ stateManager.onStateChanged(true, new StateChangedEvent.StateChangedHandler() {
+ @Override
+ public void onStateChanged(final StateChangedEvent event) {
+ GroupSNPresenter.this.onStateChanged(event.getState());
+ }
+ });
+ stateManager.onSocialNetworkChanged(true, new SocialNetworkChangedEvent.SocialNetworkChangedHandler() {
+ @Override
+ public void onSocialNetworkChanged(final SocialNetworkChangedEvent event) {
+ GroupSNPresenter.this.onStateChanged(event.getState());
+ }
+ });
+ session.onUserSignIn(true, new UserSignInHandler() {
+ @Override
+ public void onUserSignIn(final UserSignInEvent event) {
+ refreshOnSignInSignOut(session);
+ }
+ });
+ session.onUserSignOut(true, new UserSignOutHandler() {
+ @Override
+ public void onUserSignOut(final UserSignOutEvent event) {
+ refreshOnSignInSignOut(session);
+ }
+
+ });
+ createActions();
+ }
+
+ private void createActions() {
+ getView().getBottomToolbar().addActions(actionsRegistry);
+ }
+
+ @Override
+ public GroupSNView getView() {
+ return (GroupSNView) super.getView();
+ }
+
+ private void onStateChanged(final StateAbstractDTO state) {
+ if (state.getGroup().isPersonal()) {
+ getView().setVisible(false);
+ } else {
+ if (state.getSocialNetworkData().isMembersVisible()) {
+ getView().clear();
+ setGroupMembers(state.getGroupMembers(), state.getGroupRights());
+ } else {
+ getView().clear();
+ getView().showMemberNotPublic();
+ getView().setVisible(true);
+ }
+ }
+ }
+
+ private void refreshOnSignInSignOut(final Session session) {
+ final StateAbstractDTO currentState = session.getCurrentState();
+ if (currentState != null) {
+ GroupSNPresenter.this.onStateChanged(currentState);
+ }
+ }
+
+ @Override
+ protected void revealInParent() {
+ RevealRootContentEvent.fire(this, this);
+ }
+
+ private void setGroupMembers(final SocialNetworkDTO socialNetwork, final AccessRights rights) {
+ final AccessListsDTO accessLists = socialNetwork.getAccessLists();
+
+ final List<GroupDTO> adminsList = accessLists.getAdmins().getList();
+ final List<GroupDTO> collabList = accessLists.getEditors().getList();
+ final List<GroupDTO> pendingCollabsList = socialNetwork.getPendingCollaborators().getList();
+
+ final int numAdmins = adminsList.size();
+ final int numCollabs = collabList.size();
+ final int numPendings = pendingCollabsList.size();
+
+ getView().setAdminsCount(numAdmins);
+ getView().setCollabsCount(numCollabs);
+ getView().setPendingsCount(numPendings);
+
+ if ((numAdmins + numCollabs) == 0) {
+ getView().showOrphan();
+ } else {
+ final boolean userIsAdmin = rights.isAdministrable();
+ final boolean userCanView = rights.isVisible();
+
+ if (userCanView) {
+ for (final GroupDTO admin : adminsList) {
+ final String avatar = getAvatar(admin);
+ getView().addAdmin(admin, avatar, admin.getLongName(), "",
+ createMenuItems(admin, adminsMenuItemsRegistry, admin.getLongName()));
+ }
+ getView().setCollabsVisible(numCollabs > 0);
+ for (final GroupDTO collab : collabList) {
+ final String avatar = getAvatar(collab);
+ getView().addCollab(collab, avatar, collab.getLongName(), "",
+ createMenuItems(collab, collabsMenuItemsRegistry, collab.getLongName()));
+ }
+ if (userIsAdmin) {
+ getView().setPendingVisible(numPendings > 0);
+ for (final GroupDTO pendingCollab : pendingCollabsList) {
+ final String avatar = getAvatar(pendingCollab);
+ getView().addPending(pendingCollab, avatar, pendingCollab.getLongName(), "",
+ createMenuItems(pendingCollab, pendingsMenuItemsRegistry, pendingCollab.getLongName()));
+ }
+ } else {
+ getView().setPendingVisible(false);
+ }
+ getView().showMembers();
+ }
+ }
+ getView().setVisible(true);
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Copied: trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java (from rev 1267, trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPanel.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,92 @@
+package cc.kune.core.client.sn;
+
+import cc.kune.common.client.actions.ui.ActionFlowPanel;
+import cc.kune.common.client.actions.ui.bind.GuiProvider;
+import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
+import cc.kune.core.client.resources.CoreMessages;
+import cc.kune.core.client.sn.UserSNPresenter.UserSNView;
+import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.dto.UserSimpleDTO;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+import cc.kune.gspace.client.WsArmor;
+
+import com.google.gwt.user.client.ui.Label;
+import com.google.inject.Inject;
+
+public class UserSNPanel extends AbstractSNPanel implements UserSNView {
+
+ @Inject
+ public UserSNPanel(final I18nTranslationService i18n, final GuiProvider guiProvider, final WsArmor armor) {
+ super(i18n, guiProvider, armor);
+ setVisible(false);
+ mainTitle.setText(i18n.t("His/her network:"));
+ mainTitle.setTitle(i18n.t("This user buddies and groups where participes"));
+ firstCategoryLabel.setText(i18n.t("Buddies"));
+ firstCategoryPanel.setTitle(i18n.t("This user buddies"));
+ sndCategoryLabel.setText(i18n.t("and participates in"));
+ sndCategoryPanel.setTitle(i18n.t("Groups in which this user participates"));
+ firstDeckLabel.setText(i18n.t(CoreMessages.BUDDIES_NOT_PUBLIC));
+ trdCategoryLabel.setText("NOT USED");
+ trdCategoryLabel.setTitle("NOT USED");
+ trdCategoryPanel.setVisible(false);
+ sndDeckLabel.setText("NOT USED");
+ bottomActionsToolbar = new ActionFlowPanel(guiProvider);
+ bottomPanel.add(bottomActionsToolbar);
+ bottomActionsToolbar.setStyleName("k-sn-bottomPanel-actions");
+ armor.getEntityToolsNorth().add(widget);
+ deck.showWidget(2);
+ }
+
+ @Override
+ public void addBuddie(final UserSimpleDTO user, final String avatarUrl, final String tooltip,
+ final String tooltipTitle, final GuiActionDescCollection menu) {
+ firstCategoryFlow.add(createThumb(user.getShortName(), avatarUrl, tooltip, tooltipTitle, menu));
+ }
+
+ @Override
+ public void addParticipation(final GroupDTO group, final String avatarUrl, final String tooltip,
+ final String tooltipTitle, final GuiActionDescCollection menu) {
+ sndCategoryFlow.add(createThumb(group.getShortName(), avatarUrl, tooltip, tooltipTitle, menu));
+ }
+
+ @Override
+ public void addTextToBuddieList(final String text) {
+ firstCategoryFlow.add(new Label(text));
+ }
+
+ @Override
+ public void setBuddiesCount(final int count) {
+ firstCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
+ }
+
+ @Override
+ public void setBuddiesVisible(final boolean visible) {
+ firstCategoryPanel.setVisible(visible);
+ }
+
+ @Override
+ public void setParticipationCount(final int count) {
+ sndCategoryCount.setText(new StringBuffer("(").append(count).append(")").toString());
+ }
+
+ @Override
+ public void setParticipationVisible(final boolean visible) {
+ sndCategoryPanel.setVisible(visible);
+ }
+
+ @Override
+ public void setVisible(final boolean visible) {
+ mainPanel.setVisible(visible);
+ }
+
+ @Override
+ public void showBuddies() {
+ deck.showWidget(2);
+ }
+
+ @Override
+ public void showBuddiesNotPublic() {
+ deck.showWidget(0);
+ }
+
+}
Copied: trunk/src/main/java/cc/kune/core/client/sn/UserSNPresenter.java (from rev 1267, trunk/src/main/java/cc/kune/core/client/sn/BuddiesAndParticipationPresenter.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/UserSNPresenter.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/UserSNPresenter.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,194 @@
+package cc.kune.core.client.sn;
+
+import java.util.List;
+
+import cc.kune.common.client.actions.ui.IsActionExtensible;
+import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
+import cc.kune.core.client.services.FileDownloadUtils;
+import cc.kune.core.client.sn.UserSNPresenter.UserSNProxy;
+import cc.kune.core.client.sn.UserSNPresenter.UserSNView;
+import cc.kune.core.client.sn.actions.registry.UserSNBottomActionsRegistry;
+import cc.kune.core.client.sn.actions.registry.UserSNMenuItemsRegistry;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.client.state.SocialNetworkChangedEvent;
+import cc.kune.core.client.state.StateChangedEvent;
+import cc.kune.core.client.state.StateManager;
+import cc.kune.core.client.state.UserSignInEvent;
+import cc.kune.core.client.state.UserSignInEvent.UserSignInHandler;
+import cc.kune.core.client.state.UserSignOutEvent;
+import cc.kune.core.client.state.UserSignOutEvent.UserSignOutHandler;
+import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.dto.ParticipationDataDTO;
+import cc.kune.core.shared.dto.StateAbstractDTO;
+import cc.kune.core.shared.dto.UserBuddiesDataDTO;
+import cc.kune.core.shared.dto.UserSimpleDTO;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+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 UserSNPresenter extends AbstractSNPresenter<UserSNView, UserSNProxy> {
+
+ @ProxyCodeSplit
+ public interface UserSNProxy extends Proxy<UserSNPresenter> {
+ }
+
+ public interface UserSNView extends View {
+
+ void addBuddie(UserSimpleDTO user, String avatarUrl, String tooltip, String tooltipTitle,
+ GuiActionDescCollection menu);
+
+ void addParticipation(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
+ GuiActionDescCollection menu);
+
+ void addTextToBuddieList(String text);
+
+ void clear();
+
+ IsActionExtensible getBottomToolbar();
+
+ void setBuddiesCount(int count);
+
+ void setBuddiesVisible(boolean visible);
+
+ void setParticipationCount(int count);
+
+ void setParticipationVisible(boolean visible);
+
+ void setVisible(boolean visible);
+
+ void showBuddies();
+
+ void showBuddiesNotPublic();
+ }
+
+ private final UserSNBottomActionsRegistry actionsRegistry;
+ private final I18nTranslationService i18n;
+ private final UserSNMenuItemsRegistry userMenuItemsRegistry;
+
+ @Inject
+ public UserSNPresenter(final EventBus eventBus, final UserSNView view, final UserSNProxy proxy,
+ final I18nTranslationService i18n, final StateManager stateManager, final Session session,
+ final Provider<FileDownloadUtils> downloadProvider, final UserSNMenuItemsRegistry userMenuItemsRegistry,
+ final UserSNBottomActionsRegistry actionsRegistry) {
+ super(eventBus, view, proxy, downloadProvider);
+ this.i18n = i18n;
+ this.userMenuItemsRegistry = userMenuItemsRegistry;
+ this.actionsRegistry = actionsRegistry;
+ stateManager.onStateChanged(true, new StateChangedEvent.StateChangedHandler() {
+ @Override
+ public void onStateChanged(final StateChangedEvent event) {
+ UserSNPresenter.this.onStateChanged(event.getState());
+ }
+ });
+ session.onUserSignIn(true, new UserSignInHandler() {
+ @Override
+ public void onUserSignIn(final UserSignInEvent event) {
+ refreshOnSignInSignOut(session);
+ }
+ });
+ session.onUserSignOut(true, new UserSignOutHandler() {
+ @Override
+ public void onUserSignOut(final UserSignOutEvent event) {
+ refreshOnSignInSignOut(session);
+ }
+ });
+ stateManager.onSocialNetworkChanged(true, new SocialNetworkChangedEvent.SocialNetworkChangedHandler() {
+ @Override
+ public void onSocialNetworkChanged(final SocialNetworkChangedEvent event) {
+ UserSNPresenter.this.onStateChanged(event.getState());
+ }
+ });
+ createActions();
+ }
+
+ private void createActions() {
+ getView().getBottomToolbar().addActions(actionsRegistry);
+ }
+
+ @Override
+ public UserSNView getView() {
+ return (UserSNView) super.getView();
+ }
+
+ private void onStateChanged(final StateAbstractDTO state) {
+ if (state.getGroup().isNotPersonal()) {
+ getView().setVisible(false);
+ } else {
+ getView().clear();
+ if (state.getSocialNetworkData().isBuddiesVisible()) {
+ setBuddiesState(state);
+ setParticipationState(state);
+ } else {
+ getView().showBuddiesNotPublic();
+ }
+ getView().setVisible(true);
+ }
+ }
+
+ private void refreshOnSignInSignOut(final Session session) {
+ final StateAbstractDTO currentState = session.getCurrentState();
+ if (currentState != null) {
+ UserSNPresenter.this.onStateChanged(currentState);
+ }
+ }
+
+ @Override
+ protected void revealInParent() {
+ RevealRootContentEvent.fire(this, this);
+ }
+
+ private void setBuddiesState(final StateAbstractDTO state) {
+ final UserBuddiesDataDTO userBuddiesData = state.getUserBuddies();
+ final List<UserSimpleDTO> buddies = userBuddiesData.getBuddies();
+ for (final UserSimpleDTO user : buddies) {
+ final String avatarUrl = user.hasLogo() ? downloadProvider.get().getLogoImageUrl(user.getStateToken())
+ : PERSON_NO_AVATAR_IMAGE;
+ getView().addBuddie(user, avatarUrl, user.getName(), "",
+ createMenuItems(user, userMenuItemsRegistry, user.getName()));
+ }
+ getView().setBuddiesVisible(buddies.size() > 0);
+ final boolean hasLocalBuddies = buddies.size() > 0;
+ final int numExtBuddies = userBuddiesData.getOtherExtBuddies();
+ if (numExtBuddies > 0) {
+ if (hasLocalBuddies) {
+ // i18n: plural
+ getView().addTextToBuddieList(
+ i18n.t(numExtBuddies == 1 ? "and [%d] external user" : "and [%d] external users", numExtBuddies));
+ } else {
+ getView().addTextToBuddieList(
+ i18n.t(numExtBuddies == 1 ? "[%d] external user" : "[%d] external users", numExtBuddies));
+ }
+ } else {
+ // if (hasLocalBuddies) {
+ // view.clearOtherUsers();
+ // } else {
+ // view.setNoBuddies();
+ // }
+ }
+ }
+
+ private void setParticipationState(final StateAbstractDTO state) {
+ final ParticipationDataDTO participation = state.getParticipation();
+ final List<GroupDTO> groupsIsAdmin = participation.getGroupsIsAdmin();
+ final List<GroupDTO> groupsIsCollab = participation.getGroupsIsCollab();
+ final int numAdmins = groupsIsAdmin.size();
+ final int numCollaborators = groupsIsCollab.size();
+ for (final GroupDTO group : groupsIsAdmin) {
+ getView().addParticipation(group, getAvatar(group), group.getLongName(), "",
+ createMenuItems(group, userMenuItemsRegistry, group.getLongName()));
+ }
+ for (final GroupDTO group : groupsIsCollab) {
+ getView().addParticipation(group, getAvatar(group), group.getLongName(), "",
+ createMenuItems(group, userMenuItemsRegistry, group.getLongName()));
+ }
+ final int totalGroups = numAdmins + numCollaborators;
+ // getView().setParticipationCount(totalGroups);
+ getView().setParticipationVisible(totalGroups > 0);
+ }
+}
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/core/client/sn/actions/AddNewBuddiesAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/AddNewBuddiesAction.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/AddNewBuddiesAction.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,29 @@
+package cc.kune.core.client.sn.actions;
+
+import cc.kune.common.client.actions.AbstractExtendedAction;
+import cc.kune.common.client.actions.Action;
+import cc.kune.common.client.actions.ActionEvent;
+import cc.kune.common.client.noti.NotifyUser;
+import cc.kune.common.client.utils.TextUtils;
+import cc.kune.core.client.resources.CoreResources;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+
+import com.google.inject.Inject;
+
+public class AddNewBuddiesAction extends AbstractExtendedAction {
+
+ private final I18nTranslationService i18n;
+
+ @Inject
+ public AddNewBuddiesAction(final I18nTranslationService i18n, final CoreResources res) {
+ this.i18n = i18n;
+ putValue(Action.NAME, i18n.t("Add a new buddy"));
+ putValue(Action.SMALL_ICON, res.addGreen());
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent event) {
+ NotifyUser.info(i18n.t(TextUtils.IN_DEVELOPMENT));
+ }
+
+}
Deleted: trunk/src/main/java/cc/kune/core/client/sn/actions/GroupMembersConfActions.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/GroupMembersConfActions.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/GroupMembersConfActions.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,95 +0,0 @@
-package cc.kune.core.client.sn.actions;
-
-import cc.kune.common.client.actions.ui.descrip.ButtonDescriptor;
-import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
-import cc.kune.common.client.actions.ui.descrip.MenuRadioItemDescriptor;
-import cc.kune.common.client.actions.ui.descrip.SubMenuDescriptor;
-import cc.kune.core.client.resources.CoreResources;
-import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
-import cc.kune.core.client.sn.actions.registry.GroupMembersActionsRegistry;
-import cc.kune.core.client.state.StateChangedEvent;
-import cc.kune.core.client.state.StateChangedEvent.StateChangedHandler;
-import cc.kune.core.client.state.StateManager;
-import cc.kune.core.shared.domain.AdmissionType;
-import cc.kune.core.shared.domain.SocialNetworkVisibility;
-import cc.kune.core.shared.dto.GroupDTO;
-import cc.kune.core.shared.dto.StateAbstractDTO;
-import cc.kune.core.shared.i18n.I18nTranslationService;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class GroupMembersConfActions {
-
- public static final SubMenuDescriptor MODERATION_SUBMENU = new SubMenuDescriptor();
- public static final MenuDescriptor OPTIONS_MENU = new MenuDescriptor();
- public static final SubMenuDescriptor VISIBILITY_SUBMENU = new SubMenuDescriptor();
-
- @Inject
- public GroupMembersConfActions(final StateManager stateManager, final I18nTranslationService i18n,
- final GroupMembersActionsRegistry registry, final Provider<MembersVisibilityMenuItem> membersVisibility,
- final Provider<MembersModerationMenuItem> membersModeration, final CoreResources res,
- final JoinGroupAction joinGroupAction, final IsGroupCondition isGroupCondition,
- final UnJoinGroupAction unJoinGroupAction) {
- OPTIONS_MENU.withText(i18n.t("Options")).withIcon(res.arrowDownSitebar()).withStyles("k-sn-options-menu");
- final MenuRadioItemDescriptor anyoneItem = membersVisibility.get().withVisibility(
- SocialNetworkVisibility.anyone);
- final MenuRadioItemDescriptor onlyMembersItem = membersVisibility.get().withVisibility(
- SocialNetworkVisibility.onlymembers);
- final MenuRadioItemDescriptor onlyAdminsItem = membersVisibility.get().withVisibility(
- SocialNetworkVisibility.onlyadmins);
- final MenuRadioItemDescriptor closedItem = membersModeration.get().withModeration(AdmissionType.Closed);
- final MenuRadioItemDescriptor moderatedItem = membersModeration.get().withModeration(AdmissionType.Moderated);
- final MenuRadioItemDescriptor openItem = membersModeration.get().withModeration(AdmissionType.Open);
- registry.add(OPTIONS_MENU);
- registry.add(VISIBILITY_SUBMENU.withText(i18n.t("Those who can view this member list")).withParent(OPTIONS_MENU));
- registry.add(MODERATION_SUBMENU.withText(i18n.t("New members policy")).withParent(OPTIONS_MENU));
- registry.add(anyoneItem.withParent(VISIBILITY_SUBMENU).withText(i18n.t("anyone")));
- registry.add(onlyMembersItem.withParent(VISIBILITY_SUBMENU).withText(i18n.t("only members")));
- registry.add(onlyAdminsItem.withParent(VISIBILITY_SUBMENU).withText(i18n.t("only admins")));
- registry.add(moderatedItem.withParent(MODERATION_SUBMENU).withText(i18n.t("moderate request to join")));
- registry.add(openItem.withParent(MODERATION_SUBMENU).withText(i18n.t("auto accept request to join")));
- // registry.add(closedItem.withParent(MODERATION_SUBMENU).withText(
- // i18n.t("closed for new members")));
-
- final ButtonDescriptor joinBtn = new ButtonDescriptor(joinGroupAction);
- final ButtonDescriptor unJoinBtn = new ButtonDescriptor(unJoinGroupAction);
- registry.add(joinBtn.withStyles("k-no-backimage"));
- registry.add(unJoinBtn.withStyles("k-no-backimage"));
-
- stateManager.onStateChanged(true, new StateChangedHandler() {
- @Override
- public void onStateChanged(final StateChangedEvent event) {
- final boolean administrable = event.getState().getGroupRights().isAdministrable();
- OPTIONS_MENU.setVisible(administrable);
- OPTIONS_MENU.setEnabled(administrable);
- final StateAbstractDTO state = event.getState();
- final GroupDTO currentGroup = state.getGroup();
- if (currentGroup.isNotPersonal()) {
- switch (state.getSocialNetworkData().getSocialNetworkVisibility()) {
- case anyone:
- anyoneItem.setChecked(true);
- break;
- case onlyadmins:
- onlyAdminsItem.setChecked(true);
- break;
- case onlymembers:
- onlyMembersItem.setChecked(true);
- break;
- }
- }
- switch (currentGroup.getAdmissionType()) {
- case Moderated:
- moderatedItem.setChecked(true);
- break;
- case Open:
- openItem.setChecked(true);
- break;
- case Closed:
- closedItem.setChecked(true);
- break;
- }
- }
- });
- }
-}
Added: trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityAction.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityAction.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,50 @@
+package cc.kune.core.client.sn.actions;
+
+import cc.kune.common.client.actions.AbstractExtendedAction;
+import cc.kune.common.client.actions.ActionEvent;
+import cc.kune.common.client.noti.NotifyUser;
+import cc.kune.core.client.rpcservices.AsyncCallbackSimple;
+import cc.kune.core.client.rpcservices.UserServiceAsync;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.client.state.StateManager;
+import cc.kune.core.shared.domain.UserBuddiesVisibility;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class UserSNVisibilityAction extends AbstractExtendedAction {
+ private final I18nTranslationService i18n;
+ private final Session session;
+ private final StateManager stateManager;
+ private final Provider<UserServiceAsync> userServiceAsync;
+ private UserBuddiesVisibility visibility;
+
+ @Inject
+ public UserSNVisibilityAction(final Session session, final StateManager stateManager,
+ final I18nTranslationService i18n, final Provider<UserServiceAsync> userServiceProvider) {
+ this.session = session;
+ this.stateManager = stateManager;
+ this.i18n = i18n;
+ this.userServiceAsync = userServiceProvider;
+ }
+
+ @Override
+ public void actionPerformed(final ActionEvent event) {
+ userServiceAsync.get().setBuddiesVisibility(session.getUserHash(),
+ session.getCurrentState().getGroup().getStateToken(), visibility, new AsyncCallbackSimple<Void>() {
+ @Override
+ public void onSuccess(final Void result) {
+ NotifyUser.info(i18n.t("Visibility of your network changed to " + visibility.toString()));
+ // NotifyUser.info(i18n.t("Visibility of your network changed"));
+ stateManager.reload();
+ }
+ });
+
+ }
+
+ public void setVisibility(final UserBuddiesVisibility visibility) {
+ this.visibility = visibility;
+ }
+
+}
Added: trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityMenuItem.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/UserSNVisibilityMenuItem.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,23 @@
+package cc.kune.core.client.sn.actions;
+
+import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
+import cc.kune.common.client.actions.ui.descrip.MenuRadioItemDescriptor;
+import cc.kune.core.shared.domain.UserBuddiesVisibility;
+
+import com.google.inject.Inject;
+
+public class UserSNVisibilityMenuItem extends MenuRadioItemDescriptor {
+
+ private static final String USER_BUDDIES_VISIBILITY_GROUP = "k-sn-userbuddies-vis";
+
+ @Inject
+ public UserSNVisibilityMenuItem(final MenuDescriptor parent, final UserSNVisibilityAction action) {
+ super(parent, action, USER_BUDDIES_VISIBILITY_GROUP);
+ }
+
+ public MenuRadioItemDescriptor withVisibility(final UserBuddiesVisibility visibility) {
+ ((UserSNVisibilityAction) getAction()).setVisibility(visibility);
+ return this;
+ }
+
+}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsGroupCondition.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsGroupCondition.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsGroupCondition.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -3,6 +3,7 @@
import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip;
import cc.kune.common.client.actions.ui.descrip.GuiAddCondition;
import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.dto.UserSimpleDTO;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -16,6 +17,10 @@
@Override
public boolean mustBeAdded(final GuiActionDescrip descr) {
- return (!((GroupDTO) descr.getTarget()).isPersonal());
+ final Object target = descr.getTarget();
+ if (target instanceof UserSimpleDTO) {
+ return false;
+ }
+ return (!((GroupDTO) target).isPersonal());
}
}
Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotMeCondition.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotMeCondition.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsNotMeCondition.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -4,6 +4,7 @@
import cc.kune.common.client.actions.ui.descrip.GuiAddCondition;
import cc.kune.core.client.state.Session;
import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.dto.UserSimpleDTO;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -18,9 +19,20 @@
this.session = session;
}
+ private boolean isNotThisGroup(final GuiActionDescrip descr) {
+ return descr.getTarget() instanceof GroupDTO
+ && !session.getCurrentUser().getShortName().equals(((GroupDTO) descr.getTarget()).getShortName());
+ }
+
+ private boolean isNotThisPerson(final GuiActionDescrip descr) {
+ return (!session.getCurrentUser().getShortName().equals(((UserSimpleDTO) descr.getTarget()).getShortName()));
+ }
+
@Override
public boolean mustBeAdded(final GuiActionDescrip descr) {
- return (session.isNotLogged() || (session.isLogged() && !session.getCurrentUser().getShortName().equals(
- ((GroupDTO) descr.getTarget()).getShortName())));
+ if (descr.getTarget() instanceof UserSimpleDTO) {
+ return isNotThisPerson(descr);
+ }
+ return (session.isNotLogged() || (session.isLogged() && isNotThisGroup(descr)));
}
}
Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsPersonCondition.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsPersonCondition.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/conditions/IsPersonCondition.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -3,6 +3,7 @@
import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip;
import cc.kune.common.client.actions.ui.descrip.GuiAddCondition;
import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.dto.UserSimpleDTO;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -16,6 +17,11 @@
@Override
public boolean mustBeAdded(final GuiActionDescrip descr) {
- return (((GroupDTO) descr.getTarget()).isPersonal());
+
+ final Object target = descr.getTarget();
+ if (target instanceof UserSimpleDTO) {
+ return true;
+ }
+ return (((GroupDTO) target).isPersonal());
}
}
Deleted: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersActionsRegistry.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersActionsRegistry.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersActionsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,6 +0,0 @@
-package cc.kune.core.client.sn.actions.registry;
-
-
-public class GroupMembersActionsRegistry extends AbstractSNActionsRegistry {
-
-}
Copied: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersConfActions.java (from rev 1267, trunk/src/main/java/cc/kune/core/client/sn/actions/GroupMembersConfActions.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersConfActions.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersConfActions.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,98 @@
+package cc.kune.core.client.sn.actions.registry;
+
+import cc.kune.common.client.actions.ui.descrip.ButtonDescriptor;
+import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
+import cc.kune.common.client.actions.ui.descrip.MenuRadioItemDescriptor;
+import cc.kune.common.client.actions.ui.descrip.SubMenuDescriptor;
+import cc.kune.core.client.resources.CoreResources;
+import cc.kune.core.client.sn.actions.JoinGroupAction;
+import cc.kune.core.client.sn.actions.MembersModerationMenuItem;
+import cc.kune.core.client.sn.actions.MembersVisibilityMenuItem;
+import cc.kune.core.client.sn.actions.UnJoinGroupAction;
+import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
+import cc.kune.core.client.state.StateChangedEvent;
+import cc.kune.core.client.state.StateChangedEvent.StateChangedHandler;
+import cc.kune.core.client.state.StateManager;
+import cc.kune.core.shared.domain.AdmissionType;
+import cc.kune.core.shared.domain.SocialNetworkVisibility;
+import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.dto.StateAbstractDTO;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class GroupMembersConfActions {
+
+ public static final SubMenuDescriptor MODERATION_SUBMENU = new SubMenuDescriptor();
+ public static final MenuDescriptor OPTIONS_MENU = new MenuDescriptor();
+ public static final SubMenuDescriptor VISIBILITY_SUBMENU = new SubMenuDescriptor();
+
+ @Inject
+ public GroupMembersConfActions(final StateManager stateManager, final I18nTranslationService i18n,
+ final GroupSNBottomActionsRegistry registry, final Provider<MembersVisibilityMenuItem> membersVisibility,
+ final Provider<MembersModerationMenuItem> membersModeration, final CoreResources res,
+ final JoinGroupAction joinGroupAction, final IsGroupCondition isGroupCondition,
+ final UnJoinGroupAction unJoinGroupAction) {
+ OPTIONS_MENU.withToolTip(i18n.t("Options")).withIcon(res.arrowDownSitebar()).withStyles("k-sn-options-menu");
+ final MenuRadioItemDescriptor anyoneItem = membersVisibility.get().withVisibility(
+ SocialNetworkVisibility.anyone);
+ final MenuRadioItemDescriptor onlyMembersItem = membersVisibility.get().withVisibility(
+ SocialNetworkVisibility.onlymembers);
+ final MenuRadioItemDescriptor onlyAdminsItem = membersVisibility.get().withVisibility(
+ SocialNetworkVisibility.onlyadmins);
+ final MenuRadioItemDescriptor closedItem = membersModeration.get().withModeration(AdmissionType.Closed);
+ final MenuRadioItemDescriptor moderatedItem = membersModeration.get().withModeration(AdmissionType.Moderated);
+ final MenuRadioItemDescriptor openItem = membersModeration.get().withModeration(AdmissionType.Open);
+ registry.add(OPTIONS_MENU);
+ registry.add(VISIBILITY_SUBMENU.withText(i18n.t("Those who can view this member list")).withParent(OPTIONS_MENU));
+ registry.add(MODERATION_SUBMENU.withText(i18n.t("New members policy")).withParent(OPTIONS_MENU));
+ registry.add(anyoneItem.withParent(VISIBILITY_SUBMENU).withText(i18n.t("anyone")));
+ registry.add(onlyMembersItem.withParent(VISIBILITY_SUBMENU).withText(i18n.t("only members")));
+ registry.add(onlyAdminsItem.withParent(VISIBILITY_SUBMENU).withText(i18n.t("only admins")));
+ registry.add(moderatedItem.withParent(MODERATION_SUBMENU).withText(i18n.t("moderate request to join")));
+ registry.add(openItem.withParent(MODERATION_SUBMENU).withText(i18n.t("auto accept request to join")));
+ // registry.add(closedItem.withParent(MODERATION_SUBMENU).withText(
+ // i18n.t("closed for new members")));
+
+ final ButtonDescriptor joinBtn = new ButtonDescriptor(joinGroupAction);
+ final ButtonDescriptor unJoinBtn = new ButtonDescriptor(unJoinGroupAction);
+ registry.add(joinBtn.withStyles("k-no-backimage"));
+ registry.add(unJoinBtn.withStyles("k-no-backimage"));
+
+ stateManager.onStateChanged(true, new StateChangedHandler() {
+ @Override
+ public void onStateChanged(final StateChangedEvent event) {
+ final boolean administrable = event.getState().getGroupRights().isAdministrable();
+ OPTIONS_MENU.setVisible(administrable);
+ OPTIONS_MENU.setEnabled(administrable);
+ final StateAbstractDTO state = event.getState();
+ final GroupDTO currentGroup = state.getGroup();
+ if (currentGroup.isNotPersonal()) {
+ switch (state.getSocialNetworkData().getSocialNetworkVisibility()) {
+ case anyone:
+ anyoneItem.setChecked(true);
+ break;
+ case onlyadmins:
+ onlyAdminsItem.setChecked(true);
+ break;
+ case onlymembers:
+ onlyMembersItem.setChecked(true);
+ break;
+ }
+ }
+ switch (currentGroup.getAdmissionType()) {
+ case Moderated:
+ moderatedItem.setChecked(true);
+ break;
+ case Open:
+ openItem.setChecked(true);
+ break;
+ case Closed:
+ closedItem.setChecked(true);
+ break;
+ }
+ }
+ });
+ }
+}
Copied: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNAdminsMenuItemsRegistry.java (from rev 1267, trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNAdminsMenuItemsRegistry.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNAdminsMenuItemsRegistry.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNAdminsMenuItemsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,81 @@
+package cc.kune.core.client.sn.actions.registry;
+
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.core.client.sn.actions.AcceptJoinGroupAction;
+import cc.kune.core.client.sn.actions.ChangeToAdminAction;
+import cc.kune.core.client.sn.actions.ChangeToCollabAction;
+import cc.kune.core.client.sn.actions.DenyJoinGroupAction;
+import cc.kune.core.client.sn.actions.GotoGroupAction;
+import cc.kune.core.client.sn.actions.GotoMemberAction;
+import cc.kune.core.client.sn.actions.GotoYourHomePageAction;
+import cc.kune.core.client.sn.actions.RemoveMemberAction;
+import cc.kune.core.client.sn.actions.conditions.IsAdministrableCondition;
+import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
+import cc.kune.core.client.sn.actions.conditions.IsLoggedCondition;
+import cc.kune.core.client.sn.actions.conditions.IsMeCondition;
+import cc.kune.core.client.sn.actions.conditions.IsNotMeCondition;
+import cc.kune.core.client.sn.actions.conditions.IsPersonCondition;
+import cc.kune.core.client.state.Session;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class GroupSNAdminsMenuItemsRegistry extends AbstractSNMembersActionsRegistry {
+
+ @Inject
+ public GroupSNAdminsMenuItemsRegistry(final Session session, final IsLoggedCondition isLogged,
+ final IsAdministrableCondition isAdministrableCondition, final IsPersonCondition isPersonCondition,
+ final IsGroupCondition isGroupCondition, final IsMeCondition isMe, final IsNotMeCondition isNotMe,
+ final ChangeToCollabAction changeToCollabAction, final ChangeToAdminAction changeToAdminAction,
+ final RemoveMemberAction removeMemberAction, final AcceptJoinGroupAction acceptJoinGroupAction,
+ final DenyJoinGroupAction denyJoinGroupAction, final GotoGroupAction gotoGroupAction,
+ final GotoMemberAction gotoMemberAction, final GotoYourHomePageAction gotoYourHomePageAction) {
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(changeToCollabAction);
+ item.add(isAdministrableCondition);
+ item.add(isNotMe);
+ item.add(isLogged);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(removeMemberAction);
+ item.add(isAdministrableCondition);
+ item.add(isNotMe);
+ item.add(isLogged);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoMemberAction);
+ item.add(isPersonCondition);
+ item.add(isNotMe);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoYourHomePageAction);
+ item.add(isPersonCondition);
+ item.add(isMe);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction);
+ item.add(isGroupCondition);
+ return item;
+ }
+ });
+ }
+
+}
Property changes on: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNAdminsMenuItemsRegistry.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Copied: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNBottomActionsRegistry.java (from rev 1262, trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupMembersActionsRegistry.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNBottomActionsRegistry.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNBottomActionsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,6 @@
+package cc.kune.core.client.sn.actions.registry;
+
+
+public class GroupSNBottomActionsRegistry extends AbstractSNActionsRegistry {
+
+}
Property changes on: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNBottomActionsRegistry.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Copied: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNCollabsMenuItemsRegistry.java (from rev 1268, trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNCollabsMenuItemsRegistry.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNCollabsMenuItemsRegistry.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNCollabsMenuItemsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,77 @@
+package cc.kune.core.client.sn.actions.registry;
+
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.core.client.sn.actions.AcceptJoinGroupAction;
+import cc.kune.core.client.sn.actions.ChangeToAdminAction;
+import cc.kune.core.client.sn.actions.ChangeToCollabAction;
+import cc.kune.core.client.sn.actions.DenyJoinGroupAction;
+import cc.kune.core.client.sn.actions.GotoGroupAction;
+import cc.kune.core.client.sn.actions.GotoMemberAction;
+import cc.kune.core.client.sn.actions.GotoYourHomePageAction;
+import cc.kune.core.client.sn.actions.RemoveMemberAction;
+import cc.kune.core.client.sn.actions.conditions.IsAdministrableCondition;
+import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
+import cc.kune.core.client.sn.actions.conditions.IsMeCondition;
+import cc.kune.core.client.sn.actions.conditions.IsNotMeCondition;
+import cc.kune.core.client.sn.actions.conditions.IsPersonCondition;
+import cc.kune.core.client.state.Session;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class GroupSNCollabsMenuItemsRegistry extends AbstractSNMembersActionsRegistry {
+
+ @Inject
+ public GroupSNCollabsMenuItemsRegistry(final Session session, final IsAdministrableCondition isAdministrableCondition,
+ final IsPersonCondition isPersonCondition, final IsGroupCondition isGroupCondition,
+ final IsMeCondition isMe, final IsNotMeCondition isNotMe, final ChangeToCollabAction changeToCollabAction,
+ final ChangeToAdminAction changeToAdminAction, final RemoveMemberAction removeMemberAction,
+ final AcceptJoinGroupAction acceptJoinGroupAction, final DenyJoinGroupAction denyJoinGroupAction,
+ final GotoGroupAction gotoGroupAction, final GotoMemberAction gotoMemberAction,
+ final GotoYourHomePageAction gotoYourHomePageAction) {
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(changeToAdminAction);
+ item.add(isAdministrableCondition);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(removeMemberAction);
+ item.add(isAdministrableCondition);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoMemberAction);
+ item.add(isPersonCondition);
+ item.add(isNotMe);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoYourHomePageAction);
+ item.add(isPersonCondition);
+ item.add(isMe);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction);
+ item.add(isGroupCondition);
+ return item;
+ }
+ });
+
+ }
+
+}
Property changes on: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNCollabsMenuItemsRegistry.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Copied: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNPendingsMenuItemsRegistry.java (from rev 1262, trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNPendingsMenuItemsRegistry.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNPendingsMenuItemsRegistry.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNPendingsMenuItemsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,62 @@
+package cc.kune.core.client.sn.actions.registry;
+
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.core.client.sn.actions.AcceptJoinGroupAction;
+import cc.kune.core.client.sn.actions.ChangeToAdminAction;
+import cc.kune.core.client.sn.actions.ChangeToCollabAction;
+import cc.kune.core.client.sn.actions.DenyJoinGroupAction;
+import cc.kune.core.client.sn.actions.GotoGroupAction;
+import cc.kune.core.client.sn.actions.GotoPersonAction;
+import cc.kune.core.client.sn.actions.RemoveMemberAction;
+import cc.kune.core.client.sn.actions.conditions.IsAdministrableCondition;
+import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
+import cc.kune.core.client.sn.actions.conditions.IsPersonCondition;
+import cc.kune.core.client.state.Session;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class GroupSNPendingsMenuItemsRegistry extends AbstractSNMembersActionsRegistry {
+
+ @Inject
+ public GroupSNPendingsMenuItemsRegistry(final Session session, final IsAdministrableCondition isAdministrableCondition,
+ final IsPersonCondition isPersonCondition, final IsGroupCondition isGroupCondition,
+ final ChangeToCollabAction changeToCollabAction, final ChangeToAdminAction changeToAdminAction,
+ final RemoveMemberAction removeMemberAction, final AcceptJoinGroupAction acceptJoinGroupAction,
+ final DenyJoinGroupAction denyJoinGroupAction, final GotoGroupAction gotoGroupAction,
+ final GotoPersonAction gotoPersonAction) {
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(acceptJoinGroupAction);
+ item.add(isAdministrableCondition);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(denyJoinGroupAction);
+ item.add(isAdministrableCondition);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoPersonAction);
+ item.add(isPersonCondition);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction);
+ item.add(isGroupCondition);
+ return item;
+ }
+ });
+ }
+
+}
Property changes on: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/GroupSNPendingsMenuItemsRegistry.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNAdminsMenuItemsRegistry.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNAdminsMenuItemsRegistry.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNAdminsMenuItemsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,81 +0,0 @@
-package cc.kune.core.client.sn.actions.registry;
-
-import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
-import cc.kune.core.client.sn.actions.AcceptJoinGroupAction;
-import cc.kune.core.client.sn.actions.ChangeToAdminAction;
-import cc.kune.core.client.sn.actions.ChangeToCollabAction;
-import cc.kune.core.client.sn.actions.DenyJoinGroupAction;
-import cc.kune.core.client.sn.actions.GotoGroupAction;
-import cc.kune.core.client.sn.actions.GotoMemberAction;
-import cc.kune.core.client.sn.actions.GotoYourHomePageAction;
-import cc.kune.core.client.sn.actions.RemoveMemberAction;
-import cc.kune.core.client.sn.actions.conditions.IsAdministrableCondition;
-import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
-import cc.kune.core.client.sn.actions.conditions.IsLoggedCondition;
-import cc.kune.core.client.sn.actions.conditions.IsMeCondition;
-import cc.kune.core.client.sn.actions.conditions.IsNotMeCondition;
-import cc.kune.core.client.sn.actions.conditions.IsPersonCondition;
-import cc.kune.core.client.state.Session;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class SNAdminsMenuItemsRegistry extends AbstractSNMembersActionsRegistry {
-
- @Inject
- public SNAdminsMenuItemsRegistry(final Session session, final IsLoggedCondition isLogged,
- final IsAdministrableCondition isAdministrableCondition, final IsPersonCondition isPersonCondition,
- final IsGroupCondition isGroupCondition, final IsMeCondition isMe, final IsNotMeCondition isNotMe,
- final ChangeToCollabAction changeToCollabAction, final ChangeToAdminAction changeToAdminAction,
- final RemoveMemberAction removeMemberAction, final AcceptJoinGroupAction acceptJoinGroupAction,
- final DenyJoinGroupAction denyJoinGroupAction, final GotoGroupAction gotoGroupAction,
- final GotoMemberAction gotoMemberAction, final GotoYourHomePageAction gotoYourHomePageAction) {
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(changeToCollabAction);
- item.add(isAdministrableCondition);
- item.add(isNotMe);
- item.add(isLogged);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(removeMemberAction);
- item.add(isAdministrableCondition);
- item.add(isNotMe);
- item.add(isLogged);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(gotoMemberAction);
- item.add(isPersonCondition);
- item.add(isNotMe);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(gotoYourHomePageAction);
- item.add(isPersonCondition);
- item.add(isMe);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction);
- item.add(isGroupCondition);
- return item;
- }
- });
- }
-
-}
Deleted: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNCollabsMenuItemsRegistry.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNCollabsMenuItemsRegistry.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNCollabsMenuItemsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,77 +0,0 @@
-package cc.kune.core.client.sn.actions.registry;
-
-import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
-import cc.kune.core.client.sn.actions.AcceptJoinGroupAction;
-import cc.kune.core.client.sn.actions.ChangeToAdminAction;
-import cc.kune.core.client.sn.actions.ChangeToCollabAction;
-import cc.kune.core.client.sn.actions.DenyJoinGroupAction;
-import cc.kune.core.client.sn.actions.GotoGroupAction;
-import cc.kune.core.client.sn.actions.GotoMemberAction;
-import cc.kune.core.client.sn.actions.GotoYourHomePageAction;
-import cc.kune.core.client.sn.actions.RemoveMemberAction;
-import cc.kune.core.client.sn.actions.conditions.IsAdministrableCondition;
-import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
-import cc.kune.core.client.sn.actions.conditions.IsMeCondition;
-import cc.kune.core.client.sn.actions.conditions.IsNotMeCondition;
-import cc.kune.core.client.sn.actions.conditions.IsPersonCondition;
-import cc.kune.core.client.state.Session;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class SNCollabsMenuItemsRegistry extends AbstractSNMembersActionsRegistry {
-
- @Inject
- public SNCollabsMenuItemsRegistry(final Session session, final IsAdministrableCondition isAdministrableCondition,
- final IsPersonCondition isPersonCondition, final IsGroupCondition isGroupCondition,
- final IsMeCondition isMe, final IsNotMeCondition isNotMe, final ChangeToCollabAction changeToCollabAction,
- final ChangeToAdminAction changeToAdminAction, final RemoveMemberAction removeMemberAction,
- final AcceptJoinGroupAction acceptJoinGroupAction, final DenyJoinGroupAction denyJoinGroupAction,
- final GotoGroupAction gotoGroupAction, final GotoMemberAction gotoMemberAction,
- final GotoYourHomePageAction gotoYourHomePageAction) {
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(changeToAdminAction);
- item.add(isAdministrableCondition);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(removeMemberAction);
- item.add(isAdministrableCondition);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(gotoMemberAction);
- item.add(isPersonCondition);
- item.add(isNotMe);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(gotoYourHomePageAction);
- item.add(isPersonCondition);
- item.add(isMe);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction);
- item.add(isGroupCondition);
- return item;
- }
- });
-
- }
-
-}
Deleted: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNPendingsMenuItemsRegistry.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNPendingsMenuItemsRegistry.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/SNPendingsMenuItemsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,62 +0,0 @@
-package cc.kune.core.client.sn.actions.registry;
-
-import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
-import cc.kune.core.client.sn.actions.AcceptJoinGroupAction;
-import cc.kune.core.client.sn.actions.ChangeToAdminAction;
-import cc.kune.core.client.sn.actions.ChangeToCollabAction;
-import cc.kune.core.client.sn.actions.DenyJoinGroupAction;
-import cc.kune.core.client.sn.actions.GotoGroupAction;
-import cc.kune.core.client.sn.actions.GotoPersonAction;
-import cc.kune.core.client.sn.actions.RemoveMemberAction;
-import cc.kune.core.client.sn.actions.conditions.IsAdministrableCondition;
-import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
-import cc.kune.core.client.sn.actions.conditions.IsPersonCondition;
-import cc.kune.core.client.state.Session;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class SNPendingsMenuItemsRegistry extends AbstractSNMembersActionsRegistry {
-
- @Inject
- public SNPendingsMenuItemsRegistry(final Session session, final IsAdministrableCondition isAdministrableCondition,
- final IsPersonCondition isPersonCondition, final IsGroupCondition isGroupCondition,
- final ChangeToCollabAction changeToCollabAction, final ChangeToAdminAction changeToAdminAction,
- final RemoveMemberAction removeMemberAction, final AcceptJoinGroupAction acceptJoinGroupAction,
- final DenyJoinGroupAction denyJoinGroupAction, final GotoGroupAction gotoGroupAction,
- final GotoPersonAction gotoPersonAction) {
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(acceptJoinGroupAction);
- item.add(isAdministrableCondition);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(denyJoinGroupAction);
- item.add(isAdministrableCondition);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(gotoPersonAction);
- item.add(isPersonCondition);
- return item;
- }
- });
- add(new Provider<MenuItemDescriptor>() {
- @Override
- public MenuItemDescriptor get() {
- final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction);
- item.add(isGroupCondition);
- return item;
- }
- });
- }
-
-}
Added: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNBottomActionsRegistry.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNBottomActionsRegistry.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNBottomActionsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,6 @@
+package cc.kune.core.client.sn.actions.registry;
+
+
+public class UserSNBottomActionsRegistry extends AbstractSNActionsRegistry {
+
+}
Added: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNConfActions.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNConfActions.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNConfActions.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,82 @@
+package cc.kune.core.client.sn.actions.registry;
+
+import cc.kune.common.client.actions.ui.descrip.ButtonDescriptor;
+import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
+import cc.kune.common.client.actions.ui.descrip.MenuRadioItemDescriptor;
+import cc.kune.common.client.actions.ui.descrip.SubMenuDescriptor;
+import cc.kune.common.client.noti.NotifyUser;
+import cc.kune.core.client.resources.CoreResources;
+import cc.kune.core.client.sn.actions.AddNewBuddiesAction;
+import cc.kune.core.client.sn.actions.UserSNVisibilityMenuItem;
+import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.client.state.StateChangedEvent;
+import cc.kune.core.client.state.StateChangedEvent.StateChangedHandler;
+import cc.kune.core.client.state.StateManager;
+import cc.kune.core.shared.domain.UserBuddiesVisibility;
+import cc.kune.core.shared.dto.GroupDTO;
+import cc.kune.core.shared.dto.StateAbstractDTO;
+import cc.kune.core.shared.i18n.I18nTranslationService;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class UserSNConfActions {
+
+ public static final MenuDescriptor OPTIONS_MENU = new MenuDescriptor();
+ public static final SubMenuDescriptor VISIBILITY_SUBMENU = new SubMenuDescriptor();
+
+ @Inject
+ public UserSNConfActions(final Session session, final StateManager stateManager, final I18nTranslationService i18n,
+ final UserSNBottomActionsRegistry registry, final Provider<UserSNVisibilityMenuItem> userBuddiesVisibility,
+ final CoreResources res, final IsGroupCondition isGroupCondition,
+ final AddNewBuddiesAction addNewBuddiesAction) {
+ OPTIONS_MENU.withToolTip(i18n.t("Options")).withIcon(res.arrowDownSitebar()).withStyles("k-sn-options-menu");
+
+ final MenuRadioItemDescriptor anyoneItem = userBuddiesVisibility.get().withVisibility(
+ UserBuddiesVisibility.anyone);
+ final MenuRadioItemDescriptor onlyYourBuddiesItem = userBuddiesVisibility.get().withVisibility(
+ UserBuddiesVisibility.yourbuddies);
+ final MenuRadioItemDescriptor onlyYou = userBuddiesVisibility.get().withVisibility(
+ UserBuddiesVisibility.onlyyou);
+ assert anyoneItem.getAction() != onlyYourBuddiesItem.getAction();
+ assert anyoneItem.getAction() != onlyYou.getAction();
+ registry.add(OPTIONS_MENU);
+ registry.add(VISIBILITY_SUBMENU.withText(i18n.t("Those who can view your network")).withParent(OPTIONS_MENU));
+ registry.add(anyoneItem.withParent(VISIBILITY_SUBMENU).withText(i18n.t("anyone")));
+ registry.add(onlyYourBuddiesItem.withParent(VISIBILITY_SUBMENU).withText(i18n.t("only your buddies")));
+ registry.add(onlyYou.withParent(VISIBILITY_SUBMENU).withText(i18n.t("only you")));
+
+ final ButtonDescriptor addBuddieBtn = new ButtonDescriptor(addNewBuddiesAction);
+
+ registry.add(addBuddieBtn.withStyles("k-no-backimage"));
+
+ stateManager.onStateChanged(true, new StateChangedHandler() {
+ @Override
+ public void onStateChanged(final StateChangedEvent event) {
+ final StateAbstractDTO state = event.getState();
+ final boolean administrable = state.getGroupRights().isAdministrable();
+ OPTIONS_MENU.setVisible(administrable);
+ OPTIONS_MENU.setEnabled(administrable);
+ final GroupDTO currentGroup = state.getGroup();
+ if (currentGroup.isPersonal()) {
+ final UserBuddiesVisibility visibility = state.getSocialNetworkData().getUserBuddiesVisibility();
+ switch (visibility) {
+ case anyone:
+ anyoneItem.setChecked(true);
+ break;
+ case yourbuddies:
+ onlyYourBuddiesItem.setChecked(true);
+ break;
+ case onlyyou:
+ onlyYou.setChecked(true);
+ break;
+ }
+ NotifyUser.info(i18n.t("Visibility of your network is " + visibility.toString()));
+ }
+ addBuddieBtn.setVisible(session.isLogged() && currentGroup.isPersonal()
+ && session.getCurrentUser().getShortName().equals(currentGroup.getShortName()));
+ }
+ });
+ }
+}
Added: trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/registry/UserSNMenuItemsRegistry.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,60 @@
+package cc.kune.core.client.sn.actions.registry;
+
+import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
+import cc.kune.core.client.sn.actions.AcceptJoinGroupAction;
+import cc.kune.core.client.sn.actions.ChangeToAdminAction;
+import cc.kune.core.client.sn.actions.ChangeToCollabAction;
+import cc.kune.core.client.sn.actions.DenyJoinGroupAction;
+import cc.kune.core.client.sn.actions.GotoGroupAction;
+import cc.kune.core.client.sn.actions.GotoMemberAction;
+import cc.kune.core.client.sn.actions.GotoYourHomePageAction;
+import cc.kune.core.client.sn.actions.RemoveMemberAction;
+import cc.kune.core.client.sn.actions.UnJoinGroupAction;
+import cc.kune.core.client.sn.actions.conditions.IsAdministrableCondition;
+import cc.kune.core.client.sn.actions.conditions.IsGroupCondition;
+import cc.kune.core.client.sn.actions.conditions.IsMeCondition;
+import cc.kune.core.client.sn.actions.conditions.IsNotMeCondition;
+import cc.kune.core.client.sn.actions.conditions.IsPersonCondition;
+import cc.kune.core.client.state.Session;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+ at SuppressWarnings("serial")
+public class UserSNMenuItemsRegistry extends AbstractSNMembersActionsRegistry {
+
+ @Inject
+ public UserSNMenuItemsRegistry(final Session session, final IsAdministrableCondition isAdministrableCondition,
+ final IsPersonCondition isPersonCondition, final IsGroupCondition isGroupCondition,
+ final IsMeCondition isMe, final IsNotMeCondition isNotMe, final ChangeToCollabAction changeToCollabAction,
+ final ChangeToAdminAction changeToAdminAction, final RemoveMemberAction removeMemberAction,
+ final AcceptJoinGroupAction acceptJoinGroupAction, final DenyJoinGroupAction denyJoinGroupAction,
+ final GotoGroupAction gotoGroupAction, final GotoMemberAction gotoMemberAction,
+ final UnJoinGroupAction unjoinAction, final GotoYourHomePageAction gotoYourHomePageAction) {
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(unjoinAction);
+ item.add(isGroupCondition);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoMemberAction);
+ item.add(isPersonCondition);
+ item.add(isNotMe);
+ return item;
+ }
+ });
+ add(new Provider<MenuItemDescriptor>() {
+ @Override
+ public MenuItemDescriptor get() {
+ final MenuItemDescriptor item = new MenuItemDescriptor(gotoGroupAction);
+ item.add(isGroupCondition);
+ return item;
+ }
+ });
+ }
+}
Modified: trunk/src/main/java/cc/kune/core/client/state/HistoryWrapperDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/state/HistoryWrapperDefault.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/client/state/HistoryWrapperDefault.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -23,11 +23,14 @@
public class HistoryWrapperDefault implements HistoryWrapper {
+ @Override
public String getToken() {
return History.getToken();
}
+ @Override
public void newItem(final String historyToken) {
+ // NotifyUser.info("New history token: " + historyToken);
History.newItem(historyToken);
}
Modified: trunk/src/main/java/cc/kune/core/public/images/group-def-icon.gif
===================================================================
(Binary files differ)
Added: trunk/src/main/java/cc/kune/core/public/images/group-def-icon.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/cc/kune/core/public/images/group-def-icon.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/cc/kune/core/public/images/unknown.jpg
===================================================================
(Binary files differ)
Modified: trunk/src/main/java/cc/kune/core/shared/dto/SocialNetworkDataDTO.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/SocialNetworkDataDTO.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/core/shared/dto/SocialNetworkDataDTO.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -27,14 +27,14 @@
public class SocialNetworkDataDTO implements IsSerializable {
- private SocialNetworkVisibility socialNetworkVisibility;
private SocialNetworkDTO groupMembers;
- private ParticipationDataDTO userParticipation;
- private UserBuddiesVisibility userBuddiesVisibility;
- private UserBuddiesDataDTO userBuddies;
private AccessRights groupRights;
private boolean isBuddiesVisible;
private boolean isMembersVisible;
+ private SocialNetworkVisibility socialNetworkVisibility;
+ private UserBuddiesDataDTO userBuddies;
+ private UserBuddiesVisibility userBuddiesVisibility;
+ private ParticipationDataDTO userParticipation;
public SocialNetworkDataDTO() {
this(null, null, null, null, null, null, false, false);
@@ -43,7 +43,7 @@
public SocialNetworkDataDTO(final SocialNetworkVisibility socialNetworkVisibility,
final SocialNetworkDTO groupMembers, final ParticipationDataDTO userParticipation,
final UserBuddiesVisibility userBuddiesVisibility, final UserBuddiesDataDTO userBuddies,
- final AccessRights groupRights, final boolean isBuddiesVisible, final boolean isMembersVisible) {
+ final AccessRights groupRights, final boolean isBuddiesVisible, final boolean isMembersVisible) {
this.socialNetworkVisibility = socialNetworkVisibility;
this.groupMembers = groupMembers;
this.userParticipation = userParticipation;
@@ -58,7 +58,7 @@
return groupMembers;
}
- public AccessRights getGroupRights() {
+ public AccessRights getGroupRights() {
return groupRights;
}
@@ -136,6 +136,7 @@
@Override
public String toString() {
- return "SocialNetworkResultDTO[members: " + groupMembers + "; participation: " + userParticipation + "]";
+ return "SocialNetworkResultDTO[members: " + groupMembers + "; participation: " + userParticipation
+ + "; buddiesvisibility: " + userBuddiesVisibility + "]";
}
}
Modified: trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml
===================================================================
--- trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/KuneWave.gwt.xml 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,13 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.1.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.1.1/distro-source/core/src/gwt-module.dtd">
<module>
- <inherits name="com.google.gwt.user.User" />
<source path="client" />
<public path="public" />
+
<inherits name="com.google.common.base.Base" />
<inherits name='com.google.gwt.user.User' />
<inherits name="com.google.gwt.event.EventBase" />
+ <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome' /> -->
+
<inherits name='com.glines.socketio.client.Client' />
<inherits name='com.google.gwt.json.JSON' />
<inherits name='com.google.gwt.websockets.WebSockets' />
@@ -16,29 +18,26 @@
<inherits name='org.waveprotocol.wave.client.editor.Editor' />
<inherits name='org.waveprotocol.wave.client.gadget.Gadget' />
<inherits name='org.waveprotocol.wave.client.util.ClientFlags' />
-
<inherits name='org.waveprotocol.wave.model.Model' />
<inherits name="org.waveprotocol.wave.model.account.Account" />
<inherits name='org.waveprotocol.wave.model.conversation.Conversation' />
<inherits name="org.waveprotocol.box.common.Common" />
<inherits name='org.waveprotocol.box.common.comms.WaveClientRpc' />
+ <inherits name='org.waveprotocol.box.search.SearchProto' />
<inherits
name='org.waveprotocol.box.webclient.common.communication.Communication' />
+ <!-- TODO(hearnden): delete webclient.common. It's not common to anything. -->
+ <inherits name='org.waveprotocol.box.webclient.common.Common' />
+ <inherits name='org.waveprotocol.box.webclient.search.Search' />
<inherits name='org.waveprotocol.box.webclient.util.Util' />
-
- <inherits name='org.waveprotocol.box.webclient.waveclient.common.Common' />
-
+ <inherits name='org.waveprotocol.box.webclient.search.Search' />
<inherits name='org.waveprotocol.box.webclient.widget.error.Error' />
- <inherits name="org.waveprotocol.box.webclient.WebClientDev" />
-<!-- Added from errors -->
- <inherits name='org.waveprotocol.wave.client.common.safehtml.SafeHtml' />
- <inherits name='org.waveprotocol.wave.client.common.util.Util' />
- <inherits name='org.waveprotocol.wave.client.debug.logger.Logger' />
- <inherits name='org.waveprotocol.wave.client.widget.common.Common' />
- <inherits name='org.waveprotocol.wave.concurrencycontrol.Channel' />
- <inherits name='org.waveprotocol.wave.concurrencycontrol.Common' />
- <inherits name='org.waveprotocol.wave.concurrencycontrol.Wave' />
+ <!-- Specify the app entry point class. -->
+<!-- <entry-point class='org.waveprotocol.box.webclient.client.WebClient' />-->
+ <set-configuration-property name="CssResource.obfuscationPrefix"
+ value="SWC" />
+
</module>
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/wave/client/WaveClientSimpleAuthenticator.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/WaveClientSimpleAuthenticator.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/client/WaveClientSimpleAuthenticator.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -43,6 +43,7 @@
@Override
public void onResponseReceived(final Request request, final Response response) {
callback.onSuccess(null);
+ // Only for testing:
// final ForIsWidget userSpace = wsArmor.getUserSpace();
// if (userSpace.getWidgetCount() > 0) {
// userSpace.remove(0);
Modified: trunk/src/main/java/cc/kune/wave/client/WebClient.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/client/WebClient.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,3 +1,4 @@
+// @formatter:off
/**
* Copyright 2010 Google Inc.
*
@@ -17,41 +18,42 @@
package cc.kune.wave.client;
+
+
+
+
+
import org.waveprotocol.box.webclient.client.ClientEvents;
+import org.waveprotocol.box.webclient.client.ClientIdGenerator;
import org.waveprotocol.box.webclient.client.DebugMessagePanel;
import org.waveprotocol.box.webclient.client.HistorySupport;
import org.waveprotocol.box.webclient.client.RemoteViewServiceMultiplexer;
import org.waveprotocol.box.webclient.client.Session;
-import org.waveprotocol.box.webclient.client.SimpleCcDocumentFactory;
+import org.waveprotocol.box.webclient.client.SimpleWaveStore;
import org.waveprotocol.box.webclient.client.StagesProvider;
-import org.waveprotocol.box.webclient.client.WaveView;
import org.waveprotocol.box.webclient.client.WaveWebSocketClient;
import org.waveprotocol.box.webclient.client.events.NetworkStatusEvent;
-import org.waveprotocol.box.webclient.client.events.NetworkStatusEvent.ConnectionStatus;
import org.waveprotocol.box.webclient.client.events.NetworkStatusEventHandler;
import org.waveprotocol.box.webclient.client.events.WaveCreationEvent;
import org.waveprotocol.box.webclient.client.events.WaveCreationEventHandler;
-import org.waveprotocol.box.webclient.client.events.WaveIndexUpdatedEvent;
import org.waveprotocol.box.webclient.client.events.WaveSelectionEvent;
import org.waveprotocol.box.webclient.client.events.WaveSelectionEventHandler;
-import org.waveprotocol.box.webclient.client.events.WaveUpdatedEvent;
+import org.waveprotocol.box.webclient.search.RemoteSearchService;
+import org.waveprotocol.box.webclient.search.Search;
+import org.waveprotocol.box.webclient.search.SearchPanelRenderer;
+import org.waveprotocol.box.webclient.search.SearchPanelWidget;
+import org.waveprotocol.box.webclient.search.SearchPresenter;
+import org.waveprotocol.box.webclient.search.SimpleSearch;
+import org.waveprotocol.box.webclient.search.WaveStore;
import org.waveprotocol.box.webclient.util.Log;
-import org.waveprotocol.box.webclient.waveclient.common.ClientIdGenerator;
-import org.waveprotocol.box.webclient.waveclient.common.WaveViewServiceImpl;
-import org.waveprotocol.box.webclient.waveclient.common.WebClientBackend;
-import org.waveprotocol.box.webclient.waveclient.common.WebClientUtils;
import org.waveprotocol.box.webclient.widget.error.ErrorIndicatorPresenter;
+import org.waveprotocol.wave.client.account.ProfileManager;
+import org.waveprotocol.wave.client.account.impl.ProfileManagerImpl;
import org.waveprotocol.wave.client.common.safehtml.SafeHtml;
import org.waveprotocol.wave.client.common.safehtml.SafeHtmlBuilder;
import org.waveprotocol.wave.client.common.util.AsyncHolder.Accessor;
import org.waveprotocol.wave.client.debug.logger.LogLevel;
-import org.waveprotocol.wave.client.util.ClientFlags;
import org.waveprotocol.wave.client.widget.common.ImplPanel;
-import org.waveprotocol.wave.concurrencycontrol.channel.WaveViewService;
-import org.waveprotocol.wave.concurrencycontrol.common.ChannelException;
-import org.waveprotocol.wave.concurrencycontrol.wave.CcBasedWavelet;
-import org.waveprotocol.wave.model.conversation.ObservableConversation;
-import org.waveprotocol.wave.model.id.IdFilters;
import org.waveprotocol.wave.model.id.IdGenerator;
import org.waveprotocol.wave.model.id.WaveId;
import org.waveprotocol.wave.model.wave.ParticipantId;
@@ -76,348 +78,300 @@
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class WebClient extends Composite {
- interface Binder extends UiBinder<DockLayoutPanel, WebClient> {
- }
+ interface Binder extends UiBinder<DockLayoutPanel, WebClient> {
+ }
- /**
- * An exception handler that reports exceptions using a
- * <em>shiny banner</em> (an alert placed on the top of the screen). Once
- * the stack trace is prepared, it is revealed in the banner via a link.
- */
- static class ErrorHandler implements UncaughtExceptionHandler {
- public static void install() {
- GWT.setUncaughtExceptionHandler(new ErrorHandler(GWT.getUncaughtExceptionHandler()));
- }
+ interface Style extends CssResource {
+ String subPanel();
+ String waveView();
+ }
- private static String maybe(final int value, final String otherwise) {
- return value != -1 ? String.valueOf(value) : otherwise;
- }
+ private static final Binder BINDER = GWT.create(Binder.class);
- private static String maybe(final String value, final String otherwise) {
- return value != null ? value : otherwise;
- }
+ static Log LOG = Log.get(WebClient.class);
- /**
- * Indicates whether an error has already been reported (at most one
- * error is ever reported by this handler).
- */
- private boolean hasFired;
+ private final ProfileManager profiles = new ProfileManagerImpl();
- /** Next handler in the handler chain. */
- private final UncaughtExceptionHandler next;
+ @UiField
+ SplitLayoutPanel splitPanel;
- private ErrorHandler(final UncaughtExceptionHandler next) {
- this.next = next;
- }
+ @UiField
+ Style style;
- private void getStackTraceAsync(final Throwable t, final Accessor<SafeHtml> whenReady) {
- // TODO: Request stack-trace de-obfuscation. For now, just use the
- // javascript stack trace.
- //
- // Use minimal services here, in order to avoid the chance that
- // reporting
- // the error produces more errors. In particular, do not use
- // Scheduler.
- // Also, this code could potentially be put behind a runAsync
- // boundary, to
- // save whatever dependencies it uses from the initial download.
- DeferredCommand.addCommand(new Command() {
- @Override
- public void execute() {
- final SafeHtmlBuilder stack = new SafeHtmlBuilder();
+ @UiField
+ ImplPanel contentPanel;
- Throwable error = t;
- while (error != null) {
- stack.appendEscaped(String.valueOf(error.getMessage())).appendHtmlConstant("<br>");
- for (final StackTraceElement elt : error.getStackTrace()) {
- stack.appendHtmlConstant(" ").appendEscaped(maybe(elt.getClassName(), "??")).appendHtmlConstant(
- ".") //
- .appendEscaped(maybe(elt.getMethodName(), "??")).appendHtmlConstant(" (") //
- .appendEscaped(maybe(elt.getFileName(), "??")).appendHtmlConstant(":") //
- .appendEscaped(maybe(elt.getLineNumber(), "??")).appendHtmlConstant(")") //
- .appendHtmlConstant("<br>");
- }
- error = error.getCause();
- if (error != null) {
- stack.appendHtmlConstant("Caused by: ");
- }
- }
+ @UiField(provided = true)
+ SearchPanelWidget searchPanel = new SearchPanelWidget(new SearchPanelRenderer(profiles));
- whenReady.use(stack.toSafeHtml());
- }
- });
- }
+ @UiField
+ DebugMessagePanel logPanel;
- @Override
- public void onUncaughtException(final Throwable e) {
- if (!hasFired) {
- hasFired = true;
- final ErrorIndicatorPresenter error = ErrorIndicatorPresenter.create(RootPanel.get("banner"));
- getStackTraceAsync(e, new Accessor<SafeHtml>() {
- @Override
- public void use(final SafeHtml stack) {
- error.addDetail(stack, null);
- }
- });
- }
+ /** The wave panel, if a wave is open. */
+ private StagesProvider wave;
- if (next != null) {
- next.onUncaughtException(e);
- }
- }
- }
+ private final WaveStore waveStore = new SimpleWaveStore();
- interface Style extends CssResource {
- String subPanel();
+ /**
+ * Create a remote websocket to talk to the server-side FedOne service.
+ */
+ private WaveWebSocketClient websocket;
- String waveView();
- }
+ private ParticipantId loggedInUser;
- private static final Binder BINDER = GWT.create(Binder.class);
+ private IdGenerator idGenerator;
- static Log LOG = Log.get(WebClient.class); // NOPMD by vjrj on 18/01/11
- // 15:52
+ private RemoteViewServiceMultiplexer channel;
- private WebClientBackend backend = null;
+ /**
+ * This is the entry point method.
+ */
+ public WebClient() {
- private RemoteViewServiceMultiplexer channel;
+ ErrorHandler.install();
- @UiField
- ImplPanel contentPanel;
+ ClientEvents.get().addWaveCreationEventHandler(
+ new WaveCreationEventHandler() {
- private IdGenerator idGenerator;
+ @Override
+ public void onCreateRequest(WaveCreationEvent event) {
+ LOG.info("WaveCreationEvent received");
+ if (channel == null) {
+ throw new RuntimeException("Spaghetti attack. Create occured before login");
+ }
- private ParticipantId loggedInUser;
+ openWave(WaveRef.of(idGenerator.newWaveId()), true);
+ }
+ });
- @UiField
- DebugMessagePanel logPanel;
+ setupConnectionIndicator();
- @UiField
- SplitLayoutPanel splitPanel;
+ HistorySupport.init();
- @UiField
- Style style;
+ websocket = new WaveWebSocketClient(useSocketIO(), getWebSocketBaseUrl(GWT.getModuleBaseURL()));
+ websocket.connect();
- /** The wave panel, if a wave is open. */
- private StagesProvider wave;
+ if (Session.get().isLoggedIn()) {
+ loggedInUser = new ParticipantId(Session.get().getAddress());
+ idGenerator = ClientIdGenerator.create();
+ loginToServer();
+ }
- /** The old wave panel */
- private WaveView waveView = null;
+ setupUi();
- /**
- * Create a remote websocket to talk to the server-side FedOne service.
- */
- private final WaveWebSocketClient websocket;
+ History.fireCurrentHistoryState();
+ LOG.info("SimpleWebClient.onModuleLoad() done");
+ }
- public WebClient() {
+ private void setupUi() {
+ // Set up UI
+ DockLayoutPanel self = BINDER.createAndBindUi(this);
+ // kune-patch
+ // RootPanel.get("app").add(self);
+ initWidget(self);
+ // DockLayoutPanel forcibly conflicts with sensible layout control, and
+ // sticks inline styles on elements without permission. They must be
+ // cleared.
+ self.getElement().getStyle().clearPosition();
+ splitPanel.setWidgetMinSize(searchPanel, 300);
+ splitPanel.setWidgetMinSize(contentPanel, 450);
- ErrorHandler.install();
+ if (LogLevel.showDebug()) {
+ logPanel.enable();
+ } else {
+ logPanel.removeFromParent();
+ }
- // Set up UI
- final DockLayoutPanel self = BINDER.createAndBindUi(this);
- initWidget(self);
- // RootPanel.get("app").add(self);
- // DockLayoutPanel forcibly conflicts with sensible layout control, and
- // sticks inline styles on elements without permission. They must be
- // cleared.
- self.getElement().getStyle().clearPosition();
+ setupSearchPanel();
+ setupWavePanel();
+ }
- if (LogLevel.showDebug()) {
- logPanel.enable();
- } else {
- logPanel.removeFromParent();
- }
+ private void setupSearchPanel() {
+ // On wave selection, fire an event.
+ SearchPresenter.WaveSelectionHandler selectHandler =
+ new SearchPresenter.WaveSelectionHandler() {
+ @Override
+ public void onWaveSelected(WaveId id) {
+ ClientEvents.get().fireEvent(new WaveSelectionEvent(WaveRef.of(id)));
+ }
+ };
+ Search search = SimpleSearch.create(RemoteSearchService.create(), waveStore);
+ SearchPresenter searchUi = SearchPresenter.create(search, searchPanel, selectHandler);
+ }
- if (ClientFlags.get().enableWavePanelHarness()) {
- // For handling the opening of wave using the new wave panel
- ClientEvents.get().addWaveSelectionEventHandler(new WaveSelectionEventHandler() {
- @Override
- public void onSelection(final WaveRef waveRef) {
- openWave(waveRef, false);
- }
- });
- waveView = null;
- } else {
- waveView = new WaveView();
- contentPanel.add(waveView);
+ private void setupWavePanel() {
+ // Handles opening waves.
+ ClientEvents.get().addWaveSelectionEventHandler(new WaveSelectionEventHandler() {
+ @Override
+ public void onSelection(WaveRef waveRef) {
+ openWave(waveRef, false);
+ }
+ });
+ }
- // DockLayoutPanel manually set position relative. We need to clear
- // it.
- waveView.getElement().getStyle().clearPosition();
+ private void setupConnectionIndicator() {
+ ClientEvents.get().addNetworkStatusEventHandler(new NetworkStatusEventHandler() {
+ @Override
+ public void onNetworkStatus(NetworkStatusEvent event) {
+ Element element = Document.get().getElementById("netstatus");
+ if (element != null) {
+ switch (event.getStatus()) {
+ case CONNECTED:
+ case RECONNECTED:
+ element.setInnerText("Online");
+ element.setClassName("online");
+ break;
+ case DISCONNECTED:
+ element.setInnerText("Offline");
+ element.setClassName("offline");
+ break;
+ case RECONNECTING:
+ element.setInnerText("Connecting...");
+ element.setClassName("connecting");
+ break;
+ }
}
+ }
+ });
+ }
- ClientEvents.get().addWaveCreationEventHandler(new WaveCreationEventHandler() {
+ /**
+ * Returns <code>ws://yourhost[:port]/</code>.
+ */
+ // XXX check formatting wrt GPE
+ private native String getWebSocketBaseUrl(String moduleBase) /*-{
+ return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/";
+}-*/;
- @Override
- public void onCreateRequest(final WaveCreationEvent event) {
- LOG.info("WaveCreationEvent received");
- if (channel == null) {
- throw new RuntimeException("Spaghetti attack. Create occured before login"); // NOPMD
- // by
- // vjrj
- // on
- // 18/01/11
- // 15:52
- }
+ private native boolean useSocketIO() /*-{
+ return !!$wnd.__useSocketIO
+}-*/;
- if (ClientFlags.get().enableWavePanelHarness()) {
- final WaveId newWaveId = idGenerator.newWaveId();
- openWave(WaveRef.of(newWaveId), true);
- } else {
- final WaveId newWaveId = idGenerator.newWaveId();
- ClientEvents.get().fireEvent(new WaveSelectionEvent(WaveRef.of(newWaveId)));
- final ObservableConversation convo = waveView.getConversationView().createRoot();
- final CcBasedWavelet rootWavelet = waveView.getCcStackManager().getView().getRoot();
- rootWavelet.addParticipant(loggedInUser);
- LOG.info("created conversation: " + convo);
- convo.getRootThread().appendBlip();
- }
- }
- });
+ /**
+ */
+ private void loginToServer() {
+ assert loggedInUser != null;
+ channel = new RemoteViewServiceMultiplexer(websocket, loggedInUser.getAddress());
+ }
- configureConnectionIndicator();
+ /**
+ * Shows a wave in a wave panel.
+ *
+ * @param waveRef wave id to open
+ * @param isNewWave whether the wave is being created by this client session.
+ */
+ private void openWave(WaveRef waveRef, boolean isNewWave) {
+ LOG.info("WebClient.openWave()");
- HistorySupport.init();
-
- websocket = new WaveWebSocketClient(useSocketIO(), getWebSocketBaseUrl(GWT.getModuleBaseURL()));
- websocket.connect();
-
- if (Session.get().isLoggedIn()) {
- loggedInUser = new ParticipantId(Session.get().getAddress());
- idGenerator = ClientIdGenerator.create();
- loginToServer();
- }
- History.fireCurrentHistoryState();
- LOG.info("SimpleWebClient.onModuleLoad() done");
+ if (wave != null) {
+ wave.destroy();
+ wave = null;
}
- private void configureConnectionIndicator() {
- ClientEvents.get().addNetworkStatusEventHandler(new NetworkStatusEventHandler() {
- @Override
- public void onNetworkStatus(final NetworkStatusEvent event) {
- final Element element = Document.get().getElementById("netstatus");
- if (element != null) {
- switch (event.getStatus()) {
- case CONNECTED:
- case RECONNECTED:
- element.setInnerText("Online");
- element.setClassName("online");
- break;
- case DISCONNECTED:
- element.setInnerText("Offline");
- element.setClassName("offline");
- break;
- case RECONNECTING:
- element.setInnerText("Connecting...");
- element.setClassName("connecting");
- break;
- }
- }
- }
- });
+ Element holder = contentPanel.getElement().appendChild(Document.get().createDivElement());
+ final StagesProvider wave = new StagesProvider(holder,
+ contentPanel, waveRef, channel, idGenerator, profiles, waveStore, isNewWave);
+ this.wave = wave;
+ wave.load(null);
+ String encodedToken = History.getToken();
+ if (encodedToken != null && !encodedToken.isEmpty()) {
+ WaveRef fromWaveRef = HistorySupport.waveRefFromHistoryToken(encodedToken);
+ if (waveRef == null) {
+ LOG.info("History token contains invalid path: " + encodedToken);
+ return;
+ }
+ if (fromWaveRef.getWaveId().equals(waveRef.getWaveId())) {
+ // History change was caused by clicking on a link, it's already
+ // updated by browser.
+ return;
+ }
}
+ History.newItem(HistorySupport.historyTokenFromWaveref(waveRef), false);
+ }
- private native String getBaseUrl() /*-{
- return !!$wnd.__baseUrl
- }-*/;
+ /**
+ * An exception handler that reports exceptions using a <em>shiny banner</em>
+ * (an alert placed on the top of the screen). Once the stack trace is
+ * prepared, it is revealed in the banner via a link.
+ */
+ static class ErrorHandler implements UncaughtExceptionHandler {
+ /** Next handler in the handler chain. */
+ private final UncaughtExceptionHandler next;
/**
- * Returns <code>ws://yourhost[:port]/</code>.
+ * Indicates whether an error has already been reported (at most one error
+ * is ever reported by this handler).
*/
- // XXX check formatting wrt GPE
- private native String getWebSocketBaseUrl(String moduleBase) /*-{
- return "ws" + /:\/\/[^\/]+/.exec(moduleBase)[0] + "/";
- }-*/;
+ private boolean hasFired;
- /**
- */
- private void loginToServer() {
- assert loggedInUser != null;
- backend = new WebClientBackend(loggedInUser, websocket);
- channel = new RemoteViewServiceMultiplexer(websocket, loggedInUser.getAddress());
+ private ErrorHandler(UncaughtExceptionHandler next) {
+ this.next = next;
+ }
- websocket.attachLegacy(backend);
- if (!ClientFlags.get().enableWavePanelHarness()) {
- waveView.setLegacy(backend, idGenerator);
- }
+ public static void install() {
+ GWT.setUncaughtExceptionHandler(new ErrorHandler(GWT.getUncaughtExceptionHandler()));
+ }
- ClientEvents.get().addNetworkStatusEventHandler(new NetworkStatusEventHandler() {
- @Override
- public void onNetworkStatus(final NetworkStatusEvent event) {
- if (event.getStatus() == ConnectionStatus.CONNECTED) {
- openIndexWave();
- }
- }
+ @Override
+ public void onUncaughtException(Throwable e) {
+ if (!hasFired) {
+ hasFired = true;
+ final ErrorIndicatorPresenter error =
+ ErrorIndicatorPresenter.create(RootPanel.get("banner"));
+ getStackTraceAsync(e, new Accessor<SafeHtml>() {
+ @Override
+ public void use(SafeHtml stack) {
+ error.addDetail(stack, null);
+ }
});
+ }
+
+ if (next != null) {
+ next.onUncaughtException(e);
+ }
}
- private void openIndexWave() {
- final SimpleCcDocumentFactory docFactory = new SimpleCcDocumentFactory();
- final WaveViewServiceImpl indexWave = (WaveViewServiceImpl) backend.getIndexWave(docFactory);
- indexWave.viewOpen(IdFilters.ALL_IDS, null, new WaveViewService.OpenCallback() {
+ private void getStackTraceAsync(final Throwable t, final Accessor<SafeHtml> whenReady) {
+ // TODO: Request stack-trace de-obfuscation. For now, just use the
+ // javascript stack trace.
+ //
+ // Use minimal services here, in order to avoid the chance that reporting
+ // the error produces more errors. In particular, do not use Scheduler.
+ // Also, this code could potentially be put behind a runAsync boundary, to
+ // save whatever dependencies it uses from the initial download.
+ DeferredCommand.addCommand(new Command() {
+ @Override
+ public void execute() {
+ SafeHtmlBuilder stack = new SafeHtmlBuilder();
- @Override
- public void onException(final ChannelException e) {
- LOG.severe("ChannelException opening index wave", e);
+ Throwable error = t;
+ while (error != null) {
+ stack.appendEscaped(String.valueOf(error.getMessage())).appendHtmlConstant("<br>");
+ for (StackTraceElement elt : error.getStackTrace()) {
+ stack.appendHtmlConstant(" ")
+ .appendEscaped(maybe(elt.getClassName(), "??")).appendHtmlConstant(".") //
+ .appendEscaped(maybe(elt.getMethodName(), "??")).appendHtmlConstant(" (") //
+ .appendEscaped(maybe(elt.getFileName(), "??")).appendHtmlConstant(":") //
+ .appendEscaped(maybe(elt.getLineNumber(), "??")).appendHtmlConstant(")") //
+ .appendHtmlConstant("<br>");
}
-
- @Override
- public void onFailure(final String reason) {
- LOG.info("Failure for index wave " + reason);
+ error = error.getCause();
+ if (error != null) {
+ stack.appendHtmlConstant("Caused by: ");
}
+ }
- @Override
- public void onSuccess(final String response) {
- LOG.info("Success for index wave subscription");
- }
-
- @Override
- public void onUpdate(final WaveViewService.WaveViewServiceUpdate update) {
- LOG.info("IndexWave update received hasDeltas=" + update.hasDeltas() + " hasWaveletSnapshot="
- + update.hasWaveletSnapshot());
- ClientEvents.get().fireEvent(
- new WaveUpdatedEvent(indexWave, update.getChannelId(), update.getWaveletId()));
- ClientEvents.get().fireEvent(new WaveIndexUpdatedEvent(WebClientUtils.getIndexEntries(indexWave)));
- }
- });
+ whenReady.use(stack.toSafeHtml());
+ }
+ });
}
- /**
- * Shows a wave in a wave panel.
- *
- * @param waveRef
- * wave id to open
- * @param isNewWave
- * whether the wave is being created by this client session.
- */
- private void openWave(final WaveRef waveRef, final boolean isNewWave) {
- LOG.info("WebClient.openWave()");
-
- if (wave != null) {
- wave.destroy();
- wave = null;
- }
-
- wave = new StagesProvider(contentPanel.getElement().appendChild(Document.get().createDivElement()),
- contentPanel, waveRef, channel, idGenerator, isNewWave);
- wave.load(null);
- final String encodedToken = History.getToken();
- if (encodedToken != null && !encodedToken.isEmpty()) {
- final WaveRef fromWaveRef = HistorySupport.waveRefFromHistoryToken(encodedToken);
- if (waveRef == null) {
- LOG.info("History token contains invalid path: " + encodedToken);
- return;
- }
- if (fromWaveRef.getWaveId().equals(waveRef.getWaveId())) {
- // History change was caused by clicking on a link, it's already
- // updated by browser.
- return;
- }
- }
- History.newItem(HistorySupport.historyTokenFromWaveref(waveRef), false);
+ private static String maybe(String value, String otherwise) {
+ return value != null ? value : otherwise;
}
- private native boolean useSocketIO() /*-{
- return !!$wnd.__useSocketIO
- }-*/;
+ private static String maybe(int value, String otherwise) {
+ return value != -1 ? String.valueOf(value) : otherwise;
+ }
+ }
}
Modified: trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/client/WebClient.ui.xml 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,9 +1,9 @@
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g='urn:import:com.google.gwt.user.client.ui'
- xmlns:s='urn:import:org.waveprotocol.box.webclient.client'
- xmlns:w='urn:import:org.waveprotocol.wave.client.widget.common'
- xmlns:n='urn:import:org.waveprotocol.box.webclient.client.wavelist'>
+ xmlns:d='urn:import:org.waveprotocol.box.webclient.client'
+ xmlns:s='urn:import:org.waveprotocol.box.webclient.search'
+ xmlns:w='urn:import:org.waveprotocol.wave.client.widget.common'>
<ui:style type="cc.kune.wave.client.WebClient.Style">
@def rootBackground #f0f0ff;
@def gap 5px;
@@ -55,15 +55,15 @@
<g:center>
<g:SplitLayoutPanel ui:field="splitPanel" stylePrimaryName="{style.splitPanel}">
<g:south size="200">
- <s:DebugMessagePanel ui:field="logPanel" styleName="{style.subPanel} {style.debugPanel}" />
+ <d:DebugMessagePanel ui:field="logPanel" addStyleNames="{style.subPanel} {style.debugPanel}" />
</g:south>
<g:west size="400">
- <n:WaveListPanel ui:field="listPanel" styleName="{style.waveList}" />
+ <s:SearchPanelWidget ui:field="searchPanel"/>
</g:west>
<g:center>
- <w:ImplPanel ui:field="contentPanel"></w:ImplPanel>
+ <w:ImplPanel ui:field="contentPanel"/>
</g:center>
</g:SplitLayoutPanel>
</g:center>
</g:DockLayoutPanel>
-</ui:UiBinder>
+</ui:UiBinder>
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/wave/server/CustomAuthenticationServlet.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/CustomAuthenticationServlet.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/server/CustomAuthenticationServlet.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -31,7 +31,6 @@
import org.waveprotocol.box.server.authentication.ParticipantPrincipal;
import org.waveprotocol.box.server.authentication.SessionManager;
import org.waveprotocol.box.server.gxp.AuthenticationPage;
-import org.waveprotocol.box.server.rpc.BaseUrlHelper;
import org.waveprotocol.wave.model.wave.InvalidParticipantAddress;
import org.waveprotocol.wave.model.wave.ParticipantId;
import org.waveprotocol.wave.util.logging.Log;
@@ -45,203 +44,203 @@
/**
* A servlet for authenticating a user's password and giving them a token via a
* cookie.
- *
+ *
* @author josephg at gmail.com (Joseph Gentle)
*/
public class CustomAuthenticationServlet extends HttpServlet {
- private static final String DEFAULT_REDIRECT_URL = "/";
- public static final String RESPONSE_STATUS_NONE = "NONE";
- public static final String RESPONSE_STATUS_FAILED = "FAILED";
- public static final String RESPONSE_STATUS_SUCCESS = "SUCCESS";
+ private static final String DEFAULT_REDIRECT_URL = "/";
+ private static final Log LOG = Log.get(CustomAuthenticationServlet.class);
+ public static final String RESPONSE_STATUS_FAILED = "FAILED";
+ public static final String RESPONSE_STATUS_NONE = "NONE";
- private static final Log LOG = Log.get(CustomAuthenticationServlet.class);
+ public static final String RESPONSE_STATUS_SUCCESS = "SUCCESS";
- private final Configuration configuration;
- private final SessionManager sessionManager;
- private final String domain;
- private final String baseUrl;
+ private final Configuration configuration;
+ private final String domain;
+ private final SessionManager sessionManager;
- @Inject
- public CustomAuthenticationServlet(Configuration configuration, SessionManager sessionManager,
- @Named(CoreSettings.WAVE_SERVER_DOMAIN) String domain, @Named(CoreSettings.HTTP_BASE_URL) String baseUrl) {
- Preconditions.checkNotNull(configuration, "Configuration is null");
- Preconditions.checkNotNull(sessionManager, "Session manager is null");
- this.configuration = configuration;
- this.sessionManager = sessionManager;
- this.domain = domain.toLowerCase();
- this.baseUrl = BaseUrlHelper.removeLastSlash(baseUrl);
- }
+ @Inject
+ public CustomAuthenticationServlet(final Configuration configuration, final SessionManager sessionManager,
+ @Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain) {
+ Preconditions.checkNotNull(configuration, "Configuration is null");
+ Preconditions.checkNotNull(sessionManager, "Session manager is null");
+ this.configuration = configuration;
+ this.sessionManager = sessionManager;
+ this.domain = domain.toLowerCase();
+ }
- @SuppressWarnings("unchecked")
- public LoginContext login(BufferedReader body) throws IOException, LoginException {
- try {
- Subject subject = new Subject();
+ /**
+ * On GET, present a login form if the user isn't authenticated.
+ */
+ @Override
+ protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
+ // If the user is already logged in, we'll try to redirect them
+ // immediately.
+ resp.setCharacterEncoding("UTF-8");
+ req.setCharacterEncoding("UTF-8");
+ final HttpSession session = req.getSession(false);
+ final ParticipantId user = sessionManager.getLoggedInUser(session);
- String parametersLine = body.readLine();
- // Throws UnsupportedEncodingException.
- byte[] utf8Bytes = parametersLine.getBytes("UTF-8");
+ if (user != null) {
+ redirectLoggedInUser(req, resp);
+ } else {
+ resp.setStatus(HttpServletResponse.SC_OK);
+ resp.setContentType("text/html;charset=utf-8");
+ AuthenticationPage.write(resp.getWriter(), new GxpContext(req.getLocale()), domain, "",
+ RESPONSE_STATUS_NONE);
+ }
+ }
- CharsetDecoder utf8Decoder = Charset.forName("UTF-8").newDecoder();
- utf8Decoder.onMalformedInput(CodingErrorAction.IGNORE);
- utf8Decoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
+ /**
+ * The POST request should have all the fields required for authentication.
+ */
+ @Override
+ protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
+ req.setCharacterEncoding("UTF-8");
+ LoginContext context;
+ try {
+ context = login(req.getReader());
+ } catch (final LoginException e) {
+ final String message = "The username or password you entered is incorrect.";
+ final String responseType = RESPONSE_STATUS_FAILED;
+ LOG.info("User authentication failed: " + e.getLocalizedMessage());
+ resp.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ AuthenticationPage.write(resp.getWriter(), new GxpContext(req.getLocale()), domain, message, responseType);
+ return;
+ }
- // Throws CharacterCodingException.
- CharBuffer parsed = utf8Decoder.decode(ByteBuffer.wrap(utf8Bytes));
- parametersLine = parsed.toString();
+ final Subject subject = context.getSubject();
- MultiMap<String> parameters = new UrlEncoded(parametersLine);
- CallbackHandler callbackHandler = new HttpRequestBasedCallbackHandler(parameters);
+ ParticipantId loggedInAddress;
+ try {
+ loggedInAddress = getLoggedInUser(subject);
+ } catch (final InvalidParticipantAddress e1) {
+ throw new IllegalStateException("The user provided valid authentication information, but the username"
+ + " isn't a valid user address.");
+ }
- LoginContext context = new LoginContext("Wave", subject, callbackHandler, configuration);
+ if (loggedInAddress == null) {
+ try {
+ context.logout();
+ } catch (final LoginException e) {
+ // Logout failed. Absorb the error, since we're about to throw
+ // an
+ // illegal state exception anyway.
+ }
+ throw new IllegalStateException("The user provided valid authentication information, but we don't "
+ + "know how to map their identity to a wave user address.");
+ }
- // If authentication fails, login() will throw a LoginException.
- context.login();
- return context;
- } catch (CharacterCodingException cce) {
- throw new LoginException("Character coding exception (not utf-8): "
- + cce.getLocalizedMessage());
- } catch (UnsupportedEncodingException uee) {
- throw new LoginException("ad character encoding specification: " + uee.getLocalizedMessage());
- }
- }
+ final HttpSession session = req.getSession(true);
+ sessionManager.setLoggedInUser(session, loggedInAddress);
+ // The context needs to be notified when the user logs out.
+ session.setAttribute("context", context);
+ LOG.info("Authenticated user " + loggedInAddress);
- /**
- * The POST request should have all the fields required for authentication.
- */
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
- req.setCharacterEncoding("UTF-8");
- LoginContext context;
- try {
- context = login(req.getReader());
- } catch (LoginException e) {
- String message = "The username or password you entered is incorrect.";
- String responseType = RESPONSE_STATUS_FAILED;
- LOG.info("User authentication failed: " + e.getLocalizedMessage());
- resp.setStatus(HttpServletResponse.SC_FORBIDDEN);
- AuthenticationPage.write(resp.getWriter(), new GxpContext(req.getLocale()), domain, baseUrl, message,
- responseType);
- return;
+ redirectLoggedInUser(req, resp);
}
- Subject subject = context.getSubject();
+ /**
+ * Get the participant id of the given subject.
+ *
+ * The subject is searched for compatible principals. When other
+ * authentication types are added, this method will need to be updated to
+ * support their principal types.
+ *
+ * @throws InvalidParticipantAddress
+ * The subject's address is invalid
+ */
+ private ParticipantId getLoggedInUser(final Subject subject) throws InvalidParticipantAddress {
+ String address = null;
- ParticipantId loggedInAddress;
- try {
- loggedInAddress = getLoggedInUser(subject);
- } catch (InvalidParticipantAddress e1) {
- throw new IllegalStateException(
- "The user provided valid authentication information, but the username"
- + " isn't a valid user address.");
- }
+ for (final Principal p : subject.getPrincipals()) {
+ // TODO(josephg): When we support other authentication types (LDAP,
+ // etc),
+ // this method will need to read the address portion out of the
+ // other principal types.
+ if (p instanceof ParticipantPrincipal) {
+ address = ((ParticipantPrincipal) p).getName();
+ break;
+ }
+ }
- if (loggedInAddress == null) {
- try {
- context.logout();
- } catch (LoginException e) {
- // Logout failed. Absorb the error, since we're about to throw an
- // illegal state exception anyway.
- }
- throw new IllegalStateException(
- "The user provided valid authentication information, but we don't "
- + "know how to map their identity to a wave user address.");
+ return address == null ? null : ParticipantId.of(address);
}
- HttpSession session = req.getSession(true);
- sessionManager.setLoggedInUser(session, loggedInAddress);
- // The context needs to be notified when the user logs out.
- session.setAttribute("context", context);
- LOG.info("Authenticated user " + loggedInAddress);
+ @SuppressWarnings("unchecked")
+ public LoginContext login(final BufferedReader body) throws IOException, LoginException {
+ try {
+ final Subject subject = new Subject();
- redirectLoggedInUser(req, resp);
- }
+ String parametersLine = body.readLine();
+ // Throws UnsupportedEncodingException.
+ final byte[] utf8Bytes = parametersLine.getBytes("UTF-8");
- /**
- * Get the participant id of the given subject.
- *
- * The subject is searched for compatible principals. When other
- * authentication types are added, this method will need to be updated to
- * support their principal types.
- *
- * @throws InvalidParticipantAddress The subject's address is invalid
- */
- private ParticipantId getLoggedInUser(Subject subject) throws InvalidParticipantAddress {
- String address = null;
+ final CharsetDecoder utf8Decoder = Charset.forName("UTF-8").newDecoder();
+ utf8Decoder.onMalformedInput(CodingErrorAction.IGNORE);
+ utf8Decoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
- for (Principal p : subject.getPrincipals()) {
- // TODO(josephg): When we support other authentication types (LDAP, etc),
- // this method will need to read the address portion out of the other principal types.
- if (p instanceof ParticipantPrincipal) {
- address = ((ParticipantPrincipal) p).getName();
- break;
- }
- }
+ // Throws CharacterCodingException.
+ final CharBuffer parsed = utf8Decoder.decode(ByteBuffer.wrap(utf8Bytes));
+ parametersLine = parsed.toString();
- return address == null ? null : ParticipantId.of(address);
- }
+ final MultiMap<String> parameters = new UrlEncoded(parametersLine);
+ final CallbackHandler callbackHandler = new HttpRequestBasedCallbackHandler(parameters);
- /**
- * On GET, present a login form if the user isn't authenticated.
- */
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
- // If the user is already logged in, we'll try to redirect them immediately.
- resp.setCharacterEncoding("UTF-8");
- req.setCharacterEncoding("UTF-8");
- HttpSession session = req.getSession(false);
- ParticipantId user = sessionManager.getLoggedInUser(session);
+ final LoginContext context = new LoginContext("Wave", subject, callbackHandler, configuration);
- if (user != null) {
- redirectLoggedInUser(req, resp);
- } else {
- resp.setStatus(HttpServletResponse.SC_OK);
- resp.setContentType("text/html;charset=utf-8");
- AuthenticationPage.write(resp.getWriter(), new GxpContext(req.getLocale()), domain, baseUrl, "",
- RESPONSE_STATUS_NONE);
+ // If authentication fails, login() will throw a LoginException.
+ context.login();
+ return context;
+ } catch (final CharacterCodingException cce) {
+ throw new LoginException("Character coding exception (not utf-8): " + cce.getLocalizedMessage());
+ } catch (final UnsupportedEncodingException uee) {
+ throw new LoginException("ad character encoding specification: " + uee.getLocalizedMessage());
+ }
}
- }
- /**
- * Redirect the user back to DEFAULT_REDIRECT_URL, unless a custom redirect
- * URL has been specified in the query string; in which case redirect there.
- *
- * Only redirects to local URLs are allowed.
- *
- * @throws IOException
- */
- private void redirectLoggedInUser(HttpServletRequest req, HttpServletResponse resp)
- throws IOException {
- Preconditions.checkState(sessionManager.getLoggedInUser(req.getSession(false)) != null,
- "The user is not logged in");
- String query = req.getQueryString();
+ /**
+ * Redirect the user back to DEFAULT_REDIRECT_URL, unless a custom redirect
+ * URL has been specified in the query string; in which case redirect there.
+ *
+ * Only redirects to local URLs are allowed.
+ *
+ * @throws IOException
+ */
+ private void redirectLoggedInUser(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
+ Preconditions.checkState(sessionManager.getLoggedInUser(req.getSession(false)) != null,
+ "The user is not logged in");
+ final String query = req.getQueryString();
- // Not using req.getParameter() for this because calling that method might parse the password
- // sitting in POST data into a String, where it could be read by another process after the
- // string is garbage collected.
- if (query == null || !query.startsWith("r=")) {
- resp.sendRedirect(baseUrl + DEFAULT_REDIRECT_URL);
- return;
- }
+ // Not using req.getParameter() for this because calling that method
+ // might parse the password
+ // sitting in POST data into a String, where it could be read by another
+ // process after the
+ // string is garbage collected.
+ if (query == null || !query.startsWith("r=")) {
+ resp.sendRedirect(DEFAULT_REDIRECT_URL);
+ return;
+ }
- String encoded_url = query.substring("r=".length());
- String path = URLDecoder.decode(encoded_url, "UTF-8");
+ final String encoded_url = query.substring("r=".length());
+ final String path = URLDecoder.decode(encoded_url, "UTF-8");
- // The URL must not be an absolute URL to prevent people using this as a
- // generic redirection service.
- URI uri;
- try {
- uri = new URI(path);
- } catch (URISyntaxException e) {
- // The redirect URL is invalid.
- resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- return;
- }
+ // The URL must not be an absolute URL to prevent people using this as a
+ // generic redirection service.
+ URI uri;
+ try {
+ uri = new URI(path);
+ } catch (final URISyntaxException e) {
+ // The redirect URL is invalid.
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return;
+ }
- if (Strings.isNullOrEmpty(uri.getHost()) == false) {
- // The URL includes a host component. Disallow it.
- resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- } else {
- resp.sendRedirect(path);
+ if (Strings.isNullOrEmpty(uri.getHost()) == false) {
+ // The URL includes a host component. Disallow it.
+ resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ } else {
+ resp.sendRedirect(path);
+ }
}
- }
}
Deleted: trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,509 +0,0 @@
-package cc.kune.wave.server;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import javax.servlet.Servlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.util.resource.ResourceCollection;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.eclipse.jetty.websocket.WebSocket;
-import org.eclipse.jetty.websocket.WebSocketServlet;
-import org.ourproject.kune.rack.RackServletFilter;
-import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticate;
-import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticationResult;
-import org.waveprotocol.box.server.CoreSettings;
-import org.waveprotocol.box.server.authentication.SessionManager;
-import org.waveprotocol.box.server.rpc.BaseUrlHelper;
-import org.waveprotocol.box.server.rpc.MessageExpectingChannel;
-import org.waveprotocol.box.server.rpc.ProtoCallback;
-import org.waveprotocol.box.server.rpc.Rpc;
-import org.waveprotocol.box.server.rpc.ServerRpcController;
-import org.waveprotocol.box.server.rpc.SocketIOServerChannel;
-import org.waveprotocol.box.server.rpc.WebSocketServerChannel;
-import org.waveprotocol.box.server.util.NetUtils;
-import org.waveprotocol.wave.model.util.Pair;
-import org.waveprotocol.wave.model.wave.ParticipantId;
-import org.waveprotocol.wave.util.logging.Log;
-
-import com.glines.socketio.server.SocketIOInbound;
-import com.glines.socketio.server.SocketIOServlet;
-import com.glines.socketio.server.transport.FlashSocketTransport;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.name.Named;
-import com.google.protobuf.Descriptors;
-import com.google.protobuf.Descriptors.MethodDescriptor;
-import com.google.protobuf.Message;
-import com.google.protobuf.RpcCallback;
-import com.google.protobuf.Service;
-import com.google.protobuf.UnknownFieldSet;
-
-/**
- * ServerRpcProvider can provide instances of type Service over an incoming
- * network socket and service incoming RPCs to these services and their methods.
- *
- *
- */
-public class CustomServerRpcProvider {
- abstract class Connection implements ProtoCallback {
- private final Map<Long, ServerRpcController> activeRpcs = new ConcurrentHashMap<Long, ServerRpcController>();
-
- // The logged in user.
- // Note: Due to this bug:
- // http://code.google.com/p/wave-protocol/issues/detail?id=119,
- // the field may be null on first connect and then set later using an
- // RPC.
- private ParticipantId loggedInUser;
-
- /**
- * @param loggedInUser
- * The currently logged in user, or null if no user is logged
- * in.
- */
- public Connection(final ParticipantId loggedInUser) {
- this.loggedInUser = loggedInUser;
- }
-
- private ParticipantId authenticate(final String token) {
- final HttpSession session = sessionManager.getSessionFromToken(token);
- final ParticipantId user = sessionManager.getLoggedInUser(session);
- return user;
- }
-
- protected void expectMessages(final MessageExpectingChannel channel) {
- synchronized (registeredServices) {
- for (final RegisteredServiceMethod serviceMethod : registeredServices.values()) {
- channel.expectMessage(serviceMethod.service.getRequestPrototype(serviceMethod.method));
- LOG.fine("Expecting: " + serviceMethod.method.getFullName());
- }
- }
- channel.expectMessage(Rpc.CancelRpc.getDefaultInstance());
- }
-
- @Override
- public void message(final long sequenceNo, final Message message) {
- if (message instanceof Rpc.CancelRpc) {
- final ServerRpcController controller = activeRpcs.get(sequenceNo);
- if (controller == null) {
- throw new IllegalStateException("Trying to cancel an RPC that is not active!");
- } else {
- LOG.info("Cancelling open RPC " + sequenceNo);
- controller.cancel();
- }
- } else if (message instanceof ProtocolAuthenticate) {
- // Workaround for bug:
- // http://codereview.waveprotocol.org/224001/
-
- // When we get this message, either the connection will not be
- // logged in
- // (loggedInUser == null) or the connection will have been
- // authenticated
- // via cookies
- // (in which case loggedInUser must match the authenticated
- // user, and
- // this message has no
- // effect).
-
- final ProtocolAuthenticate authMessage = (ProtocolAuthenticate) message;
- final ParticipantId authenticatedAs = authenticate(authMessage.getToken());
-
- Preconditions.checkArgument(authenticatedAs != null, "Auth token invalid");
- Preconditions.checkState(loggedInUser == null || loggedInUser.equals(authenticatedAs),
- "Session already authenticated as a different user");
-
- loggedInUser = authenticatedAs;
- LOG.info("Session authenticated as " + loggedInUser);
- sendMessage(sequenceNo, ProtocolAuthenticationResult.getDefaultInstance());
- } else if (registeredServices.containsKey(message.getDescriptorForType())) {
- if (activeRpcs.containsKey(sequenceNo)) {
- throw new IllegalStateException("Can't invoke a new RPC with a sequence number already in use.");
- } else {
- final RegisteredServiceMethod serviceMethod = registeredServices.get(message.getDescriptorForType());
-
- // Create the internal ServerRpcController used to invoke
- // the call.
- final ServerRpcController controller = new ServerRpcControllerImpl(message, serviceMethod.service,
- serviceMethod.method, loggedInUser, new RpcCallback<Message>() {
- @Override
- synchronized public void run(final Message message) {
- if (message instanceof Rpc.RpcFinished
- || !serviceMethod.method.getOptions().getExtension(Rpc.isStreamingRpc)) {
- // This RPC is over - remove it from the
- // map.
- final boolean failed = message instanceof Rpc.RpcFinished ? ((Rpc.RpcFinished) message).getFailed()
- : false;
- LOG.fine("RPC " + sequenceNo + " is now finished, failed = " + failed);
- if (failed) {
- LOG.info("error = " + ((Rpc.RpcFinished) message).getErrorText());
- }
- activeRpcs.remove(sequenceNo);
- }
- sendMessage(sequenceNo, message);
- }
- });
-
- // Kick off a new thread specific to this RPC.
- activeRpcs.put(sequenceNo, controller);
- threadPool.execute(controller);
- }
- } else {
- // Sent a message type we understand, but don't expect -
- // erronous case!
- throw new IllegalStateException("Got expected but unknown message (" + message + ") for sequence: "
- + sequenceNo);
- }
- }
-
- protected abstract void sendMessage(long sequenceNo, Message message);
-
- @Override
- public void unknown(final long sequenceNo, final String messageType, final String message) {
- throw new IllegalStateException("Got unknown message (type: " + messageType + ", " + message
- + ") for sequence: " + sequenceNo);
- }
-
- @Override
- public void unknown(final long sequenceNo, final String messageType, final UnknownFieldSet message) {
- throw new IllegalStateException("Got unknown message (type: " + messageType + ", " + message
- + ") for sequence: " + sequenceNo);
- }
- }
-
- /**
- * Internal, static container class for any specific registered service
- * method.
- */
- static class RegisteredServiceMethod {
- final MethodDescriptor method;
- final Service service;
-
- RegisteredServiceMethod(final Service service, final MethodDescriptor method) {
- this.service = service;
- this.method = method;
- }
- }
- class SocketIOConnection extends Connection {
- private final SocketIOServerChannel socketChannel;
-
- SocketIOConnection(final ParticipantId loggedInUser) {
- super(loggedInUser);
- socketChannel = new SocketIOServerChannel(this);
- LOG.info("New websocket connection set up for user " + loggedInUser);
- expectMessages(socketChannel);
- }
-
- public SocketIOServerChannel getWebSocketServerChannel() {
- return socketChannel;
- }
-
- @Override
- protected void sendMessage(final long sequenceNo, final Message message) {
- socketChannel.sendMessage(sequenceNo, message);
- }
- }
- public class WaveSocketIOServlet extends SocketIOServlet {
- @Override
- protected SocketIOInbound doSocketIOConnect(final HttpServletRequest request, final String[] protocols) {
- final ParticipantId loggedInUser = sessionManager.getLoggedInUser(request.getSession(false));
-
- final SocketIOConnection connection = new SocketIOConnection(loggedInUser);
- return connection.getWebSocketServerChannel();
- }
- }
- public class WaveWebSocketServlet extends WebSocketServlet {
- @Override
- protected WebSocket doWebSocketConnect(final HttpServletRequest request, final String protocol) {
- final ParticipantId loggedInUser = sessionManager.getLoggedInUser(request.getSession(false));
-
- final WebSocketConnection connection = new WebSocketConnection(loggedInUser);
- return connection.getWebSocketServerChannel();
- }
- }
- class WebSocketConnection extends Connection {
- private final WebSocketServerChannel socketChannel;
-
- WebSocketConnection(final ParticipantId loggedInUser) {
- super(loggedInUser);
- socketChannel = new WebSocketServerChannel(this);
- LOG.info("New websocket connection set up for user " + loggedInUser);
- expectMessages(socketChannel);
- }
-
- public WebSocketServerChannel getWebSocketServerChannel() {
- return socketChannel;
- }
-
- @Override
- protected void sendMessage(final long sequenceNo, final Message message) {
- socketChannel.sendMessage(sequenceNo, message);
- }
- }
- private static final Log LOG = Log.get(CustomServerRpcProvider.class);
-
- private static InetSocketAddress[] parseAddressList(final List<String> addressList) {
- if (addressList == null || addressList.size() == 0) {
- return new InetSocketAddress[0];
- } else {
- final Set<InetSocketAddress> addresses = Sets.newHashSet();
- for (final String str : addressList) {
- if (str.length() == 0) {
- LOG.warning("Encountered empty address in http addresses list.");
- } else {
- try {
- final InetSocketAddress address = NetUtils.parseHttpAddress(str);
- if (!addresses.contains(address)) {
- addresses.add(address);
- } else {
- LOG.warning("Ignoring duplicate address in http addresses list: Duplicate entry '" + str
- + "' resolved to " + address.getAddress().getHostAddress());
- }
- } catch (final IOException e) {
- LOG.severe("Unable to process address " + str, e);
- }
- }
- }
- return addresses.toArray(new InetSocketAddress[0]);
- }
- }
- private final String baseUrl;
-
- private final Integer flashsocketPolicyPort;
-
- private final InetSocketAddress[] httpAddresses;
-
- private Server httpServer = null;
-
- private final Set<Connection> incomingConnections = Sets.newHashSet();
-
- private final org.eclipse.jetty.server.SessionManager jettySessionManager;
-
- // Mapping from incoming protocol buffer type -> specific handler.
- private final Map<Descriptors.Descriptor, RegisteredServiceMethod> registeredServices = Maps.newHashMap();
-
- private final String resourceBase;
-
- /**
- * Set of servlets
- */
- List<Pair<String, ServletHolder>> servletRegistry = Lists.newArrayList();
-
- private final SessionManager sessionManager;
-
- private final ExecutorService threadPool;
-
- /**
- * Construct a new ServerRpcProvider, hosting on the specified WebSocket
- * addresses.
- *
- * Also accepts an ExecutorService for spawning managing threads.
- */
- public CustomServerRpcProvider(final InetSocketAddress[] httpAddresses, final Integer flashsocketPolicyPort,
- final String baseUrl, final String resourceBase, final ExecutorService threadPool,
- final SessionManager sessionManager, final org.eclipse.jetty.server.SessionManager jettySessionManager) {
- this.httpAddresses = httpAddresses;
- this.flashsocketPolicyPort = flashsocketPolicyPort;
- this.baseUrl = BaseUrlHelper.removeLastSlash(baseUrl);
- this.resourceBase = resourceBase;
- this.threadPool = threadPool;
- this.sessionManager = sessionManager;
- this.jettySessionManager = jettySessionManager;
- }
-
- /**
- * Constructs a new ServerRpcProvider with a default ExecutorService.
- */
- public CustomServerRpcProvider(final InetSocketAddress[] httpAddresses, final Integer flashsocketPolicyPort,
- final String baseUrl, final String resourceBase, final SessionManager sessionManager,
- final org.eclipse.jetty.server.SessionManager jettySessionManager) {
- this(httpAddresses, flashsocketPolicyPort, baseUrl, resourceBase, Executors.newCachedThreadPool(),
- sessionManager, jettySessionManager);
- }
-
- @Inject
- public CustomServerRpcProvider(@Named(CoreSettings.HTTP_FRONTEND_ADDRESSES) final List<String> httpAddresses,
- @Named(CoreSettings.FLASHSOCKET_POLICY_PORT) final Integer flashsocketPolicyPort,
- @Named(CoreSettings.HTTP_BASE_URL) final String baseUrl,
- @Named(CoreSettings.RESOURCE_BASE) final String resourceBase, final SessionManager sessionManager,
- final org.eclipse.jetty.server.SessionManager jettySessionManager) {
- this(parseAddressList(httpAddresses), flashsocketPolicyPort, baseUrl, resourceBase, sessionManager,
- jettySessionManager);
- }
-
- /**
- * Add a servlet to the servlet registry. This servlet will be attached to
- * the specified URL pattern when the server is started up.
- *
- * @param urlPattern
- * URL pattern for paths. Eg, '/foo', '/foo/*'
- * @param servlet
- * The servlet object to bind to the specified paths
- * @return the {@link ServletHolder} that holds the servlet.
- */
- public ServletHolder addServlet(final String urlPattern, final Servlet servlet) {
- final ServletHolder servletHolder = new ServletHolder(servlet);
- servletRegistry.add(new Pair<String, ServletHolder>(urlPattern, servletHolder));
- return servletHolder;
- }
-
- /**
- * @return a list of {@link SelectChannelConnector} each bound to a
- * host:port pair form the list addresses.
- */
- private List<SelectChannelConnector> getSelectChannelConnectors(final InetSocketAddress[] httpAddresses) {
- final List<SelectChannelConnector> list = Lists.newArrayList();
- for (final InetSocketAddress address : httpAddresses) {
- final SelectChannelConnector connector = new SelectChannelConnector();
- connector.setHost(address.getAddress().getHostAddress());
- connector.setPort(address.getPort());
- list.add(connector);
- }
-
- return list;
- }
-
- /**
- * Returns the socket the WebSocket server is listening on.
- */
- public SocketAddress getWebSocketAddress() {
- if (httpServer == null) {
- return null;
- } else {
- final Connector c = httpServer.getConnectors()[0];
- return new InetSocketAddress(c.getHost(), c.getLocalPort());
- }
- }
-
- /**
- * Register all methods provided by the given service type.
- */
- public void registerService(final Service service) {
- synchronized (registeredServices) {
- for (final MethodDescriptor methodDescriptor : service.getDescriptorForType().getMethods()) {
- registeredServices.put(methodDescriptor.getInputType(), new RegisteredServiceMethod(service,
- methodDescriptor));
- }
- }
- }
-
- public void startWebSocketServer(final Injector injector) {
- httpServer = new Server();
-
- final List<SelectChannelConnector> connectors = getSelectChannelConnectors(httpAddresses);
- if (connectors.isEmpty()) {
- LOG.severe("No valid http end point address provided!");
- }
- for (final SelectChannelConnector connector : connectors) {
- httpServer.addConnector(connector);
- }
-
- final WebAppContext context = new WebAppContext();
-
- // FIXME This was with previous ServletContextHandler: needed?
- // final ServletContextHandler context = new
- // ServletContextHandler(ServletContextHandler.SESSIONS);
-
- if (jettySessionManager != null) {
- context.getSessionHandler().setSessionManager(jettySessionManager);
- }
- final ResourceCollection resources = new ResourceCollection(new String[] { "src/main/webapp", resourceBase, });
- context.setBaseResource(resources);
- context.setContextPath(baseUrl);
-
- context.setParentLoaderPriority(true);
- context.setDescriptor("WEB-INF/web.xml");
-
- context.setAttribute(RackServletFilter.INJECTOR_PARENT_ATTRIBUTE, injector);
-
- // Servlet where the websocket connection is served from.
- final ServletHolder wsholder = new ServletHolder(new WaveWebSocketServlet());
- context.addServlet(wsholder, "/socket");
- // TODO(zamfi): fix to let messages span frames.
- wsholder.setInitParameter("bufferSize", "" + 1024 * 1024); // 1M buffer
-
- // Servlet where the websocket connection is served from.
- final ServletHolder sioholder = new ServletHolder(new WaveSocketIOServlet());
- context.addServlet(sioholder, "/socket.io/*");
- // TODO(zamfi): fix to let messages span frames.
- sioholder.setInitParameter("bufferSize", "" + 1024 * 1024); // 1M buffer
- // Set flash policy server parameters
- String flashPolicyServerHost = "localhost";
- final StringBuilder flashPolicyAllowedPorts = new StringBuilder();
- /*
- * Loop through addresses, collect list of ports, and determine if we
- * are to use "localhost" of the AnyHost wildcard.
- */
- for (final InetSocketAddress addr : httpAddresses) {
- if (flashPolicyAllowedPorts.length() > 0) {
- flashPolicyAllowedPorts.append(",");
- }
- flashPolicyAllowedPorts.append(addr.getPort());
- if (!addr.getAddress().isLoopbackAddress()) {
- // Until it's possible to pass a list of address, this is the
- // only valid alternative.
- flashPolicyServerHost = "0.0.0.0";
- }
- }
- sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_SERVER_HOST_KEY, flashPolicyServerHost);
- sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_SERVER_PORT_KEY, "" + flashsocketPolicyPort);
- // TODO: Change to use the public http address and all other bound
- // addresses.
- sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_DOMAIN_KEY, "*");
- sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_PORTS_KEY, flashPolicyAllowedPorts.toString());
-
- // Serve the static content and GWT web client with the default servlet
- // (acts like a standard file-based web server).
- final ServletHolder defaultServlet = new ServletHolder(new DefaultServlet());
- context.addServlet(defaultServlet, "/static/*");
- context.addServlet(defaultServlet, "/webclient/*");
- context.addServlet(defaultServlet, "/ws/*");
- context.addServlet(defaultServlet, "/images/*");
- context.addServlet(defaultServlet, "/javascripts/*");
- context.addServlet(defaultServlet, "/stylesheets/*");
- context.addServlet(defaultServlet, "/templates/*");
-
- for (final Pair<String, ServletHolder> servlet : servletRegistry) {
- context.addServlet(servlet.getSecond(), servlet.getFirst());
- }
-
- httpServer.setHandler(context);
-
- try {
- httpServer.start();
- } catch (final Exception e) { // yes, .start() throws "Exception"
- LOG.severe("Fatal error starting http server.", e);
- return;
- }
- LOG.fine("WebSocket server running. --------");
- }
-
- /**
- * Stops this server.
- */
- public void stopServer() throws IOException {
- try {
- httpServer.stop(); // yes, .stop() throws "Exception"
- } catch (final Exception e) {
- LOG.warning("Fatal error stopping http server.", e);
- }
- LOG.fine("server shutdown.");
- }
-}
Copied: trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java.txt (from rev 1265, trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java)
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java.txt (rev 0)
+++ trunk/src/main/java/cc/kune/wave/server/CustomServerRpcProvider.java.txt 2011-03-07 17:08:07 UTC (rev 1269)
@@ -0,0 +1,509 @@
+package cc.kune.wave.server;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import javax.servlet.Servlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.servlet.DefaultServlet;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.util.resource.ResourceCollection;
+import org.eclipse.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.websocket.WebSocket;
+import org.eclipse.jetty.websocket.WebSocketServlet;
+import org.ourproject.kune.rack.RackServletFilter;
+import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticate;
+import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolAuthenticationResult;
+import org.waveprotocol.box.server.CoreSettings;
+import org.waveprotocol.box.server.authentication.SessionManager;
+import org.waveprotocol.box.server.rpc.BaseUrlHelper;
+import org.waveprotocol.box.server.rpc.MessageExpectingChannel;
+import org.waveprotocol.box.server.rpc.ProtoCallback;
+import org.waveprotocol.box.server.rpc.Rpc;
+import org.waveprotocol.box.server.rpc.ServerRpcController;
+import org.waveprotocol.box.server.rpc.SocketIOServerChannel;
+import org.waveprotocol.box.server.rpc.WebSocketServerChannel;
+import org.waveprotocol.box.server.util.NetUtils;
+import org.waveprotocol.wave.model.util.Pair;
+import org.waveprotocol.wave.model.wave.ParticipantId;
+import org.waveprotocol.wave.util.logging.Log;
+
+import com.glines.socketio.server.SocketIOInbound;
+import com.glines.socketio.server.SocketIOServlet;
+import com.glines.socketio.server.transport.FlashSocketTransport;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.name.Named;
+import com.google.protobuf.Descriptors;
+import com.google.protobuf.Descriptors.MethodDescriptor;
+import com.google.protobuf.Message;
+import com.google.protobuf.RpcCallback;
+import com.google.protobuf.Service;
+import com.google.protobuf.UnknownFieldSet;
+
+/**
+ * ServerRpcProvider can provide instances of type Service over an incoming
+ * network socket and service incoming RPCs to these services and their methods.
+ *
+ *
+ */
+public class CustomServerRpcProvider {
+ abstract class Connection implements ProtoCallback {
+ private final Map<Long, ServerRpcController> activeRpcs = new ConcurrentHashMap<Long, ServerRpcController>();
+
+ // The logged in user.
+ // Note: Due to this bug:
+ // http://code.google.com/p/wave-protocol/issues/detail?id=119,
+ // the field may be null on first connect and then set later using an
+ // RPC.
+ private ParticipantId loggedInUser;
+
+ /**
+ * @param loggedInUser
+ * The currently logged in user, or null if no user is logged
+ * in.
+ */
+ public Connection(final ParticipantId loggedInUser) {
+ this.loggedInUser = loggedInUser;
+ }
+
+ private ParticipantId authenticate(final String token) {
+ final HttpSession session = sessionManager.getSessionFromToken(token);
+ final ParticipantId user = sessionManager.getLoggedInUser(session);
+ return user;
+ }
+
+ protected void expectMessages(final MessageExpectingChannel channel) {
+ synchronized (registeredServices) {
+ for (final RegisteredServiceMethod serviceMethod : registeredServices.values()) {
+ channel.expectMessage(serviceMethod.service.getRequestPrototype(serviceMethod.method));
+ LOG.fine("Expecting: " + serviceMethod.method.getFullName());
+ }
+ }
+ channel.expectMessage(Rpc.CancelRpc.getDefaultInstance());
+ }
+
+ @Override
+ public void message(final long sequenceNo, final Message message) {
+ if (message instanceof Rpc.CancelRpc) {
+ final ServerRpcController controller = activeRpcs.get(sequenceNo);
+ if (controller == null) {
+ throw new IllegalStateException("Trying to cancel an RPC that is not active!");
+ } else {
+ LOG.info("Cancelling open RPC " + sequenceNo);
+ controller.cancel();
+ }
+ } else if (message instanceof ProtocolAuthenticate) {
+ // Workaround for bug:
+ // http://codereview.waveprotocol.org/224001/
+
+ // When we get this message, either the connection will not be
+ // logged in
+ // (loggedInUser == null) or the connection will have been
+ // authenticated
+ // via cookies
+ // (in which case loggedInUser must match the authenticated
+ // user, and
+ // this message has no
+ // effect).
+
+ final ProtocolAuthenticate authMessage = (ProtocolAuthenticate) message;
+ final ParticipantId authenticatedAs = authenticate(authMessage.getToken());
+
+ Preconditions.checkArgument(authenticatedAs != null, "Auth token invalid");
+ Preconditions.checkState(loggedInUser == null || loggedInUser.equals(authenticatedAs),
+ "Session already authenticated as a different user");
+
+ loggedInUser = authenticatedAs;
+ LOG.info("Session authenticated as " + loggedInUser);
+ sendMessage(sequenceNo, ProtocolAuthenticationResult.getDefaultInstance());
+ } else if (registeredServices.containsKey(message.getDescriptorForType())) {
+ if (activeRpcs.containsKey(sequenceNo)) {
+ throw new IllegalStateException("Can't invoke a new RPC with a sequence number already in use.");
+ } else {
+ final RegisteredServiceMethod serviceMethod = registeredServices.get(message.getDescriptorForType());
+
+ // Create the internal ServerRpcController used to invoke
+ // the call.
+ final ServerRpcController controller = new ServerRpcControllerImpl(message, serviceMethod.service,
+ serviceMethod.method, loggedInUser, new RpcCallback<Message>() {
+ @Override
+ synchronized public void run(final Message message) {
+ if (message instanceof Rpc.RpcFinished
+ || !serviceMethod.method.getOptions().getExtension(Rpc.isStreamingRpc)) {
+ // This RPC is over - remove it from the
+ // map.
+ final boolean failed = message instanceof Rpc.RpcFinished ? ((Rpc.RpcFinished) message).getFailed()
+ : false;
+ LOG.fine("RPC " + sequenceNo + " is now finished, failed = " + failed);
+ if (failed) {
+ LOG.info("error = " + ((Rpc.RpcFinished) message).getErrorText());
+ }
+ activeRpcs.remove(sequenceNo);
+ }
+ sendMessage(sequenceNo, message);
+ }
+ });
+
+ // Kick off a new thread specific to this RPC.
+ activeRpcs.put(sequenceNo, controller);
+ threadPool.execute(controller);
+ }
+ } else {
+ // Sent a message type we understand, but don't expect -
+ // erronous case!
+ throw new IllegalStateException("Got expected but unknown message (" + message + ") for sequence: "
+ + sequenceNo);
+ }
+ }
+
+ protected abstract void sendMessage(long sequenceNo, Message message);
+
+ @Override
+ public void unknown(final long sequenceNo, final String messageType, final String message) {
+ throw new IllegalStateException("Got unknown message (type: " + messageType + ", " + message
+ + ") for sequence: " + sequenceNo);
+ }
+
+ @Override
+ public void unknown(final long sequenceNo, final String messageType, final UnknownFieldSet message) {
+ throw new IllegalStateException("Got unknown message (type: " + messageType + ", " + message
+ + ") for sequence: " + sequenceNo);
+ }
+ }
+
+ /**
+ * Internal, static container class for any specific registered service
+ * method.
+ */
+ static class RegisteredServiceMethod {
+ final MethodDescriptor method;
+ final Service service;
+
+ RegisteredServiceMethod(final Service service, final MethodDescriptor method) {
+ this.service = service;
+ this.method = method;
+ }
+ }
+ class SocketIOConnection extends Connection {
+ private final SocketIOServerChannel socketChannel;
+
+ SocketIOConnection(final ParticipantId loggedInUser) {
+ super(loggedInUser);
+ socketChannel = new SocketIOServerChannel(this);
+ LOG.info("New websocket connection set up for user " + loggedInUser);
+ expectMessages(socketChannel);
+ }
+
+ public SocketIOServerChannel getWebSocketServerChannel() {
+ return socketChannel;
+ }
+
+ @Override
+ protected void sendMessage(final long sequenceNo, final Message message) {
+ socketChannel.sendMessage(sequenceNo, message);
+ }
+ }
+ public class WaveSocketIOServlet extends SocketIOServlet {
+ @Override
+ protected SocketIOInbound doSocketIOConnect(final HttpServletRequest request, final String[] protocols) {
+ final ParticipantId loggedInUser = sessionManager.getLoggedInUser(request.getSession(false));
+
+ final SocketIOConnection connection = new SocketIOConnection(loggedInUser);
+ return connection.getWebSocketServerChannel();
+ }
+ }
+ public class WaveWebSocketServlet extends WebSocketServlet {
+ @Override
+ protected WebSocket doWebSocketConnect(final HttpServletRequest request, final String protocol) {
+ final ParticipantId loggedInUser = sessionManager.getLoggedInUser(request.getSession(false));
+
+ final WebSocketConnection connection = new WebSocketConnection(loggedInUser);
+ return connection.getWebSocketServerChannel();
+ }
+ }
+ class WebSocketConnection extends Connection {
+ private final WebSocketServerChannel socketChannel;
+
+ WebSocketConnection(final ParticipantId loggedInUser) {
+ super(loggedInUser);
+ socketChannel = new WebSocketServerChannel(this);
+ LOG.info("New websocket connection set up for user " + loggedInUser);
+ expectMessages(socketChannel);
+ }
+
+ public WebSocketServerChannel getWebSocketServerChannel() {
+ return socketChannel;
+ }
+
+ @Override
+ protected void sendMessage(final long sequenceNo, final Message message) {
+ socketChannel.sendMessage(sequenceNo, message);
+ }
+ }
+ private static final Log LOG = Log.get(CustomServerRpcProvider.class);
+
+ private static InetSocketAddress[] parseAddressList(final List<String> addressList) {
+ if (addressList == null || addressList.size() == 0) {
+ return new InetSocketAddress[0];
+ } else {
+ final Set<InetSocketAddress> addresses = Sets.newHashSet();
+ for (final String str : addressList) {
+ if (str.length() == 0) {
+ LOG.warning("Encountered empty address in http addresses list.");
+ } else {
+ try {
+ final InetSocketAddress address = NetUtils.parseHttpAddress(str);
+ if (!addresses.contains(address)) {
+ addresses.add(address);
+ } else {
+ LOG.warning("Ignoring duplicate address in http addresses list: Duplicate entry '" + str
+ + "' resolved to " + address.getAddress().getHostAddress());
+ }
+ } catch (final IOException e) {
+ LOG.severe("Unable to process address " + str, e);
+ }
+ }
+ }
+ return addresses.toArray(new InetSocketAddress[0]);
+ }
+ }
+ private final String baseUrl;
+
+ private final Integer flashsocketPolicyPort;
+
+ private final InetSocketAddress[] httpAddresses;
+
+ private Server httpServer = null;
+
+ private final Set<Connection> incomingConnections = Sets.newHashSet();
+
+ private final org.eclipse.jetty.server.SessionManager jettySessionManager;
+
+ // Mapping from incoming protocol buffer type -> specific handler.
+ private final Map<Descriptors.Descriptor, RegisteredServiceMethod> registeredServices = Maps.newHashMap();
+
+ private final String resourceBase;
+
+ /**
+ * Set of servlets
+ */
+ List<Pair<String, ServletHolder>> servletRegistry = Lists.newArrayList();
+
+ private final SessionManager sessionManager;
+
+ private final ExecutorService threadPool;
+
+ /**
+ * Construct a new ServerRpcProvider, hosting on the specified WebSocket
+ * addresses.
+ *
+ * Also accepts an ExecutorService for spawning managing threads.
+ */
+ public CustomServerRpcProvider(final InetSocketAddress[] httpAddresses, final Integer flashsocketPolicyPort,
+ final String baseUrl, final String resourceBase, final ExecutorService threadPool,
+ final SessionManager sessionManager, final org.eclipse.jetty.server.SessionManager jettySessionManager) {
+ this.httpAddresses = httpAddresses;
+ this.flashsocketPolicyPort = flashsocketPolicyPort;
+ this.baseUrl = BaseUrlHelper.removeLastSlash(baseUrl);
+ this.resourceBase = resourceBase;
+ this.threadPool = threadPool;
+ this.sessionManager = sessionManager;
+ this.jettySessionManager = jettySessionManager;
+ }
+
+ /**
+ * Constructs a new ServerRpcProvider with a default ExecutorService.
+ */
+ public CustomServerRpcProvider(final InetSocketAddress[] httpAddresses, final Integer flashsocketPolicyPort,
+ final String baseUrl, final String resourceBase, final SessionManager sessionManager,
+ final org.eclipse.jetty.server.SessionManager jettySessionManager) {
+ this(httpAddresses, flashsocketPolicyPort, baseUrl, resourceBase, Executors.newCachedThreadPool(),
+ sessionManager, jettySessionManager);
+ }
+
+ @Inject
+ public CustomServerRpcProvider(@Named(CoreSettings.HTTP_FRONTEND_ADDRESSES) final List<String> httpAddresses,
+ @Named(CoreSettings.FLASHSOCKET_POLICY_PORT) final Integer flashsocketPolicyPort,
+ @Named(CoreSettings.HTTP_BASE_URL) final String baseUrl,
+ @Named(CoreSettings.RESOURCE_BASE) final String resourceBase, final SessionManager sessionManager,
+ final org.eclipse.jetty.server.SessionManager jettySessionManager) {
+ this(parseAddressList(httpAddresses), flashsocketPolicyPort, baseUrl, resourceBase, sessionManager,
+ jettySessionManager);
+ }
+
+ /**
+ * Add a servlet to the servlet registry. This servlet will be attached to
+ * the specified URL pattern when the server is started up.
+ *
+ * @param urlPattern
+ * URL pattern for paths. Eg, '/foo', '/foo/*'
+ * @param servlet
+ * The servlet object to bind to the specified paths
+ * @return the {@link ServletHolder} that holds the servlet.
+ */
+ public ServletHolder addServlet(final String urlPattern, final Servlet servlet) {
+ final ServletHolder servletHolder = new ServletHolder(servlet);
+ servletRegistry.add(new Pair<String, ServletHolder>(urlPattern, servletHolder));
+ return servletHolder;
+ }
+
+ /**
+ * @return a list of {@link SelectChannelConnector} each bound to a
+ * host:port pair form the list addresses.
+ */
+ private List<SelectChannelConnector> getSelectChannelConnectors(final InetSocketAddress[] httpAddresses) {
+ final List<SelectChannelConnector> list = Lists.newArrayList();
+ for (final InetSocketAddress address : httpAddresses) {
+ final SelectChannelConnector connector = new SelectChannelConnector();
+ connector.setHost(address.getAddress().getHostAddress());
+ connector.setPort(address.getPort());
+ list.add(connector);
+ }
+
+ return list;
+ }
+
+ /**
+ * Returns the socket the WebSocket server is listening on.
+ */
+ public SocketAddress getWebSocketAddress() {
+ if (httpServer == null) {
+ return null;
+ } else {
+ final Connector c = httpServer.getConnectors()[0];
+ return new InetSocketAddress(c.getHost(), c.getLocalPort());
+ }
+ }
+
+ /**
+ * Register all methods provided by the given service type.
+ */
+ public void registerService(final Service service) {
+ synchronized (registeredServices) {
+ for (final MethodDescriptor methodDescriptor : service.getDescriptorForType().getMethods()) {
+ registeredServices.put(methodDescriptor.getInputType(), new RegisteredServiceMethod(service,
+ methodDescriptor));
+ }
+ }
+ }
+
+ public void startWebSocketServer(final Injector injector) {
+ httpServer = new Server();
+
+ final List<SelectChannelConnector> connectors = getSelectChannelConnectors(httpAddresses);
+ if (connectors.isEmpty()) {
+ LOG.severe("No valid http end point address provided!");
+ }
+ for (final SelectChannelConnector connector : connectors) {
+ httpServer.addConnector(connector);
+ }
+
+ final WebAppContext context = new WebAppContext();
+
+ // FIXME This was with previous ServletContextHandler: needed?
+ // final ServletContextHandler context = new
+ // ServletContextHandler(ServletContextHandler.SESSIONS);
+
+ if (jettySessionManager != null) {
+ context.getSessionHandler().setSessionManager(jettySessionManager);
+ }
+ final ResourceCollection resources = new ResourceCollection(new String[] { "src/main/webapp", resourceBase, });
+ context.setBaseResource(resources);
+ context.setContextPath(baseUrl);
+
+ context.setParentLoaderPriority(true);
+ context.setDescriptor("WEB-INF/web.xml");
+
+ context.setAttribute(RackServletFilter.INJECTOR_PARENT_ATTRIBUTE, injector);
+
+ // Servlet where the websocket connection is served from.
+ final ServletHolder wsholder = new ServletHolder(new WaveWebSocketServlet());
+ context.addServlet(wsholder, "/socket");
+ // TODO(zamfi): fix to let messages span frames.
+ wsholder.setInitParameter("bufferSize", "" + 1024 * 1024); // 1M buffer
+
+ // Servlet where the websocket connection is served from.
+ final ServletHolder sioholder = new ServletHolder(new WaveSocketIOServlet());
+ context.addServlet(sioholder, "/socket.io/*");
+ // TODO(zamfi): fix to let messages span frames.
+ sioholder.setInitParameter("bufferSize", "" + 1024 * 1024); // 1M buffer
+ // Set flash policy server parameters
+ String flashPolicyServerHost = "localhost";
+ final StringBuilder flashPolicyAllowedPorts = new StringBuilder();
+ /*
+ * Loop through addresses, collect list of ports, and determine if we
+ * are to use "localhost" of the AnyHost wildcard.
+ */
+ for (final InetSocketAddress addr : httpAddresses) {
+ if (flashPolicyAllowedPorts.length() > 0) {
+ flashPolicyAllowedPorts.append(",");
+ }
+ flashPolicyAllowedPorts.append(addr.getPort());
+ if (!addr.getAddress().isLoopbackAddress()) {
+ // Until it's possible to pass a list of address, this is the
+ // only valid alternative.
+ flashPolicyServerHost = "0.0.0.0";
+ }
+ }
+ sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_SERVER_HOST_KEY, flashPolicyServerHost);
+ sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_SERVER_PORT_KEY, "" + flashsocketPolicyPort);
+ // TODO: Change to use the public http address and all other bound
+ // addresses.
+ sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_DOMAIN_KEY, "*");
+ sioholder.setInitParameter(FlashSocketTransport.FLASHPOLICY_PORTS_KEY, flashPolicyAllowedPorts.toString());
+
+ // Serve the static content and GWT web client with the default servlet
+ // (acts like a standard file-based web server).
+ final ServletHolder defaultServlet = new ServletHolder(new DefaultServlet());
+ context.addServlet(defaultServlet, "/static/*");
+ context.addServlet(defaultServlet, "/webclient/*");
+ context.addServlet(defaultServlet, "/ws/*");
+ context.addServlet(defaultServlet, "/images/*");
+ context.addServlet(defaultServlet, "/javascripts/*");
+ context.addServlet(defaultServlet, "/stylesheets/*");
+ context.addServlet(defaultServlet, "/templates/*");
+
+ for (final Pair<String, ServletHolder> servlet : servletRegistry) {
+ context.addServlet(servlet.getSecond(), servlet.getFirst());
+ }
+
+ httpServer.setHandler(context);
+
+ try {
+ httpServer.start();
+ } catch (final Exception e) { // yes, .start() throws "Exception"
+ LOG.severe("Fatal error starting http server.", e);
+ return;
+ }
+ LOG.fine("WebSocket server running. --------");
+ }
+
+ /**
+ * Stops this server.
+ */
+ public void stopServer() throws IOException {
+ try {
+ httpServer.stop(); // yes, .stop() throws "Exception"
+ } catch (final Exception e) {
+ LOG.warning("Fatal error stopping http server.", e);
+ }
+ LOG.fine("server shutdown.");
+ }
+}
Modified: trunk/src/main/java/cc/kune/wave/server/CustomUserRegistrationServlet.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/CustomUserRegistrationServlet.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/server/CustomUserRegistrationServlet.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -32,7 +32,6 @@
import org.waveprotocol.box.server.persistence.AccountStore;
import org.waveprotocol.box.server.persistence.PersistenceException;
import org.waveprotocol.box.server.rpc.AuthenticationServlet;
-import org.waveprotocol.box.server.rpc.BaseUrlHelper;
import org.waveprotocol.wave.model.wave.InvalidParticipantAddress;
import org.waveprotocol.wave.model.wave.ParticipantId;
import org.waveprotocol.wave.util.logging.Log;
@@ -48,18 +47,15 @@
*/
public class CustomUserRegistrationServlet extends HttpServlet {
private final AccountStore accountStore;
- private final String baseUrl;
private final String domain;
private final Log LOG = Log.get(CustomUserRegistrationServlet.class);
@Inject
public CustomUserRegistrationServlet(final AccountStore accountStore,
- @Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain,
- @Named(CoreSettings.HTTP_BASE_URL) final String baseUrl) {
+ @Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain) {
this.accountStore = accountStore;
this.domain = domain;
- this.baseUrl = BaseUrlHelper.removeLastSlash(baseUrl);
}
@Override
@@ -151,6 +147,6 @@
final HttpServletResponse dest) throws IOException {
dest.setCharacterEncoding("UTF-8");
dest.setContentType("text/html;charset=utf-8");
- UserRegistrationPage.write(dest.getWriter(), new GxpContext(locale), domain, baseUrl, message, responseType);
+ UserRegistrationPage.write(dest.getWriter(), new GxpContext(locale), domain, message, responseType);
}
}
Modified: trunk/src/main/java/cc/kune/wave/server/CustomWaveClientServlet.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/CustomWaveClientServlet.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/server/CustomWaveClientServlet.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -34,7 +34,6 @@
import org.waveprotocol.box.server.authentication.SessionManager;
import org.waveprotocol.box.server.gxp.TopBar;
import org.waveprotocol.box.server.gxp.WaveClientPage;
-import org.waveprotocol.box.server.rpc.BaseUrlHelper;
import org.waveprotocol.box.server.util.RandomBase64Generator;
import org.waveprotocol.wave.client.util.ClientFlagsBase;
import org.waveprotocol.wave.common.bootstrap.FlagConstants;
@@ -64,7 +63,6 @@
}
}
- private final String baseUrl;
private final String domain;
private final SessionManager sessionManager;
private final Boolean useSocketIO;
@@ -74,11 +72,9 @@
*/
@Inject
public CustomWaveClientServlet(@Named(CoreSettings.WAVE_SERVER_DOMAIN) final String domain,
- @Named(CoreSettings.USE_SOCKETIO) final Boolean useSocketIO,
- @Named(CoreSettings.HTTP_BASE_URL) final String baseUrl, final SessionManager sessionManager) {
+ @Named(CoreSettings.USE_SOCKETIO) final Boolean useSocketIO, final SessionManager sessionManager) {
this.domain = domain;
this.useSocketIO = useSocketIO;
- this.baseUrl = BaseUrlHelper.removeLastSlash(baseUrl);
this.sessionManager = sessionManager;
}
@@ -87,13 +83,13 @@
final ParticipantId id = sessionManager.getLoggedInUser(request.getSession(false));
// Eventually, it would be nice to show users who aren't logged in the
- // public waves.
+ // public waves.,
// However, public waves aren't implemented yet. For now, we'll just
// redirect users
// who haven't signed in to the sign in page.
// COMMENTED (vjrj)
if (id == null) {
- response.sendRedirect(baseUrl + sessionManager.getLoginUrl(baseUrl + "/"));
+ response.sendRedirect(sessionManager.getLoginUrl("/"));
return;
}
@@ -108,7 +104,7 @@
try {
WaveClientPage.write(response.getWriter(), new GxpContext(request.getLocale()),
getSessionJson(request.getSession(false)), getClientFlags(request),
- TopBar.getGxpClosure(username, userDomain, baseUrl), useSocketIO, baseUrl);
+ TopBar.getGxpClosure(username, userDomain), useSocketIO);
} catch (final IOException e) {
LOG.warning("Failed to write GXP for request " + request, e);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
Modified: trunk/src/main/java/cc/kune/wave/server/WaveMain.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/WaveMain.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/server/WaveMain.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -39,7 +39,10 @@
import org.waveprotocol.box.server.robots.dataapi.DataApiServlet;
import org.waveprotocol.box.server.robots.passive.RobotsGateway;
import org.waveprotocol.box.server.rpc.AttachmentServlet;
+import org.waveprotocol.box.server.rpc.AuthenticationServlet;
import org.waveprotocol.box.server.rpc.FetchServlet;
+import org.waveprotocol.box.server.rpc.SearchServlet;
+import org.waveprotocol.box.server.rpc.ServerRpcProvider;
import org.waveprotocol.box.server.rpc.SignOutServlet;
import org.waveprotocol.box.server.waveserver.WaveBus;
import org.waveprotocol.box.server.waveserver.WaveServerException;
@@ -88,7 +91,7 @@
federationManager.startFederation();
}
- private static void initializeFrontend(final Injector injector, final CustomServerRpcProvider server,
+ private static void initializeFrontend(final Injector injector, final ServerRpcProvider server,
final WaveBus waveBus) throws WaveServerException {
final HashedVersionFactory hashFactory = injector.getInstance(HashedVersionFactory.class);
final WaveletProvider provider = injector.getInstance(WaveletProvider.class);
@@ -120,15 +123,17 @@
waveServer.initialize();
}
- private static void initializeServlets(final Injector injector, final CustomServerRpcProvider server) {
+ private static void initializeServlets(final Injector injector, final ServerRpcProvider server) {
server.addServlet("/attachment/*", injector.getInstance(AttachmentServlet.class));
- server.addServlet(SessionManager.SIGN_IN_URL, injector.getInstance(CustomAuthenticationServlet.class));
+ server.addServlet(SessionManager.SIGN_IN_URL, injector.getInstance(AuthenticationServlet.class));
server.addServlet("/auth/signout", injector.getInstance(SignOutServlet.class));
server.addServlet("/auth/register", injector.getInstance(CustomUserRegistrationServlet.class));
server.addServlet("/fetch/*", injector.getInstance(FetchServlet.class));
+ server.addServlet("/search/*", injector.getInstance(SearchServlet.class));
+
server.addServlet("/robot/dataapi", injector.getInstance(DataApiServlet.class));
server.addServlet(DataApiOAuthServlet.DATA_API_OAUTH_PATH + "/*",
injector.getInstance(DataApiOAuthServlet.class));
@@ -144,7 +149,8 @@
final ServletHolder proxyServletHolder = server.addServlet("/gadgets/*", proxyServlet);
proxyServletHolder.setInitParameter("HostHeader", gadgetServerHostname);
- server.addServlet("/", injector.getInstance(CustomWaveClientServlet.class));
+ // server.addServlet("/",
+ // injector.getInstance(CustomWaveClientServlet.class));
}
public static void main(final String... args) {
@@ -179,7 +185,7 @@
final Injector injector = settingsInjector.createChildInjector(new ServerModule(enableFederation),
new RobotApiModule(), federationModule, persistenceModule);
- final CustomServerRpcProvider server = injector.getInstance(CustomServerRpcProvider.class);
+ final ServerRpcProvider server = injector.getInstance(ServerRpcProvider.class);
final WaveBus waveBus = injector.getInstance(WaveBus.class);
initializeServer(injector);
Deleted: trunk/src/main/java/cc/kune/wave/server/WaveStarter.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/WaveStarter.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/cc/kune/wave/server/WaveStarter.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -1,193 +0,0 @@
-/**
- * Copyright 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package cc.kune.wave.server;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.servlets.ProxyServlet;
-import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolWaveClientRpc;
-import org.waveprotocol.box.server.CoreSettings;
-import org.waveprotocol.box.server.ServerModule;
-import org.waveprotocol.box.server.authentication.AccountStoreHolder;
-import org.waveprotocol.box.server.authentication.SessionManager;
-import org.waveprotocol.box.server.frontend.ClientFrontend;
-import org.waveprotocol.box.server.frontend.ClientFrontendImpl;
-import org.waveprotocol.box.server.frontend.WaveClientRpcImpl;
-import org.waveprotocol.box.server.persistence.AccountStore;
-import org.waveprotocol.box.server.persistence.PersistenceException;
-import org.waveprotocol.box.server.persistence.PersistenceModule;
-import org.waveprotocol.box.server.persistence.SignerInfoStore;
-import org.waveprotocol.box.server.robots.RobotApiModule;
-import org.waveprotocol.box.server.robots.RobotRegistrationServlet;
-import org.waveprotocol.box.server.robots.active.ActiveApiServlet;
-import org.waveprotocol.box.server.robots.dataapi.DataApiOAuthServlet;
-import org.waveprotocol.box.server.robots.dataapi.DataApiServlet;
-import org.waveprotocol.box.server.robots.passive.RobotsGateway;
-import org.waveprotocol.box.server.rpc.AttachmentServlet;
-import org.waveprotocol.box.server.rpc.AuthenticationServlet;
-import org.waveprotocol.box.server.rpc.FetchServlet;
-import org.waveprotocol.box.server.rpc.ServerRpcProvider;
-import org.waveprotocol.box.server.rpc.SignOutServlet;
-import org.waveprotocol.box.server.waveserver.WaveBus;
-import org.waveprotocol.box.server.waveserver.WaveServerException;
-import org.waveprotocol.box.server.waveserver.WaveletProvider;
-import org.waveprotocol.wave.crypto.CertPathStore;
-import org.waveprotocol.wave.federation.FederationSettings;
-import org.waveprotocol.wave.federation.FederationTransport;
-import org.waveprotocol.wave.federation.noop.NoOpFederationModule;
-import org.waveprotocol.wave.federation.xmpp.XmppFederationModule;
-import org.waveprotocol.wave.model.version.HashedVersionFactory;
-import org.waveprotocol.wave.util.settings.SettingsBinder;
-
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Key;
-import com.google.inject.Module;
-import com.google.inject.name.Names;
-
-public class WaveStarter {
-
- private static final Log LOG = LogFactory.getLog(WaveStarter.class);
- public static final String PROPERTIES_FILE_KEY = "wave-server.properties";
-
- private static Module buildFederationModule(final Injector settingsInjector, final boolean enableFederation)
- throws ConfigurationException {
- Module federationModule;
- if (enableFederation) {
- federationModule = settingsInjector.getInstance(XmppFederationModule.class);
- } else {
- federationModule = settingsInjector.getInstance(NoOpFederationModule.class);
- }
- return federationModule;
- }
-
- private static void initializeFederation(final Injector injector) {
- final FederationTransport federationManager = injector.getInstance(FederationTransport.class);
- federationManager.startFederation();
- }
-
- private static void initializeFrontend(final Injector injector, final ServerRpcProvider server,
- final WaveBus waveBus) throws WaveServerException {
- final HashedVersionFactory hashFactory = injector.getInstance(HashedVersionFactory.class);
- final WaveletProvider provider = injector.getInstance(WaveletProvider.class);
- final ClientFrontend frontend = ClientFrontendImpl.create(hashFactory, provider, waveBus);
-
- final ProtocolWaveClientRpc.Interface rpcImpl = WaveClientRpcImpl.create(frontend, false);
- server.registerService(ProtocolWaveClientRpc.newReflectiveService(rpcImpl));
- }
-
- private static void initializeRobots(final Injector injector, final WaveBus waveBus) {
- final RobotsGateway robotsGateway = injector.getInstance(RobotsGateway.class);
- waveBus.subscribe(robotsGateway);
- }
-
- private static void initializeServer(final Injector injector) throws PersistenceException, WaveServerException {
- final AccountStore accountStore = injector.getInstance(AccountStore.class);
- accountStore.initializeAccountStore();
- AccountStoreHolder.init(accountStore,
- injector.getInstance(Key.get(String.class, Names.named(CoreSettings.WAVE_SERVER_DOMAIN))));
-
- // Initialize the SignerInfoStore.
- final CertPathStore certPathStore = injector.getInstance(CertPathStore.class);
- if (certPathStore instanceof SignerInfoStore) {
- ((SignerInfoStore) certPathStore).initializeSignerInfoStore();
- }
-
- // Initialize the server.
- final WaveletProvider waveServer = injector.getInstance(WaveletProvider.class);
- waveServer.initialize();
- }
-
- private static void initializeServlets(final Injector injector, final ServerRpcProvider server) {
- server.addServlet("/attachment/*", injector.getInstance(AttachmentServlet.class));
-
- server.addServlet(SessionManager.SIGN_IN_URL, injector.getInstance(AuthenticationServlet.class));
- server.addServlet("/auth/signout", injector.getInstance(SignOutServlet.class));
- server.addServlet("/auth/register", injector.getInstance(CustomUserRegistrationServlet.class));
-
- server.addServlet("/fetch/*", injector.getInstance(FetchServlet.class));
-
- server.addServlet("/robot/dataapi", injector.getInstance(DataApiServlet.class));
- server.addServlet(DataApiOAuthServlet.DATA_API_OAUTH_PATH + "/*",
- injector.getInstance(DataApiOAuthServlet.class));
- server.addServlet("/robot/dataapi/rpc", injector.getInstance(DataApiServlet.class));
- server.addServlet("/robot/register/*", injector.getInstance(RobotRegistrationServlet.class));
- server.addServlet("/robot/rpc", injector.getInstance(ActiveApiServlet.class));
-
- final String gadgetServerHostname = injector.getInstance(Key.get(String.class,
- Names.named(CoreSettings.GADGET_SERVER_HOSTNAME)));
- final ProxyServlet.Transparent proxyServlet = new ProxyServlet.Transparent("/gadgets", "http",
- gadgetServerHostname, injector.getInstance(Key.get(int.class,
- Names.named(CoreSettings.GADGET_SERVER_PORT))), "/gadgets");
- final ServletHolder proxyServletHolder = server.addServlet("/gadgets/*", proxyServlet);
- proxyServletHolder.setInitParameter("HostHeader", gadgetServerHostname);
-
- server.addServlet("/", injector.getInstance(CustomWaveClientServlet.class));
- }
-
- public WaveStarter() {
- }
-
- public Injector run(final Module coreSettings) throws PersistenceException, ConfigurationException,
- WaveServerException {
- Injector settingsInjector = Guice.createInjector(coreSettings);
- final boolean enableFederation = settingsInjector.getInstance(Key.get(Boolean.class,
- Names.named(CoreSettings.ENABLE_FEDERATION)));
-
- if (enableFederation) {
- final Module federationSettings = SettingsBinder.bindSettings(PROPERTIES_FILE_KEY, FederationSettings.class);
- // This MUST happen first, or bindings will fail if federation is
- // enabled.
- settingsInjector = settingsInjector.createChildInjector(federationSettings);
- }
-
- final Module federationModule = buildFederationModule(settingsInjector, enableFederation);
- final PersistenceModule persistenceModule = settingsInjector.getInstance(PersistenceModule.class);
- final Injector injector = settingsInjector.createChildInjector(new ServerModule(enableFederation),
- new RobotApiModule(), federationModule, persistenceModule);
-
- final ServerRpcProvider server = injector.getInstance(ServerRpcProvider.class);
- final WaveBus waveBus = injector.getInstance(WaveBus.class);
-
- initializeServer(injector);
- initializeServlets(injector, server);
- initializeRobots(injector, waveBus);
- initializeFrontend(injector, server, waveBus);
- initializeFederation(injector);
-
- LOG.info("Starting server");
- server.startWebSocketServer();
- return injector;
- }
-
- public Injector runMain() {
- try {
- final Module coreSettings = CustomSettingsBinder.bindSettings(PROPERTIES_FILE_KEY, CoreSettings.class);
- return run(coreSettings);
- } catch (final PersistenceException e) {
- LOG.error("PersistenceException when running server:", e);
- } catch (final ConfigurationException e) {
- LOG.error("ConfigurationException when running server:", e);
- } catch (final WaveServerException e) {
- LOG.error("WaveServerException when running server:", e);
- }
- return null;
- }
-}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/i18n/I18nTranslationServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/i18n/I18nTranslationServiceDefault.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/i18n/I18nTranslationServiceDefault.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -35,13 +35,13 @@
private final I18nTranslationManager translationManager;
- // private final Provider<UserSession> userSessionProvider;
+ private final Provider<UserSession> userSessionProvider;
@Inject
public I18nTranslationServiceDefault(final I18nTranslationManager translationManager,
final Provider<UserSession> userSessionProvider) {
this.translationManager = translationManager;
- // this.userSessionProvider = userSessionProvider;
+ this.userSessionProvider = userSessionProvider;
}
/**
@@ -57,13 +57,13 @@
public String t(final String text) {
String language;
- // UserSession userSession = userSessionProvider.get();
- // if (userSession.isUserLoggedIn()) {
- // language = userSession.getUser().getLanguage().getCode();
- // } else {
- language = I18nTranslation.DEFAULT_LANG;
- // }
- String encodeText = TextUtils.escapeHtmlLight(text);
+ final UserSession userSession = userSessionProvider.get();
+ if (userSession.isUserLoggedIn()) {
+ language = userSession.getUser().getLanguage().getCode();
+ } else {
+ language = I18nTranslation.DEFAULT_LANG;
+ }
+ final String encodeText = TextUtils.escapeHtmlLight(text);
String translation = translationManager.getTranslation(language, text);
if (translation == UNTRANSLATED_VALUE) {
// Not translated but in db, return text
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -152,7 +152,7 @@
public void setSocialNetworkVisibility(final String userHash, final StateToken token,
final SocialNetworkVisibility visibility) {
final Group group = groupManager.findByShortName(token.getGroup());
- group.getSocialNetwork().setVisibility(SocialNetworkVisibility.valueOf(visibility.toString()));
+ group.getSocialNetwork().setVisibility(visibility);
}
@Override
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/UserRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/UserRPC.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/UserRPC.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -164,7 +164,7 @@
if (!groupToken.getGroup().equals(user.getShortName())) {
throw new AccessViolationException();
}
- user.setBuddiesVisibility(UserBuddiesVisibility.valueOf(visibility.toString()));
+ user.setBuddiesVisibility(visibility);
}
}
Modified: trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/java/org/ourproject/kune/rack/RackServletFilter.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -35,6 +35,7 @@
import org.ourproject.kune.platf.server.ServerException;
import org.ourproject.kune.rack.dock.Dock;
import org.ourproject.kune.rack.dock.RequestMatcher;
+import org.waveprotocol.box.server.rpc.ServerRpcProvider;
import com.google.inject.Injector;
@@ -69,8 +70,8 @@
}
}
- public static final String INJECTOR_ATTRIBUTE = Injector.class.getName();
- public static final String INJECTOR_PARENT_ATTRIBUTE = Injector.class.getName() + "Parent";
+ public static final String INJECTOR_ATTRIBUTE = Injector.class.getName() + "Child";
+ public static final String INJECTOR_PARENT_ATTRIBUTE = ServerRpcProvider.INJECTOR_ATTRIBUTE;
private static final Log LOG = LogFactory.getLog(RackServletFilter.class);
private static final String MODULE_PARAMETER = RackModule.class.getName();
private List<Dock> docks;
Modified: trunk/src/main/resources/wave-server.properties
===================================================================
--- trunk/src/main/resources/wave-server.properties 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/main/resources/wave-server.properties 2011-03-07 17:08:07 UTC (rev 1269)
@@ -6,10 +6,9 @@
# A comma separated list of address on which to listen for connections.
# Each address is a comma separated host:port pair.
-http_frontend_public_address = localhost:9898
+http_frontend_public_address = localhost:8888
http_frontend_addresses = ${http_frontend_public_address}
-http_baseurl = /
-resource_base = target/kune-0.0.7/
+resource_bases = target/kune-0.0.7/,src/main/webapp/
### Server-specific variables
###
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/mapper/MapperTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/mapper/MapperTest.java 2011-03-02 01:35:30 UTC (rev 1268)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/mapper/MapperTest.java 2011-03-07 17:08:07 UTC (rev 1269)
@@ -325,11 +325,11 @@
buddies.add(user);
budData.setBuddies(buddies);
final SocialNetworkData snResult = new SocialNetworkData(SocialNetworkVisibility.onlymembers, sn, part,
- UserBuddiesVisibility.onlyyou, budData, new AccessRights(false, false, true), true, true);
+ UserBuddiesVisibility.yourbuddies, budData, new AccessRights(false, false, true), true, true);
final SocialNetworkDataDTO map = mapper.map(snResult, SocialNetworkDataDTO.class);
assertNotNull(map);
assertEquals(SocialNetworkVisibility.onlymembers, map.getSocialNetworkVisibility());
- assertEquals(UserBuddiesVisibility.onlyyou, map.getUserBuddiesVisibility());
+ assertEquals(UserBuddiesVisibility.yourbuddies, map.getUserBuddiesVisibility());
assertEquals("test", map.getGroupMembers().getAccessLists().getAdmins().getList().get(0).getShortName());
assertEquals("test", map.getUserParticipation().getGroupsIsAdmin().get(0).getShortName());
assertEquals("usertest", map.getUserBuddies().getBuddies().get(0).getShortName());
More information about the kune-commits
mailing list