kune-commits
Threads by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 1587 discussions
Author: vjrj_
Date: 2012-03-08 16:05:45 +0100 (Thu, 08 Mar 2012)
New Revision: 1748
Added:
trunk/img/icons/custom-iconic/
trunk/img/icons/custom-iconic/barters.svg
trunk/img/icons/custom-iconic/blog.svg
trunk/img/icons/custom-iconic/chain-alternate.svg
trunk/img/icons/custom-iconic/chain-close.svg
trunk/img/icons/custom-iconic/chain-open.svg
trunk/img/icons/custom-iconic/document_stroke-mod.svg
trunk/img/icons/custom-iconic/lists.svg
trunk/img/icons/custom-iconic/location.svg
trunk/img/icons/custom-iconic/picture.svg
trunk/img/icons/custom-iconic/reply.svg
trunk/img/icons/custom-iconic/wiki_stroke-mod.svg
trunk/src/main/java/org/waveprotocol/wave/client/gadget/
trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/
trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/Gadget.css
trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidget.java
trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidgetUi.java
trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidgetUi.ui.xml
trunk/src/main/resources/icons/
trunk/src/main/resources/icons/chain-close-black.png
trunk/src/main/resources/icons/chain-close-white.png
trunk/src/main/resources/icons/chain-closed-grey.png
trunk/src/main/resources/icons/chain-open-black.png
trunk/src/main/resources/icons/chain-open-grey.png
trunk/src/main/resources/icons/chain-open-white.png
trunk/src/main/resources/icons/picture-black.png
trunk/src/main/resources/icons/picture-grey.png
trunk/src/main/resources/icons/picture-white.png
trunk/src/main/resources/icons/pref-black.png
trunk/src/main/resources/icons/pref-grey.png
trunk/src/main/resources/icons/pref-white.png
Removed:
trunk/src/main/java/cc/kune/core/client/resources/pref-black.png
trunk/src/main/java/cc/kune/core/client/resources/pref-grey.png
trunk/src/main/java/cc/kune/core/client/resources/pref-white.png
Modified:
trunk/.classpath
trunk/pom.xml
trunk/src/main/java/cc/kune/common/client/resources/CommonResources.java
trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java
trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java
trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java
trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java
trunk/src/main/java/cc/kune/events/shared/EventsClientConversionUtil.java
trunk/src/main/webapp/others/kune-client-actions.xml
Log:
Calendar improvements and fixes. Gadget width fix. New icons.
Modified: trunk/.classpath
===================================================================
--- trunk/.classpath 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/.classpath 2012-03-08 15:05:45 UTC (rev 1748)
@@ -22,6 +22,7 @@
<classpathentry kind="var" path="M2_REPO/org/waveprotocol/client/0.3.12/client-0.3.12.jar"/>
<classpathentry kind="var" path="M2_REPO/org/waveprotocol/client-common/0.3.12/client-common-0.3.12.jar"/>
<classpathentry kind="var" path="M2_REPO/org/waveprotocol/client-common-src/0.3.12/client-common-src-0.3.12.jar" sourcepath="M2_REPO/org/waveprotocol/client-common-src/0.3.12/client-common-src-0.3.12-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/waveprotocol/client-scheduler/0.3.12/client-scheduler-0.3.12.jar"/>
<classpathentry kind="var" path="M2_REPO/org/waveprotocol/client-scheduler-src/0.3.12/client-scheduler-src-0.3.12.jar" sourcepath="M2_REPO/org/waveprotocol/client-scheduler-src/0.3.12/client-scheduler-src-0.3.12-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/waveprotocol/client-src/0.3.12/client-src-0.3.12.jar" sourcepath="M2_REPO/org/waveprotocol/client-src/0.3.12/client-src-0.3.12-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/cobogw/gwt/cobogw/1.3.1/cobogw-1.3.1.jar"/>
Added: trunk/img/icons/custom-iconic/barters.svg
===================================================================
--- trunk/img/icons/custom-iconic/barters.svg (rev 0)
+++ trunk/img/icons/custom-iconic/barters.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0px"
+ y="0px"
+ width="32px"
+ height="32px"
+ viewBox="0 0 32 32"
+ enable-background="new 0 0 32 32"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="barters.svg"><metadata
+ id="metadata20"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs18" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview16"
+ showgrid="false"
+ inkscape:zoom="1"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" />
+<g
+ id="Layer_1">
+</g>
+<g
+ id="fullscreen_x5F_exit_x5F_32x32">
+ <g
+ id="g6">
+ <polygon
+ points="27.414,24.586 32,20 20,20 20,32 24.586,27.414 29.172,32 32,29.172 "
+ id="polygon8"
+ transform="matrix(-1,0,0,1,52,0)"
+ style="fill:#231f20" />
+ <polygon
+ points="7.414,4.586 2.875,0.043 0.047,2.871 4.586,7.414 0,12 12,12 12,0 "
+ id="polygon10"
+ transform="matrix(-1,0,0,-1,32,12)"
+ style="fill:#231f20" />
+ <polygon
+ points="0,20 4.586,24.586 0,29.172 2.828,32 7.414,27.414 12,32 12,20 "
+ id="polygon12"
+ style="fill:#231f20"
+ transform="matrix(1,0,0,-1,0,52)" />
+ <polygon
+ points="20,12 32,12 27.414,7.414 31.961,2.871 29.133,0.043 24.586,4.586 20,0 "
+ id="polygon14"
+ transform="translate(-20,0)"
+ style="fill:#231f20" />
+ </g>
+</g>
+</svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/blog.svg
===================================================================
--- trunk/img/icons/custom-iconic/blog.svg (rev 0)
+++ trunk/img/icons/custom-iconic/blog.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32px"
+ height="32.023px"
+ viewBox="0 0 32 32.023"
+ style="enable-background:new 0 0 32 32.023;"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="blog.svg"><metadata
+ id="metadata9"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ id="defs7" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview5"
+ showgrid="true"
+ inkscape:zoom="5.5975395"
+ inkscape:cx="16"
+ inkscape:cy="10.652002"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid3005" /></sodipodi:namedview>
+
+<path
+ style="fill:#231f20"
+ d="M 0 0 L 0 32.03125 L 32 32.03125 L 32 10 L 29.0625 7.0625 C 29.645385 8.2530281 29.96875 9.5850786 29.96875 11 C 29.96875 13.112978 29.25243 15.059907 28.03125 16.59375 C 28.028366 19.812263 28 28.03125 28 28.03125 L 4 28.03125 C 4 28.03125 4 6.5804999 4 3.9375 L 15.4375 3.9375 C 16.965886 2.7328831 18.902941 2.03125 21 2.03125 C 22.424999 2.03125 23.771869 2.3467994 24.96875 2.9375 L 22.03125 0 L 0 0 z "
+ id="path3" /><path
+ inkscape:connector-curvature="0"
+ style="fill:#231f20"
+ d="M 25.750001,13.115998 22.328,9.6899993 l 0,-3.6670003 -4.023,0 c 0,3.8454005 0,4.507 0,4.507 0,0.602 0.277,1.122 0.695,1.493 l 3.922001,3.921999 z"
+ id="path7"
+ sodipodi:nodetypes="ccccsccc" /><path
+ transform="matrix(3.277217,0,0,3.277217,-40.416133,-58.744255)"
+ d="m 21.480664,21.282667 a 2.7403326,2.7403326 0 1 1 -5.480665,0 2.7403326,2.7403326 0 1 1 5.480665,0 z"
+ sodipodi:ry="2.7403326"
+ sodipodi:rx="2.7403326"
+ sodipodi:cy="21.282667"
+ sodipodi:cx="18.740332"
+ id="path3005"
+ style="color:#000000;fill:none;stroke:#231f20;stroke-width:1.2205478;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" /></svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/chain-alternate.svg
===================================================================
--- trunk/img/icons/custom-iconic/chain-alternate.svg (rev 0)
+++ trunk/img/icons/custom-iconic/chain-alternate.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32"
+ height="32"
+ viewBox="0 0 32 32"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="chain-close.svg"><metadata
+ id="metadata9"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs7" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview5"
+ showgrid="true"
+ inkscape:zoom="11.313708"
+ inkscape:cx="-14.194054"
+ inkscape:cy="5.099319"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid2986"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" /></sodipodi:namedview>
+
+<path
+ sodipodi:nodetypes="sssssssssssccs"
+ inkscape:connector-curvature="0"
+ id="path2994"
+ d="m 22,18 -12,0 c -1.105,0 -2,0.896 -2,2 l 0,4.084746 C 8,28.501746 11.582,32 16,32 c 4.418,0 8,-3.498254 8,-7.915254 L 24,20 c 0,-1.104 -0.895,-2 -2,-2 z m -2,6.084746 c 0,0 0,3.915254 -4,3.915254 -4,0 -4,-3.656755 -4,-4 0,-0.08475 0,-0.08475 0,-2 l 8,0 c 0,0 0,1.084746 0,2.084746 z"
+ style="fill:#231f20" /><path
+ style="fill:#231f20"
+ d="M 22,14 10,14 C 8.895,14 8,13.104 8,12 L 8,7.915254 C 8,3.498254 11.582,0 16,0 c 4.418,0 8,3.498254 8,7.915254 L 24,12 c 0,1.104 -0.895,2 -2,2 z M 20,7.915254 C 20,7.915254 20,4 16,4 c -4,0 -4,3.656755 -4,4 0,0.08475 0,0.08475 0,2 l 8,0 c 0,0 0,-1.084746 0,-2.084746 z"
+ id="path2996"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssssccs" /><rect
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect3017"
+ width="4"
+ height="12"
+ x="14"
+ y="10" /><path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3019"
+ sodipodi:cx="17"
+ sodipodi:cy="10"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ d="m 19,10 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z"
+ transform="translate(-1,0)" /><path
+ transform="translate(-1,12)"
+ d="m 19,10 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="10"
+ sodipodi:cx="17"
+ id="path3022"
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" /><rect
+ style="color:#000000;fill:none;stroke:#231f20;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect3813"
+ width="12"
+ height="10"
+ x="-13"
+ y="2"
+ ry="1"
+ rx="0.5" /><rect
+ rx="0.5"
+ ry="1"
+ y="20"
+ x="-13"
+ height="10"
+ width="12"
+ id="rect3817"
+ style="color:#000000;fill:none;stroke:#231f20;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /><rect
+ y="10"
+ x="-9"
+ height="12"
+ width="4"
+ id="rect3819"
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /><path
+ transform="translate(-24,0)"
+ d="m 19,10 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="10"
+ sodipodi:cx="17"
+ id="path3821"
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" /><path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3823"
+ sodipodi:cx="17"
+ sodipodi:cy="10"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ d="m 19,10 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z"
+ transform="translate(-24,12)" /><rect
+ rx="0.5"
+ ry="1"
+ y="2"
+ x="-33"
+ height="10"
+ width="12"
+ id="rect3825"
+ style="color:#000000;fill:none;stroke:#231f20;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /><rect
+ style="color:#000000;fill:none;stroke:#231f20;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect3827"
+ width="12"
+ height="10"
+ x="-33"
+ y="20"
+ ry="1"
+ rx="0.5" /><rect
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect3829"
+ width="4"
+ height="12"
+ x="-49"
+ y="10" /><path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path3831"
+ sodipodi:cx="17"
+ sodipodi:cy="10"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ d="m 19,10 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z"
+ transform="translate(-64,0)" /><path
+ transform="translate(-64,12)"
+ d="m 19,10 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="10"
+ sodipodi:cx="17"
+ id="path3833"
+ style="color:#000000;fill:#231f20;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:24;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" /></svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/chain-close.svg
===================================================================
--- trunk/img/icons/custom-iconic/chain-close.svg (rev 0)
+++ trunk/img/icons/custom-iconic/chain-close.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32"
+ height="32"
+ viewBox="0 0 32 32"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="chain-close.svg"><metadata
+ id="metadata9"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ id="defs7" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview5"
+ showgrid="true"
+ inkscape:zoom="11.313708"
+ inkscape:cx="9.6518354"
+ inkscape:cy="14.221054"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid2986"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" /></sodipodi:namedview>
+
+<path
+ style="fill:#231f20"
+ d="M 16 0 C 11.582 -5.9211895e-16 8 3.48925 8 7.90625 L 8 12 C 8 13.104 8.895 14 10 14 L 14 14 L 14 18 L 10 18 C 8.895 18 8 18.896 8 20 L 8 24.09375 C 8 28.51075 11.582 32 16 32 C 20.418 32 24 28.51075 24 24.09375 L 24 20 C 24 18.896 23.105 18 22 18 L 18 18 L 18 14 L 22 14 C 23.105 14 24 13.104 24 12 L 24 7.90625 C 24 3.48925 20.418 0 16 0 z M 16 4 C 20 4 20 7.90625 20 7.90625 L 20 10 L 18 10 C 18 8.8954305 17.104569 8 16 8 C 14.895431 8 14 8.8954305 14 10 L 12 10 L 12 8 C 12 7.656755 12 4 16 4 z M 12 22 L 14 22 C 14 23.104569 14.895431 24 16 24 C 17.104569 24 18 23.104569 18 22 L 20 22 L 20 24.09375 C 20 24.09375 20 28 16 28 C 12 28 12 24.343245 12 24 L 12 22 z "
+ id="path2994" /></svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/chain-open.svg
===================================================================
--- trunk/img/icons/custom-iconic/chain-open.svg (rev 0)
+++ trunk/img/icons/custom-iconic/chain-open.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32"
+ height="32"
+ viewBox="0 0 32 32"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="chain-open.svg"><metadata
+ id="metadata9"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ id="defs7" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview5"
+ showgrid="true"
+ inkscape:zoom="22.40625"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid2986"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" /></sodipodi:namedview>
+
+<path
+ sodipodi:nodetypes="sssssssssssccs"
+ inkscape:connector-curvature="0"
+ id="path2994"
+ d="m 22,18 -12,0 c -1.105,0 -2,0.896 -2,2 l 0,4.084746 C 8,28.501746 11.582,32 16,32 c 4.418,0 8,-3.498254 8,-7.915254 L 24,20 c 0,-1.104 -0.895,-2 -2,-2 z m -2,6.084746 c 0,0 0,3.915254 -4,3.915254 -4,0 -4,-3.656755 -4,-4 0,-0.08475 0,-0.08475 0,-2 l 8,0 c 0,0 0,1.084746 0,2.084746 z"
+ style="fill:#231f20" /><path
+ style="fill:#231f20"
+ d="M 22,14 10,14 C 8.895,14 8,13.104 8,12 L 8,7.915254 C 8,3.498254 11.582,0 16,0 c 4.418,0 8,3.498254 8,7.915254 L 24,12 c 0,1.104 -0.895,2 -2,2 z M 20,7.915254 C 20,7.915254 20,4 16,4 c -4,0 -4,3.656755 -4,4 0,0.08475 0,0.08475 0,2 l 8,0 c 0,0 0,-1.084746 0,-2.084746 z"
+ id="path2996"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssssssssccs" /></svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/document_stroke-mod.svg
===================================================================
--- trunk/img/icons/custom-iconic/document_stroke-mod.svg (rev 0)
+++ trunk/img/icons/custom-iconic/document_stroke-mod.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32px"
+ height="32.023px"
+ viewBox="0 0 32 32.023"
+ style="enable-background:new 0 0 32 32.023;"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="document_stroke-mod.svg"><metadata
+ id="metadata9"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs7" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview5"
+ showgrid="true"
+ inkscape:zoom="20.844669"
+ inkscape:cx="16"
+ inkscape:cy="16.011499"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid3005" /></sodipodi:namedview>
+<path
+ style="fill:#231f20"
+ d="M 22.016,0 0,0 -5.9466538e-7,32.023 C 13,32.023 19,32.023 32.000001,32.023 L 32,10.008 z M 28,28.023 c -10.907572,0 -10.783442,0 -24.0000004,0 0,0 0.006,-21.441 0.006,-24.084 2.1,0 7.807,0 12.006,0 l 0,12.01 12.01,0 C 28.021,18.682 28,28.023 28,28.023 z M 20.016,11.945 c 0,-1.543 0,-5.918 0,-8.006 1.615,1.619 6.402,6.404 8.006,8.006 -2.047,0 -6.454,0 -8.006,0 z"
+ id="path3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+</svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/lists.svg
===================================================================
--- trunk/img/icons/custom-iconic/lists.svg (rev 0)
+++ trunk/img/icons/custom-iconic/lists.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32px"
+ height="32px"
+ viewBox="0 0 32 32"
+ style="enable-background:new 0 0 32 32;"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="lists.svg"><metadata
+ id="metadata19"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ id="defs17">
+
+
+
+
+
+</defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview15"
+ showgrid="true"
+ inkscape:zoom="11.203125"
+ inkscape:cx="17.097985"
+ inkscape:cy="13.124115"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid3015" /></sodipodi:namedview>
+<g
+ id="g3000"><polygon
+ transform="matrix(-1,0,0,1,32,0)"
+ style="fill:#231f20"
+ points="32,0 32,4 32,4 0,4 0,0 "
+ id="polygon5" /><polygon
+ transform="matrix(-1.4,0,0,1,32,0)"
+ style="fill:#231f20"
+ points="20,12 0,12 0,8 20,8 20,12 "
+ id="polygon7" /><polygon
+ transform="matrix(-0.875,0,0,1,32,0)"
+ style="fill:#231f20"
+ points="32,24 0,24 0,20 32,20 32,24 "
+ id="polygon9" /><polygon
+ transform="matrix(-1,0,0,1,32,0)"
+ style="fill:#231f20"
+ points="24,28 24,32 24,32 0,32 0,28 "
+ id="polygon11" /></g>
+</svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/location.svg
===================================================================
--- trunk/img/icons/custom-iconic/location.svg (rev 0)
+++ trunk/img/icons/custom-iconic/location.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32"
+ height="32"
+ viewBox="0 0 31.999999 32"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="link.svg"><metadata
+ id="metadata13"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ id="defs11" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview9"
+ showgrid="true"
+ inkscape:zoom="22.40625"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid3009"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true" /></sodipodi:namedview>
+<g
+ id="g3"
+ transform="translate(0,2)">
+ <path
+ style="fill:#231f20"
+ d="m 16.024,4.007 c 3.32,0 6.019,2.7 6.019,6.017 0,1.894 -0.867,3.636 -2.379,4.773 C 18.042084,16.123195 17,17.96875 16,19.53125 15,17.96875 14,16 12.39,14.797 10.875,13.66 10.008,11.918 10.008,10.024 c 0,-3.317 2.699,-6.017 6.016,-6.017 M 16.024,0 C 10.488,0 6,4.488 6,10.024 c 0,3.28 1.547,6.147 3.977,7.976 1.121,0.844 3.1235,4 3.57325,5 C 14,24 15.331475,26.335992 16,28 c 0.734517,-1.69468 1.812,-4 2.406,-5 0.594,-1 2.547,-4.156 3.668,-5 2.43,-1.829 3.977,-4.696 3.977,-7.976 C 26.051,4.488 21.562,0 16.024,0 z"
+ id="path5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cscccsccsczczcsc" />
+
+</g>
+</svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/picture.svg
===================================================================
--- trunk/img/icons/custom-iconic/picture.svg (rev 0)
+++ trunk/img/icons/custom-iconic/picture.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32px"
+ height="32.023px"
+ viewBox="0 0 32 32.023"
+ style="enable-background:new 0 0 32 32.023;"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="picture.svg"
+ inkscape:export-filename="/tmp/picture-black.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"><metadata
+ id="metadata9"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs7" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview5"
+ showgrid="true"
+ inkscape:zoom="11.195079"
+ inkscape:cx="15.028131"
+ inkscape:cy="14.592141"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid3005" /></sodipodi:namedview>
+
+<path
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#231f20;fill-opacity:1;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="M 1.8125 0.03125 A 2.0001999 2.0001999 0 0 0 0 2.03125 L 0 30.03125 A 2.0001999 2.0001999 0 0 0 2 32.03125 L 30 32.03125 A 2.0001999 2.0001999 0 0 0 32 30.03125 L 32 2.03125 A 2.0001999 2.0001999 0 0 0 30 0.03125 L 2 0.03125 A 2.0001999 2.0001999 0 0 0 1.8125 0.03125 z M 4 4.03125 L 28 4.03125 L 28 14.03125 C 28 14.03125 26.974092 14.034149 25.65625 14.0625 C 25.581508 12.992164 25.258639 11.966366 24.71875 11.03125 C 22.797598 7.7037175 18.483783 6.5475981 15.15625 8.46875 C 12.362378 10.081793 11.133571 13.357304 11.9375 16.34375 C 9.6691205 17.30296 7.6457826 18.345626 4 19 L 4 4.03125 z M 18.875 11.5 C 19.832223 11.564262 20.72483 12.121629 21.25 13.03125 C 21.469627 13.411655 21.613234 13.817196 21.65625 14.25 C 19.617583 14.395505 17.468728 14.646833 15.71875 15.0625 C 15.483749 13.844461 16.007763 12.569329 17.15625 11.90625 C 17.702023 11.591148 18.300666 11.461443 18.875 11.5 z M 28 18.03125 L 28 28.03125 L 4 28.03125 L 4 23.03125 A 2.0001999 2.0001999 0 0 0 4.34375 23 C 10.699207 21.940757 12.956538 19.854616 16.5 18.96875 C 19.891283 18.120929 28 18.03125 28 18.03125 z "
+ id="rect3004" /></svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/reply.svg
===================================================================
--- trunk/img/icons/custom-iconic/reply.svg (rev 0)
+++ trunk/img/icons/custom-iconic/reply.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32px"
+ height="31.985px"
+ viewBox="0 0 32 31.985"
+ style="enable-background:new 0 0 32 31.985;"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="reply.svg"><metadata
+ id="metadata13"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ id="defs11" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview9"
+ showgrid="false"
+ inkscape:zoom="20.869432"
+ inkscape:cx="16"
+ inkscape:cy="15.9925"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g3"
+ transform="matrix(-1,0,0,-1,31.98626,31.985377)">
+ <path
+ style="fill:#231f20"
+ d="M 28.156,3.72 C 23.191259,-1.3561979 13.995754,-1.2081334 9.2406719,4.087821 7.4768618,5.8148852 5.7546981,7.5837628 4,9.32 4,7.547 4,5.774 4,4.001 c -1.3333333,0 -2.6666667,0 -4,0 0,4 0,8 0,12 4,0 8,0 12,0 0,-1.333333 0,-2.666667 0,-4 -1.675,0 -3.35,0 -5.025,0 2.3669706,-2.2196714 4.439909,-4.7779711 7.05347,-6.7189446 4.151835,-2.59042 10.352865,-1.2404923 12.749396,3.1216783 2.157583,3.6209673 1.362664,8.6925193 -1.835853,11.4513573 -1.001785,0.993873 -3.033417,2.323732 -2.233621,2.558459 4.283435,-0.590885 8.428779,-3.795214 9.173842,-8.201008 C 32.416151,10.382846 30.852862,6.4282488 28.156,3.72 z"
+ id="path5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccc" />
+
+
+</g>
+</svg>
\ No newline at end of file
Added: trunk/img/icons/custom-iconic/wiki_stroke-mod.svg
===================================================================
--- trunk/img/icons/custom-iconic/wiki_stroke-mod.svg (rev 0)
+++ trunk/img/icons/custom-iconic/wiki_stroke-mod.svg 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="32px"
+ height="32.023px"
+ viewBox="0 0 32 32.023"
+ style="enable-background:new 0 0 32 32.023;"
+ xml:space="preserve"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="wiki_stroke-mod.svg"><metadata
+ id="metadata9"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs7" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1078"
+ inkscape:window-height="919"
+ id="namedview5"
+ showgrid="true"
+ inkscape:zoom="4"
+ inkscape:cx="16"
+ inkscape:cy="13.87808"
+ inkscape:window-x="0"
+ inkscape:window-y="972"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1"><inkscape:grid
+ type="xygrid"
+ id="grid3005" /></sodipodi:namedview>
+<path
+ style="fill:#231f20"
+ d="m 23,0.02299881 c 0,0 -12,0 -19.0000004,-0.02299881 C 3.9999996,8.0229991 -5.9466538e-7,32.023 -5.9466538e-7,32.023 13,32.023 21.5,32.023 28,32.023 31.000001,20.023 31.000001,18.022999 31.984,10.030999 28,7.0229991 23,0.02299881 23,0.02299881 z M 25,28.023 c -10.907572,0 -13.911982,0.09595 -20.5202614,0.09595 C 5.9999996,21.023 6.9999997,12.022999 7.4797387,4.022999 c 2.1000003,0 5.3212613,0 9.5202613,0 0,0 0,9 -0.988,11.926001 C 21,16.517683 27,16.022999 27,16.022999 26.999,18.755999 25,28.023 25,28.023 z M 20.431765,12.687182 C 21.415765,8.7651811 21,6.110999 21,4.022999 c 1,2 5.418,6.320001 7.022,7.922001 -3.022,1.077999 -6.038235,0.742182 -7.590235,0.742182 z"
+ id="path3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccc" />
+</svg>
\ No newline at end of file
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/pom.xml 2012-03-08 15:05:45 UTC (rev 1748)
@@ -638,6 +638,11 @@
</dependency>
<dependency>
<groupId>org.waveprotocol</groupId>
+ <artifactId>client-scheduler</artifactId>
+ <version>${wiab.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.waveprotocol</groupId>
<artifactId>client-scheduler-src</artifactId>
<version>${wiab.version}</version>
</dependency>
Modified: trunk/src/main/java/cc/kune/common/client/resources/CommonResources.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/resources/CommonResources.java 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/src/main/java/cc/kune/common/client/resources/CommonResources.java 2012-03-08 15:05:45 UTC (rev 1748)
@@ -71,7 +71,34 @@
@Source("cross.png")
ImageResource redCross();
+
+ @Source("icons/chain-close-black.png")
+ ImageResource chainCloseBlack();
+ @Source("icons/chain-close-white.png")
+ ImageResource chainCloseWhite();
+
+ @Source("icons/chain-closed-grey.png")
+ ImageResource chainClosedGrey();
+
+ @Source("icons/chain-open-black.png")
+ ImageResource chainOpenBlack();
+
+ @Source("icons/chain-open-grey.png")
+ ImageResource chainOpenGrey();
+
+ @Source("icons/chain-open-white.png")
+ ImageResource chainOpenWhite();
+
+ @Source("icons/picture-black.png")
+ ImageResource pictureBlack();
+
+ @Source("icons/picture-grey.png")
+ ImageResource pictureGrey();
+
+ @Source("icons/picture-white.png")
+ ImageResource pictureWhite();
+
@Source("unchecked.png")
ImageResource unChecked();
}
Modified: trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java 2012-03-08 15:05:45 UTC (rev 1748)
@@ -19,11 +19,12 @@
*/
package cc.kune.core.client.resources;
-import com.google.gwt.resources.client.ClientBundle;
+import cc.kune.common.client.resources.CommonResources;
+
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
-public interface CoreResources extends ClientBundle {
+public interface CoreResources extends CommonResources {
public interface Style extends CssResource {
String loadingSpiner();
}
@@ -442,16 +443,16 @@
@Source("person-def.png")
ImageResource personDef();
- @Source("pref-black.png")
+ @Source("icons/pref-black.png")
ImageResource prefBlack();
- @Source("pref-grey.png")
+ @Source("icons/pref-grey.png")
ImageResource prefGrey();
@Source("prefs.png")
ImageResource prefs();
- @Source("pref-white.png")
+ @Source("icons/pref-white.png")
ImageResource prefWhite();
@Source("question32.png")
@@ -547,4 +548,6 @@
@Source("wave-icon.png")
ImageResource waveIcon();
+
+
}
Deleted: trunk/src/main/java/cc/kune/core/client/resources/pref-black.png
===================================================================
(Binary files differ)
Deleted: trunk/src/main/java/cc/kune/core/client/resources/pref-grey.png
===================================================================
(Binary files differ)
Deleted: trunk/src/main/java/cc/kune/core/client/resources/pref-white.png
===================================================================
(Binary files differ)
Modified: trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/src/main/java/cc/kune/events/client/actions/EventAddMenuItem.java 2012-03-08 15:05:45 UTC (rev 1748)
@@ -75,7 +75,7 @@
contService.get().addNewContentWithGadgetAndState(session.getUserHash(),
session.getContainerState().getStateToken(),
EventsConstants.TYPE_MEETING_DEF_GADGETNAME, EventsConstants.TYPE_MEETING, title,
- title, EventsClientConversionUtil.toMap(appt), new AsyncCallbackSimple<StateContentDTO>() {
+ "", EventsClientConversionUtil.toMap(appt), new AsyncCallbackSimple<StateContentDTO>() {
@Override
public void onFailure(final Throwable caught) {
super.onFailure(caught);
Modified: trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/src/main/java/cc/kune/events/client/actions/EventsClientActions.java 2012-03-08 15:05:45 UTC (rev 1748)
@@ -60,8 +60,8 @@
final Provider<Calendar7DaysViewSelectBtn> cal7DaysBtn,
final Provider<CalendarMonthViewSelectBtn> calMonthBtn,
final Provider<EventAddMenuItem> eventAddMenuItem,
+ final Provider<EventOpenMenuItem> eventOpenMenuItem, final Provider<CalendarGoPrevBtn> calPrevBtn,
final Provider<EventRemoveMenuItem> eventRemoveMenuItem,
- final Provider<EventOpenMenuItem> eventOpenMenuItem, final Provider<CalendarGoPrevBtn> calPrevBtn,
final Provider<CalendarGoNextBtn> calNextBtn, final CalendarOnOverMenu onOverMenu,
final Provider<CalendarGoTodayBtn> goToday, final Provider<RefreshContentMenuItem> refresh) {
super(session, stateManager, i18n, registry);
@@ -82,8 +82,8 @@
// On over calendar menu
actionsRegistry.addAction(ActionGroups.TOOLBAR, onOverMenu, containers);
+ eventOpenMenuItem.get();
eventAddMenuItem.get();
- eventOpenMenuItem.get();
eventRemoveMenuItem.get();
// For now, commented:
Modified: trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/src/main/java/cc/kune/events/client/viewer/CalendarViewerPanel.java 2012-03-08 15:05:45 UTC (rev 1748)
@@ -22,6 +22,7 @@
import com.bradrydzewski.gwt.calendar.client.Appointment;
import com.bradrydzewski.gwt.calendar.client.Calendar;
import com.bradrydzewski.gwt.calendar.client.CalendarSettings;
+import com.bradrydzewski.gwt.calendar.client.CalendarSettings.Click;
import com.bradrydzewski.gwt.calendar.client.CalendarViews;
import com.bradrydzewski.gwt.calendar.client.event.CreateHandler;
import com.bradrydzewski.gwt.calendar.client.event.DateRequestHandler;
@@ -65,6 +66,7 @@
final CalendarSettings settings = new CalendarSettings();
settings.setIntervalsPerHour(4);
settings.setPixelsPerInterval(10);
+ settings.setTimeBlockClickNumber(Click.Single);
// settings.setOffsetHourLabels(true);
settings.setScrollToHour(8);
calendar = new Calendar();
Modified: trunk/src/main/java/cc/kune/events/shared/EventsClientConversionUtil.java
===================================================================
--- trunk/src/main/java/cc/kune/events/shared/EventsClientConversionUtil.java 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/src/main/java/cc/kune/events/shared/EventsClientConversionUtil.java 2012-03-08 15:05:45 UTC (rev 1748)
@@ -23,6 +23,9 @@
if (end != null) {
app.setEnd(DateUtils.toDate(end));
}
+ String allDay = properties.get(ICalConstants._ALL_DAY);
+ if (allDay != null)
+ app.setAllDay(Boolean.parseBoolean(allDay));
return app;
}
@@ -30,6 +33,7 @@
final Map<String, String> properties = EventsSharedConversionUtil.toMap(app);
properties.put(ICalConstants.DATE_TIME_START, DateUtils.toString(app.getStart()));
properties.put(ICalConstants.DATE_TIME_END, DateUtils.toString(app.getEnd()));
+ properties.put(ICalConstants._ALL_DAY, Boolean.toString(app.isAllDay()));
return properties;
}
Added: trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/Gadget.css
===================================================================
--- trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/Gadget.css (rev 0)
+++ trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/Gadget.css 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,136 @@
+/*
+ * StyleInjector CSS file for Gadget container.
+ * Author: vadimg(a)google.com (Vadim Gerasimov)
+ */
+
+.panel {
+ position: relative; /* Positioned container */
+ zoom: 1; /* Fixes IE positioning bug. */
+ overflow: hidden; /* Expand to size of floated contents. */
+ font-size: 0pt;
+ border: none;
+ clear: left;
+}
+
+.inline {
+ display: inline-block;
+ vertical-align: bottom;
+ width: 100%;
+}
+
+.title {
+ display: none;
+}
+
+.gadgetFrame {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ font-size: 0pt;
+ display: block;
+ position: relative;
+}
+
+.loadingGadgetFrame {
+ border: 1px solid #b8c6d9;
+}
+
+.loadedGadgetFrame {
+ border: 1px solid transparent;
+}
+
+@sprite .loadingGadgetLargeThrobber {
+ gwt-image: 'loadingGadgetLarge';
+ background-color: #e6ebf2;
+ background-repeat: no-repeat;
+ line-height: value('loadingGadgetLarge.getHeight', 'px');
+ background-position: center center;
+ display: block;
+}
+
+@sprite .loadingGadgetSmallThrobber {
+ gwt-image: 'loadingGadgetSmall';
+ background-color: #e6ebf2;
+ background-repeat: no-repeat;
+ line-height: value('loadingGadgetSmall.getHeight', 'px');
+ background-position: center center;
+ display: block;
+}
+
+@url brokenGadgetUrl brokenGadget;
+.brokenGadgetIcon {
+ background-color: #e6ebf2;
+ background-image: brokenGadgetUrl;
+ background-repeat: no-repeat;
+ background-position: center center;
+ display: block;
+}
+
+.loadedGadget {
+ display: block;
+}
+
+.iframeDiv {
+ position: relative;
+ left: 0px;
+ top: 0px;
+}
+
+/* Buttons on each widget. */
+@eval metaButtonTransitionTime RESOURCES.FADE_DELAY_STRING;
+@sprite .metaButtons {
+ position: absolute;
+ right: 14px;
+ top: 6px;
+ z-index: 1;
+ gwt-image: 'metaMid';
+ overflow: visible; /* GWT's sprite rules stick in an overflow:hidden which we don't want. */
+ font-size: 0pt;
+
+ /** animate fade-in and fade-out of the meta buttons */
+ \-webkit-transition: opacity metaButtonTransitionTime ease-in-out;
+ \-moz-transition: opacity metaButtonTransitionTime ease-in-out;
+ transition: opacity metaButtonTransitionTime ease-in-out;
+}
+
+/*
+ * The left and right
+ */
+
+@eval metaLeftMargin RESOURCES.META_LEFT_WIDTH;
+@eval metaRightMargin RESOURCES.META_RIGHT_WIDTH;
+
+@sprite .metaRight {
+ gwt-image: 'metaRightImage';
+ float: left;
+ margin-right: metaRightMargin;
+}
+
+@sprite .metaLeft {
+ gwt-image: 'metaLeftImage';
+ float: left;
+ margin-left: metaLeftMargin;
+}
+
+.metaButtonsPanel {
+ float: left;
+}
+
+.metaButton {
+ /* Push the buttons down to align nicely with the mid, right and left background images. */
+ margin-top: 3px;
+ float: left;
+}
+
+.metaButton.disabled {
+ opacity: 0.5;
+}
+
+@if user.agent ie6 {
+ .metaButton.disabled {
+ filter: "alpha(opacity = 50)";
+ }
+}
+
+@sprite .more {
+ gwt-image: 'moreImage';
+}
Added: trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidget.java
===================================================================
--- trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidget.java (rev 0)
+++ trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidget.java 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,2036 @@
+// @formatter:off
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.waveprotocol.wave.client.gadget.renderer;
+
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.AUTHOR_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.ID_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.IFRAME_URL_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.LAST_KNOWN_HEIGHT_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.LAST_KNOWN_WIDTH_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.PREFS_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.SNIPPET_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.STATE_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.TITLE_ATTRIBUTE;
+import static org.waveprotocol.wave.model.gadget.GadgetConstants.URL_ATTRIBUTE;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.gwt.core.client.Duration;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.ScriptElement;
+import com.google.gwt.http.client.URL;
+import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.Random;
+import com.google.gwt.user.client.Window.Location;
+
+import org.waveprotocol.wave.client.account.ProfileManager;
+import org.waveprotocol.wave.client.common.util.UserAgent;
+import org.waveprotocol.wave.client.editor.content.AnnotationPainter;
+import org.waveprotocol.wave.client.editor.content.CMutableDocument;
+import org.waveprotocol.wave.client.editor.content.ContentElement;
+import org.waveprotocol.wave.client.editor.content.ContentNode;
+import org.waveprotocol.wave.client.gadget.GadgetLog;
+import org.waveprotocol.wave.client.gadget.StateMap;
+import org.waveprotocol.wave.client.gadget.StateMap.Each;
+import org.waveprotocol.wave.client.scheduler.ScheduleCommand;
+import org.waveprotocol.wave.client.scheduler.ScheduleTimer;
+import org.waveprotocol.wave.client.scheduler.Scheduler;
+import org.waveprotocol.wave.client.scheduler.Scheduler.Task;
+import org.waveprotocol.wave.model.conversation.ConversationBlip;
+import org.waveprotocol.wave.model.conversation.ObservableConversation;
+import org.waveprotocol.wave.model.document.util.Point;
+import org.waveprotocol.wave.model.document.util.XmlStringBuilder;
+import org.waveprotocol.wave.model.gadget.GadgetXmlUtil;
+import org.waveprotocol.wave.model.id.ModernIdSerialiser;
+import org.waveprotocol.wave.model.id.WaveletName;
+import org.waveprotocol.wave.model.supplement.ObservableSupplementedWave;
+import org.waveprotocol.wave.model.util.CollectionUtils;
+import org.waveprotocol.wave.model.util.ReadableStringMap.ProcV;
+import org.waveprotocol.wave.model.util.ReadableStringSet;
+import org.waveprotocol.wave.model.util.StringMap;
+import org.waveprotocol.wave.model.wave.ParticipantId;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Class to implement gadget widgets rendered in the client.
+ *
+ *
+ * TODO(user): Modularize the gadget APIs (base, Podium, Wave, etc).
+ *
+ * TODO(user): Refactor the common RPC call code.
+ */
+public class GadgetWidget extends ObservableSupplementedWave.ListenerImpl
+ implements GadgetRpcListener, GadgetWaveletListener, GadgetUiListener {
+
+ private static final String GADGET_RELAY_PATH = "gadgets/files/container/rpc_relay.html";
+ private static final int DEFAULT_HEIGHT_PX = 100;
+ private static final int DEFAULT_WIDTH_PX = -1;
+
+ /**
+ * Helper class to analyze element changes in the gadget state and prefs.
+ */
+ private abstract class ElementChangeTask {
+ /**
+ * Runs processChange() wrapped in code that detects and submits changes in
+ * the gadget state and prefs.
+ *
+ * @param node The node being processed or null if not defined.
+ */
+ void run(ContentNode node) {
+ if (!isActive()) {
+ log("Element change event in removed node: ignoring.");
+ return;
+ }
+ StateMap oldState = StateMap.create();
+ oldState.copyFrom(state);
+ final StateMap oldPrefs = StateMap.create();
+ oldPrefs.copyFrom(userPrefs);
+ processChange(node);
+ if (!state.compare(oldState)) {
+ gadgetStateSubmitter.submit();
+ }
+ // TODO(user): Optimize prefs updates.
+ if (!userPrefs.compare(oldPrefs)) {
+ userPrefs.each(new StateMap.Each() {
+ @Override
+ public void apply(String key, String value) {
+ if (!oldPrefs.has(key) || !value.equals(oldPrefs.get(key))) {
+ setGadgetPref(key, value);
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * Processes the changes in the elements.
+ *
+ * @param node The node being processed or null if not defined.
+ */
+ abstract void processChange(ContentNode node);
+ }
+
+ /**
+ * Podium state is stored as a part of the wave gadget state and can be
+ * visible to the Gadget via both Wave and Podium RPC interfaces.
+ */
+ private static final String PODIUM_STATE_NAME = "podiumState";
+
+ /**
+ * Gadget RPC path: location of the RPC JavaScript code to be loaded into the
+ * client code. This is the standard Gadget library to support RPCs.
+ */
+ static final String GADGET_RPC_PATH = "/gadgets/js/core:rpc.js";
+
+ /**
+ * Gadget name prefix: the common part of the gadget IFrame ID and name. The
+ * numeric gadget ID is appended to this prefix.
+ */
+ static final String GADGET_NAME_PREFIX = "wgadget_iframe_";
+
+ /** Primary view for gadgets. */
+ static final String GADGET_PRIMARY_VIEW = "canvas";
+
+ /** Default view for gadgets. */
+ static final String GADGET_DEFAULT_VIEW = "default";
+
+ /**
+ * Time in milliseconds to wait for the RPC script to load before logging a
+ * warning.
+ */
+ private static final int GADGET_RPC_LOAD_WARNING_TIMEOUT_MS = 30000;
+
+ /** Time granularity to check for the Gadget RPC library load state. */
+ private static final int GADGET_RPC_LOAD_TIMER_MS = 250;
+
+ /** Editing mode polling timer. */
+ private static final int EDITING_POLLING_TIMER_MS = 200;
+
+ /** Blip submit delay in milliseconds. */
+ private static final int BLIP_SUBMIT_TIMEOUT_MS = 30;
+
+ /** Gadget state send delay in milliseconds. */
+ private static final int STATE_SEND_TIMEOUT_MS = 30;
+
+ /** The Wave API version supported by the gadget container. */
+ private static final String WAVE_API_VERSION = "1";
+
+ /** The key for the playback state in the wave gadget state map. */
+ private static final String PLAYBACK_MODE_KEY = "${playback}";
+
+ /** The key for the edit state in the wave gadget state map. */
+ private static final String EDIT_MODE_KEY = "${edit}";
+
+ /** Gadget-loading frame border removal delay in ms. */
+ private static final int FRAME_BORDER_REMOVE_DELAY_MS = 3000;
+
+ /** Delay before sending one more participant information update in ms. */
+ private static final int REPEAT_PARTICIPANT_INFORMATION_SEND_DELAY_MS = 5000;
+
+ /** Object that manages Gadget UI HTML elements. */
+ private GadgetWidgetUi ui;
+
+ /** Gadget title element. */
+ private GadgetElementChild titleElement;
+
+ /** The gadget spec URL. */
+ private String source;
+
+ /** Gadget instance ID counter (local for each client). */
+ private static int nextClientInstanceId = 0;
+
+ /** Gadget instance ID. Non-final for testing. */
+ private int clientInstanceId;
+
+ /** Gadget iframe URL. */
+ private String iframeUrl;
+
+ /** Gadget RPC token.*/
+ private final String rpcToken;
+
+ /** Gadget security token. */
+ private String securityToken;
+
+ /** Gadget user preferences. */
+ private GadgetUserPrefs userPrefs;
+
+ /**
+ * Gadget state element map. Maps state keys to the corresponding elements.
+ */
+ private final StringMap<GadgetElementChild> prefElements;
+
+ /**
+ * Widget active flag: true after the widget is created, false after it is
+ * destroyed.
+ */
+ private boolean active = false;
+
+ /** ID of the gadget's wave/let. */
+ private WaveletName waveletName;
+
+ /** Host blip of this gadget. */
+ private ConversationBlip blip;
+
+ /** Blip submitter. */
+ private Submitter blipSubmitter;
+
+ /** Gadget state submitter. */
+ private Submitter gadgetStateSubmitter;
+
+ /** Private gadget state submitter. */
+ private Submitter privateGadgetStateSubmitter;
+
+ /** ContentElement in the wave that corresponds to this gadget. */
+ private ContentElement element;
+
+ /** Indicator for gadget's blip editing state. */
+ private EditingIndicator editingIndicator;
+
+ /** Participant information. */
+ private ParticipantInformation participants;
+
+ /** Gadget state. */
+ private StateMap state;
+
+ /** User id of the current logged in user. */
+ private String loginName;
+
+ /**
+ * Gadget state element map. Maps state keys to the corresponding elements.
+ */
+ private final StringMap<GadgetElementChild> stateElements;
+
+ /** Indicates whether the gadget is known to support the Wave API. */
+ private boolean waveEnabled = false;
+
+ /** Version of Wave API that is used by the gadget-side code. */
+ private String waveApiVersion = "";
+
+ /** Per-user wavelet to store private gadget data. */
+ private ObservableSupplementedWave supplement;
+
+ /** Provides profile information. */
+ private ProfileManager profileManager;
+
+ /** Wave client locale. */
+ private Locale locale;
+
+ /** Gadget library initialization flag. */
+ private static boolean initialized = false;
+
+ /**
+ * Gadget element child that defines what nodes to check for redundancy in the
+ * removeRedundantNodeTask. Only a single task can be scheduled at a time.
+ */
+ private GadgetElementChild redundantNodeCheckChild = null;
+
+ /**
+ * Indicates whether the gadget has performed a document mutation on behalf of
+ * the user. This flag is checked when the gadget tries to perform
+ * non-essential modifications of the document such as duplicate node cleanup
+ * or height attribute update. Performing such operations may generate
+ * unnecessary playback frames and attribute modifications to a user who did
+ * not use the gadget. The flag is set when the gadget modifies state, prefs,
+ * title, or any other elements that normally are linked to user actions in
+ * the gadget.
+ */
+ private boolean documentModified = false;
+
+ /**
+ * Indicates that the iframe URL attribute should be updated when the gadget
+ * modifies the document in response to a user action.
+ */
+ private boolean toUpdateIframeUrl = false;
+
+ private final String clientInstanceLogLabel;
+
+ // Note that the following regex expressions are strings rather than compiled patterns because GWT
+ // does not (yet) support those. Consider using the new GWT RegExp class in the future.
+
+ /**
+ * Pattern to match rpc token, security token, and user preference parameters
+ * in a URL fragment. Used to remove all these parameters.
+ */
+ private final static String FRAGMENT_CLEANING_PATTERN = "(^|&)(rpctoken=|st=|up_)[^&]*";
+
+ /**
+ * Pattern to match module ID and security token parameters a URL. Used to
+ * remove all these parameters.
+ */
+ private final static String URL_CLEANING_PATTERN = "&(mid=|st=|lang=|country=|debug=)[^&]*";
+
+ /**
+ * Pattern to match and remove URL fragment including the #.
+ */
+ private final static String FRAGMENT_PATTERN = "#.*";
+
+ /**
+ * Pattern to match and remove URL part before fragment including the #.
+ */
+ private final static String BEFORE_FRAGMENT_PATTERN = "[^#]*#";
+
+ /**
+ * Pattern to validate URL fragment.
+ */
+ private final static String FRAGMENT_VALIDATION_PATTERN =
+ "([\\w~!&(a)\\$\\-\\.\\'\\(\\)\\*\\+\\,\\;\\=\\?\\:]|%[0-9a-fA-F]{2})+";
+
+ /**
+ * Pattern to match iframe host in the beginning of a URL. This is not a
+ * validation check. The user can choose their own host. This simply serves
+ * to extract the iframe segment of the URL
+ */
+ private final static String IFRAME_HOST_PATTERN =
+ "^\\/\\/(https?:\\/\\/)?[^\\/]+\\/";
+
+ /**
+ * Pattern to remove XML-unsafe characters. Snippeting fails on some of those
+ * symbol combinations due to a potential bug in XML attribute processing.
+ * Theoretically all those symbols should be tolerated and displayed in
+ * snippets without any special processing in this class.
+ *
+ * TODO(user): Investigate/test this later to remove sanitization.
+ */
+ private final static String SNIPPET_SANITIZER_PATTERN = "[<>\\\"\\'\\&]";
+
+
+ /**
+ * Constructs GadgetWidget for testing.
+ */
+ private GadgetWidget() {
+ clientInstanceId = nextClientInstanceId++;
+ clientInstanceLogLabel = "[" + clientInstanceId + "]";
+ prefElements = CollectionUtils.createStringMap();
+ stateElements = CollectionUtils.createStringMap();
+ rpcToken = "" +
+ ((Long.valueOf(Random.nextInt()) << 32) | (Long.valueOf(Random.nextInt()) & 0xFFFFFFFFL));
+ }
+
+ private static native boolean gadgetLibraryLoaded() /*-{
+ return ($wnd.gadgets && $wnd.gadgets.rpc) ? true : false;
+ }-*/;
+
+ /**
+ * Preloads the libraries and initializes them on the first use.
+ */
+ private static void initializeGadgets() {
+ if (!initialized && !gadgetLibraryLoaded()) {
+ GadgetLog.log("Initializing Gadget RPC script tag.");
+ loadGadgetRpcScript();
+ initialized = true;
+ GadgetLog.log("Gadgets RPC script tag initialized.");
+ }
+ // TODO(user): Remove the css hacks once CAJA is fixed.
+ if (!initialized && !gadgetLibraryLoaded()) {
+ // HACK(user): NOT reachable, but GWT thinks it is.
+ excludeCssName();
+ }
+ }
+
+ /**
+ * Utility function to convert a Gadget StateMap to a string to be stored as
+ * an attribute value.
+ *
+ * @param state JSON object to be converted to string.
+ * @return string to be saved as an attribute value.
+ */
+ private static String stateToAttribute(StateMap state) {
+ if (state == null) {
+ return URL.encodeComponent("{}");
+ }
+ return URL.encodeComponent(state.toJson());
+ }
+
+ /**
+ * Utility function to convert an attribute string to a Gadget StateMap.
+ *
+ * @param attribute attribute value string.
+ * @return StateMap constructed from the attribute value.
+ */
+ private StateMap attributeToState(String attribute) {
+ StateMap result = StateMap.create();
+ if ((attribute != null) && !attribute.equals("")) {
+ log("Unescaped attribute: ", URL.decodeComponent(attribute));
+ result.fromJson(URL.decodeComponent(attribute));
+ log("State map: ", result.toJson());
+ }
+ return result;
+ }
+
+ /**
+ * Returns the gadget name that identifies the gadget and its frame.
+ *
+ * @return gadget name.
+ */
+ private String getGadgetName() {
+ return GADGET_NAME_PREFIX + clientInstanceId;
+ }
+
+ private void updatePrefsFromAttribute(String prefAttribute) {
+ if (!stateToAttribute(userPrefs).equals(prefAttribute)) {
+ StateMap prefState = attributeToState(prefAttribute);
+ userPrefs.parse(prefState, true);
+ log("Updating user prefs: ", userPrefs.toJson());
+ prefState.each(new StateMap.Each() {
+ @Override
+ public void apply(String key, String value) {
+ setGadgetPref(key, value);
+ }
+ });
+ }
+ }
+
+ /**
+ * Processes changes in the gadget element attributes.
+ * TODO(user): move some of this code to the handler.
+ *
+ * @param name attribute name.
+ * @param value new attribute value.
+ */
+ public void onAttributeModified(String name, String value) {
+ log("Attribute '", name, "' changed to '", value, "'");
+ if (userPrefs == null) {
+ log("Attribute changed before the gadget is initialized.");
+ return;
+ }
+
+ if (name.equals(URL_ATTRIBUTE)) {
+ source = (value == null) ? "" : value;
+ } else if (name.equals(TITLE_ATTRIBUTE)) {
+ String title = (value == null) ? "" : URL.decodeComponent(value);
+ if (!title.equals(ui.getTitleLabelText())) {
+ log("Updating title: ", title);
+ ui.setTitleLabelText(title);
+ }
+ } else if (name.equals(PREFS_ATTRIBUTE)) {
+ updatePrefsFromAttribute(value);
+ } else if (name.equals(STATE_ATTRIBUTE)) {
+ StateMap newState = attributeToState(value);
+ if (!state.compare(newState)) {
+ String podiumState = newState.get(PODIUM_STATE_NAME);
+ if ((podiumState != null) && (!podiumState.equals(state.get(PODIUM_STATE_NAME)))) {
+ sendPodiumOnStateChangedRpc(getGadgetName(), podiumState);
+ }
+ state.clear();
+ state.copyFrom(newState);
+ log("Updating gadget state: ", state.toJson());
+ gadgetStateSubmitter.submit();
+ }
+ }
+ }
+
+ /**
+ * Loads Gadget RPC library script.
+ */
+ private static void loadGadgetRpcScript() {
+ ScriptElement script = Document.get().createScriptElement();
+ script.setType("text/javascript");
+ script.setSrc(GADGET_RPC_PATH);
+ Document.get().getBody().appendChild(script);
+ }
+
+ /**
+ * Appends tokens to the iframe URI fragment.
+ *
+ * @param fragment Original parameter fragment of the gadget URI.
+ * @return Updated parameter fragment with new RPC and security tokens.
+ */
+ private String updateGadgetUriFragment(String fragment) {
+ fragment = "rpctoken=" + rpcToken +
+ (fragment.isEmpty() || (fragment.charAt(0) == '&') ? "" : "&") + fragment;
+ if ((securityToken != null) && !securityToken.isEmpty()) {
+ fragment += "&st=" + URL.encodeComponent(securityToken);
+ }
+ return fragment;
+ }
+
+ @VisibleForTesting
+ static String cleanUrl(String url) {
+ String baseUrl = url;
+ String fragment = "";
+ int fragmentIndex = url.indexOf("#");
+ if (fragmentIndex >= 0) {
+ fragment = (url.substring(fragmentIndex + 1)).replaceAll(FRAGMENT_CLEANING_PATTERN, "");
+ if (fragment.startsWith("&")) {
+ fragment = fragment.substring(1);
+ }
+ baseUrl = url.substring(0, fragmentIndex);
+ }
+ baseUrl = baseUrl.replaceAll(URL_CLEANING_PATTERN, "");
+ return baseUrl + (fragment.isEmpty() ? "" : "#" + fragment);
+ }
+
+ /**
+ * Constructs IFrame URI of this gadget.
+ *
+ * @param instanceId instance to encode in the URI.
+ * @param url URL template.
+ * @return IFrame URI of this gadget.
+ */
+ String buildIframeUrl(int instanceId, String url) {
+ final StringBuilder builder = new StringBuilder();
+ String fragment = "";
+ int fragmentIndex = url.indexOf("#");
+ if (fragmentIndex >= 0) {
+ fragment = url.substring(fragmentIndex + 1);
+ url = url.substring(0, fragmentIndex);
+ }
+ builder.append(url);
+
+ boolean enableGadgetCache = false;
+
+ builder.append("&nocache=" + (enableGadgetCache ? "0" : "1"));
+ builder.append("&mid=" + instanceId);
+ builder.append("&lang=" + locale.getLanguage());
+ builder.append("&country=" + locale.getCountry());
+ String href = getUrlPrefix();
+ // TODO(user): Parent is normally the last non-hash parameter. It is moved
+ // as a temp fix for kitchensinky. Move it back when the kitchensinky is
+ // working wihout this workaround.
+ builder.append("&parent=" + URL.encode(href));
+ builder.append("&wave=" + WAVE_API_VERSION);
+ builder.append("&waveId=" + URL.encodeQueryString(
+ ModernIdSerialiser.INSTANCE.serialiseWaveId(waveletName.waveId)));
+ fragment = updateGadgetUriFragment(fragment);
+ if (!fragment.isEmpty()) {
+ builder.append("#" + fragment);
+ log("Appended fragment: ", fragment);
+ }
+ if (userPrefs != null) {
+ userPrefs.each(new StateMap.Each() {
+ @Override
+ public void apply(String key, String value) {
+ if (value != null) {
+ builder.append("&up_");
+ builder.append(URL.encodeQueryString(key));
+ builder.append('=');
+ builder.append(URL.encodeQueryString(value));
+ }
+ }
+ });
+ }
+ return builder.toString();
+ }
+
+ /**
+ * Verifies that the gadget has non-empty attribute.
+ *
+ * @param name attribute name.
+ * @return true if non-empty height attribute exists, flase otherwise.
+ */
+ private boolean hasAttribute(String name) {
+ if (element.hasAttribute(name)) {
+ String value = element.getAttribute(name);
+ if (!"".equals(value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Updates the gadget attribute in a deferred command if the panel is
+ * editable.
+ *
+ * @param attributeName attribute name.
+ * @param value new attribute value.
+ */
+ private void scheduleGadgetAttributeUpdate(final String attributeName, final String value) {
+ ScheduleCommand.addCommand(new Scheduler.Task() {
+ @Override
+ public void execute() {
+ if (canModifyDocument() && documentModified) {
+ String oldValue = element.getAttribute(attributeName);
+ if (!value.equals(oldValue)) {
+ element.getMutableDoc().setElementAttribute(element, attributeName, value);
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * Updates gadget IFrame attributes.
+ *
+ * @param url URL template for the iframe.
+ * @param width preferred width of the iframe.
+ * @param height preferred height of the iframe.
+ */
+ private void updateGadgetIframe(String url, long width, long height) {
+ if (!isActive()) {
+ return;
+ }
+ iframeUrl = url;
+ if (hasAttribute(LAST_KNOWN_WIDTH_ATTRIBUTE)) {
+ setSavedIframeWidth();
+ } else if (width != 0) {
+ ui.setIframeWidth(width + "px");
+ ui.makeInline();
+ scheduleGadgetAttributeUpdate(LAST_KNOWN_WIDTH_ATTRIBUTE, Long.toString(width));
+ } else {
+ ui.setIframeWidth("100%");
+ }
+ if (!hasAttribute(LAST_KNOWN_HEIGHT_ATTRIBUTE) && (height != 0)) {
+ ui.setIframeHeight(height);
+ scheduleGadgetAttributeUpdate(LAST_KNOWN_HEIGHT_ATTRIBUTE, Long.toString(height));
+ }
+ String ifr = buildIframeUrl(getInstanceId(), url);
+ log("ifr: ", ifr);
+ ui.setIframeSource(ifr);
+ }
+
+ private int parseSizeString(String heightString) throws NumberFormatException {
+ if (heightString.endsWith("px")) {
+ return Integer.parseInt(heightString.substring(0, heightString.length() - 2));
+ } else {
+ return Integer.parseInt(heightString);
+ }
+ }
+
+ /**
+ * Updates gadget iframe height if the gadget has the height attribute.
+ */
+ private void setSavedIframeHeight() {
+ if (hasAttribute(LAST_KNOWN_HEIGHT_ATTRIBUTE)) {
+ String savedHeight = element.getAttribute(LAST_KNOWN_HEIGHT_ATTRIBUTE);
+ try {
+ int height = parseSizeString(savedHeight);
+ ui.setIframeHeight(height);
+ } catch (NumberFormatException e) {
+ log("Invalid saved height attribute (ignored): ", savedHeight);
+ }
+ }
+ }
+
+ /**
+ * Updates gadget iframe height if the gadget has the height attribute.
+ */
+ private void setSavedIframeWidth() {
+ if (hasAttribute(LAST_KNOWN_WIDTH_ATTRIBUTE)) {
+ String savedWidth = element.getAttribute(LAST_KNOWN_WIDTH_ATTRIBUTE);
+ try {
+ int width = parseSizeString(savedWidth);
+ ui.setIframeWidth(width + "px");
+ ui.makeInline();
+ } catch (NumberFormatException e) {
+ log("Invalid saved width attribute (ignored): ", savedWidth);
+ }
+ }
+ }
+
+ /**
+ * Creates a display widget for the gadget.
+ *
+ * @param element ContentElement from the wave.
+ * @param blip gadget blip.
+ * @return display widget for the gadget.
+ */
+ public static GadgetWidget createGadgetWidget(ContentElement element, WaveletName waveletName,
+ ConversationBlip blip, ObservableSupplementedWave supplement,
+ ProfileManager profileManager, Locale locale, String loginName) {
+
+ final GadgetWidget widget = GWT.create(GadgetWidget.class);
+
+ widget.element = element;
+ widget.editingIndicator =
+ new BlipEditingIndicator(element.getRenderedContentView().getDocumentElement());
+ widget.ui = new GadgetWidgetUi(widget.getGadgetName(), widget.editingIndicator);
+ widget.state = StateMap.create();
+ initializeGadgets();
+ widget.blip = blip;
+ widget.initializeGadgetContainer();
+ widget.ui.setGadgetUiListener(widget);
+ widget.waveletName = waveletName;
+ widget.supplement = supplement;
+ widget.profileManager = profileManager;
+ widget.locale = locale;
+ widget.loginName = loginName;
+ supplement.addListener(widget);
+ return widget;
+ }
+
+ /**
+ * @return the actual GWT widget
+ */
+ public GadgetWidgetUi getWidget() {
+ return ui;
+ }
+
+ @Override
+ public void setTitle(String title) {
+ if (!isActive()) {
+ return;
+ }
+ final String newTitle = (title == null) ? "" : title;
+ log("Set title '", XmlStringBuilder.createText(newTitle), "'");
+ if (titleElement == null) {
+ onModifyingDocument();
+ GadgetElementChild.create(element.getMutableDoc().insertXml(
+ Point.end((ContentNode) element), GadgetXmlUtil.constructTitleXml(newTitle)));
+ blipSubmitter.submit();
+ } else {
+ if (!title.equals(titleElement.getValue())) {
+ onModifyingDocument();
+ titleElement.setValue(newTitle);
+ blipSubmitter.submit();
+ }
+ }
+ }
+
+ @Override
+ public void logMessage(String message) {
+ GadgetLog.developerLog(message);
+ }
+
+ private String sanitizeSnippet(String snippet) {
+ return snippet.replaceAll(SNIPPET_SANITIZER_PATTERN, " ");
+ }
+
+ @Override
+ public void setSnippet(String snippet) {
+ if (!canModifyDocument()) {
+ return;
+ }
+ String safeSnippet = sanitizeSnippet(snippet);
+ log("Snippet changed: " + safeSnippet);
+ scheduleGadgetAttributeUpdate(SNIPPET_ATTRIBUTE, safeSnippet);
+ }
+
+ /**
+ * Gets the attribute value from the mutable document associated with the
+ * gadget.
+ *
+ * @param attributeName name of the attribute
+ * @return attribute value or empty string if attribute is missing
+ */
+ private String getAttribute(String attributeName) {
+ return element.hasAttribute(attributeName) ? element.getAttribute(attributeName) : "";
+ }
+
+ @VisibleForTesting
+ static String getIframeHost(String url) {
+ // Ideally this should be done with regex matcher which is not supported in GWT.
+ String iframeHostMatcher = url.replaceFirst(IFRAME_HOST_PATTERN, "");
+ if (iframeHostMatcher.length() != url.length()) {
+ return url.substring(0, url.length() - iframeHostMatcher.length());
+ } else {
+ return "";
+ }
+ }
+
+ /**
+ * Controller registration task.
+ *
+ * @param url URL template of the gadget iframe.
+ * @param width preferred iframe width.
+ * @param height preferred iframe height.
+ */
+ private void controllerRegistration(String url, long width, long height) {
+ Controller controller = Controller.getInstance();
+ String iframeHost = getIframeHost(url);
+ String relayUrl = iframeHost + GADGET_RELAY_PATH;
+ controller.setRelayUrl(getGadgetName(), relayUrl);
+ controller.registerGadgetListener(getGadgetName(), GadgetWidget.this);
+ controller.setRpcToken(getGadgetName(), rpcToken);
+ updateGadgetIframe(url, width, height);
+ removeFrameBorder();
+
+ delayedPodiumInitialization();
+ log("Gadget ", getGadgetName(), " is registered, relayUrl=", relayUrl,
+ ", RPC token=", rpcToken);
+ }
+
+ private void registerWithController(String url, long width, long height) {
+ if (gadgetLibraryLoaded()) {
+ controllerRegistration(url, width, height);
+ } else {
+ scheduleControllerRegistration(url, width, height);
+ }
+ }
+
+ /**
+ * Registers the Gadget object as RPC event listener with the Gadget RPC
+ * Controller after waiting for the Gadget RPC library to load.
+ */
+ private void scheduleControllerRegistration(
+ final String url, final long width, final long height) {
+ new ScheduleTimer() {
+ private double loadWarningTime =
+ Duration.currentTimeMillis() + GADGET_RPC_LOAD_WARNING_TIMEOUT_MS;
+ @Override
+ public void run() {
+ if (!isActive()) {
+ cancel();
+ log("Not active.");
+ return;
+ } else if (gadgetLibraryLoaded()) {
+ cancel();
+ controllerRegistration(url, width, height);
+ } else {
+ if (Duration.currentTimeMillis() > loadWarningTime) {
+ log("Gadget RPC script failed to load on time.");
+ loadWarningTime += GADGET_RPC_LOAD_WARNING_TIMEOUT_MS;
+ }
+ }
+ }
+ }.scheduleRepeating(GADGET_RPC_LOAD_TIMER_MS);
+ }
+
+ private void initializeGadgetContainer() {
+ userPrefs = GadgetUserPrefs.create();
+ blipSubmitter = new Submitter(BLIP_SUBMIT_TIMEOUT_MS, new Submitter.SubmitTask() {
+ @Override public void doSubmit() {
+ // TODO: send a playback frame signal.
+ log("Blip submitted.");
+ }
+ });
+ gadgetStateSubmitter = new Submitter(STATE_SEND_TIMEOUT_MS, new Submitter.SubmitTask() {
+ @Override public void doSubmit() {
+ sendGadgetState();
+ log("Gadget state sent.");
+ }
+ });
+ privateGadgetStateSubmitter = new Submitter(STATE_SEND_TIMEOUT_MS, new Submitter.SubmitTask() {
+ @Override public void doSubmit() {
+ sendPrivateGadgetState();
+ log("Private gadget state sent.");
+ }
+ });
+ }
+
+ private void initializePodium() {
+ if (!isActive()) {
+ // If the widget does not exist, exit.
+ return;
+ }
+ for (ParticipantId participant : blip.getConversation().getParticipantIds()) {
+ String myId = participants.getMyId();
+ if ((myId != null) && !participant.getAddress().equals(myId)) {
+ String opponentId = participant.getAddress();
+ try {
+ sendPodiumOnInitializedRpc(getGadgetName(), myId, opponentId);
+ log("Sent Podium initialization: " + myId + " " + opponentId);
+ String podiumState = state.get(PODIUM_STATE_NAME);
+ if (podiumState != null) {
+ sendPodiumOnStateChangedRpc(getGadgetName(), podiumState);
+ log("Sent Podium state update.");
+ }
+ } catch (Exception e) {
+ // This is a catch to avoid sending RPCs to deleted gadgets.
+ log("Podium initialization failure");
+ }
+ return;
+ }
+ }
+ log("Podium is not initialized: less than two participants.");
+ }
+
+ private void delayedPodiumInitialization() {
+ // TODO(user): This is a hack to delay Podium initialization.
+ // Define an initialization protocol for Podium to avoid this.
+ new ScheduleTimer() {
+ @Override
+ public void run() {
+ initializePodium();
+ }
+ }.schedule(3000);
+ }
+
+ private void removeFrameBorder() {
+ new ScheduleTimer() {
+ @Override
+ public void run() {
+ ui.removeThrobber();
+ }
+ }.schedule(FRAME_BORDER_REMOVE_DELAY_MS);
+ }
+
+ private void constructGadgetFromMetadata(GadgetMetadata metadata, String view, String token) {
+ log("Received metadata: ", metadata.getIframeUrl(view));
+ String url = cleanUrl(metadata.getIframeUrl(view));
+ if (url.equals(iframeUrl) && ((token == null) || token.isEmpty())) {
+ log("Received metadata matches the cached information.");
+ constructGadgetSizeFromMetadata(metadata, view, url);
+ return;
+ }
+ // NOTE(user): Technically we should not save iframe URLs for gadgets with security tokens,
+ // but some gadgets, such as YNM, that depend on opensocial libraries get security tokens they
+ // never use. Also to enable gadgets in Ripple and other light Wave clients it's desirable to
+ // to always have the iframe URL at least for rudimentary rendering.
+ if (canModifyDocument() && documentModified) {
+ scheduleGadgetAttributeUpdate(IFRAME_URL_ATTRIBUTE, url);
+ } else {
+ toUpdateIframeUrl = true;
+ }
+ securityToken = token;
+ if ("".equals(ui.getTitleLabelText()) && metadata.hasTitle()) {
+ ui.setTitleLabelText(metadata.getTitle());
+ }
+ constructGadgetSizeFromMetadata(metadata, view, url);
+ }
+
+ private void constructGadgetSizeFromMetadata(GadgetMetadata metadata, String view, String url) {
+ int height =
+ (int) (metadata.hasHeight() ? metadata.getHeight() : metadata.getPreferredHeight(view));
+ int width =
+ (int) (metadata.hasWidth() ? metadata.getWidth() : metadata.getPreferredWidth(view));
+ registerWithController(url, width, height);
+ if (height > 0) {
+ setIframeHeight(String.valueOf(height));
+ } else {
+ setIframeHeight(String.valueOf(DEFAULT_HEIGHT_PX));
+ }
+ if (width > 0){
+ setIframeWidth(String.valueOf(width));
+ } else {
+ setIframeWidth(String.valueOf(DEFAULT_WIDTH_PX));
+ }
+ }
+
+ /**
+ * This function generates a gadget instance ID for generating gadget metadata
+ * and security tokens. The ID should be 1. hard to guess; 2. same for the
+ * same gadget element for the same participant in the same wave every time
+ * the wave is rendered in the same client; 3. preferably, but not necessarily
+ * different for different gadget elements and different participants.
+ *
+ * Condition 2 is needed to achieve consistent behavior in gadgets that, for
+ * example, request special permissions using OAuth/OpenSocial.
+ *
+ * This function satisfies those conditions, except the ID is going to be
+ * always the same for the same type of the gadget in the same wavelet for the
+ * same participant. This poses minimal risk (in terms of matching domains and
+ * security tokens) because the gadgets with matching IDs would be rendered
+ * for the same person in the same wave.
+ *
+ * NOTE(user): Instance ID should be non-negative number to work around a
+ * bug in GGS and/or Linux libraries that produces non-renderable iframe URLs
+ * for negative instance IDs. The domain name starts with dash "-". Browsers
+ * in Windows and Mac OS tolerate this, but browsers in Linux fail to render
+ * such URLs.
+ *
+ * @return instance ID for the gadget.
+ */
+ private int getInstanceId() {
+ String name = ModernIdSerialiser.INSTANCE.serialiseWaveletName(waveletName);
+ String instanceDescriptor = name + loginName + source;
+ int hash = instanceDescriptor.hashCode();
+ return (hash < 0) ? ~hash : hash;
+ }
+
+ private void showBrokenGadget(String message) {
+ ui.showBrokenGadget(message);
+ log("Broken gadget: ", message);
+ }
+
+ private boolean validIframeUrl(String url) {
+ return (url != null) && !url.isEmpty() && !getIframeHost(url).isEmpty();
+ }
+
+ private void scheduleGadgetIdUpdate() {
+ ScheduleCommand.addCommand(new Scheduler.Task() {
+ @Override
+ public void execute() {
+ generateAndSetGadgetId();
+ }
+ });
+ }
+
+ private void allowModificationOfNewlyCreatedGadget() {
+ // Missing height attribute indicates freshly added gadget. Assume that the
+ // document is modified for the purpose of updating attributes.
+ if (!hasAttribute(LAST_KNOWN_HEIGHT_ATTRIBUTE) && editingIndicator.isEditing()) {
+ scheduleGadgetIdUpdate();
+ onModifyingDocument();
+ }
+ }
+
+ /**
+ * Creates a widget to render the gadget.
+ */
+ public void createWidget() {
+ if (isActive()) {
+ log("Repeated attempt to create gadget widget.");
+ return;
+ }
+
+ active = true;
+ log("Creating Gadget Widget ", getGadgetName());
+
+ ui.enableMenu();
+ allowModificationOfNewlyCreatedGadget();
+ setSavedIframeHeight();
+ setSavedIframeWidth();
+
+ source = getAttribute(URL_ATTRIBUTE);
+ String title = getAttribute(TITLE_ATTRIBUTE);
+ ui.setTitleLabelText((title == null) ? "" : URL.decodeComponent(title));
+ updatePrefsFromAttribute(getAttribute(PREFS_ATTRIBUTE));
+ refreshParticipantInformation();
+
+ // HACK(anorth): This event routing should happen outside the widget.
+ ObservableConversation conv = (ObservableConversation) blip.getConversation();
+ conv.addListener(new WaveletListenerAdapter(blip, this));
+ log("Requesting Gadget metadata: ", source);
+ String cachedIframeUrl = getAttribute(IFRAME_URL_ATTRIBUTE);
+ if (validIframeUrl(cachedIframeUrl)) {
+ registerWithController(cleanUrl(cachedIframeUrl), 0, 0);
+ }
+ GadgetDataStoreImpl.getInstance().getGadgetData(source, waveletName, getInstanceId(),
+ new GadgetDataStore.DataCallback() {
+ @Override
+ public void onError(String message, Throwable t) {
+ if ((t != null) && (t.getMessage() != null)) {
+ message += " " + t.getMessage();
+ }
+ showBrokenGadget(message);
+ }
+
+ @Override
+ public void onDataReady(GadgetMetadata metadata, String securityToken) {
+ if (isActive()) {
+ ReadableStringSet views = metadata.getViewSet();
+ String view = null;
+ if (views.contains(GADGET_PRIMARY_VIEW)) {
+ view = GADGET_PRIMARY_VIEW;
+ } else if (views.contains(GADGET_DEFAULT_VIEW)) {
+ view = GADGET_DEFAULT_VIEW;
+ } else if (!views.isEmpty()) {
+ view = views.someElement();
+ } else {
+ showBrokenGadget("Gadget has no view to render.");
+ return;
+ }
+ String url = metadata.getIframeUrl(view);
+ if (validIframeUrl(url)) {
+ constructGadgetFromMetadata(metadata, view, securityToken);
+ } else {
+ showBrokenGadget("Invalid IFrame URL " + url);
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * Utility function to send setPref RPC to the gadget.
+ *
+ * @param target the gadget frame ID.
+ * @param name name of the preference to set.
+ * @param value value of the preference.
+ */
+ public native void sendGadgetPrefRpc(String target, String name, String value) /*-{
+ try {
+ $wnd.gadgets.rpc.call(target, 'set_pref', null, 0, name, value);
+ } catch (e) {
+ // HACK(user): Ignoring any failure for now.
+ @org.waveprotocol.wave.client.gadget.GadgetLog::log(Ljava/lang/String;)
+ ('set_pref RPC failed');
+ }
+ }-*/;
+
+ /**
+ * Utility function to send initialization RPC to Podium gadget.
+ *
+ * @param target the gadget frame ID.
+ * @param id Podium ID of this client.
+ * @param otherId Podium ID of the opponent client.
+ */
+ public native void sendPodiumOnInitializedRpc(String target, String id, String otherId) /*-{
+ try {
+ $wnd.gadgets.rpc.call(target, 'onInitialized', null, id, otherId);
+ } catch (e) {
+ // HACK(user): Ignoring any failure for now.
+ @org.waveprotocol.wave.client.gadget.GadgetLog::log(Ljava/lang/String;)
+ ('onInitialized RPC failed');
+ }
+ }-*/;
+
+ /**
+ * Utility function to send state change RPC to Podium gadget.
+ *
+ * @param target the gadget frame ID.
+ * @param state Podium gadget state.
+ */
+ public native void sendPodiumOnStateChangedRpc(String target, String state) /*-{
+ try {
+ $wnd.gadgets.rpc.call(target, 'onStateChanged', null, state);
+ } catch (e) {
+ // HACK(user): Ignoring any failure for now.
+ @org.waveprotocol.wave.client.gadget.GadgetLog::log(Ljava/lang/String;)
+ ('onStateChanged RPC failed');
+ }
+ }-*/;
+
+ /**
+ * Utility function to send title to the embedding container.
+ *
+ * @param title the title value for the container.
+ */
+ public native void sendEmbeddedRpc(String title) /*-{
+ try {
+ $wnd.gadgets.rpc.call(null, 'set_title', null, title);
+ } catch (e) {
+ // HACK(user): Ignoring any failure for now.
+ @org.waveprotocol.wave.client.gadget.GadgetLog::log(Ljava/lang/String;)
+ ('set_title RPC failed');
+ }
+ }-*/;
+
+ /**
+ * Utility function to send participant information to Wave gadget.
+ *
+ * @param target the gadget frame ID.
+ * @param participants JSON string of Wavelet participants.
+ */
+ public native void sendParticipantsRpc(String target, JavaScriptObject participants) /*-{
+ try {
+ $wnd.gadgets.rpc.call(target, 'wave_participants', null, participants);
+ } catch (e) {
+ // HACK(user): Ignoring any failure for now.
+ @org.waveprotocol.wave.client.gadget.GadgetLog::log(Ljava/lang/String;)
+ ('wave_participants RPC failed');
+ }
+ }-*/;
+
+ /**
+ * Utility function to send Gadget state to Wave gadget.
+ *
+ * @param target the gadget frame ID.
+ * @param state JSON string of Gadget state.
+ */
+ public native void sendGadgetStateRpc(String target, JavaScriptObject state) /*-{
+ try {
+ $wnd.gadgets.rpc.call(target, 'wave_gadget_state', null, state);
+ } catch (e) {
+ // HACK(user): Ignoring any failure for now.
+ @org.waveprotocol.wave.client.gadget.GadgetLog::log(Ljava/lang/String;)
+ ('wave_gadget_state RPC failed');
+ }
+ }-*/;
+
+ /**
+ * Utility function to send private Gadget state to Wave gadget.
+ *
+ * @param target the gadget frame ID.
+ * @param state JSON string of Gadget state.
+ */
+ public native void sendPrivateGadgetStateRpc(String target, JavaScriptObject state) /*-{
+ try {
+ $wnd.gadgets.rpc.call(target, 'wave_private_gadget_state', null, state);
+ } catch (e) {
+ // HACK(user): Ignoring any failure for now.
+ @org.waveprotocol.wave.client.gadget.GadgetLog::log(Ljava/lang/String;)
+ ('wave_private_gadget_state RPC failed');
+ }
+ }-*/;
+
+ /**
+ * Utility function to send Gadget mode to Wave gadget.
+ *
+ * @param target the gadget frame ID.
+ * @param mode JSON string of Gadget state.
+ */
+ public native void sendModeRpc(String target, JavaScriptObject mode) /*-{
+ try {
+ $wnd.gadgets.rpc.call(target, 'wave_gadget_mode', null, mode);
+ } catch (e) {
+ // HACK(user): Ignoring any failure for now.
+ @org.waveprotocol.wave.client.gadget.GadgetLog::log(Ljava/lang/String;)
+ ('wave_gadget_mode RPC failed');
+ }
+ }-*/;
+
+ /**
+ * Sends the gadget state to the wave gadget. Injects the playback state value
+ * into the state.
+ */
+ public void sendGadgetState() {
+ if (waveEnabled) {
+ log("Sending gadget state: ", state.toJson());
+ sendGadgetStateRpc(getGadgetName(), state.asJavaScriptObject());
+ }
+ }
+
+ /**
+ * Sends the private gadget state to the wave gadget.
+ */
+ public void sendPrivateGadgetState() {
+ if (waveEnabled) {
+ String gadgetId = getGadgetId();
+ StateMap privateState = StateMap.createFromStringMap(gadgetId != null ?
+ supplement.getGadgetState(gadgetId) : CollectionUtils.<String> emptyMap());
+ log("Sending private gadget state: ", privateState.toJson());
+ sendPrivateGadgetStateRpc(getGadgetName(), privateState.asJavaScriptObject());
+ }
+ }
+
+ /**
+ * Sends the gadget mode to the wave gadget.
+ */
+ public void sendMode() {
+ if (waveEnabled) {
+ StateMap mode = StateMap.create();
+ mode.put(PLAYBACK_MODE_KEY, "0");
+ mode.put(EDIT_MODE_KEY, editingIndicator.isEditing() ? "1" : "0");
+ log("Sending gadget mode: ", mode.toJson());
+ sendModeRpc(getGadgetName(), mode.asJavaScriptObject());
+ }
+ }
+
+ /**
+ * Returns the ID of the user who added the gadget as defined in the author
+ * attribute. If the attribute is not defined returns the blip author instead
+ * (as the best guess for the author for backward compatibility).
+ *
+ * @return author ID of the user who added the gadget to the wave
+ */
+ private String getAuthor() {
+ String author = element.getAttribute(AUTHOR_ATTRIBUTE);
+ return (author != null) ? author : blip.getAuthorId().getAddress();
+ }
+
+ /**
+ * Builds a map of participants from two lists of participant ids.
+ */
+ private StringMap<ParticipantId> getParticipantsForIds(
+ Collection<ParticipantId> list1, Collection<ParticipantId> list2) {
+ StringMap<ParticipantId> mergedMap = CollectionUtils.createStringMap();
+ for (ParticipantId p : list1) {
+ mergedMap.put(p.getAddress(), p);
+ }
+ for (ParticipantId p : list2) {
+ mergedMap.put(p.getAddress(), p);
+ }
+ return mergedMap;
+ }
+
+ /**
+ * Refreshes the participant information.
+ */
+ private void refreshParticipantInformation() {
+ StringMap<ParticipantId> waveletParticipants = getParticipantsForIds(
+ blip.getConversation().getParticipantIds(), blip.getContributorIds());
+ ParticipantId viewerId = new ParticipantId(loginName);
+ waveletParticipants.put(viewerId.getAddress(), viewerId);
+ List<ParticipantId> participantList = CollectionUtils.newJavaList(waveletParticipants);
+ participants = ParticipantInformation.create(
+ viewerId.getAddress(), getAuthor(), participantList, getUrlPrefix(), profileManager);
+ final StringBuilder builder = new StringBuilder();
+ builder.append("Participants: ");
+ builder.append("I am " + participants.getMyId());
+ for (ParticipantId participant : participantList) {
+ builder.append("; " + participant);
+ }
+
+ log(builder.toString());
+ }
+
+ /**
+ * Refreshes and sends participant information to wave-enabled gadget.
+ */
+ private void sendCurrentParticipantInformation() {
+ if (waveEnabled) {
+ refreshParticipantInformation();
+ sendParticipantsRpc(getGadgetName(), participants);
+ log("Sent participants: ", participants);
+ }
+ }
+
+ /**
+ * Utility function to perform setPref RPC to the gadget.
+ *
+ * @param name name of the preference to set.
+ * @param value value of the preference.
+ */
+ public void setGadgetPref(final String name, final String value) {
+ ScheduleCommand.addCommand(new Task() {
+ @Override
+ public void execute() {
+ if (isActive()) {
+ sendGadgetPrefRpc(getGadgetName(), name, value);
+ }
+ }
+ });
+ }
+
+ /**
+ * Marks the Widget as inactive after the gadget node is removed from the
+ * parent.
+ */
+ public void setInactive() {
+ log("Gadget node removed.");
+ supplement.removeListener(this);
+ active = false;
+ }
+
+ @Override
+ public void setIframeHeight(String height) {
+ if (!isActive()) {
+ return;
+ }
+ log("Set IFrame height ", height);
+ try {
+ int heightValue = parseSizeString(height);
+ ui.setIframeHeight(heightValue);
+ scheduleGadgetAttributeUpdate(LAST_KNOWN_HEIGHT_ATTRIBUTE, Long.toString(heightValue));
+ } catch (NumberFormatException e) {
+ log("Invalid height (ignored): ", height);
+ }
+ }
+
+ public void setIframeWidth(String width) {
+ if (!isActive()) {
+ return;
+ }
+ log("Set IFrame width ", width);
+ try {
+ int widthValue = parseSizeString(width);
+ if (widthValue <= 0) {
+ ui.setIframeWidth("100%");
+ } else {
+ ui.setIframeWidth(widthValue + "px");
+ }
+ ui.makeInline();
+ scheduleGadgetAttributeUpdate(LAST_KNOWN_WIDTH_ATTRIBUTE, Long.toString(widthValue));
+ } catch (NumberFormatException e) {
+ log("Invalid width (ignored): ", width);
+ }
+ }
+
+ @Override
+ public void requestNavigateTo(String url) {
+ log("Requested navigate to: ", url);
+ // NOTE(user): Currently only allow the gadgets to change the fragment part of the URL.
+ String newFragment = url.replaceFirst(BEFORE_FRAGMENT_PATTERN, "");
+ if (newFragment.matches(FRAGMENT_VALIDATION_PATTERN)) {
+ Location.replace(Location.getHref().replaceFirst(FRAGMENT_PATTERN, "") + "#" + newFragment);
+ } else {
+ log("Navigate request denied.");
+ }
+ }
+
+ @Override
+ public void updatePodiumState(String podiumState) {
+ if (isActive()) {
+ modifyState(PODIUM_STATE_NAME, podiumState);
+ blipSubmitter.submit();
+ }
+ }
+
+ private void setPref(String key, String value) {
+ if (!canModifyDocument() || (key == null) || (value == null)) {
+ return;
+ }
+ userPrefs.put(key, value);
+ if (prefElements.containsKey(key)) {
+ if (!prefElements.get(key).getValue().equals(value)) {
+ log("Updating preference '", key, "'='", value, "'");
+ onModifyingDocument();
+ prefElements.get(key).setValue(value);
+ blipSubmitter.submit();
+ }
+ } else {
+ log("New preference '", key, "'='", value, "'");
+ onModifyingDocument();
+ element.getMutableDoc().insertXml(
+ Point.end((ContentNode)element), GadgetXmlUtil.constructPrefXml(key, value));
+ blipSubmitter.submit();
+ }
+
+ }
+
+ @Override
+ public void setPrefs(String ... keyValue) {
+ // Ignore callbacks from the gadget in playback mode.
+ if (!canModifyDocument()) {
+ return;
+ }
+ // Ignore the last key if its value is missing.
+ for (int i = 0; i < keyValue.length - 1; i+=2) {
+ setPref(keyValue[i], keyValue[i + 1]);
+ }
+ }
+
+ /**
+ * Sets up a polling loop to check the edit mode state and send it to the
+ * gadget.
+ *
+ * TODO(user): Add edit mode change events to the client and find a way to
+ * relay them to the gadget containers.
+ */
+ private void setupModePolling() {
+ new ScheduleTimer() {
+ private boolean wasEditing = editingIndicator.isEditing();
+
+ @Override
+ public void run() {
+ if (!isActive()) {
+ cancel();
+ return;
+ } else {
+ boolean newEditing = editingIndicator.isEditing();
+ if (wasEditing != newEditing) {
+ sendMode();
+ wasEditing = newEditing;
+ }
+ }
+ }
+ }.scheduleRepeating(EDITING_POLLING_TIMER_MS);
+ }
+
+ /**
+ * HACK: This is a workaround for Firefox bug
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=498904 Due to this bug the
+ * gadget RPCs may be sent to a dead iframe. Changing the iframe ID fixes
+ * container-to-gadget communication. Non-wave gadgets may have other issues
+ * associated with this bug. But most wave-enabled gadgets should work when
+ * the iframe ID is updated in the waveEnable call.
+ */
+ private void substituteIframeId() {
+ clientInstanceId = nextClientInstanceId++;
+ ui.setIframeId(getGadgetName());
+ controllerRegistration(iframeUrl, 0, 0);
+ }
+
+ @Override
+ public void waveEnable(String waveApiVersion) {
+ if (!isActive()) {
+ return;
+ }
+
+ // HACK: See substituteIframeId() description.
+ // TODO(user): Remove when the Firefox bug is fixed.
+ if (UserAgent.isFirefox()) {
+ substituteIframeId();
+ }
+
+ waveEnabled = true;
+ this.waveApiVersion = waveApiVersion;
+ log("Wave-enabled gadget registered with API version ", waveApiVersion);
+ sendWaveGadgetInitialization();
+ setupModePolling();
+ }
+
+ @Override
+ public void waveGadgetStateUpdate(final JavaScriptObject delta) {
+ // Return if in playback mode. isEditable indicates playback.
+ if (!canModifyDocument()) {
+ return;
+ }
+
+ final StateMap deltaState = StateMap.create();
+ deltaState.fromJsonObject(delta);
+ // Defer state modifications to avoid RPC failure in Safari 3. The
+ // intermittent failure is caused by RPC called from received RPC
+ // callback.
+ // TODO(user): Remove this workaround once this is fixed in GGS.
+ ScheduleCommand.addCommand(new Task() {
+ @Override
+ public void execute() {
+ deltaState.each(new Each() {
+ @Override
+ public void apply(final String key, final String value) {
+ if (value != null) {
+ modifyState(key, value);
+ } else {
+ deleteState(key);
+ }
+ }
+ });
+ log("Applied delta ", delta.toString(), " new state ", state.toJson());
+ gadgetStateSubmitter.triggerScheduledSubmit();
+ blipSubmitter.submitImmediately();
+ }
+ });
+ }
+
+ /**
+ * Generates a unique gadget ID.
+ * TODO(user): Replace with proper MD5-based UUID.
+ *
+ * @return a unique gadget ID.
+ */
+ private String generateGadgetId() {
+ String name = ModernIdSerialiser.INSTANCE.serialiseWaveletName(waveletName);
+ String instanceDescriptor = name + getAuthor() + source;
+ String prefix = Integer.toHexString(instanceDescriptor.hashCode());
+ String time = Integer.toHexString(new Date().hashCode());
+ String version = Long.toHexString(blip.getLastModifiedVersion());
+ return prefix + time + version;
+ }
+
+ private String generateAndSetGadgetId() {
+ if (!canModifyDocument()) {
+ return null;
+ }
+ String id = generateGadgetId();
+ element.getMutableDoc().setElementAttribute(element, ID_ATTRIBUTE, id);
+ return id;
+ }
+
+ private String getGadgetId() {
+ return element.getAttribute(ID_ATTRIBUTE);
+ }
+
+ private String getOrGenerateGadgetId() {
+ String id = getGadgetId();
+ if ((id == null) || id.isEmpty()) {
+ id = generateAndSetGadgetId();
+ }
+ return id;
+ }
+
+ @Override
+ public void wavePrivateGadgetStateUpdate(JavaScriptObject delta) {
+ // Return if in playback mode. isEditable indicates playback.
+ if (!canModifyDocument()) {
+ return;
+ }
+
+ StateMap deltaState = StateMap.create();
+ deltaState.fromJsonObject(delta);
+ final String gadgetId = getOrGenerateGadgetId();
+ if (gadgetId != null) {
+ deltaState.each(new Each() {
+ @Override
+ public void apply(final String key, final String value) {
+ supplement.setGadgetState(gadgetId, key, value);
+ }
+ });
+ log("Applied private delta ", deltaState.toJson());
+ privateGadgetStateSubmitter.triggerScheduledSubmit();
+ } else {
+ log("Unable to get gadget ID to update private state. Delta ", deltaState.toJson());
+ }
+ }
+
+ private void modifyState(String key, String value) {
+ if (!canModifyDocument()) {
+ log("Unable to modify state ", key, " ", value);
+ } else {
+ log("Modifying state ", key, " ", value);
+ if (stateElements.containsKey(key)) {
+ if (!stateElements.get(key).getValue().equals(value)) {
+ onModifyingDocument();
+ stateElements.get(key).setValue(value);
+ }
+ } else {
+ onModifyingDocument();
+ element.getMutableDoc().insertXml(
+ Point.end((ContentNode)element), GadgetXmlUtil.constructStateXml(key, value));
+ }
+ }
+ }
+
+ private void deleteState(String key) {
+ if (!canModifyDocument()) {
+ log("Unable to remove state ", key);
+ } else {
+ log("Removing state ", key);
+ if (stateElements.containsKey(key)) {
+ onModifyingDocument();
+ element.getMutableDoc().deleteNode(stateElements.get(key).getElement());
+ }
+ }
+ }
+
+ private void sendWaveGadgetInitialization() {
+ sendMode();
+ sendCurrentParticipantInformation();
+ gadgetStateSubmitter.submitImmediately();
+ privateGadgetStateSubmitter.submitImmediately();
+ // Send participant information one more time as participant pictures may be
+ // loaded with a delay. There is no callback to get the picture update
+ // event.
+ new ScheduleTimer() {
+ @Override
+ public void run() {
+ if (isActive()) {
+ sendCurrentParticipantInformation();
+ }
+ }
+ }.schedule(REPEAT_PARTICIPANT_INFORMATION_SEND_DELAY_MS);
+ }
+
+ private void updateElementMaps(
+ GadgetElementChild child, StringMap<GadgetElementChild> childMap, StateMap stateMap) {
+ if (child.getKey() == null) {
+ log("Missing key attribute: element ignored.");
+ return;
+ }
+ if (childMap.containsKey(child.getKey())) {
+ logFine("Old value: ", childMap.get(child.getKey()));
+ }
+ childMap.put(child.getKey(), child);
+ stateMap.put(child.getKey(), child.getValue());
+ logFine("Updated element ", child.getKey(), " : ", child.getValue());
+ }
+
+ private void processTitleChild(GadgetElementChild child) {
+ titleElement = child;
+ String newTitleValue = child.getValue();
+ if (newTitleValue == null) {
+ newTitleValue = "";
+ }
+ if (!newTitleValue.equals(ui.getTitleLabelText())) {
+ ui.setTitleLabelText(newTitleValue);
+ }
+ }
+
+ private void removeChildFromMaps(
+ GadgetElementChild child, StringMap<GadgetElementChild> childMap, StateMap stateMap) {
+ String key = child.getKey();
+ if (childMap.containsKey(key)) {
+ stateMap.remove(key);
+ childMap.remove(key);
+ logFine("Removed element ", key);
+ }
+ }
+
+ private void processChild(GadgetElementChild child) {
+ if (child == null) {
+ return;
+ }
+ logFine("Processing: ", child);
+ switch (child.getType()) {
+ case STATE:
+ updateElementMaps(child, stateElements, state);
+ break;
+ case PREF:
+ updateElementMaps(child, prefElements, userPrefs);
+ break;
+ case TITLE:
+ processTitleChild(child);
+ break;
+ case CATEGORIES:
+ logFine("Categories element ignored.");
+ break;
+ default:
+ // Note(user): editor may add/remove selection and cursor nodes.
+ logFine("Unexpected gadget node ", child.getTag());
+ }
+ }
+
+ /**
+ * Finds the first copy of the given child in the sibling sequence starting at
+ * the given node.
+ *
+ * @param child Child to find next copy of.
+ * @param node Node to scan from.
+ * @return Next copy of the child or null if not found.
+ */
+ private static GadgetElementChild findNextChildCopy(GadgetElementChild child, ContentNode node) {
+ if (child == null) {
+ return null;
+ }
+ while (node != null) {
+ GadgetElementChild gadgetChild = GadgetElementChild.create(node);
+ if (child.isDuplicate(gadgetChild)) {
+ return gadgetChild;
+ }
+ node = node.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Task removes redundant nodes that match redundantNodeCheckChild.
+ */
+ private final Scheduler.Task removeRedundantNodesTask = new Scheduler.Task() {
+ @Override
+ public void execute() {
+ if (!canModifyDocument()) {
+ return;
+ }
+ if (redundantNodeCheckChild != null) {
+ GadgetElementChild firstMatchingNode = findNextChildCopy(
+ redundantNodeCheckChild, element.getFirstChild());
+ GadgetElementChild lastSeenNode = firstMatchingNode;
+ while (lastSeenNode != null) {
+ lastSeenNode = findNextChildCopy(
+ redundantNodeCheckChild, firstMatchingNode.getElement().getNextSibling());
+ if (lastSeenNode != null) {
+ log("Removing: ", lastSeenNode);
+ element.getMutableDoc().deleteNode(lastSeenNode.getElement());
+ }
+ }
+ } else {
+ log("Undefined redundant node check child.");
+ }
+ redundantNodeCheckChild = null;
+ }
+ };
+
+ /**
+ * Scans nodes and removes duplicate copies of the given child leaving only
+ * the first copy.
+ * TODO(user): Unit test for node manipulations.
+ *
+ * @param child Child to delete the duplicates of.
+ */
+ private void removeRedundantNodes(final GadgetElementChild child) {
+ if (!documentModified || (child == null)) {
+ return;
+ }
+ if (redundantNodeCheckChild == null) {
+ redundantNodeCheckChild = child;
+ ScheduleCommand.addCommand(removeRedundantNodesTask);
+ } else {
+ log("Overlapping redundant node check requests.");
+ }
+ }
+
+ private final ElementChangeTask childAddedTask = new ElementChangeTask() {
+ @Override
+ void processChange(ContentNode node) {
+ GadgetElementChild child = GadgetElementChild.create(node);
+ log("Added: ", child);
+ if (child != null) {
+ removeRedundantNodes(child);
+ processChild(child);
+ }
+ }
+ };
+
+ /**
+ * Processes an add child event.
+ *
+ * @param node the child added to the gadget node.
+ */
+ public void onChildAdded(ContentNode node) {
+ childAddedTask.run(node);
+ }
+
+ private final ElementChangeTask childRemovedTask = new ElementChangeTask() {
+ @Override
+ void processChange(ContentNode node) {
+ GadgetElementChild child = GadgetElementChild.create(node);
+ log("Removed: ", child);
+ switch (child.getType()) {
+ case STATE:
+ removeChildFromMaps(child, stateElements, state);
+ break;
+ case PREF:
+ removeChildFromMaps(child, prefElements, userPrefs);
+ break;
+ case TITLE:
+ log("Removing title is not supported");
+ break;
+ case CATEGORIES:
+ log("Removing categories is not supported");
+ break;
+ default:
+ // Note(user): editor may add/remove selection and cursor nodes.
+ log("Unexpected gadget node removed ", child.getTag());
+ }
+ }
+ };
+
+ /**
+ * Processes a remove child event.
+ *
+ * @param node
+ */
+ public void onRemovingChild(ContentNode node) {
+ childRemovedTask.run(node);
+ }
+
+ /**
+ * Rescans all gadget children to update the values stored in the gadget
+ * object.
+ */
+ private void rescanGadgetXmlElements() {
+ log("Rescanning elements");
+ ContentNode childNode = element.getFirstChild();
+ while (childNode != null) {
+ processChild(GadgetElementChild.create(childNode));
+ childNode = childNode.getNextSibling();
+ }
+ }
+
+ private final ElementChangeTask descendantsMutatedTask = new ElementChangeTask() {
+ @Override
+ void processChange(ContentNode node) {
+ rescanGadgetXmlElements();
+ }
+ };
+
+ private final Scheduler.Task schedulableMutationTask = new Scheduler.Task() {
+ @Override
+ public void execute() {
+ descendantsMutatedTask.run(null);
+ }
+ };
+
+ /**
+ * Processes a mutation event.
+ */
+ public void onDescendantsMutated() {
+ log("Descendants mutated.");
+ ScheduleCommand.addCommand(schedulableMutationTask);
+ }
+
+ @Override
+ public void onBlipContributorAdded(ParticipantId contributor) {
+ if (isActive()) {
+ log("Contributor added ", contributor);
+ sendCurrentParticipantInformation();
+ } else {
+ log("Contributor added event in deleted node.");
+ }
+ }
+
+ @Override
+ public void onBlipContributorRemoved(ParticipantId contributor) {
+ if (isActive()) {
+ log("Contributor removed ", contributor);
+ sendCurrentParticipantInformation();
+ } else {
+ log("Contributor removed event in deleted node.");
+ }
+ }
+
+ @Override
+ public void onParticipantAdded(ParticipantId participant) {
+ if (isActive()) {
+ log("Participant added ", participant);
+ sendCurrentParticipantInformation();
+ } else {
+ log("Participant added event in deleted node.");
+ }
+ }
+
+ @Override
+ public void onParticipantRemoved(ParticipantId participant) {
+ if (isActive()) {
+ log("Participant removed ", participant);
+ sendCurrentParticipantInformation();
+ } else {
+ log("Participant removed event in deleted node.");
+ }
+ }
+
+ private Object[] expandArgs(Object object, Object ... objects) {
+ Object[] args = new Object[objects.length + 1];
+ args[0] = object;
+ System.arraycopy(objects, 0, args, 1, objects.length);
+ return args;
+ }
+
+ private void log(Object ... objects) {
+ if (GadgetLog.shouldLog()) {
+ GadgetLog.logLazy(expandArgs(clientInstanceLogLabel, objects));
+ }
+ }
+
+ private void logFine(Object ... objects) {
+ if (GadgetLog.shouldLogFine()) {
+ GadgetLog.logFineLazy(expandArgs(clientInstanceLogLabel, objects));
+ }
+ }
+
+ /**
+ * Returns the URL of the client including protocol and host.
+ *
+ * @return URL of the client.
+ */
+ private String getUrlPrefix() {
+ return Location.getProtocol() + "//" + Location.getHost();
+ }
+
+ /**
+ * Returns the UI element.
+ *
+ * @return UI element.
+ */
+ Element getElement() {
+ return ui.getElement();
+ }
+
+ private boolean isActive() {
+ return active;
+ }
+
+ private boolean canModifyDocument() {
+ return isActive();
+ }
+
+ @Override
+ public void deleteGadget() {
+ if (canModifyDocument()) {
+ element.getMutableDoc().deleteNode(element);
+ }
+ }
+
+ @Override
+ public void selectGadget() {
+ if (isActive()) {
+ CMutableDocument doc = element.getMutableDoc();
+ element.getSelectionHelper().setSelectionPoints(
+ Point.before(doc, element), Point.after(doc, element));
+ }
+ }
+
+ @Override
+ public void resetGadget() {
+ if (canModifyDocument()) {
+ state.each(new Each() {
+ @Override
+ public void apply(String key, String value) {
+ deleteState(key);
+ }
+ });
+ gadgetStateSubmitter.submit();
+ final String gadgetId = getGadgetId();
+ if (gadgetId != null) {
+ supplement.getGadgetState(gadgetId).each(new ProcV<String>() {
+ @Override
+ public void apply(String key, String value) {
+ supplement.setGadgetState(gadgetId, key, null);
+ }
+ });
+ privateGadgetStateSubmitter.submit();
+ }
+ }
+ }
+
+ private static native void excludeCssName() /*-{
+ css();
+ }-*/;
+
+ private static class BlipEditingIndicator implements EditingIndicator {
+ private final ContentElement element;
+
+ /**
+ * Constructs editing indicator for the gadget's blip.
+ */
+ BlipEditingIndicator(ContentElement element) {
+ this.element = element;
+ }
+
+ /**
+ * Returns the current edit state of the blip.
+ * TODO(user): add event-driven update of the edit state.
+ *
+ * @return whether the blip is in edit state.
+ */
+ @Override
+ public boolean isEditing() {
+ return (element != null)
+ ? AnnotationPainter.isInEditingDocument(ContentElement.ELEMENT_MANAGER, element) : false;
+ }
+ }
+
+ @Override
+ public void onMaybeGadgetStateChanged(String gadgetId) {
+ if (gadgetId != null) {
+ String myId = getGadgetId();
+ if (gadgetId.equals(myId)) {
+ privateGadgetStateSubmitter.submitImmediately();
+ }
+ }
+ }
+
+ /**
+ * Executes when the document is being modified in response to a user action.
+ */
+ private void onModifyingDocument() {
+ documentModified = true;
+ if (toUpdateIframeUrl) {
+ scheduleGadgetAttributeUpdate(IFRAME_URL_ATTRIBUTE, iframeUrl);
+ toUpdateIframeUrl = false;
+ }
+ }
+
+ /**
+ * Creates GadgetWidget instance with preset fields for testing.
+ *
+ * TODO(user): Refactor to remove test code.
+ *
+ * @param id client instance ID
+ * @param userPrefs user prederences
+ * @param waveletName wavelet name
+ * @param securityToken security token
+ * @param locale locale
+ * @return test instance of the widget
+ */
+ @VisibleForTesting
+ static GadgetWidget createForTesting(int id, GadgetUserPrefs userPrefs, WaveletName waveletName,
+ String securityToken, Locale locale) {
+ GadgetWidget widget = new GadgetWidget();
+ widget.clientInstanceId = id;
+ widget.userPrefs = userPrefs;
+ widget.waveletName = waveletName;
+ widget.securityToken = securityToken;
+ widget.locale = locale;
+ return widget;
+ }
+
+ /**
+ * @return RPC token for testing
+ */
+ @VisibleForTesting
+ String getRpcToken() {
+ return rpcToken;
+ }
+}
Added: trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidgetUi.java
===================================================================
--- trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidgetUi.java (rev 0)
+++ trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidgetUi.java 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,499 @@
+// @formatter:off
+/**
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.waveprotocol.wave.client.gadget.renderer;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.IFrameElement;
+import com.google.gwt.dom.client.Style.Display;
+import com.google.gwt.dom.client.StyleInjector;
+import com.google.gwt.event.dom.client.DomEvent;
+import com.google.gwt.event.dom.client.MouseOutEvent;
+import com.google.gwt.event.dom.client.MouseOutHandler;
+import com.google.gwt.event.dom.client.MouseOverEvent;
+import com.google.gwt.event.dom.client.MouseOverHandler;
+import com.google.gwt.event.shared.EventHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.DataResource;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.ImageResource.RepeatStyle;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.NamedFrame;
+import com.google.gwt.user.client.ui.Widget;
+
+import org.waveprotocol.wave.client.common.util.DomHelper;
+import org.waveprotocol.wave.client.editor.EditorStaticDeps;
+import org.waveprotocol.wave.client.scheduler.ScheduleTimer;
+import org.waveprotocol.wave.client.widget.common.ClickableDivPanel;
+import org.waveprotocol.wave.client.widget.common.HoverHelper;
+import org.waveprotocol.wave.client.widget.common.HoverHelper.Hoverable;
+import org.waveprotocol.wave.client.widget.menu.MenuButton;
+
+/**
+ * GadgetWidget UI implementation.
+ *
+ */
+public class GadgetWidgetUi extends Composite implements Hoverable {
+ /**
+ * Class that exposes protected addDomHandler method from NamedFrame as
+ * addHandler. Serves as the Gadget IFrame widget class.
+ */
+ private static class GadgetIFrame extends NamedFrame {
+ GadgetIFrame(String name) {
+ super(name);
+ }
+
+ <H extends EventHandler> HandlerRegistration addHandler(
+ final H handler, DomEvent.Type<H> type) {
+ return addDomHandler(handler, type);
+ }
+ }
+
+ /**
+ * CSS resource for the style injector.
+ */
+ public interface Resources extends ClientBundle {
+ /** The singleton instance of our CSS resources. */
+ static final Resources RESOURCES = GWT.<Resources> create(Resources.class);
+
+ @Source("Gadget.css")
+ public Css css();
+
+ @Source("broken_gadget.png")
+ DataResource brokenGadget();
+
+ @Source("loading_gadget.gif")
+ ImageResource loadingGadgetLarge();
+
+ @Source("loading_gadget_small.gif")
+ ImageResource loadingGadgetSmall();
+
+ @Source("meta_more.png")
+ ImageResource moreImage();
+
+ // Normal
+ @Source("meta_left.png")
+ ImageResource metaLeftImage();
+
+ @Source("meta_right.png")
+ ImageResource metaRightImage();
+
+ static final String META_LEFT_WIDTH = "-" + RESOURCES.metaLeftImage().getWidth() + "px";
+ static final String META_RIGHT_WIDTH = "-" + RESOURCES.metaRightImage().getWidth() + "px";
+ static final String FADE_DELAY_STRING = FADE_DELAY_MS + "ms";
+
+ @Source("meta_mid.png")
+ @ImageOptions(repeatStyle = RepeatStyle.Horizontal)
+ ImageResource metaMid();
+
+ // Down
+ @Source("meta_left_down.png")
+ ImageResource metaLeftDown();
+
+ @Source("meta_right_down.png")
+ ImageResource metaRightDown();
+
+ @Source("meta_mid_down.png")
+ ImageResource metaMidDown();
+
+ // Hover
+ @Source("meta_left_hover.png")
+ ImageResource metaLeftHover();
+
+ @Source("meta_right_hover.png")
+ ImageResource metaRightHover();
+
+ @Source("meta_mid_hover.png")
+ ImageResource metaMidHover();
+ }
+
+ /** CSS interface with style string methods. */
+ interface Css extends CssResource {
+ String panel();
+ String inline();
+ String title();
+ String gadgetFrame();
+ String iframeDiv();
+ String loadedGadgetFrame();
+ String loadingGadgetFrame();
+ String loadingGadgetSmallThrobber();
+ String loadingGadgetLargeThrobber();
+ String loadedGadget();
+ String brokenGadgetIcon();
+ String more();
+ String metaButton();
+ String metaRight();
+ String metaButtonsPanel();
+ String metaLeft();
+ String metaButtons();
+ String disabled();
+ }
+
+ /** The singleton instance of our CSS resources. */
+ static final Css CSS = Resources.RESOURCES.css();
+
+ /**
+ * Static initializer: injects stylesheet.
+ */
+ static {
+ StyleInjector.inject(CSS.getText());
+ }
+
+ @UiField ClickableDivPanel enclosingBox;
+
+ @UiField ClickableDivPanel metaButtons;
+
+ @UiField ClickableDivPanel metaLeft;
+
+ @UiField ClickableDivPanel metaButtonsPanel;
+
+ @UiField ClickableDivPanel metaRight;
+
+ @UiField Label titleLabel;
+
+ @UiField ClickableDivPanel gadgetFrame;
+
+ @UiField ClickableDivPanel iframeDiv;
+
+ interface Binder extends UiBinder<ClickableDivPanel, GadgetWidgetUi> {}
+
+ private static final Binder BINDER = GWT.create(Binder.class);
+
+ /**
+ * The maximum height of the gadget frame that should use the small throbber
+ * icon.
+ */
+ private static final int MAX_SMALL_GADGET_HEIGHT = 63;
+
+ private static final int FADE_DELAY_MS = 300;
+
+ /** Gadget IFrame. */
+ private final GadgetIFrame gadgetIframe;
+
+ private GadgetUiListener listener = null;
+
+ private MenuButton menu;
+
+ private boolean menuEnabled;
+
+ private final EditingIndicator editingIndicator;
+
+ private static enum ThrobberState {
+ SMALL,
+ LARGE,
+ BROKEN,
+ DISABLED
+ }
+
+ private ThrobberState throbberState = ThrobberState.SMALL;
+
+ /**
+ * Constructs gadget widget UI.
+ */
+ public GadgetWidgetUi(String gadgetName, EditingIndicator editingIndicator) {
+ this.editingIndicator = editingIndicator;
+ menuEnabled = false;
+ initWidget(BINDER.createAndBindUi(this));
+ gadgetIframe = new GadgetIFrame(gadgetName);
+ buildIFrame(gadgetName);
+ buildMenu();
+ hideMetaButtons();
+ gadgetFrame.addStyleName(CSS.loadingGadgetFrame());
+ makeWidgetsUnselectable();
+ HoverHelper.getInstance().setup(this);
+ }
+
+ private void makeWidgetsUnselectable() {
+ makeUnselectable(enclosingBox);
+ makeUnselectable(titleLabel);
+ makeUnselectable(gadgetFrame);
+ makeUnselectable(gadgetIframe);
+ makeUnselectable(metaButtons);
+ makeUnselectable(metaLeft);
+ makeUnselectable(metaButtonsPanel);
+ makeUnselectable(metaRight);
+ makeUnselectable(menu.getButton());
+ }
+
+ private void makeUnselectable(Widget widget) {
+ DomHelper.setContentEditable(widget.getElement(), false, false);
+ DomHelper.makeUnselectable(widget.getElement());
+ }
+
+ private void buildIFrame(String gadgetName) {
+ gadgetIframe.getElement().setId(gadgetName);
+
+ int height = 0;
+ switch (throbberState) {
+ case SMALL:
+ gadgetIframe.addStyleName(CSS.loadingGadgetSmallThrobber());
+ height = Resources.RESOURCES.loadingGadgetSmall().getHeight();
+ break;
+ case LARGE:
+ gadgetIframe.addStyleName(CSS.loadingGadgetLargeThrobber());
+ height = Resources.RESOURCES.loadingGadgetLarge().getHeight();
+ break;
+ }
+
+ IFrameElement iframe = getIframeElement();
+ iframe.setAttribute("vspace", "0");
+ iframe.setAttribute("hspace", "0");
+ iframe.setAttribute("frameBorder", "no");
+ iframe.setAttribute("moduleId", gadgetName);
+ iframe.setAttribute("display", "block");
+ iframe.setAttribute("height", height + "px");
+ // TODO(user): scrolling policy/settings for the wave gadgets.
+ iframe.setScrolling("no");
+ iframeDiv.add(gadgetIframe);
+ }
+
+ private void buildMenu() {
+ // TODO(user): Use menu builder.
+ menu = new MenuButton(CSS.metaButton() + " " + CSS.more(), "Gadget menu");
+ menu.addItem("Delete gadget", new Command() {
+ @Override
+ public void execute() {
+ if (listener != null) {
+ listener.deleteGadget();
+ }
+ }
+ }, true);
+ menu.addItem("Select", new Command() {
+ @Override
+ public void execute() {
+ if (listener != null) {
+ listener.selectGadget();
+ }
+ }
+ }, true);
+ menu.addItem("Reset", new Command() {
+ @Override
+ public void execute() {
+ if (listener != null) {
+ listener.resetGadget();
+ }
+ }
+ }, true);
+ metaButtonsPanel.add(menu.getButton());
+ }
+
+ /**
+ * Task to set display:none to deactivate the menu. Note that opacity 0 leaves
+ * invisible, but active element.
+ */
+ private final ScheduleTimer disableMenuTask = new ScheduleTimer() {
+ @Override
+ public void run() {
+ metaButtons.getElement().getStyle().setDisplay(Display.NONE);
+ }
+ };
+
+ private void hideMetaButtons() {
+ metaButtons.getElement().getStyle().setOpacity(0);
+ disableMenuTask.schedule(FADE_DELAY_MS);
+ }
+
+ private void showMetaButtons() {
+ disableMenuTask.cancel();
+ metaButtons.getElement().getStyle().clearDisplay();
+ metaButtons.getOffsetWidth(); // Force the browser to render the first frame.
+ metaButtons.getElement().getStyle().clearOpacity();
+ }
+
+ /**
+ * Gets the gadget iframe element.
+ *
+ * @return Gadget iframe element.
+ */
+ public IFrameElement getIframeElement() {
+ return IFrameElement.as(gadgetIframe.getElement());
+ }
+
+ /**
+ * Sets the iframe height attribute.
+ *
+ * @param height New iframe height.
+ */
+ public void setIframeHeight(long height) {
+ getIframeElement().setAttribute("height", height + "px");
+ if (height > MAX_SMALL_GADGET_HEIGHT) {
+ if (throbberState == ThrobberState.SMALL) {
+ gadgetIframe.removeStyleName(CSS.loadingGadgetSmallThrobber());
+ gadgetIframe.addStyleName(CSS.loadingGadgetLargeThrobber());
+ throbberState = ThrobberState.LARGE;
+ }
+ } else {
+ if (throbberState == ThrobberState.LARGE) {
+ gadgetIframe.removeStyleName(CSS.loadingGadgetLargeThrobber());
+ gadgetIframe.addStyleName(CSS.loadingGadgetSmallThrobber());
+ throbberState = ThrobberState.SMALL;
+ }
+ }
+ }
+
+ /**
+ * Sets the iframe width attribute.
+ *
+ * @param width New iframe width.
+ */
+ public void setIframeWidth(String width) {
+ getIframeElement().setAttribute("width", width);
+ iframeDiv.setWidth(width);
+ gadgetFrame.setWidth(width);
+ }
+
+ /**
+ * Sets gadget iframe ID.
+ *
+ * @param newId new gadget iframe id.
+ */
+ public void setIframeId(String newId) {
+ gadgetIframe.getElement().setId(newId);
+ }
+
+ /**
+ * Sets the iframe source attribute.
+ *
+ * @param source New iframe source.
+ */
+ public void setIframeSource(String source) {
+ if ((source != null) && !source.equals(getIframeElement().getSrc())) {
+ getIframeElement().setSrc(source);
+ }
+ }
+
+ /**
+ * Removes the gadget loading throbber by replacing the iframe CSS.
+ */
+ public void removeThrobber() {
+ switch (throbberState) {
+ case SMALL:
+ gadgetIframe.removeStyleName(CSS.loadingGadgetSmallThrobber());
+ break;
+ case LARGE:
+ gadgetIframe.removeStyleName(CSS.loadingGadgetLargeThrobber());
+ break;
+ }
+ throbberState = ThrobberState.DISABLED;
+ gadgetIframe.addStyleName(CSS.loadedGadget());
+ gadgetFrame.removeStyleName(CSS.loadingGadgetFrame());
+ gadgetFrame.addStyleName(CSS.loadedGadgetFrame());
+ }
+
+ /**
+ * Shows broken gadget icon and error message.
+ */
+ public void showBrokenGadget(String error) {
+ switch (throbberState) {
+ case SMALL:
+ gadgetIframe.removeStyleName(CSS.loadingGadgetSmallThrobber());
+ getIframeElement().setAttribute("height", (MAX_SMALL_GADGET_HEIGHT + 1) + "px");
+ break;
+ case LARGE:
+ gadgetIframe.removeStyleName(CSS.loadingGadgetLargeThrobber());
+ break;
+ }
+ throbberState = ThrobberState.BROKEN;
+ gadgetIframe.addStyleName(CSS.brokenGadgetIcon());
+ }
+
+ public String getTitleLabelText() {
+ return titleLabel.getText();
+ }
+
+ /**
+ * Sets the text of the title label.
+ *
+ * @param text New title label text.
+ */
+ public void setTitleLabelText(String text) {
+ // TODO(user): Remove when the editor ignores mutations from doodads.
+ EditorStaticDeps.startIgnoreMutations();
+ try {
+ titleLabel.setText(text);
+ } finally {
+ EditorStaticDeps.endIgnoreMutations();
+ }
+ }
+
+ public void setGadgetUiListener(GadgetUiListener listener) {
+ this.listener = listener;
+ }
+
+ /**
+ * Enables the overlay Gadget menu.
+ */
+ public void enableMenu() {
+ menuEnabled = true;
+ }
+
+ /**
+ * Disables the overlay Gadget menu.
+ */
+ public void disableMenu() {
+ hideMetaButtons();
+ menu.onOff(menu.getButton());
+ menuEnabled = false;
+ }
+
+ public void makeInline() {
+ enclosingBox.addStyleName(CSS.inline());
+ }
+
+ @Override
+ public void onMouseEnter() {
+ if (!menuEnabled || !editingIndicator.isEditing()) {
+ return;
+ }
+ showMetaButtons();
+ }
+
+ @Override
+ public void onMouseLeave() {
+ hideMetaButtons();
+ }
+
+ @Override
+ public void addHandlers(MouseOverHandler mouseOverHandler, MouseOutHandler mouseOutHandler) {
+ // TODO(user): Investigate why the event propagation does not work and
+ // remove unnecessary handler setup.
+ addDomHandler(mouseOverHandler, MouseOverEvent.getType());
+ addDomHandler(mouseOutHandler, MouseOutEvent.getType());
+ enclosingBox.addMouseOverHandler(mouseOverHandler);
+ gadgetFrame.addMouseOverHandler(mouseOverHandler);
+ iframeDiv.addMouseOverHandler(mouseOverHandler);
+ gadgetIframe.addHandler(mouseOverHandler, MouseOverEvent.getType());
+ metaButtons.addMouseOverHandler(mouseOverHandler);
+ metaLeft.addMouseOverHandler(mouseOverHandler);
+ metaButtonsPanel.addMouseOverHandler(mouseOverHandler);
+ metaRight.addMouseOverHandler(mouseOverHandler);
+ menu.getButton().addMouseOverHandler(mouseOverHandler);
+ }
+
+ @Override
+ public boolean isOrHasChild(Element e) {
+ return enclosingBox.getElement().isOrHasChild(e);
+ }
+}
Added: trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidgetUi.ui.xml
===================================================================
--- trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidgetUi.ui.xml (rev 0)
+++ trunk/src/main/java/org/waveprotocol/wave/client/gadget/renderer/GadgetWidgetUi.ui.xml 2012-03-08 15:05:45 UTC (rev 1748)
@@ -0,0 +1,49 @@
+<!--
+ UI binder for Gadget Container.
+ Author: vadimg(a)google.com (Vadim Gerasimov)
+-->
+<ui:UiBinder
+ xmlns:ui='urn:ui:com.google.gwt.uibinder'
+ xmlns:gwt='urn:import:com.google.gwt.user.client.ui'
+ xmlns:wb='urn:import:org.waveprotocol.wave.client.widget.common'
+>
+ <ui:with
+ field='res'
+ type='org.waveprotocol.wave.client.gadget.renderer.GadgetWidgetUi.Resources'
+ />
+ <wb:ClickableDivPanel
+ ui:field='enclosingBox'
+ addStyleNames='{res.css.panel}'
+ >
+ <!-- Gadget title label. -->
+ <gwt:Label ui:field='titleLabel' addStyleNames='{res.css.title}'/>
+ <wb:ClickableDivPanel
+ ui:field='gadgetFrame'
+ addStyleNames='{res.css.gadgetFrame}'
+ >
+ <!-- Main gadget iframe. -->
+ <wb:ClickableDivPanel
+ ui:field='iframeDiv'
+ addStyleNames='{res.css.iframeDiv}'
+ />
+ <!-- Mouse-over overlay menu. -->
+ <wb:ClickableDivPanel
+ ui:field='metaButtons'
+ addStyleNames='{res.css.metaButtons}'
+ >
+ <wb:ClickableDivPanel
+ ui:field='metaLeft'
+ addStyleNames='{res.css.metaLeft}'
+ />
+ <wb:ClickableDivPanel
+ ui:field='metaButtonsPanel'
+ addStyleNames='{res.css.metaButtonsPanel}'
+ />
+ <wb:ClickableDivPanel
+ ui:field='metaRight'
+ addStyleNames='{res.css.metaRight}'
+ />
+ </wb:ClickableDivPanel>
+ </wb:ClickableDivPanel>
+ </wb:ClickableDivPanel>
+</ui:UiBinder>
Added: trunk/src/main/resources/icons/chain-close-black.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/chain-close-black.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/resources/icons/chain-close-white.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/chain-close-white.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/resources/icons/chain-closed-grey.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/chain-closed-grey.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/resources/icons/chain-open-black.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/chain-open-black.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/resources/icons/chain-open-grey.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/chain-open-grey.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/resources/icons/chain-open-white.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/chain-open-white.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/resources/icons/picture-black.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/picture-black.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/resources/icons/picture-grey.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/picture-grey.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/resources/icons/picture-white.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/resources/icons/picture-white.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Copied: trunk/src/main/resources/icons/pref-black.png (from rev 1747, trunk/src/main/java/cc/kune/core/client/resources/pref-black.png)
===================================================================
(Binary files differ)
Copied: trunk/src/main/resources/icons/pref-grey.png (from rev 1747, trunk/src/main/java/cc/kune/core/client/resources/pref-grey.png)
===================================================================
(Binary files differ)
Copied: trunk/src/main/resources/icons/pref-white.png (from rev 1747, trunk/src/main/java/cc/kune/core/client/resources/pref-white.png)
===================================================================
(Binary files differ)
Modified: trunk/src/main/webapp/others/kune-client-actions.xml
===================================================================
--- trunk/src/main/webapp/others/kune-client-actions.xml 2012-03-07 13:08:17 UTC (rev 1747)
+++ trunk/src/main/webapp/others/kune-client-actions.xml 2012-03-08 15:05:45 UTC (rev 1748)
@@ -424,39 +424,6 @@
</guiActionDescriptor>
- <guiActionDescriptor>
- <type>wave-gadget</type>
- <extensionName>WavePlan</extensionName>
- <name>New meet planer</name>
- <path>New Gadget»Calendar</path>
- <description>This gadget helps you to coordinate multi-participant schedules and make decisions in an intuitive manner.
- </description>
- <new-content-title>New meet planner</new-content-title>
- <new-content-textintro></new-content-textintro>
- <enabled>true</enabled>
- <typeIds>
- <typeId origTypeId="docs.folder" destTypeId="docs.doc"/>
- <typeId origTypeId="docs.root" destTypeId="docs.doc"/>
- <typeId origTypeId="blogs.blog" destTypeId="blogs.post"/>
- <typeId origTypeId="lists.list" destTypeId="lists.post"/>
- <!-- Add gadget in docs directly: -->
- <typeId origTypeId="docs.doc" destTypeId="docs.doc"/>
- <typeId origTypeId="blogs.post" destTypeId="blogs.post"/>
- <typeId origTypeId="lists.post" destTypeId="lists.post"/>
- <typeId origTypeId="wiki.wikipage" destTypeId="wiki.wikipage"/>
- <typeId origTypeId="tasks.task" destTypeId="tasks.task"/>
- </typeIds>
- <rol>
- <!-- Administrator, Editor, Viewer -->
- <rolRequired>Editor</rolRequired>
- <authNeed>true</authNeed>
- </rol>
- <!-- only for new waves: anyone, onlymembers, onlyadmins, ask (not
- used yet) -->
- <participants>ask</participants>
- </guiActionDescriptor>
-
-
<!-- Media ================================================== -->
<guiActionDescriptor>
1
0
r1747 - in trunk: . src/main/java/cc/kune/core/server/init src/main/java/cc/kune/core/server/persist src/main/java/com/google src/main/java/com/google/inject src/main/java/com/google/inject/persist src/main/java/com/google/inject/persist/jpa src/test/java/com/google/inject/persist/jpa
by Vicente J. Ruiz Jurado 07 Mar '12
by Vicente J. Ruiz Jurado 07 Mar '12
07 Mar '12
Author: vjrj_
Date: 2012-03-07 14:08:17 +0100 (Wed, 07 Mar 2012)
New Revision: 1747
Added:
trunk/src/main/java/com/google/inject/
trunk/src/main/java/com/google/inject/persist/
trunk/src/main/java/com/google/inject/persist/jpa/
trunk/src/main/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java
Removed:
trunk/CHANGING_DOMAIN_DOES_NOT_WORK
trunk/src/main/java/cc/kune/core/server/init/KuneJpaPersistModule.java
trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java
Modified:
trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java
Log:
NEW - # 201: Add Openfire to the persist system so we can connect and get xmpp users info
http://kune.ourproject.org/issues/ticket/201
Deleted: trunk/CHANGING_DOMAIN_DOES_NOT_WORK
===================================================================
--- trunk/CHANGING_DOMAIN_DOES_NOT_WORK 2012-03-07 12:19:26 UTC (rev 1746)
+++ trunk/CHANGING_DOMAIN_DOES_NOT_WORK 2012-03-07 13:08:17 UTC (rev 1747)
@@ -1,42 +0,0 @@
-=CHANGING THE DOMAIN OF A KUNE SERVER=
-
-Suppose that we want to change from domain.old to domain.new in a kune server deployment.
-
-==Prerrequisites==
-
-* Make a backup of /var/lib/kune/, your db and any other location for wave info (_accounts, _deltas, etc)
-* Be sure that domain.new can be resolved correctly ($ dig domain.new), also the SRV records (see INSTALL)
-* stop kune
-
-==Do the job==
-
-===Update configurations and stores===
-* in _accounts, _deltas
-
-for i in `grep -ril domain.old /var/lib/kune/_accounts`; do perl -p -i -e 's/domain.old/domain.new/g' $i ; done
-for i in `grep -ril domain.old /var/lib/kune/_deltas`; do perl -p -i -e 's/domain.old/domain.new/g' $i ; done
-
-perl -p -i -e 's/domain.old/domain.new/g' src/main/resources/kune.properties # or in /etc/kune
-perl -p -i -e 's/domain.old/domain.new/g' src/main/resources/wave-server.properties # or in /etc/kune
-perl -p -i -e 's/domain.old/domain.new/g' src/main/webapp/ws.html
-or in production
-perl -p -i -e 's/domain.old/domain.new/g' /var/www/kune/ws.html
-
-rename 's/domain.old/domain.new/g' /var/lib/kune/_accounts/*
-
-Remove old persisted sessions:
-rm /var/lib/kune/_sessions/*
-
-===Update the openfire configuration===
-Update your new domain in:
-Server > Server Manager > Edit Server Properties
-Restart the openfire server
- /etc/init.d/openfire restart
-
-===Update your SMTP configuration (and MX record) ===
-So emails like someone(a)domain.new are propertly sended.
-
-===Certificates===
-Update your ssl certificates (openfire, wave keystore, wave federation, etc), if you have configured before with domain.old
-
-Restart kune and check if all it's ok.
Deleted: trunk/src/main/java/cc/kune/core/server/init/KuneJpaPersistModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/init/KuneJpaPersistModule.java 2012-03-07 12:19:26 UTC (rev 1746)
+++ trunk/src/main/java/cc/kune/core/server/init/KuneJpaPersistModule.java 2012-03-07 13:08:17 UTC (rev 1747)
@@ -1,5 +0,0 @@
-package cc.kune.core.server.init;
-
-public class KuneJpaPersistModule {
-
-}
Modified: trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746)
+++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java 2012-03-07 13:08:17 UTC (rev 1747)
@@ -111,7 +111,6 @@
// final KuneJpaLocalTxnInterceptor transactionInterceptor = new
// KuneJpaLocalTxnInterceptor();
// requestInjection(transactionInterceptor);
- //
// bindInterceptor(annotatedWith(KuneTransactional.class), any(),
// transactionInterceptor);
// bindInterceptor(any(), annotatedWith(KuneTransactional.class),
Copied: trunk/src/main/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java (from rev 1746, trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java)
===================================================================
--- trunk/src/main/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java (rev 0)
+++ trunk/src/main/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java 2012-03-07 13:08:17 UTC (rev 1747)
@@ -0,0 +1,171 @@
+/**
+ * Copyright (C) 2010 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.persist.jpa;
+
+import java.lang.reflect.Method;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
+
+import cc.kune.core.server.persist.KuneTransactional;
+
+import com.google.inject.Inject;
+import com.google.inject.persist.UnitOfWork;
+
+/**
+ * @author Dhanji R. Prasanna (dhanji(a)gmail.com)
+ */
+public class KuneJpaLocalTxnInterceptor implements MethodInterceptor {
+
+ @KuneTransactional
+ private static class Internal {
+ }
+
+ // Tracks if the unit of work was begun implicitly by this transaction.
+ private final ThreadLocal<Boolean> didWeStartWork = new ThreadLocal<Boolean>();
+
+ @Inject
+ private final JpaPersistService emProvider = null;
+
+ @Inject
+ private final UnitOfWork unitOfWork = null;
+
+ @Override
+ public Object invoke(final MethodInvocation methodInvocation) throws Throwable {
+
+ // Should we start a unit of work?
+ if (!emProvider.isWorking()) {
+ emProvider.begin();
+ didWeStartWork.set(true);
+ }
+
+ final KuneTransactional transactional = readTransactionMetadata(methodInvocation);
+ final EntityManager em = this.emProvider.get();
+
+ // Allow 'joining' of transactions if there is an enclosing
+ // @KuneTransactional method.
+ if (em.getTransaction().isActive()) {
+ return methodInvocation.proceed();
+ }
+
+ final EntityTransaction txn = em.getTransaction();
+ txn.begin();
+
+ Object result;
+ try {
+ result = methodInvocation.proceed();
+
+ } catch (final Exception e) {
+ // commit transaction only if rollback didnt occur
+ if (rollbackIfNecessary(transactional, e, txn)) {
+ txn.commit();
+ }
+
+ // propagate whatever exception is thrown anyway
+ throw e;
+ } finally {
+ // Close the em if necessary (guarded so this code doesn't run unless
+ // catch fired).
+ if (null != didWeStartWork.get() && !txn.isActive()) {
+ didWeStartWork.remove();
+ unitOfWork.end();
+ }
+ }
+
+ // everything was normal so commit the txn (do not move into try block above
+ // as it
+ // interferes with the advised method's throwing semantics)
+ try {
+ txn.commit();
+ } finally {
+ // close the em if necessary
+ if (null != didWeStartWork.get()) {
+ didWeStartWork.remove();
+ unitOfWork.end();
+ }
+ }
+
+ // or return result
+ return result;
+ }
+
+ // TODO(dhanji): Cache this method's results.
+ private KuneTransactional readTransactionMetadata(final MethodInvocation methodInvocation) {
+ KuneTransactional transactional;
+ final Method method = methodInvocation.getMethod();
+ final Class<?> targetClass = methodInvocation.getThis().getClass();
+
+ transactional = method.getAnnotation(KuneTransactional.class);
+ if (null == transactional) {
+ // If none on method, try the class.
+ transactional = targetClass.getAnnotation(KuneTransactional.class);
+ }
+ if (null == transactional) {
+ // If there is no transactional annotation present, use the default
+ transactional = Internal.class.getAnnotation(KuneTransactional.class);
+ }
+
+ return transactional;
+ }
+
+ /**
+ * Returns True if rollback DID NOT HAPPEN (i.e. if commit should continue).
+ *
+ * @param transactional
+ * The metadata annotaiton of the method
+ * @param e
+ * The exception to test for rollback
+ * @param txn
+ * A JPA Transaction to issue rollbacks on
+ */
+ private boolean rollbackIfNecessary(final KuneTransactional transactional, final Exception e,
+ final EntityTransaction txn) {
+ boolean commit = true;
+
+ // check rollback clauses
+ for (final Class<? extends Exception> rollBackOn : transactional.rollbackOn()) {
+
+ // if one matched, try to perform a rollback
+ if (rollBackOn.isInstance(e)) {
+ commit = false;
+
+ // check ignore clauses (supercedes rollback clause)
+ for (final Class<? extends Exception> exceptOn : transactional.ignore()) {
+ // An exception to the rollback clause was found, DON'T rollback
+ // (i.e. commit and throw anyway)
+ if (exceptOn.isInstance(e)) {
+ commit = true;
+ break;
+ }
+ }
+
+ // rollback only if nothing matched the ignore check
+ if (!commit) {
+ txn.rollback();
+ }
+ // otherwise continue to commit
+
+ break;
+ }
+ }
+
+ return commit;
+ }
+}
Deleted: trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java
===================================================================
--- trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java 2012-03-07 12:19:26 UTC (rev 1746)
+++ trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java 2012-03-07 13:08:17 UTC (rev 1747)
@@ -1,171 +0,0 @@
-/**
- * Copyright (C) 2010 Google, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.inject.persist.jpa;
-
-import java.lang.reflect.Method;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
-
-import org.aopalliance.intercept.MethodInterceptor;
-import org.aopalliance.intercept.MethodInvocation;
-
-import cc.kune.core.server.persist.KuneTransactional;
-
-import com.google.inject.Inject;
-import com.google.inject.persist.UnitOfWork;
-
-/**
- * @author Dhanji R. Prasanna (dhanji(a)gmail.com)
- */
-public class KuneJpaLocalTxnInterceptor implements MethodInterceptor {
-
- @KuneTransactional
- private static class Internal {
- }
-
- // Tracks if the unit of work was begun implicitly by this transaction.
- private final ThreadLocal<Boolean> didWeStartWork = new ThreadLocal<Boolean>();
-
- @Inject
- private final JpaPersistService emProvider = null;
-
- @Inject
- private final UnitOfWork unitOfWork = null;
-
- @Override
- public Object invoke(final MethodInvocation methodInvocation) throws Throwable {
-
- // Should we start a unit of work?
- if (!emProvider.isWorking()) {
- emProvider.begin();
- didWeStartWork.set(true);
- }
-
- final KuneTransactional transactional = readTransactionMetadata(methodInvocation);
- final EntityManager em = this.emProvider.get();
-
- // Allow 'joining' of transactions if there is an enclosing
- // @KuneTransactional method.
- if (em.getTransaction().isActive()) {
- return methodInvocation.proceed();
- }
-
- final EntityTransaction txn = em.getTransaction();
- txn.begin();
-
- Object result;
- try {
- result = methodInvocation.proceed();
-
- } catch (final Exception e) {
- // commit transaction only if rollback didnt occur
- if (rollbackIfNecessary(transactional, e, txn)) {
- txn.commit();
- }
-
- // propagate whatever exception is thrown anyway
- throw e;
- } finally {
- // Close the em if necessary (guarded so this code doesn't run unless
- // catch fired).
- if (null != didWeStartWork.get() && !txn.isActive()) {
- didWeStartWork.remove();
- unitOfWork.end();
- }
- }
-
- // everything was normal so commit the txn (do not move into try block above
- // as it
- // interferes with the advised method's throwing semantics)
- try {
- txn.commit();
- } finally {
- // close the em if necessary
- if (null != didWeStartWork.get()) {
- didWeStartWork.remove();
- unitOfWork.end();
- }
- }
-
- // or return result
- return result;
- }
-
- // TODO(dhanji): Cache this method's results.
- private KuneTransactional readTransactionMetadata(final MethodInvocation methodInvocation) {
- KuneTransactional transactional;
- final Method method = methodInvocation.getMethod();
- final Class<?> targetClass = methodInvocation.getThis().getClass();
-
- transactional = method.getAnnotation(KuneTransactional.class);
- if (null == transactional) {
- // If none on method, try the class.
- transactional = targetClass.getAnnotation(KuneTransactional.class);
- }
- if (null == transactional) {
- // If there is no transactional annotation present, use the default
- transactional = Internal.class.getAnnotation(KuneTransactional.class);
- }
-
- return transactional;
- }
-
- /**
- * Returns True if rollback DID NOT HAPPEN (i.e. if commit should continue).
- *
- * @param transactional
- * The metadata annotaiton of the method
- * @param e
- * The exception to test for rollback
- * @param txn
- * A JPA Transaction to issue rollbacks on
- */
- private boolean rollbackIfNecessary(final KuneTransactional transactional, final Exception e,
- final EntityTransaction txn) {
- boolean commit = true;
-
- // check rollback clauses
- for (final Class<? extends Exception> rollBackOn : transactional.rollbackOn()) {
-
- // if one matched, try to perform a rollback
- if (rollBackOn.isInstance(e)) {
- commit = false;
-
- // check ignore clauses (supercedes rollback clause)
- for (final Class<? extends Exception> exceptOn : transactional.ignore()) {
- // An exception to the rollback clause was found, DON'T rollback
- // (i.e. commit and throw anyway)
- if (exceptOn.isInstance(e)) {
- commit = true;
- break;
- }
- }
-
- // rollback only if nothing matched the ignore check
- if (!commit) {
- txn.rollback();
- }
- // otherwise continue to commit
-
- break;
- }
- }
-
- return commit;
- }
-}
1
0
07 Mar '12
Author: vjrj_
Date: 2012-03-07 13:19:26 +0100 (Wed, 07 Mar 2012)
New Revision: 1746
Added:
trunk/src/main/java/cc/kune/core/server/persist/
trunk/src/main/java/cc/kune/core/server/persist/CustomPersistFilter.java
trunk/src/main/java/cc/kune/core/server/persist/DataSourceKune.java
trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java
trunk/src/main/java/cc/kune/core/server/persist/DataSourceKuneSessionProvider.java
trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfire.java
trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfirePersistModule.java
trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfireSessionProvider.java
trunk/src/main/java/cc/kune/core/server/persist/GenericPersistenceInitializer.java
trunk/src/main/java/cc/kune/core/server/persist/KunePersistenceService.java
trunk/src/main/java/cc/kune/core/server/persist/KuneTransactional.java
trunk/src/test/java/cc/kune/core/server/persist/
Removed:
trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java
trunk/src/main/java/cc/kune/core/server/DataSourceKune.java
trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java
trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java
trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java
trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java
trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java
trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java
trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java
trunk/src/main/java/cc/kune/core/server/KuneTransactional.java
Modified:
trunk/src/main/java/cc/kune/core/server/KuneContainerListener.java
trunk/src/main/java/cc/kune/core/server/KuneRackModule.java
trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java
trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java
trunk/src/test/java/cc/kune/core/server/PersistenceTest.java
trunk/src/test/java/cc/kune/core/server/TestHelper.java
trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java
trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java
Log:
NEW - # 201: Add Openfire to the persist system so we can connect and get xmpp users info
http://kune.ourproject.org/issues/ticket/201
Deleted: trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,111 +0,0 @@
-/**
- * Copyright (C) 2010 Google, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package cc.kune.core.server;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.google.inject.persist.PersistService;
-import com.google.inject.persist.UnitOfWork;
-
-/**
- * Apply this filter to enable the HTTP Request unit of work and to have
- * guice-persist manage the lifecycle of active units of work. The filter
- * automatically starts and stops the relevant {@link PersistService} upon
- * {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
- * {@link javax.servlet.Filter#destroy()} respectively.
- *
- * <p>
- * To be able to use the open session-in-view pattern (i.e. work per request),
- * register this filter <b>once</b> in your Guice {@code ServletModule}. It is
- * important that you register this filter before any other filter.
- *
- * For multiple providers, you should register this filter once per provider,
- * inside a private module for each persist module installed (this must be the
- * same private module where the specific persist module is itself installed).
- *
- * <p>
- * Example configuration:
- *
- * <pre>
- * {
- * @code
- * public class MyModule extends ServletModule {
- * public void configureServlets() {
- * filter("/*").through(PersistFilter.class);
- *
- * serve("/index.html").with(MyHtmlServlet.class);
- * // Etc.
- * }
- * }
- * }
- * </pre>
- * <p>
- * This filter is thread safe and allows you to create injectors concurrently
- * and deploy multiple guice-persist modules within the same injector, or even
- * multiple injectors with persist modules withing the same JVM or web app.
- * <p>
- * This filter requires the Guice Servlet extension.
- *
- * @author Dhanji R. Prasanna (dhanji(a)gmail.com)
- *
- * (Custom PersistFilter.class modified for kune needs without
- * persistence start/stop)
- */
-
-@Singleton
-public class CustomPersistFilter implements Filter {
- private final PersistService persistService;
- private final UnitOfWork unitOfWork;
-
- @Inject
- public CustomPersistFilter(final UnitOfWork unitOfWork, final PersistService persistService) {
- this.unitOfWork = unitOfWork;
- this.persistService = persistService;
- }
-
- @Override
- public void destroy() {
- // Commented in kune
- // persistService.stop();
- }
-
- @Override
- public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse,
- final FilterChain filterChain) throws IOException, ServletException {
-
- unitOfWork.begin();
- try {
- filterChain.doFilter(servletRequest, servletResponse);
- } finally {
- unitOfWork.end();
- }
- }
-
- @Override
- public void init(final FilterConfig filterConfig) throws ServletException {
- // Commented in kune
- // persistService.start();
- }
-}
\ No newline at end of file
Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceKune.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceKune.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceKune.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,17 +0,0 @@
-package cc.kune.core.server;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.google.inject.BindingAnnotation;
-
-(a)Retention(RetentionPolicy.RUNTIME)
-@Target({ FIELD, PARAMETER, METHOD })
-@BindingAnnotation
-public @interface DataSourceKune {
-}
\ No newline at end of file
Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,138 +0,0 @@
-package cc.kune.core.server;
-
-import java.util.Properties;
-
-import javax.persistence.EntityManager;
-
-import org.apache.commons.configuration.SystemConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hibernate.Session;
-
-import cc.kune.core.server.properties.KuneProperties;
-import cc.kune.core.server.properties.KunePropertiesDefault;
-import cc.kune.domain.finders.ContainerFinder;
-import cc.kune.domain.finders.ContentFinder;
-import cc.kune.domain.finders.ExtMediaDescripFinder;
-import cc.kune.domain.finders.GroupFinder;
-import cc.kune.domain.finders.I18nCountryFinder;
-import cc.kune.domain.finders.I18nLanguageFinder;
-import cc.kune.domain.finders.I18nTranslationFinder;
-import cc.kune.domain.finders.LicenseFinder;
-import cc.kune.domain.finders.RateFinder;
-import cc.kune.domain.finders.TagFinder;
-import cc.kune.domain.finders.TagUserContentFinder;
-import cc.kune.domain.finders.UserFinder;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Key;
-import com.google.inject.Provider;
-import com.google.inject.persist.jpa.JpaPersistModule;
-
-public class DataSourceKunePersistModule extends AbstractModule {
- public static final Log LOG = LogFactory.getLog(DataSourceKunePersistModule.class);
- public static final Key<CustomPersistFilter> MY_DATA_SOURCE_ONE_FILTER_KEY = Key.get(
- CustomPersistFilter.class, DataSourceKune.class);
- private String settedJpaUnit = null;
- private String settedProperties = null;
-
- public DataSourceKunePersistModule() {
- }
-
- /**
- * Instantiates this module during tests
- *
- * @param settedProperties
- * the setted properties
- * @param settedJpaUnit
- * the setted jpa unit
- */
- public DataSourceKunePersistModule(final String settedProperties, final String settedJpaUnit) {
- this.settedProperties = settedProperties;
- this.settedJpaUnit = settedJpaUnit;
- }
-
- @Override
- public void configure() {
- final SystemConfiguration sysConf = new SystemConfiguration();
- final String kuneConfig = settedProperties != null ? settedProperties
- : sysConf.getString("kune.server.config");
-
- final KunePropertiesDefault kuneProperties = new KunePropertiesDefault(kuneConfig);
- bind(KuneProperties.class).toInstance(kuneProperties);
-
- // precedence method param > properties
- final String configuredJpaUnit = kuneProperties.get(KuneProperties.SITE_DB_PERSISTENCE_NAME);
- final String jpaUnit = settedJpaUnit != null ? settedJpaUnit
- : configuredJpaUnit != null ? configuredJpaUnit : "development";
- LOG.info(String.format("Using persistence unit '%s' and properties '%s'", jpaUnit, kuneConfig));
-
- final JpaPersistModule jpm = new JpaPersistModule(jpaUnit);
-
- if (!jpaUnit.equals("test")) {
- // In tests (and development) we don't override this db info)
- final Properties dbProperties = new Properties();
- dbProperties.setProperty("hibernate.connection.url",
- kuneProperties.get(KuneProperties.SITE_DB_URL));
- dbProperties.setProperty("hibernate.connection.username",
- kuneProperties.get(KuneProperties.SITE_DB_USER));
- dbProperties.setProperty("hibernate.connection.password",
- kuneProperties.get(KuneProperties.SITE_DB_PASSWORD));
- jpm.properties(dbProperties);
- }
-
- jpm.addFinder(ContainerFinder.class);
- jpm.addFinder(ContentFinder.class);
- jpm.addFinder(ExtMediaDescripFinder.class);
- jpm.addFinder(GroupFinder.class);
- jpm.addFinder(I18nCountryFinder.class);
- jpm.addFinder(I18nLanguageFinder.class);
- jpm.addFinder(I18nTranslationFinder.class);
- jpm.addFinder(LicenseFinder.class);
- jpm.addFinder(RateFinder.class);
- jpm.addFinder(TagFinder.class);
- jpm.addFinder(TagUserContentFinder.class);
- jpm.addFinder(UserFinder.class);
- install(jpm);
-
- bind(Session.class).annotatedWith(DataSourceKune.class).toProvider(
- DataSourceKuneSessionProvider.class);
-
- // bind(UnitOfWork.class).annotatedWith(DataSourceKune.class).toProvider(
- // DataSourceKuneUnitOfWorkProvider.class);
- // expose(UnitOfWork.class).annotatedWith(DataSourceKune.class);
-
- // final KuneJpaLocalTxnInterceptor transactionInterceptor = new
- // KuneJpaLocalTxnInterceptor();
- // requestInjection(transactionInterceptor);
- //
- // bindInterceptor(annotatedWith(KuneTransactional.class), any(),
- // transactionInterceptor);
- // bindInterceptor(any(), annotatedWith(KuneTransactional.class),
- // transactionInterceptor);
-
- final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class);
- bind(EntityManager.class).annotatedWith(DataSourceKune.class).toProvider(entityManagerProvider);
-
- bind(MY_DATA_SOURCE_ONE_FILTER_KEY).to(CustomPersistFilter.class);
-
- // expose(EntityManager.class).annotatedWith(DataSourceKune.class);
- // expose(Session.class).annotatedWith(DataSourceKune.class);
- // expose(KuneProperties.class);
- // expose(ContainerFinder.class);
- // expose(ContentFinder.class);
- // expose(ExtMediaDescripFinder.class);
- // expose(GroupFinder.class);
- // expose(I18nCountryFinder.class);
- // expose(I18nLanguageFinder.class);
- // expose(I18nTranslationFinder.class);
- // expose(LicenseFinder.class);
- // expose(RateFinder.class);
- // expose(TagFinder.class);
- // expose(TagUserContentFinder.class);
- // expose(UserFinder.class);
- // expose(MY_DATA_SOURCE_ONE_FILTER_KEY);
-
- bind(GenericPersistenceInitializer.class).asEagerSingleton();
- }
-}
\ No newline at end of file
Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,26 +0,0 @@
-package cc.kune.core.server;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.Session;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class DataSourceKuneSessionProvider implements Provider<Session> {
- /** The entity manger to retrieve the session from. */
- @Inject
- @DataSourceKune
- private Provider<EntityManager> entityManagerProvider;
-
- /**
- * @return the Hibernate session, being the delegate of the entity manager
- * provided by the injected entity manager provider.
- */
- @Override
- public Session get() {
- final Session session = (Session) entityManagerProvider.get().getDelegate();
- // configure session i.e. flush mode or filtering
- return session;
- }
-};
\ No newline at end of file
Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,17 +0,0 @@
-package cc.kune.core.server;
-
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.google.inject.BindingAnnotation;
-
-(a)Retention(RetentionPolicy.RUNTIME)
-@Target({ FIELD, PARAMETER, METHOD })
-@BindingAnnotation
-public @interface DataSourceOpenfire {
-}
\ No newline at end of file
Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,60 +0,0 @@
-package cc.kune.core.server;
-
-import java.util.Properties;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.Session;
-
-import cc.kune.core.server.xmpp.OpenfireXmppRosterFinder;
-import cc.kune.core.server.xmpp.OpenfireXmppRosterProvider;
-import cc.kune.core.server.xmpp.XmppRosterProvider;
-
-import com.google.inject.Key;
-import com.google.inject.PrivateModule;
-import com.google.inject.Provider;
-import com.google.inject.Singleton;
-import com.google.inject.persist.jpa.JpaPersistModule;
-
-public class DataSourceOpenfirePersistModule extends PrivateModule {
- public static final Key<CustomPersistFilter> MY_DATA_SOURCE_TWO_FILTER_KEY = Key.get(
- CustomPersistFilter.class, DataSourceOpenfire.class);
-
- @Override
- public void configure() {
- final JpaPersistModule jpm = new JpaPersistModule("openfire");
- // jpm.properties(new Properties());
-
- final Properties dbProperties = new Properties();
- dbProperties.setProperty(
- "hibernate.connection.url",
- "jdbc:mysql://localhost/openfire4?createDatabaseIfNotExist=false&useUnicode=true&characterEncoding=UTF-8");
- // kuneProperties.get(KuneProperties.SITE_DB_URL));
- dbProperties.setProperty("hibernate.connection.username", "openfire");
- // kuneProperties.get(KuneProperties.SITE_DB_USER));
- dbProperties.setProperty("hibernate.connection.password", "easyeasy");
- dbProperties.setProperty("exclude-unlisted-classes", "true");
-
- // kuneProperties.get(KuneProperties.SITE_DB_PASSWORD));
-
- jpm.properties(dbProperties);
- install(jpm.addFinder(OpenfireXmppRosterFinder.class));
- expose(OpenfireXmppRosterFinder.class);
-
- bind(XmppRosterProvider.class).to(OpenfireXmppRosterProvider.class).in(Singleton.class);
- expose(XmppRosterProvider.class);
-
- bind(Session.class).annotatedWith(DataSourceOpenfire.class).toProvider(
- DataSourceOpenfireSessionProvider.class);
- expose(Session.class).annotatedWith(DataSourceOpenfire.class);
-
- final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class);
- bind(EntityManager.class).annotatedWith(DataSourceOpenfire.class).toProvider(entityManagerProvider);
- expose(EntityManager.class).annotatedWith(DataSourceOpenfire.class);
-
- bind(MY_DATA_SOURCE_TWO_FILTER_KEY).to(CustomPersistFilter.class);
- expose(MY_DATA_SOURCE_TWO_FILTER_KEY);
-
- // bind(KunePersistenceInitializer.class).asEagerSingleton();
- }
-}
\ No newline at end of file
Deleted: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,26 +0,0 @@
-package cc.kune.core.server;
-
-import javax.persistence.EntityManager;
-
-import org.hibernate.Session;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class DataSourceOpenfireSessionProvider implements Provider<Session> {
- /** The entity manger to retrieve the session from. */
- @Inject
- @DataSourceOpenfire
- private Provider<EntityManager> entityManagerProvider;
-
- /**
- * @return the Hibernate session, being the delegate of the entity manager
- * provided by the injected entity manager provider.
- */
- @Override
- public Session get() {
- final Session session = (Session) entityManagerProvider.get().getDelegate();
- // configure session i.e. flush mode or filtering
- return session;
- }
-};
\ No newline at end of file
Deleted: trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,12 +0,0 @@
-package cc.kune.core.server;
-
-import com.google.inject.Inject;
-import com.google.inject.persist.PersistService;
-
-public class GenericPersistenceInitializer {
- @Inject
- GenericPersistenceInitializer(final PersistService service) {
- service.start();
- // At this point JPA is started and ready.
- }
-}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/core/server/KuneContainerListener.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KuneContainerListener.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/KuneContainerListener.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -31,6 +31,7 @@
import org.apache.log4j.PropertyConfigurator;
+import cc.kune.core.server.persist.KunePersistenceService;
import cc.kune.core.server.rack.ContainerListener;
import com.google.inject.Inject;
Deleted: trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2011 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-package cc.kune.core.server;
-
-import cc.kune.core.server.error.ServerException;
-import cc.kune.core.server.init.DatabaseInitializer;
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-@Singleton
-public class KunePersistenceService {
- @Inject
- DatabaseInitializer databaseInitializer;
-
- public void start() {
- try {
- databaseInitializer.initConditional();
- } catch (final Exception e) {
- throw new ServerException("Error starting persistence service", e);
- }
- }
-
-}
Modified: trunk/src/main/java/cc/kune/core/server/KuneRackModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -40,6 +40,7 @@
import cc.kune.core.server.manager.file.FileUploadManager;
import cc.kune.core.server.manager.file.UserLogoDownloadManager;
import cc.kune.core.server.manager.impl.GroupServerUtils;
+import cc.kune.core.server.persist.DataSourceKunePersistModule;
import cc.kune.core.server.rack.RackBuilder;
import cc.kune.core.server.rack.RackModule;
import cc.kune.core.server.rack.filters.ForwardFilter;
Deleted: trunk/src/main/java/cc/kune/core/server/KuneTransactional.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KuneTransactional.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/KuneTransactional.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -1,29 +0,0 @@
-package cc.kune.core.server;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ ElementType.METHOD, ElementType.TYPE })
-(a)Retention(RetentionPolicy.RUNTIME)
-@Inherited
-public @interface KuneTransactional {
-
- /**
- * A list of exceptions to <b>not<b> rollback on. A caveat to the rollbackOn
- * clause. The disjunction of rollbackOn and ignore represents the list of
- * exceptions that will trigger a rollback. The complement of rollbackOn and
- * the universal set plus any exceptions in the ignore set represents the list
- * of exceptions that will trigger a commit. Note that ignore exceptions take
- * precedence over rollbackOn, but with subtype granularity.
- */
- Class<? extends Exception>[] ignore() default {};
-
- /**
- * A list of exceptions to rollback on, if thrown by the transactional method.
- * These exceptions are propagated correctly after a rollback.
- */
- Class<? extends Exception>[] rollbackOn() default RuntimeException.class;
-}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/PlatformServerModule.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -91,6 +91,7 @@
import cc.kune.core.server.notifier.NotificationSenderDefault;
import cc.kune.core.server.notifier.PendingNotificationSender;
import cc.kune.core.server.notifier.UsersOnline;
+import cc.kune.core.server.persist.KunePersistenceService;
import cc.kune.core.server.rpc.ContentRPC;
import cc.kune.core.server.rpc.GroupRPC;
import cc.kune.core.server.rpc.I18nRPC;
Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -30,11 +30,11 @@
import cc.kune.core.client.errors.DefaultException;
import cc.kune.core.client.errors.MoveOnSameContainerException;
import cc.kune.core.client.errors.NameInUseException;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.SearchResult;
import cc.kune.core.server.manager.file.FileUtils;
import cc.kune.core.server.manager.impl.DefaultManager;
import cc.kune.core.server.manager.impl.ServerManagerException;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.server.utils.FilenameUtils;
import cc.kune.domain.AccessLists;
import cc.kune.domain.Container;
Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -46,7 +46,6 @@
import cc.kune.core.client.errors.MoveOnSameContainerException;
import cc.kune.core.client.errors.NameInUseException;
import cc.kune.core.client.errors.UserNotFoundException;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.access.FinderService;
import cc.kune.core.server.manager.SearchResult;
import cc.kune.core.server.manager.TagUserContentManager;
@@ -54,6 +53,7 @@
import cc.kune.core.server.manager.impl.DefaultManager;
import cc.kune.core.server.manager.impl.GroupServerUtils;
import cc.kune.core.server.manager.impl.ServerManagerException;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.server.tool.ServerTool;
import cc.kune.core.server.tool.ServerToolRegistry;
import cc.kune.core.server.utils.FilenameUtils;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -23,8 +23,8 @@
import javax.persistence.EntityManager;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.ExtMediaDescripManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.domain.ExtMediaDescrip;
import cc.kune.domain.finders.ExtMediaDescripFinder;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -39,12 +39,12 @@
import cc.kune.core.client.errors.GroupLongNameInUseException;
import cc.kune.core.client.errors.GroupShortNameInUseException;
import cc.kune.core.client.errors.UserMustBeLoggedException;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.FileManager;
import cc.kune.core.server.manager.GroupManager;
import cc.kune.core.server.manager.LicenseManager;
import cc.kune.core.server.manager.SearchResult;
import cc.kune.core.server.manager.file.FileUtils;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.server.properties.KuneBasicProperties;
import cc.kune.core.server.properties.KuneProperties;
import cc.kune.core.server.tool.ServerTool;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -23,8 +23,8 @@
import javax.persistence.EntityManager;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.I18nCountryManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.domain.I18nCountry;
import cc.kune.domain.finders.I18nCountryFinder;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -23,8 +23,8 @@
import javax.persistence.EntityManager;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.I18nLanguageManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.domain.I18nLanguage;
import cc.kune.domain.finders.I18nLanguageFinder;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -27,9 +27,9 @@
import cc.kune.common.shared.utils.TextUtils;
import cc.kune.core.client.errors.DefaultException;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.I18nLanguageManager;
import cc.kune.core.server.manager.I18nTranslationManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.shared.dto.I18nTranslationDTO;
import cc.kune.core.shared.dto.SearchResultDTO;
import cc.kune.domain.I18nLanguage;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -23,8 +23,8 @@
import javax.persistence.EntityManager;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.LicenseManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.server.properties.KuneBasicProperties;
import cc.kune.domain.License;
import cc.kune.domain.finders.LicenseFinder;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -22,8 +22,8 @@
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.RateManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.domain.Content;
import cc.kune.domain.Rate;
import cc.kune.domain.User;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -30,11 +30,11 @@
import cc.kune.core.client.errors.InvalidSNOperationException;
import cc.kune.core.client.errors.LastAdminInGroupException;
import cc.kune.core.client.errors.UserMustBeLoggedException;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.access.AccessRightsService;
import cc.kune.core.server.error.ServerException;
import cc.kune.core.server.manager.SocialNetworkManager;
import cc.kune.core.server.manager.UserManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.shared.domain.AdmissionType;
import cc.kune.core.shared.domain.GroupListMode;
import cc.kune.core.shared.domain.SocialNetworkVisibility;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -21,8 +21,8 @@
import javax.persistence.EntityManager;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.TagManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.domain.Tag;
import cc.kune.domain.finders.TagFinder;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -26,9 +26,9 @@
import javax.persistence.NoResultException;
import cc.kune.common.shared.utils.TextUtils;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.TagManager;
import cc.kune.core.server.manager.TagUserContentManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.shared.domain.TagCloudResult;
import cc.kune.core.shared.domain.TagCount;
import cc.kune.domain.Content;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -21,8 +21,8 @@
import javax.persistence.EntityManager;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.ToolConfigurationManager;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.domain.ToolConfiguration;
import com.google.inject.Inject;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -58,7 +58,6 @@
import cc.kune.core.client.errors.WrongCurrentPasswordException;
import cc.kune.core.client.state.SiteTokens;
import cc.kune.core.client.state.TokenUtils;
-import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.i18n.I18nTranslationServiceMultiLang;
import cc.kune.core.server.manager.GroupManager;
import cc.kune.core.server.manager.I18nCountryManager;
@@ -66,6 +65,7 @@
import cc.kune.core.server.manager.SearchResult;
import cc.kune.core.server.manager.UserManager;
import cc.kune.core.server.notifier.NotificationService;
+import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.server.properties.ChatProperties;
import cc.kune.core.server.properties.KuneBasicProperties;
import cc.kune.core.server.xmpp.ChatConnection;
Copied: trunk/src/main/java/cc/kune/core/server/persist/CustomPersistFilter.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/CustomPersistFilter.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/CustomPersistFilter.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,111 @@
+/**
+ * Copyright (C) 2010 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cc.kune.core.server.persist;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.google.inject.persist.PersistService;
+import com.google.inject.persist.UnitOfWork;
+
+/**
+ * Apply this filter to enable the HTTP Request unit of work and to have
+ * guice-persist manage the lifecycle of active units of work. The filter
+ * automatically starts and stops the relevant {@link PersistService} upon
+ * {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
+ * {@link javax.servlet.Filter#destroy()} respectively.
+ *
+ * <p>
+ * To be able to use the open session-in-view pattern (i.e. work per request),
+ * register this filter <b>once</b> in your Guice {@code ServletModule}. It is
+ * important that you register this filter before any other filter.
+ *
+ * For multiple providers, you should register this filter once per provider,
+ * inside a private module for each persist module installed (this must be the
+ * same private module where the specific persist module is itself installed).
+ *
+ * <p>
+ * Example configuration:
+ *
+ * <pre>
+ * {
+ * @code
+ * public class MyModule extends ServletModule {
+ * public void configureServlets() {
+ * filter("/*").through(PersistFilter.class);
+ *
+ * serve("/index.html").with(MyHtmlServlet.class);
+ * // Etc.
+ * }
+ * }
+ * }
+ * </pre>
+ * <p>
+ * This filter is thread safe and allows you to create injectors concurrently
+ * and deploy multiple guice-persist modules within the same injector, or even
+ * multiple injectors with persist modules withing the same JVM or web app.
+ * <p>
+ * This filter requires the Guice Servlet extension.
+ *
+ * @author Dhanji R. Prasanna (dhanji(a)gmail.com)
+ *
+ * (Custom PersistFilter.class modified for kune needs without
+ * persistence start/stop)
+ */
+
+@Singleton
+public class CustomPersistFilter implements Filter {
+ private final PersistService persistService;
+ private final UnitOfWork unitOfWork;
+
+ @Inject
+ public CustomPersistFilter(final UnitOfWork unitOfWork, final PersistService persistService) {
+ this.unitOfWork = unitOfWork;
+ this.persistService = persistService;
+ }
+
+ @Override
+ public void destroy() {
+ // Commented in kune
+ // persistService.stop();
+ }
+
+ @Override
+ public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse,
+ final FilterChain filterChain) throws IOException, ServletException {
+
+ unitOfWork.begin();
+ try {
+ filterChain.doFilter(servletRequest, servletResponse);
+ } finally {
+ unitOfWork.end();
+ }
+ }
+
+ @Override
+ public void init(final FilterConfig filterConfig) throws ServletException {
+ // Commented in kune (because if not this is started twice)
+ // persistService.start();
+ }
+}
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceKune.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceKune.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/DataSourceKune.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceKune.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,17 @@
+package cc.kune.core.server.persist;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.google.inject.BindingAnnotation;
+
+(a)Retention(RetentionPolicy.RUNTIME)
+@Target({ FIELD, PARAMETER, METHOD })
+@BindingAnnotation
+public @interface DataSourceKune {
+}
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java (from rev 1744, trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceKunePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,144 @@
+package cc.kune.core.server.persist;
+
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
+
+import org.apache.commons.configuration.SystemConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.Session;
+
+import cc.kune.core.server.properties.KuneProperties;
+import cc.kune.core.server.properties.KunePropertiesDefault;
+import cc.kune.domain.finders.ContainerFinder;
+import cc.kune.domain.finders.ContentFinder;
+import cc.kune.domain.finders.ExtMediaDescripFinder;
+import cc.kune.domain.finders.GroupFinder;
+import cc.kune.domain.finders.I18nCountryFinder;
+import cc.kune.domain.finders.I18nLanguageFinder;
+import cc.kune.domain.finders.I18nTranslationFinder;
+import cc.kune.domain.finders.LicenseFinder;
+import cc.kune.domain.finders.RateFinder;
+import cc.kune.domain.finders.TagFinder;
+import cc.kune.domain.finders.TagUserContentFinder;
+import cc.kune.domain.finders.UserFinder;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Key;
+import com.google.inject.Provider;
+import com.google.inject.persist.jpa.JpaPersistModule;
+
+public class DataSourceKunePersistModule extends AbstractModule {
+ // FIXME Trying to make this PrivateModule so we can have two Persist sources
+ // http://code.google.com/p/google-guice/wiki/GuicePersistMultiModules
+
+ public static final Log LOG = LogFactory.getLog(DataSourceKunePersistModule.class);
+ public static final Key<CustomPersistFilter> MY_DATA_SOURCE_ONE_FILTER_KEY = Key.get(
+ CustomPersistFilter.class, DataSourceKune.class);
+ private String settedJpaUnit = null;
+ private String settedProperties = null;
+
+ /**
+ * Instantiates this module (main constructor)
+ */
+ public DataSourceKunePersistModule() {
+ }
+
+ /**
+ * Instantiates this module only during tests
+ *
+ * @param settedProperties
+ * the setted properties
+ * @param settedJpaUnit
+ * the setted jpa unit
+ */
+ public DataSourceKunePersistModule(final String settedProperties, final String settedJpaUnit) {
+ this.settedProperties = settedProperties;
+ this.settedJpaUnit = settedJpaUnit;
+ }
+
+ @Override
+ public void configure() {
+ final SystemConfiguration sysConf = new SystemConfiguration();
+ final String kuneConfig = settedProperties != null ? settedProperties
+ : sysConf.getString("kune.server.config");
+
+ final KunePropertiesDefault kuneProperties = new KunePropertiesDefault(kuneConfig);
+ bind(KuneProperties.class).toInstance(kuneProperties);
+
+ // precedence method param > properties
+ final String configuredJpaUnit = kuneProperties.get(KuneProperties.SITE_DB_PERSISTENCE_NAME);
+ final String jpaUnit = settedJpaUnit != null ? settedJpaUnit
+ : configuredJpaUnit != null ? configuredJpaUnit : "development";
+ LOG.info(String.format("Using persistence unit '%s' and properties '%s'", jpaUnit, kuneConfig));
+
+ final JpaPersistModule jpm = new JpaPersistModule(jpaUnit);
+
+ if (!jpaUnit.equals("test")) {
+ // In tests (and development) we don't override this db info)
+ final Properties dbProperties = new Properties();
+ dbProperties.setProperty("hibernate.connection.url",
+ kuneProperties.get(KuneProperties.SITE_DB_URL));
+ dbProperties.setProperty("hibernate.connection.username",
+ kuneProperties.get(KuneProperties.SITE_DB_USER));
+ dbProperties.setProperty("hibernate.connection.password",
+ kuneProperties.get(KuneProperties.SITE_DB_PASSWORD));
+ jpm.properties(dbProperties);
+ }
+
+ jpm.addFinder(ContainerFinder.class);
+ jpm.addFinder(ContentFinder.class);
+ jpm.addFinder(ExtMediaDescripFinder.class);
+ jpm.addFinder(GroupFinder.class);
+ jpm.addFinder(I18nCountryFinder.class);
+ jpm.addFinder(I18nLanguageFinder.class);
+ jpm.addFinder(I18nTranslationFinder.class);
+ jpm.addFinder(LicenseFinder.class);
+ jpm.addFinder(RateFinder.class);
+ jpm.addFinder(TagFinder.class);
+ jpm.addFinder(TagUserContentFinder.class);
+ jpm.addFinder(UserFinder.class);
+ install(jpm);
+
+ bind(Session.class).annotatedWith(DataSourceKune.class).toProvider(
+ DataSourceKuneSessionProvider.class);
+
+ // FIXME: Trying to use a custom JpaLocalTxnInterceptor because when this
+ // module is private the objects are not persisted with the guice-persist
+ // @Transactional
+
+ // final KuneJpaLocalTxnInterceptor transactionInterceptor = new
+ // KuneJpaLocalTxnInterceptor();
+ // requestInjection(transactionInterceptor);
+ //
+ // bindInterceptor(annotatedWith(KuneTransactional.class), any(),
+ // transactionInterceptor);
+ // bindInterceptor(any(), annotatedWith(KuneTransactional.class),
+ // transactionInterceptor);
+
+ final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class);
+ bind(EntityManager.class).annotatedWith(DataSourceKune.class).toProvider(entityManagerProvider);
+
+ bind(MY_DATA_SOURCE_ONE_FILTER_KEY).to(CustomPersistFilter.class);
+
+ // expose(EntityManager.class).annotatedWith(DataSourceKune.class);
+ // expose(Session.class).annotatedWith(DataSourceKune.class);
+ // expose(KuneProperties.class);
+ // expose(ContainerFinder.class);
+ // expose(ContentFinder.class);
+ // expose(ExtMediaDescripFinder.class);
+ // expose(GroupFinder.class);
+ // expose(I18nCountryFinder.class);
+ // expose(I18nLanguageFinder.class);
+ // expose(I18nTranslationFinder.class);
+ // expose(LicenseFinder.class);
+ // expose(RateFinder.class);
+ // expose(TagFinder.class);
+ // expose(TagUserContentFinder.class);
+ // expose(UserFinder.class);
+ // expose(MY_DATA_SOURCE_ONE_FILTER_KEY);
+
+ bind(GenericPersistenceInitializer.class).asEagerSingleton();
+ }
+}
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceKuneSessionProvider.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/DataSourceKuneSessionProvider.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceKuneSessionProvider.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,26 @@
+package cc.kune.core.server.persist;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.Session;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class DataSourceKuneSessionProvider implements Provider<Session> {
+ /** The entity manger to retrieve the session from. */
+ @Inject
+ @DataSourceKune
+ private Provider<EntityManager> entityManagerProvider;
+
+ /**
+ * @return the Hibernate session, being the delegate of the entity manager
+ * provided by the injected entity manager provider.
+ */
+ @Override
+ public Session get() {
+ final Session session = (Session) entityManagerProvider.get().getDelegate();
+ // configure session i.e. flush mode or filtering
+ return session;
+ }
+};
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfire.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfire.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfire.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,17 @@
+package cc.kune.core.server.persist;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.google.inject.BindingAnnotation;
+
+(a)Retention(RetentionPolicy.RUNTIME)
+@Target({ FIELD, PARAMETER, METHOD })
+@BindingAnnotation
+public @interface DataSourceOpenfire {
+}
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfirePersistModule.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfirePersistModule.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfirePersistModule.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,60 @@
+package cc.kune.core.server.persist;
+
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.Session;
+
+import cc.kune.core.server.xmpp.OpenfireXmppRosterFinder;
+import cc.kune.core.server.xmpp.OpenfireXmppRosterProvider;
+import cc.kune.core.server.xmpp.XmppRosterProvider;
+
+import com.google.inject.Key;
+import com.google.inject.PrivateModule;
+import com.google.inject.Provider;
+import com.google.inject.Singleton;
+import com.google.inject.persist.jpa.JpaPersistModule;
+
+public class DataSourceOpenfirePersistModule extends PrivateModule {
+ public static final Key<CustomPersistFilter> MY_DATA_SOURCE_TWO_FILTER_KEY = Key.get(
+ CustomPersistFilter.class, DataSourceOpenfire.class);
+
+ @Override
+ public void configure() {
+ final JpaPersistModule jpm = new JpaPersistModule("openfire");
+ // jpm.properties(new Properties());
+
+ final Properties dbProperties = new Properties();
+ dbProperties.setProperty(
+ "hibernate.connection.url",
+ "jdbc:mysql://localhost/openfire4?createDatabaseIfNotExist=false&useUnicode=true&characterEncoding=UTF-8");
+ // kuneProperties.get(KuneProperties.SITE_DB_URL));
+ dbProperties.setProperty("hibernate.connection.username", "openfire");
+ // kuneProperties.get(KuneProperties.SITE_DB_USER));
+ dbProperties.setProperty("hibernate.connection.password", "easyeasy");
+ dbProperties.setProperty("exclude-unlisted-classes", "true");
+
+ // kuneProperties.get(KuneProperties.SITE_DB_PASSWORD));
+
+ jpm.properties(dbProperties);
+ install(jpm.addFinder(OpenfireXmppRosterFinder.class));
+ expose(OpenfireXmppRosterFinder.class);
+
+ bind(XmppRosterProvider.class).to(OpenfireXmppRosterProvider.class).in(Singleton.class);
+ expose(XmppRosterProvider.class);
+
+ bind(Session.class).annotatedWith(DataSourceOpenfire.class).toProvider(
+ DataSourceOpenfireSessionProvider.class);
+ expose(Session.class).annotatedWith(DataSourceOpenfire.class);
+
+ final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class);
+ bind(EntityManager.class).annotatedWith(DataSourceOpenfire.class).toProvider(entityManagerProvider);
+ expose(EntityManager.class).annotatedWith(DataSourceOpenfire.class);
+
+ bind(MY_DATA_SOURCE_TWO_FILTER_KEY).to(CustomPersistFilter.class);
+ expose(MY_DATA_SOURCE_TWO_FILTER_KEY);
+
+ // bind(KunePersistenceInitializer.class).asEagerSingleton();
+ }
+}
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfireSessionProvider.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfireSessionProvider.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/DataSourceOpenfireSessionProvider.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,26 @@
+package cc.kune.core.server.persist;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.Session;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class DataSourceOpenfireSessionProvider implements Provider<Session> {
+ /** The entity manger to retrieve the session from. */
+ @Inject
+ @DataSourceOpenfire
+ private Provider<EntityManager> entityManagerProvider;
+
+ /**
+ * @return the Hibernate session, being the delegate of the entity manager
+ * provided by the injected entity manager provider.
+ */
+ @Override
+ public Session get() {
+ final Session session = (Session) entityManagerProvider.get().getDelegate();
+ // configure session i.e. flush mode or filtering
+ return session;
+ }
+};
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/server/persist/GenericPersistenceInitializer.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/GenericPersistenceInitializer.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/GenericPersistenceInitializer.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,12 @@
+package cc.kune.core.server.persist;
+
+import com.google.inject.Inject;
+import com.google.inject.persist.PersistService;
+
+public class GenericPersistenceInitializer {
+ @Inject
+ GenericPersistenceInitializer(final PersistService service) {
+ service.start();
+ // At this point JPA is started and ready.
+ }
+}
\ No newline at end of file
Copied: trunk/src/main/java/cc/kune/core/server/persist/KunePersistenceService.java (from rev 1742, trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/KunePersistenceService.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/KunePersistenceService.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,41 @@
+/*
+ *
+ * Copyright (C) 2007-2011 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.core.server.persist;
+
+import cc.kune.core.server.error.ServerException;
+import cc.kune.core.server.init.DatabaseInitializer;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class KunePersistenceService {
+ @Inject
+ DatabaseInitializer databaseInitializer;
+
+ public void start() {
+ try {
+ databaseInitializer.initConditional();
+ } catch (final Exception e) {
+ throw new ServerException("Error starting persistence service", e);
+ }
+ }
+
+}
Copied: trunk/src/main/java/cc/kune/core/server/persist/KuneTransactional.java (from rev 1744, trunk/src/main/java/cc/kune/core/server/KuneTransactional.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/server/persist/KuneTransactional.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/persist/KuneTransactional.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -0,0 +1,29 @@
+package cc.kune.core.server.persist;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ ElementType.METHOD, ElementType.TYPE })
+(a)Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface KuneTransactional {
+
+ /**
+ * A list of exceptions to <b>not<b> rollback on. A caveat to the rollbackOn
+ * clause. The disjunction of rollbackOn and ignore represents the list of
+ * exceptions that will trigger a rollback. The complement of rollbackOn and
+ * the universal set plus any exceptions in the ignore set represents the list
+ * of exceptions that will trigger a commit. Note that ignore exceptions take
+ * precedence over rollbackOn, but with subtype granularity.
+ */
+ Class<? extends Exception>[] ignore() default {};
+
+ /**
+ * A list of exceptions to rollback on, if thrown by the transactional method.
+ * These exceptions are propagated correctly after a rollback.
+ */
+ Class<? extends Exception>[] rollbackOn() default RuntimeException.class;
+}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -5,8 +5,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import cc.kune.core.server.DataSourceOpenfire;
import cc.kune.core.server.manager.impl.DefaultManager;
+import cc.kune.core.server.persist.DataSourceOpenfire;
import com.google.inject.Inject;
import com.google.inject.Provider;
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -43,7 +43,7 @@
public class UserOptGeneralPresenter extends EntityOptGeneralPresenter implements UserOptGeneral {
- private boolean changeLanguage = true;
+ private boolean askChangeLanguage = true;
private final Provider<UserServiceAsync> userService;
private final UserOptGeneralView userView;
@@ -128,8 +128,8 @@
@Override
public void onSuccess(final StateAbstractDTO result) {
NotifyUser.hideProgress();
- if (changeLanguage) {
- i18n.changeToLanguageIfNecessary(lang.getCode(), lang.getEnglishName(), true,
+ if (askChangeLanguage) {
+ i18n.changeToLanguageIfNecessary(lang.getCode(), i18n.t(lang.getEnglishName()), true,
new I18nLanguageChangeNeeded() {
@Override
public void onChangeNeeded() {
@@ -137,7 +137,7 @@
@Override
public void onChangeNotNeeded() {
- changeLanguage = false;
+ askChangeLanguage = false;
stateManager.setRetrievedStateAndGo(result);
sendChangeEntityEvent();
}
Modified: trunk/src/test/java/cc/kune/core/server/PersistenceTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/PersistenceTest.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/test/java/cc/kune/core/server/PersistenceTest.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -24,6 +24,8 @@
import org.junit.Before;
+import cc.kune.core.server.persist.DataSourceKune;
+
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Provider;
Modified: trunk/src/test/java/cc/kune/core/server/TestHelper.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/TestHelper.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/test/java/cc/kune/core/server/TestHelper.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -34,6 +34,7 @@
import org.waveprotocol.wave.federation.noop.NoOpFederationModule;
import cc.kune.core.server.integration.HttpServletRequestMocked;
+import cc.kune.core.server.persist.DataSourceKunePersistModule;
import cc.kune.wave.server.CustomSettingsBinder;
import com.google.inject.Binder;
Modified: trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -32,10 +32,10 @@
import cc.kune.barters.server.BarterServerModule;
import cc.kune.chat.server.ChatServerModule;
-import cc.kune.core.server.KunePersistenceService;
-import cc.kune.core.server.DataSourceKunePersistModule;
import cc.kune.core.server.PlatformServerModule;
import cc.kune.core.server.TestConstants;
+import cc.kune.core.server.persist.DataSourceKunePersistModule;
+import cc.kune.core.server.persist.KunePersistenceService;
import cc.kune.docs.server.DocumentServerModule;
import cc.kune.events.server.EventsServerModule;
import cc.kune.lists.server.ListsServerModule;
Modified: trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java
===================================================================
--- trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java 2012-03-07 04:59:48 UTC (rev 1745)
+++ trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java 2012-03-07 12:19:26 UTC (rev 1746)
@@ -24,7 +24,7 @@
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
-import cc.kune.core.server.KuneTransactional;
+import cc.kune.core.server.persist.KuneTransactional;
import com.google.inject.Inject;
import com.google.inject.persist.UnitOfWork;
1
0
r1745 - in trunk/src/main/java/cc/kune: common/client/ui common/public core/client/auth core/client/errors core/client/i18n core/client/resources core/client/rpcservices core/server/manager/impl core/server/rpc core/shared/dto gspace/client/options gspace/client/options/general gspace/client/options/logo
by Vicente J. Ruiz Jurado 07 Mar '12
by Vicente J. Ruiz Jurado 07 Mar '12
07 Mar '12
Author: vjrj_
Date: 2012-03-07 05:59:48 +0100 (Wed, 07 Mar 2012)
New Revision: 1745
Added:
trunk/src/main/java/cc/kune/core/client/resources/pref-black.png
trunk/src/main/java/cc/kune/core/client/resources/pref-grey.png
trunk/src/main/java/cc/kune/core/client/resources/pref-white.png
Modified:
trunk/src/main/java/cc/kune/common/client/ui/IconLabel.java
trunk/src/main/java/cc/kune/common/public/kune-common.css
trunk/src/main/java/cc/kune/core/client/auth/SignInAbstractPresenter.java
trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java
trunk/src/main/java/cc/kune/core/client/i18n/I18nUITranslationService.java
trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java
trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java
trunk/src/main/java/cc/kune/core/server/manager/impl/EmailConfirmationType.java
trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java
trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java
trunk/src/main/java/cc/kune/gspace/client/options/GroupOptionsPresenter.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java
trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java
trunk/src/main/java/cc/kune/gspace/client/options/logo/EntityUploaderForm.java
Log:
Email change from UI. Pref Icon changed. Some ccs fix. Language change optional.
Modified: trunk/src/main/java/cc/kune/common/client/ui/IconLabel.java
===================================================================
--- trunk/src/main/java/cc/kune/common/client/ui/IconLabel.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/common/client/ui/IconLabel.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -22,6 +22,7 @@
import java.util.Iterator;
import cc.kune.common.client.tooltip.Tooltip;
+import cc.kune.common.shared.utils.TextUtils;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
@@ -74,7 +75,8 @@
initWidget(uiBinder.createAndBindUi(this));
label.setText(text);
label.addStyleName("k-space-nowrap");
- label.addStyleName("k-iconlabel-text");
+ label.setStylePrimaryName("k-iconlabel");
+ setTextStyle(text);
iconLeft.setVisible(false);
iconRight.setVisible(false);
}
@@ -202,13 +204,20 @@
@Override
public void setText(final String text) {
label.setText(text, Direction.LTR);
+ setTextStyle(text);
}
@Override
public void setText(final String text, final Direction dir) {
label.setText(text, dir);
+ setTextStyle(text);
}
+ private void setTextStyle(final String text) {
+ label.setStyleDependentName("notext", TextUtils.empty(text));
+ label.setStyleDependentName("text", !TextUtils.empty(text));
+ }
+
public void setTooltip(final String text) {
Tooltip.to(label, text);
}
Modified: trunk/src/main/java/cc/kune/common/public/kune-common.css
===================================================================
--- trunk/src/main/java/cc/kune/common/public/kune-common.css 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/common/public/kune-common.css 2012-03-07 04:59:48 UTC (rev 1745)
@@ -471,11 +471,19 @@
.k-iconlabel-text {
vertical-align: top;
+ float: right;
+}
+
+.k-iconlabel-text {
padding-left: 3px;
padding-right: 3px;
- float: right;
}
+.k-iconlabel-notext {
+ padding-left: 0px;
+ padding-right: 0px;
+}
+
.k-iconlabel-left {
float: left;
}
Modified: trunk/src/main/java/cc/kune/core/client/auth/SignInAbstractPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/auth/SignInAbstractPresenter.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/client/auth/SignInAbstractPresenter.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -94,7 +94,7 @@
session.setCurrentUserInfo(userInfoDTO);
final I18nLanguageDTO language = userInfoDTO.getLanguage();
session.setCurrentLanguage(language);
- i18n.changeToLanguageIfNecessary(language.getCode(), language.getEnglishName(),
+ i18n.changeToLanguageIfNecessary(language.getCode(), language.getEnglishName(), true,
new I18nLanguageChangeNeeded() {
@Override
Modified: trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -24,11 +24,11 @@
import cc.kune.common.client.notify.NotifyUser;
import cc.kune.common.client.notify.ProgressHideEvent;
import cc.kune.common.client.notify.UserNotifyEvent;
-import cc.kune.common.shared.i18n.I18nTranslationService;
import cc.kune.common.shared.utils.TextUtils;
import cc.kune.core.client.events.GoHomeEvent;
import cc.kune.core.client.events.StackErrorEvent;
import cc.kune.core.client.events.UserMustBeLoggedEvent;
+import cc.kune.core.client.i18n.I18nUITranslationService;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
@@ -37,10 +37,10 @@
public class ErrorHandler {
private final EventBus eventBus;
- private final I18nTranslationService i18n;
+ private final I18nUITranslationService i18n;
@Inject
- public ErrorHandler(final I18nTranslationService i18n, final EventBus eventBus) {
+ public ErrorHandler(final I18nUITranslationService i18n, final EventBus eventBus) {
this.i18n = i18n;
this.eventBus = eventBus;
}
@@ -122,6 +122,9 @@
logException(caught);
eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error,
i18n.t("This user is already a group member")));
+ } else if (caught instanceof EmailAddressInUseException) {
+ eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error, i18n.t(
+ "This email is already used in [%s]. Please choose another.", i18n.getSiteCommonName())));
} else if (caught instanceof EmailHashInvalidException) {
logException(caught);
eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error,
Modified: trunk/src/main/java/cc/kune/core/client/i18n/I18nUITranslationService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/i18n/I18nUITranslationService.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/client/i18n/I18nUITranslationService.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -110,7 +110,7 @@
+ shouldIuseProperties());
changeToLanguageIfNecessary(getCurrentGWTlanguage(), currentLang.getCode(),
- currentLang.getEnglishName(), new I18nLanguageChangeNeeded() {
+ currentLang.getEnglishName(), false, new I18nLanguageChangeNeeded() {
@Override
public void onChangeNeeded() {
@@ -181,8 +181,8 @@
}
public void changeToLanguageIfNecessary(final String wantedLang, final String wantedLangEnglishName,
- final I18nLanguageChangeNeeded listener) {
- changeToLanguageIfNecessary(currentLang.getCode(), wantedLang, wantedLangEnglishName, listener);
+ final boolean ask, final I18nLanguageChangeNeeded listener) {
+ changeToLanguageIfNecessary(currentLang.getCode(), wantedLang, wantedLangEnglishName, ask, listener);
}
/**
@@ -192,25 +192,31 @@
* @return true if we should reload the client with the new language
*/
private void changeToLanguageIfNecessary(final String currentLangCode, final String wantedLang,
- final String wantedLangEnglishName, final I18nLanguageChangeNeeded listener) {
+ final String wantedLangEnglishName, final boolean ask, final I18nLanguageChangeNeeded listener) {
if (!currentLangCode.equals(wantedLang) && isInConstantProperties(wantedLang)) {
- NotifyUser.askConfirmation(t("Confirm please"),
- t("Do you want to reload this page to use '[%s]' language?", wantedLangEnglishName),
- new SimpleResponseCallback() {
- @Override
- public void onCancel() {
- // User no accepted to change the language...
- listener.onChangeNotNeeded();
- }
+ if (!ask) {
+ listener.onChangeNeeded();
+ setCurrentLanguage(wantedLang);
+ changeLanguageInUrl(wantedLang);
+ } else {
+ NotifyUser.askConfirmation(t("Confirm please"),
+ t("Do you want to reload this page to use '[%s]' language?", wantedLangEnglishName),
+ new SimpleResponseCallback() {
+ @Override
+ public void onCancel() {
+ // User no accepted to change the language...
+ listener.onChangeNotNeeded();
+ }
- @Override
- public void onSuccess() {
- // User accepted to change the language...
- listener.onChangeNeeded();
- setCurrentLanguage(wantedLang);
- changeLanguageInUrl(wantedLang);
- }
- });
+ @Override
+ public void onSuccess() {
+ // User accepted to change the language...
+ listener.onChangeNeeded();
+ setCurrentLanguage(wantedLang);
+ changeLanguageInUrl(wantedLang);
+ }
+ });
+ }
} else {
listener.onChangeNotNeeded();
}
Modified: trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/client/resources/CoreResources.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -442,9 +442,18 @@
@Source("person-def.png")
ImageResource personDef();
+ @Source("pref-black.png")
+ ImageResource prefBlack();
+
+ @Source("pref-grey.png")
+ ImageResource prefGrey();
+
@Source("prefs.png")
ImageResource prefs();
+ @Source("pref-white.png")
+ ImageResource prefWhite();
+
@Source("question32.png")
ImageResource question32();
Added: trunk/src/main/java/cc/kune/core/client/resources/pref-black.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/cc/kune/core/client/resources/pref-black.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/cc/kune/core/client/resources/pref-grey.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/cc/kune/core/client/resources/pref-grey.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/cc/kune/core/client/resources/pref-white.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/cc/kune/core/client/resources/pref-white.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/client/rpcservices/UserService.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -20,9 +20,11 @@
package cc.kune.core.client.rpcservices;
import cc.kune.core.client.errors.DefaultException;
+import cc.kune.core.client.errors.EmailAddressInUseException;
import cc.kune.core.client.errors.EmailHashExpiredException;
import cc.kune.core.client.errors.EmailHashInvalidException;
import cc.kune.core.client.errors.EmailNotFoundException;
+import cc.kune.core.client.errors.GroupLongNameInUseException;
import cc.kune.core.shared.domain.UserSNetVisibility;
import cc.kune.core.shared.domain.utils.StateToken;
import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
@@ -62,7 +64,8 @@
void setBuddiesVisibility(String userHash, StateToken groupToken, UserSNetVisibility visibility);
- StateAbstractDTO updateUser(String userHash, UserDTO user, I18nLanguageSimpleDTO lang);
+ StateAbstractDTO updateUser(String userHash, UserDTO user, I18nLanguageSimpleDTO lang)
+ throws DefaultException, EmailAddressInUseException, GroupLongNameInUseException;
void verifyPasswordHash(String userHash, String emailReceivedHash) throws EmailHashInvalidException,
EmailHashExpiredException;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/EmailConfirmationType.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/EmailConfirmationType.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/EmailConfirmationType.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -5,6 +5,6 @@
* types of email confirmation/verification
*/
public enum EmailConfirmationType {
- emailVerification, fstTimeEmailVerification, passwordReset
+ emailVerification, passwordReset
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -152,7 +152,6 @@
switch (type) {
case emailVerification:
- case fstTimeEmailVerification:
notifyService.sendEmailToWithLink(user, "Please verify your email",
"Please click in the following link to verify your email at %s:",
TokenUtils.addRedirect(SiteTokens.VERIFY_EMAIL, hash));
@@ -461,6 +460,8 @@
if (email != null && !email.equals(user.getEmail())) {
checkIfEmailAreInUse(email);
user.setEmail(email);
+ user.setEmailVerified(false);
+ askForEmailConfirmation(user, EmailConfirmationType.emailVerification);
}
user.setLanguage(findLanguage(lang.getCode()));
persist(user);
Modified: trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/server/rpc/UserRPC.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -29,9 +29,11 @@
import cc.kune.core.client.errors.AccessViolationException;
import cc.kune.core.client.errors.DefaultException;
+import cc.kune.core.client.errors.EmailAddressInUseException;
import cc.kune.core.client.errors.EmailHashExpiredException;
import cc.kune.core.client.errors.EmailHashInvalidException;
import cc.kune.core.client.errors.EmailNotFoundException;
+import cc.kune.core.client.errors.GroupLongNameInUseException;
import cc.kune.core.client.errors.UserAuthException;
import cc.kune.core.client.rpcservices.UserService;
import cc.kune.core.server.UserSession;
@@ -239,7 +241,8 @@
@Authenticated
@Transactional
public StateAbstractDTO updateUser(final String userHash, final UserDTO user,
- final I18nLanguageSimpleDTO lang) throws DefaultException {
+ final I18nLanguageSimpleDTO lang) throws DefaultException, EmailAddressInUseException,
+ GroupLongNameInUseException {
final Long id = userSessionManager.getUser().getId();
if (!id.equals(user.getId())) {
throw new AccessViolationException();
Modified: trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -26,6 +26,7 @@
public class UserSimpleDTO implements IsSerializable {
private String compoundName;
private I18nCountryDTO country;
+ private String email;
private EmailNotificationFrequency emailNotifFreq;
private boolean emailVerified;
private boolean hasLogo;
@@ -89,6 +90,10 @@
return country;
}
+ public String getEmail() {
+ return email;
+ }
+
public EmailNotificationFrequency getEmailNotifFreq() {
return emailNotifFreq;
}
@@ -146,6 +151,10 @@
this.country = country;
}
+ public void setEmail(final String email) {
+ this.email = email;
+ }
+
public void setEmailNotifFreq(final EmailNotificationFrequency emailNotifFreq) {
this.emailNotifFreq = emailNotifFreq;
}
Modified: trunk/src/main/java/cc/kune/gspace/client/options/GroupOptionsPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/GroupOptionsPresenter.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/gspace/client/options/GroupOptionsPresenter.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -80,7 +80,7 @@
}
};
// groupPrefsAction.putValue(Action.NAME, i18n.t("Group options"));
- groupPrefsAction.putValue(Action.SMALL_ICON, img.prefs());
+ groupPrefsAction.putValue(Action.SMALL_ICON, img.prefGrey());
prefsItem = new ButtonDescriptor(groupPrefsAction);
prefsItem.withStyles("k-ent-header-btn, k-btn-min");
// k-noborder,
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -43,12 +43,15 @@
private static final String BIG_FIELD_SIZE = "310px";
public static final String DAILY_TYPE_ID = "k-ngp-type_daily";
+ public static final String EMAIL_FIELD = "k-ngp-emial";
public static final String HOURLY_TYPE_ID = "k-ngp-type_hourly";
public static final String IMMEDIATE_TYPE_ID = "k-ngp-type_immedi";
- private static final String LONG_NAME_FIELD = "k-uogp-lname";
+ public static final String LONG_NAME_FIELD = "k-uogp-lname";
public static final String NO_TYPE_ID = "k-ngp-type_no";
public static final String TYPEOFEMAILNOTIF_FIELD = "k-ngp-type_of_email_notif";
+
private final Radio dailyRadio;
+ private final TextField<String> email;
private final FieldSet emailNotifTypeFieldSet;
private final Radio hourlyRadio;
private final Radio immediateRadio;
@@ -57,7 +60,6 @@
private final Radio noRadio;
private final AdapterField notVerifLabelAdapter;
private final AdapterField resendEmailVerifAdapter;
-
private final Button resendEmailVerifBtn;
@Inject
@@ -73,6 +75,9 @@
langSelector.setLangSeparator(":");
add(langSelector);
+ email = userFieldFactory.createUserEmail(EMAIL_FIELD);
+ add(email);
+
emailNotifTypeFieldSet = new FieldSet();
emailNotifTypeFieldSet.setHeading(i18n.t("How often do you want to receive email notifications?"));
emailNotifTypeFieldSet.addStyleName("k-form-fieldset");
@@ -131,6 +136,11 @@
}
@Override
+ public String getEmail() {
+ return email.getValue();
+ }
+
+ @Override
public EmailNotificationFrequency getEmailNotif() {
if (immediateRadio.getValue()) {
return EmailNotificationFrequency.immediately;
@@ -161,6 +171,11 @@
}
@Override
+ public void setEmail(final String email) {
+ this.email.setValue(email);
+ }
+
+ @Override
public void setEmailNotifChecked(final EmailNotificationFrequency freq) {
switch (freq) {
case no:
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPresenter.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -43,7 +43,9 @@
public class UserOptGeneralPresenter extends EntityOptGeneralPresenter implements UserOptGeneral {
+ private boolean changeLanguage = true;
private final Provider<UserServiceAsync> userService;
+
private final UserOptGeneralView userView;
@Inject
@@ -101,6 +103,7 @@
userView.setEmailNotifChecked(currentUser.getEmailNotifFreq());
userView.setEmailVerified(currentUser.isEmailVerified());
userView.setResendEmailVerifEnabled(!currentUser.isEmailVerified());
+ userView.setEmail(currentUser.getEmail());
}
@Override
@@ -117,6 +120,7 @@
user.setId(currentUser.getId());
final String longName = userView.getLongName();
user.setName(longName);
+ user.setEmail(userView.getEmail());
final I18nLanguageSimpleDTO lang = userView.getLanguage();
user.setEmailNotifFreq(userView.getEmailNotif());
userService.get().updateUser(session.getUserHash(), user, userView.getLanguage(),
@@ -124,19 +128,21 @@
@Override
public void onSuccess(final StateAbstractDTO result) {
NotifyUser.hideProgress();
- // Change language to new one if needed
- i18n.changeToLanguageIfNecessary(lang.getCode(), lang.getEnglishName(),
- new I18nLanguageChangeNeeded() {
- @Override
- public void onChangeNeeded() {
- }
+ if (changeLanguage) {
+ i18n.changeToLanguageIfNecessary(lang.getCode(), lang.getEnglishName(), true,
+ new I18nLanguageChangeNeeded() {
+ @Override
+ public void onChangeNeeded() {
+ }
- @Override
- public void onChangeNotNeeded() {
- stateManager.setRetrievedStateAndGo(result);
- sendChangeEntityEvent();
- }
- });
+ @Override
+ public void onChangeNotNeeded() {
+ changeLanguage = false;
+ stateManager.setRetrievedStateAndGo(result);
+ sendChangeEntityEvent();
+ }
+ });
+ }
};
});
}
Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -26,6 +26,8 @@
public interface UserOptGeneralView extends EntityOptGeneralView {
+ String getEmail();
+
EmailNotificationFrequency getEmailNotif();
I18nLanguageSimpleDTO getLanguage();
@@ -34,10 +36,12 @@
HasClickHandlers getResendEmailVerif();
- void setEmailVerified(boolean verified);
+ void setEmail(String email);
void setEmailNotifChecked(EmailNotificationFrequency freq);
+ void setEmailVerified(boolean verified);
+
void setLanguage(I18nLanguageSimpleDTO language);
void setLongName(String longName);
Modified: trunk/src/main/java/cc/kune/gspace/client/options/logo/EntityUploaderForm.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/logo/EntityUploaderForm.java 2012-03-07 02:43:00 UTC (rev 1744)
+++ trunk/src/main/java/cc/kune/gspace/client/options/logo/EntityUploaderForm.java 2012-03-07 04:59:48 UTC (rev 1745)
@@ -44,7 +44,7 @@
public EntityUploaderForm(final String servlet, final String btnText) {
btn = new EntityOptUploadButton(btnText);
- uploader = new MultiUploader(FileInputType.CUSTOM.with(btn));
+ uploader = new MultiUploader(FileInputType.CUSTOM.with(btn, true));
uploader.setServletPath(servlet);
uploader.setMaximumFiles(1);
uploader.setValidExtensions("png", "jpg", "gif", "jpeg", "bmp");
1
0
r1744 - in trunk: . docs src/main/java/cc/kune/core/server src/main/java/cc/kune/core/server/init src/test/java/cc/kune/core/server/integration src/test/java/com/google src/test/java/com/google/inject src/test/java/com/google/inject/persist src/test/java/com/google/inject/persist/jpa
by Vicente J. Ruiz Jurado 07 Mar '12
by Vicente J. Ruiz Jurado 07 Mar '12
07 Mar '12
Author: vjrj_
Date: 2012-03-07 03:43:00 +0100 (Wed, 07 Mar 2012)
New Revision: 1744
Added:
trunk/src/main/java/cc/kune/core/server/KuneTransactional.java
trunk/src/test/java/com/google/inject/
trunk/src/test/java/com/google/inject/persist/
trunk/src/test/java/com/google/inject/persist/jpa/
trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java
Modified:
trunk/BUGS
trunk/TROUBLESHOOT
trunk/docs/kune-guice-graph.dot
trunk/docs/wave-guice-graph.dot
trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java
trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java
trunk/src/test/java/cc/kune/core/server/integration/DatabaseInitializerTest.java
Log:
Modified: trunk/BUGS
===================================================================
--- trunk/BUGS 2012-03-06 21:40:19 UTC (rev 1743)
+++ trunk/BUGS 2012-03-07 02:43:00 UTC (rev 1744)
@@ -3,5 +3,4 @@
For reports please use:
http://kune.ourproject.org/issues/
-
- Direct link to add a issue: http://kune.ourproject.org/issues/newticket
+ Direct link to add a issue: http://kune.ourproject.org/issues/newticket
Modified: trunk/TROUBLESHOOT
===================================================================
--- trunk/TROUBLESHOOT 2012-03-06 21:40:19 UTC (rev 1743)
+++ trunk/TROUBLESHOOT 2012-03-07 02:43:00 UTC (rev 1744)
@@ -1,87 +1,37 @@
-=TROUBLESHOOTING=
+TROUBLESHOOTING for kune -*- mode: org; -*-
+#+ARCHIVE: %s_done::
-==Server debug==
+* TROUBLESHOOTING
-You can debug the server running from eclipse as external tool:
- 'script/kune server via mvn with debug.launch'
-and after this the debug launch:
- 'script/kune server debug.launch'
-that connects the debugger to the port 8001 of the running server.
+** Too many files open
-Related: debug with jetty in eclipse:
-http://docs.codehaus.org/display/JETTY/Debugging+with+the+Maven+Jetty+Plugin+inside+Eclipse
+If running all the Kune test you get errors about "Too many files open" see:
+http://code.google.com/p/gwt-examples/wiki/gwtEclipseFaqs
+about how to fix it in your system.
-Also for different logging levels you can play with -Dorg.eclipse.jetty.util.log.DEBUG=true (or similars)
+** Error generating CoreResources
-See also log4j.properties in src/main/resources/
+[INFO] Computing all possible rebind results for 'cc.kune.core.client.resources.CoreResources' [INFO] Rebinding cc.kune.core.client.resources.CoreResources [INFO] Invoking generator com.google.gwt.resources.rebind.context.StaticClientBundleGenerator [INFO] [ERROR] Generator 'com.google.gwt.resources.rebind.context.StaticClientBundleGenerator' threw an exception while rebinding 'cc.kune.cor
+ [INFO] at com.google.gwt.dev.util.Util.computeStrongName(Util.java:170) [INFO] at com.google.gwt.dev.util.Util.computeStrongName(Util.java:145) [INFO] at com.google.gwt.resources.rebind.context.StaticResourceContext.deploy(StaticResourceContext.java:61)
-==Client debug==
+http://code.google.com/p/google-web-toolkit/issues/detail?id=6103
-You can debug the client with the eclipse launch configuration 'script/kune client -no-server.launch'.
+The gwt compiler is trying to create a sprite sheet, an image with all the icons all together (to minimize calls from client to server) but cannot open all the files. This happens normally when ulimit is not setted. See: "Too many files open" above.
-==Firebug and client log levels==
+** If you change some .properties or configuration files in src directory
-To increase client logging add ?log_level=DEBUG# to the url and use firebug firefox extension to see the output.
-
-==Emite troubleshooting==
-
-See:
-http://code.google.com/p/emite/wiki/Troubleshooting
-
-==Liquibase==
-
-===Checksum errors===
-
-Migration Failed: Validation Failed:1 change sets failed MD5Sum Check src/main/resources/db/liquibase_changelog.xml :: 18 :: vjrj :: (MD5Sum: bde0aa519108e1e3d1f29bb2483bc9)
-
-Don't try to update the liquibase changelogs you have already use. Better create new ones to delete, update, and so on. If you are developing and want to clear the checksums, you can use the command "clearCheckSums". See script/liquibase-* and http://www.liquibase.org/manual/command_line
-
-==Lucene==
-
-===Indexes problems during upgrades===
-
-If you get errors like:
-
-org.ourproject.kune.platf.server.ServerException: Error starting persistence service
-(...)
-Caused by: org.hibernate.search.SearchException: Unable to open IndexWriter for class org.ourproject.kune.platf.server.domain.User
-(...)
-Caused by: org.apache.lucene.index.CorruptIndexException: Unknown format version: -7
-
-The indexes in /var/lib/kune/lucene/kune*/indexes/ are not compatible. For the moment the only workaround we now it's to delete the indexes.
-
-Sometimes the tests also fails without any error (use the same workaround).
-
-==JUnit==
-
-Running all the Kune test from eclipse I get connection pool exceptions like:
- Connections could not be acquired from the underlying database
-
-We have problems testing all test together from eclipse and using real db (not the h2 memory db)
-
-==Too many files open==
-
-If running all the Kune test you get errors about "Too many files open" see:
-http://code.google.com/p/gwt-examples/wiki/gwtEclipseFaqs
-about how to fix it in your system.
-
-==If you change some .properties or configuration files in src directory==
-
Be sure to do mvn compile (that copy them to the target directory)
-==If the client get: Error fetching initial data from Kune server==
+** Mysql
+*** Mysql: Caused by: java.sql.SQLException: Access denied for user 'kune'@'localhost' (using password: YES)
-Probably the client code is outdated from the server code (or viceversa). Try to get both codes in sync compiling it.
-
-==Mysql: Caused by: java.sql.SQLException: Access denied for user 'kune'@'localhost' (using password: YES)==
-
Check that the password you have use in the database creation it's the same like the kune.properties. If it's wrong maybe you have to remove the mysql user (DROP USER) and repeat the GRANT sentences of the INSTALL.
Also, be sure you do a "mvn compile" if you are running kune from the source and you change the kune.properties file to not use the old one.
If you have this problem with openfire it's not enough to change the password in openfire.xml because probably it's already stored in the ofProperty openfire table and you need to change the password there.
-==Other mysql errors==
+*** Other mysql errors
If you get this warning, probably you have connection problems between kune and your database:
@@ -100,7 +50,7 @@
#general_log = 1
in /etc/mysql/my.cnf
-==If during initialization (first start) you get a 'Account already exists'==
+** If during initialization (first start) you get a 'Account already exists'
If you stopped the first initialization and the server init is half started you will get something like:
@@ -109,8 +59,43 @@
trying to run kune and creating the DB. So better remove the first account of wave and related /var/lib/kune/_*
-==Eclipse & GWT==
+** Liquibase
+*** Checksum errors
+
+Migration Failed: Validation Failed:1 change sets failed MD5Sum Check src/main/resources/db/liquibase_changelog.xml :: 18 :: vjrj :: (MD5Sum: bde0aa519108e1e3d1f29bb2483bc9)
+
+Don't try to update the liquibase changelogs you have already use. Better create new ones to delete, update, and so on. If you are developing and want to clear the checksums, you can use the command "clearCheckSums". See script/liquibase-* and http://www.liquibase.org/manual/command_line
+
+** Lucene
+
+*** Indexes problems during upgrades
+
+If you get errors like:
+
+org.ourproject.kune.platf.server.ServerException: Error starting persistence service
+(...)
+Caused by: org.hibernate.search.SearchException: Unable to open IndexWriter for class org.ourproject.kune.platf.server.domain.User
+(...)
+Caused by: org.apache.lucene.index.CorruptIndexException: Unknown format version: -7
+
+The indexes in /var/lib/kune/lucene/kune*/indexes/ are not compatible. For the moment the only workaround we now it's to delete the indexes.
+
+Sometimes the tests also fails without any error (use the same workaround).
+
+** JUnit
+
+Running all the Kune test from eclipse I get connection pool exceptions like:
+ Connections could not be acquired from the underlying database
+
+We have problems testing all test together from eclipse and using real db (not the h2 memory db)
+
+** If the client get: Error fetching initial data from Kune server
+
+Probably the client code is outdated from the server code (or viceversa). Try to get both codes in sync compiling it.
+
+** Eclipse & GWT
+
If you have some tests with error like "can not be found in source packages. Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly" and you have installed GWTDesigner, uncheck "client classpath": http://code.google.com/webtoolkit/tools/gwtdesigner/preferences/gwt/prefere…
Error: Invalid version number "2.0" passed to external.gwtOnLoad(), expected "2.1"; your hosted mode bootstrap file may be out of date; if you are using -noserver try recompiling and redeploying your app
@@ -125,26 +110,48 @@
Error: Problem with Eclipse plugin and UiBinder "Field xxx has no corresponding field in template file yyy.ui.xml"
https://code.google.com/p/google-web-toolkit/issues/detail?id=4353
-==Too many GWT permutations?==
+** Outbound variable M2_REPO
+Set M2_REPO to eclipse in Preferences > Java > Build Path > Classpath Variable (normally to /home/youruser/.m2/repository/)
+
+** Too many GWT permutations?
+
Compile in PRETTY mode and edit target/kune-VERSION/ws/ws.nocache.js and look for 'unflattenKeylistIntoAnswers' to see a permutation list. See:
https://groups.google.com/group/google-web-toolkit/browse_thread/thread/ec7…
If you want to compile less permutations (only for dev or testing), comment some locale and user.agent in src/main/java/cc/kune/Kune.gwt.xml
-==Outbound variable M2_REPO==
+** Eclipse startup is slow
-Set M2_REPO to eclipse in Preferences > Java > Build Path > Classpath Variable (normally to /home/youruser/.m2/repository/)
+Check, for instance, the first points of:
+http://www.beyondlinux.com/2011/06/25/speed-up-your-eclipse-as-a-super-fast-ide/
-==Error generating CoreResources==
+** Emite troubleshooting
-[INFO] Computing all possible rebind results for 'cc.kune.core.client.resources.CoreResources' [INFO] Rebinding cc.kune.core.client.resources.CoreResources [INFO] Invoking generator com.google.gwt.resources.rebind.context.StaticClientBundleGenerator [INFO] [ERROR] Generator 'com.google.gwt.resources.rebind.context.StaticClientBundleGenerator' threw an exception while rebinding 'cc.kune.cor
- [INFO] at com.google.gwt.dev.util.Util.computeStrongName(Util.java:170) [INFO] at com.google.gwt.dev.util.Util.computeStrongName(Util.java:145) [INFO] at com.google.gwt.resources.rebind.context.StaticResourceContext.deploy(StaticResourceContext.java:61)
+See:
+http://code.google.com/p/emite/wiki/Troubleshooting
-http://code.google.com/p/google-web-toolkit/issues/detail?id=6103
+** Debugging
-The gwt compiler is trying to create a sprite sheet, an image with all the icons all together (to minimize calls from client to server) but cannot open all the files. This happens normally when ulimit is not setted. See: "Too many files open" above.
+*** Server debug
-==Eclipse startup is slow==
-Check, for instance, the first points of:
-http://www.beyondlinux.com/2011/06/25/speed-up-your-eclipse-as-a-super-fast-ide/
\ No newline at end of file
+You can debug the server running from eclipse as external tool:
+ 'script/kune server via mvn with debug.launch'
+and after this the debug launch:
+ 'script/kune server debug.launch'
+that connects the debugger to the port 8001 of the running server.
+
+Related: debug with jetty in eclipse:
+http://docs.codehaus.org/display/JETTY/Debugging+with+the+Maven+Jetty+Plugin+inside+Eclipse
+
+Also for different logging levels you can play with -Dorg.eclipse.jetty.util.log.DEBUG=true (or similars)
+
+See also log4j.properties in src/main/resources/
+
+*** Client debug
+
+You can debug the client with the eclipse launch configuration 'script/kune client -no-server.launch'.
+
+*** Firebug and client log levels
+
+To increase client logging add ?log_level=DEBUG# to the url and use firebug firefox extension to see the output.
Modified: trunk/docs/kune-guice-graph.dot
===================================================================
--- trunk/docs/kune-guice-graph.dot 2012-03-06 21:40:19 UTC (rev 1743)
+++ trunk/docs/kune-guice-graph.dot 2012-03-07 02:43:00 UTC (rev 1744)
@@ -1,709 +1,709 @@
digraph injector {
graph [rankdir=TB];
-k_c92e8c4d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletRequest<br align="left"/></font></td></tr></table>>, shape=box]
-k_2ca5daf6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletResponse<br align="left"/></font></td></tr></table>>, shape=box]
-k_57676221 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FilterPipeline<br align="left"/></font></td></tr></table>>, shape=box]
-k_c2892102 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletContext<br align="left"/></font></td></tr></table>>, shape=box]
-k_3208fff2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpServletRequest<br align="left"/></font></td></tr></table>>, shape=box]
-i_3208fff2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:95<br align="left"/></font><font color="#ffffff">#provideHttpServletRequest()<br align="left"/></font></td></tr></table>>, shape=box]
-k_ef0fca5f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpServletResponse<br align="left"/></font></td></tr></table>>, shape=box]
-i_ef0fca5f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:99<br align="left"/></font><font color="#ffffff">#provideHttpServletResponse()<br align="left"/></font></td></tr></table>>, shape=box]
-k_e44414fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpSession<br align="left"/></font></td></tr></table>>, shape=box]
-i_e44414fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:103<br align="left"/></font><font color="#ffffff">#provideHttpSession()<br align="left"/></font></td></tr></table>>, shape=box]
-k_77c04a82 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@RequestParameters<br align="left"/></font><font color="#000000">Map<String, String[]><br align="left"/></font></td></tr></table>>, shape=box]
-i_77c04a82 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:108<br align="left"/></font><font color="#ffffff">#provideRequestParameters()<br align="left"/></font></td></tr></table>>, shape=box]
-k_d7819d58 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneProperties<br align="left"/></font></td></tr></table>>, shape=box]
-i_d7819d58 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">MyDataSourceOnePersistModule.java:62<br align="left"/></font><font color="#ffffff">KunePropertiesDefault<br align="left"/></font></td></tr></table>>, shape=box]
-k_ec0eec1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Jpa<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_ec0eec1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:58<br align="left"/></font><font color="#ffffff">"development"<br align="left"/></font></td></tr></table>>, shape=box]
-k_3025761f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Jpa<br align="left"/></font><font color="#000000">Properties<br align="left"/></font></td></tr></table>>, shape=box]
-i_3025761f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:61<br align="left"/></font><font color="#ffffff">{hibernate.connection.username=kune, hibernate.connection.password=db4kune, hibernate.connection.url=jdbc:mysql://localhost/kune_dev?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8}<br align="left"/></font></td></tr></table>>, shape=box]
-k_4af18928 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">PersistService<br align="left"/></font></td></tr></table>>, shape=box]
-k_34d8ea68 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UnitOfWork<br align="left"/></font></td></tr></table>>, shape=box]
-k_bd577e32 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EntityManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_efaafb9a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EntityManagerFactory<br align="left"/></font></td></tr></table>>, shape=box]
-k_ed3850fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContainerFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_ed3850fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@7e64cfe0<br align="left"/></font></td></tr></table>>, shape=box]
-k_50c5378e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_50c5378e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@c8bbbf4<br align="left"/></font></td></tr></table>>, shape=box]
-k_e32fd65a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ExtMediaDescripFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_e32fd65a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@29e0969b<br align="left"/></font></td></tr></table>>, shape=box]
-k_c52e8b1f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_c52e8b1f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@57bfaf97<br align="left"/></font></td></tr></table>>, shape=box]
-k_f190cf1a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nCountryFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_f190cf1a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@69a10f82<br align="left"/></font></td></tr></table>>, shape=box]
-k_9e4d04a6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nLanguageFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_9e4d04a6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@4d0155fb<br align="left"/></font></td></tr></table>>, shape=box]
-k_e0cca2c0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_e0cca2c0 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@12b3f93c<br align="left"/></font></td></tr></table>>, shape=box]
-k_571c5d0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LicenseFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_571c5d0 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@65afdbbb<br align="left"/></font></td></tr></table>>, shape=box]
-k_d05d4d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RateFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_d05d4d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@7c830624<br align="left"/></font></td></tr></table>>, shape=box]
-k_a599624d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_a599624d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@7e086558<br align="left"/></font></td></tr></table>>, shape=box]
-k_23d1709 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagUserContentFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_23d1709 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@5935b50c<br align="left"/></font></td></tr></table>>, shape=box]
-k_975262ab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserFinder<br align="left"/></font></td></tr></table>>, shape=box]
-i_975262ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@55015495<br align="left"/></font></td></tr></table>>, shape=box]
-k_f7b6406d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@MyDataSourceOne<br align="left"/></font><font color="#000000">Session<br align="left"/></font></td></tr></table>>, shape=box]
-k_779877f7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@MyDataSourceOne<br align="left"/></font><font color="#000000">EntityManager<br align="left"/></font></td></tr></table>>, shape=box]
-i_779877f7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">MyDataSourceOnePersistModule.java:116<br align="left"/></font><font color="#ffffff">Provider<javax.persistence.EntityManager><br align="left"/></font></td></tr></table>>, shape=box]
-k_91a74692 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@MyDataSourceOne<br align="left"/></font><font color="#000000">CustomPersistFilter<br align="left"/></font></td></tr></table>>, shape=box]
-k_23eb5148 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Internal(value=1)<br align="left"/></font><font color="#000000">FilterDefinition<br align="left"/></font></td></tr></table>>, shape=box]
-i_23eb5148 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">FiltersModuleBuilder.java:49<br align="left"/></font><font color="#ffffff">FilterDefinition<br align="left"/></font></td></tr></table>>, shape=box]
-k_713ad964 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_38aee1f8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_157473fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_1acc6318 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ToolConfigurationManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_a4692fd8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContainerManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_74d7c200 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LicenseManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_90277b38 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SocialNetworkManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_4984b5f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">XmppManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_f4865409 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ChatManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_a164c085 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RateManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_313e6bb7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nCountryManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_1e55cee9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nLanguageManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_2b3b226a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_d1eae4dc [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_19107f5b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagUserContentManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_a0509078 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FileManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_45bff81a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ExtMediaDescripManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_f2e2f2a7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneWaveManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_11ed20eb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SiteService<br align="left"/></font></td></tr></table>>, shape=box]
-k_b8cb81fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupService<br align="left"/></font></td></tr></table>>, shape=box]
-k_8453f77 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentService<br align="left"/></font></td></tr></table>>, shape=box]
-k_3c71cd07 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserService<br align="left"/></font></td></tr></table>>, shape=box]
-k_4d085577 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SocialNetService<br align="left"/></font></td></tr></table>>, shape=box]
-k_cdb92fce [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nService<br align="left"/></font></td></tr></table>>, shape=box]
-k_d1806ccf [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ListsService<br align="left"/></font></td></tr></table>>, shape=box]
-k_94078109 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ClientStatsService<br align="left"/></font></td></tr></table>>, shape=box]
-k_f4da46d1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserInfoService<br align="left"/></font></td></tr></table>>, shape=box]
-k_ab46457f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CreationService<br align="left"/></font></td></tr></table>>, shape=box]
-k_f99f2b86 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccessRightsService<br align="left"/></font></td></tr></table>>, shape=box]
-k_8636f4ac [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccessService<br align="left"/></font></td></tr></table>>, shape=box]
-k_7ecc0a55 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FinderService<br align="left"/></font></td></tr></table>>, shape=box]
-k_a66e0dc0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">StateService<br align="left"/></font></td></tr></table>>, shape=box]
-k_24961ca8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationService<br align="left"/></font></td></tr></table>>, shape=box]
-k_b81a1c1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationServiceMultiLang<br align="left"/></font></td></tr></table>>, shape=box]
-k_aa3c53ae [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneWaveService<br align="left"/></font></td></tr></table>>, shape=box]
-k_2eb97c23 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">MailService<br align="left"/></font></td></tr></table>>, shape=box]
-k_5fe7fac5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">StatsService<br align="left"/></font></td></tr></table>>, shape=box]
-k_9f28c448 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Mapper<br align="left"/></font></td></tr></table>>, shape=box]
-k_48c0beec [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UsersOnline<br align="left"/></font></td></tr></table>>, shape=box]
-k_5676f2ec [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">NotificationSender<br align="left"/></font></td></tr></table>>, shape=box]
-k_3edb753c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ExtendedModule-1)<br align="left"/></font><font color="#000000">AbstractExtendedModule<br align="left"/></font></td></tr></table>>, shape=box]
-i_3edb753c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">AbstractExtendedModule.java:100<br align="left"/></font><font color="#ffffff">PlatformServerModule<br align="left"/></font></td></tr><tr><td align="left" port="m_ea7d63">#injectRegisteredObjects(...)</td></tr></table>>, shape=box]
-k_e518eb99 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RESTMethodFinder<br align="left"/></font></td></tr></table>>, shape=box]
-k_79cc66c6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RESTSerializer<br align="left"/></font></td></tr></table>>, shape=box]
-k_3e59236a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ManagedFilterPipeline<br align="left"/></font></td></tr><tr><td align="left" port="m_84fd56bb"><init></td></tr></table>>, shape=box]
-k_e20aa4f9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ManagedServletPipeline<br align="left"/></font></td></tr><tr><td align="left" port="m_c910e7a6"><init></td></tr></table>>, shape=box]
-k_ae1a7ede [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JpaPersistService<br align="left"/></font></td></tr><tr><td align="left" port="m_39b7e4fa"><init></td></tr></table>>, shape=box]
-k_33bd1bc8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KunePersistenceInitializer<br align="left"/></font></td></tr><tr><td align="left" port="m_724ea93f"><init></td></tr></table>>, shape=box]
-k_9b3b57fa [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KunePersistenceService<br align="left"/></font></td></tr><tr><td align="left" port="m_1af67f92"><init></td></tr><tr><td align="left" port="m_b7f26df5">databaseInitializer</td></tr></table>>, shape=box]
-k_edd20636 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetwork<br align="left"/></font></td></tr><tr><td align="left" port="m_29530556"><init></td></tr></table>>, shape=box]
-k_8c7fc3dd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">XMLActionReader<br align="left"/></font></td></tr><tr><td align="left" port="m_8e4df240"><init></td></tr></table>>, shape=box]
-k_b8b1fb55 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ServerToolRegistry<br align="left"/></font></td></tr><tr><td align="left" port="m_b4a6ea93"><init></td></tr></table>>, shape=box]
-k_aa5efde3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileUploadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_f70b907a"><init></td></tr><tr><td align="left" port="m_fbf8f608">kuneProperties</td></tr><tr><td align="left" port="m_75d06daa">i18n</td></tr><tr><td align="left" port="m_9a2f00cb">accessService</td></tr><tr><td align="left" port="m_3f42d6ac">creationService</td></tr><tr><td align="left" port="m_55fe5eeb">fileManager</td></tr><tr><td align="left" port="m_f73bea64">i18n</td></tr><tr><td align="left" port="m_9359f431">userSession</td></tr></table>>, shape=box]
-k_3fdfa1f3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDownloadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_a193f493"><init></td></tr><tr><td align="left" port="m_e765dc67">contentManager</td></tr><tr><td align="left" port="m_1457c827">kuneProperties</td></tr><tr><td align="left" port="m_116dcc06">fileUtils</td></tr></table>>, shape=box]
-k_f073050a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EntityLogoUploadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_1d803b88"><init></td></tr></table>>, shape=box]
-k_cc3648a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EntityLogoDownloadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_fd8a1421"><init></td></tr><tr><td align="left" port="m_e17f200f">groupManager</td></tr></table>>, shape=box]
-k_e01da407 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ParticipantUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_ffdcacd3"><init></td></tr></table>>, shape=box]
-k_96a0f6e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveEmailNotifier<br align="left"/></font></td></tr><tr><td align="left" port="m_dadc2f23"><init></td></tr></table>>, shape=box]
-k_4eb32c88 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PendingNotificationSender<br align="left"/></font></td></tr><tr><td align="left" port="m_6683cfea"><init></td></tr></table>>, shape=box]
-k_888ff559 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CronServerTasksManager<br align="left"/></font></td></tr><tr><td align="left" port="m_6e568d1e"><init></td></tr></table>>, shape=box]
-k_a385bbee [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DocumentServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_7d837e0d"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
-k_c39634b7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">BlogServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_15dbf5cc"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
-k_d29d0090 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WikiServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_760be197"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
-k_3e11d995 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_a9ff88e7"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
-k_d7ead9b2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">BarterServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_f138584c"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
-k_bf14fe3a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EventsServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_3b84fb69"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
-k_928ab46b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TaskServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_1e5046ac"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
-k_a489c883 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ListsServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_d1e0d2bd"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
-k_9aa7b1a3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">InternalServletModule$BackwardsCompatibleServletContextProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_2e3e1d1"><init></td></tr></table>>, shape=box]
-k_4c3181a3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JpaPersistService$EntityManagerFactoryProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_535448fb"><init></td></tr></table>>, shape=box]
-k_76fbe1f5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MyDataSourceOneSessionProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_dec4736d"><init></td></tr><tr><td align="left" port="m_4835dd36">entityManagerProvider</td></tr></table>>, shape=box]
-k_d7664ccd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomPersistFilter<br align="left"/></font></td></tr><tr><td align="left" port="m_762b5a60"><init></td></tr></table>>, shape=box]
-k_34146061 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a1db3271"><init></td></tr></table>>, shape=box]
-k_23e4713d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GroupManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_7182081"><init></td></tr></table>>, shape=box]
-k_a95a0142 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_540a509d"><init></td></tr></table>>, shape=box]
-k_6e7a86e2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ToolConfigurationManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_80d9bd00"><init></td></tr></table>>, shape=box]
-k_211a147a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContainerManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_4eabfea5"><init></td></tr></table>>, shape=box]
-k_bcc05686 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">LicenseManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_b8b71743"><init></td></tr><tr><td align="left" port="m_702001c6">#setLicenseFinder(...)</td></tr></table>>, shape=box]
-k_4d9521fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetworkManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_155ec683"><init></td></tr></table>>, shape=box]
-k_6d7939e2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">XmppManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_101e3d67"><init></td></tr></table>>, shape=box]
-k_74d84ba7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_5a841140"><init></td></tr></table>>, shape=box]
-k_aa995474 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">RateManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_4f9b8ac6"><init></td></tr></table>>, shape=box]
-k_a1ef436f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nCountryManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_eb61cf5a"><init></td></tr></table>>, shape=box]
-k_d9cc655c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nLanguageManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_eccba8fc"><init></td></tr></table>>, shape=box]
-k_be0df4f2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nTranslationManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_f548b735"><init></td></tr></table>>, shape=box]
-k_8d8763fc [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TagManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_aa2699dc"><init></td></tr></table>>, shape=box]
-k_ce20d85e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TagUserContentManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_b707ae9a"><init></td></tr></table>>, shape=box]
-k_33ad704e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_11088986"><init></td></tr></table>>, shape=box]
-k_648b0d65 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ExtMediaDescripManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_caed5f27"><init></td></tr></table>>, shape=box]
-k_13cb7cfc [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneWaveManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_d21306a0"><init></td></tr></table>>, shape=box]
-k_710db6c7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SiteRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_94bc12fa"><init></td></tr></table>>, shape=box]
-k_9954bf2a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GroupRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_f8b7308a"><init></td></tr></table>>, shape=box]
-k_ba1ed833 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_6bc89f50"><init></td></tr></table>>, shape=box]
-k_9e1c3bcd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_ecb87f6"><init></td></tr></table>>, shape=box]
-k_3e2c542c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetworkRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_b56ae5c8"><init></td></tr></table>>, shape=box]
-k_27aebc9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_20e4f4c3"><init></td></tr></table>>, shape=box]
-k_1522a94f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ListsRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_19f5554c"><init></td></tr></table>>, shape=box]
-k_94a0c3b7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StatsRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_29212e6a"><init></td></tr></table>>, shape=box]
-k_78c34902 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserInfoServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_e2253da6"><init></td></tr></table>>, shape=box]
-k_994472f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CreationServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_3ada629b"><init></td></tr></table>>, shape=box]
-k_acd8cfab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AccessRightsServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a352c536"><init></td></tr></table>>, shape=box]
-k_6f494958 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AccessServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_63a0fdbf"><init></td></tr></table>>, shape=box]
-k_d357d6a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FinderServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_2d8dc501"><init></td></tr></table>>, shape=box]
-k_cabb1647 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StateServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_fc5df405"><init></td></tr></table>>, shape=box]
-k_2da29983 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nTranslationServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_1b1ed846"><init></td></tr></table>>, shape=box]
-k_26f8fb23 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneWaveServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_f42f63ac"><init></td></tr></table>>, shape=box]
-k_1e755bca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MailServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a2bece9f"><init></td></tr></table>>, shape=box]
-k_75cf6687 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StatsServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_96bb30a1"><init></td></tr></table>>, shape=box]
-k_1ea1ab37 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DozerMapper<br align="left"/></font></td></tr><tr><td align="left" port="m_100deaab"><init></td></tr></table>>, shape=box]
-k_c6d9dbe4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_c72f445d"><init></td></tr></table>>, shape=box]
-k_92a2ff20 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationSenderDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_87014a14"><init></td></tr></table>>, shape=box]
-k_5d423cd2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Injector<br align="left"/></font></td></tr></table>>, shape=box]
-i_5d423cd2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">[unknown source]<br align="left"/></font><font color="#ffffff">Provider<Injector><br align="left"/></font></td></tr></table>>, shape=box]
-k_8b7d57ca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultRESTMethodFinder<br align="left"/></font></td></tr><tr><td align="left" port="m_ed90671"><init></td></tr></table>>, shape=box]
-k_ebdd5943 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JSONLibRESTSerializer<br align="left"/></font></td></tr><tr><td align="left" port="m_38c8ab78"><init></td></tr></table>>, shape=box]
-k_58b25e68 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DatabaseInitializer<br align="left"/></font></td></tr><tr><td align="left" port="m_1b090b84"><init></td></tr></table>>, shape=box]
-k_a51f5dd5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_ed1988bf"><init></td></tr></table>>, shape=box]
-k_63626340 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneBasicProperties<br align="left"/></font></td></tr><tr><td align="left" port="m_94b0e6a0"><init></td></tr></table>>, shape=box]
-k_bbcefa18 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=wave_server_domain)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_bbcefa18 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost"<br align="left"/></font></td></tr></table>>, shape=box]
-k_a32471fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveBus<br align="left"/></font></td></tr></table>>, shape=box]
-k_deac30bd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomJobFactory<br align="left"/></font></td></tr><tr><td align="left" port="m_d67d262c"><init></td></tr></table>>, shape=box]
-k_d1a9c6cf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StdSchedulerFactory<br align="left"/></font></td></tr><tr><td align="left" port="m_b26be00d"><init></td></tr></table>>, shape=box]
-k_107a33fb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccountStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_d09b5324 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatProperties<br align="left"/></font></td></tr><tr><td align="left" port="m_14070d2b"><init></td></tr></table>>, shape=box]
-k_2dec6c9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomUserRegistrationServlet<br align="left"/></font></td></tr><tr><td align="left" port="m_145a2d5b"><init></td></tr></table>>, shape=box]
-k_ed3bb2d4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationService<br align="left"/></font></td></tr><tr><td align="left" port="m_f7fa287d"><init></td></tr></table>>, shape=box]
-k_2501bc07 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ReservedWordsRegistry<br align="left"/></font></td></tr><tr><td align="left" port="m_de674d3e"><init></td></tr></table>>, shape=box]
-k_7ec03d78 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomWaveClientServlet<br align="left"/></font></td></tr><tr><td align="left" port="m_ab1e54db"><init></td></tr></table>>, shape=box]
-k_4bf632c5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=use_socketio)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
-i_4bf632c5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
-k_f1928bf8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_7034c7d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EventDataConverterManager<br align="left"/></font></td></tr></table>>, shape=box]
-i_7034c7d2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">EventDataConverterModule.java:43<br align="left"/></font><font color="#ffffff">#provideEventDataConverterManager()<br align="left"/></font></td></tr></table>>, shape=box]
-k_5ecb29e3 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=DataApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
-i_5ecb29e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:117<br align="left"/></font><font color="#ffffff">#provideDataApiRegistry(SearchService)<br align="left"/></font></td></tr></table>>, shape=box]
-k_ef3f9bf1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveRenderer<br align="left"/></font></td></tr></table>>, shape=box]
-k_c5f43fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ConversationUtil<br align="left"/></font></td></tr><tr><td align="left" port="m_cb039b61"><init></td></tr></table>>, shape=box]
-k_66a99b94 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_2721f26b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveletNotificationDispatcher<br align="left"/></font></td></tr><tr><td align="left" port="m_72bb3f17"><init></td></tr></table>>, shape=box]
-k_6b87e61f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAccountStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2bca331e"><init></td></tr></table>>, shape=box]
-k_fcb759e6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=disable_registration)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
-i_fcb759e6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">false<br align="left"/></font></td></tr></table>>, shape=box]
-k_f3f49125 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationHtmlHelper<br align="left"/></font></td></tr><tr><td align="left" port="m_40754071"><init></td></tr></table>>, shape=box]
-k_c1b15a81 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserSession<br align="left"/></font></td></tr><tr><td align="left" port="m_4d2e2d30"><init></td></tr></table>>, shape=box]
-k_81bf39cf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SessionManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_bc6356d8"><init></td></tr></table>>, shape=box]
-k_f801e1f1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SearchService<br align="left"/></font></td></tr><tr><td align="left" port="m_22b30b9b"><init></td></tr></table>>, shape=box]
-k_ea6f93fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ThreadedWaveRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_b9a42285"><init></td></tr></table>>, shape=box]
-k_140c93ab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGenerator<br align="left"/></font></td></tr></table>>, shape=box]
-i_140c93ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:106<br align="left"/></font><font color="#ffffff">#provideIdGenerator(String, Seed)<br align="left"/></font></td></tr></table>>, shape=box]
-k_744f2334 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveServerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_3065e839"><init></td></tr></table>>, shape=box]
-k_91161f83 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
-k_f7d047b9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertificateManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_50cd9615 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=account_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_50cd9615 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_accounts"<br align="left"/></font></td></tr></table>>, shape=box]
-k_ee7215a0 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AbsoluteFileDownloadUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_30d2c19e"><init></td></tr></table>>, shape=box]
-k_3e09faf2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_74c3c0d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SearchProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_d63563c2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">Templates<br align="left"/></font></td></tr><tr><td align="left" port="m_c73d3a59"><init></td></tr></table>>, shape=box]
-k_c898c54b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_946dead5"><init></td></tr></table>>, shape=box]
-k_33570740 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGeneratorImpl$Seed<br align="left"/></font></td></tr></table>>, shape=box]
-i_33570740 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:126<br align="left"/></font><font color="#ffffff">#provideSeed(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
-k_ca34da5f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=listener_executor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
-i_ca34da5f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:106<br align="left"/></font><font color="#ffffff">ThreadPoolExecutor<br align="left"/></font></td></tr></table>>, shape=box]
-k_9831ace4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_73658105 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveMap<br align="left"/></font></td></tr><tr><td align="left" port="m_a29919e6"><init></td></tr></table>>, shape=box]
-k_c9a11a3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationHost<br align="left"/></font></td></tr><tr><td align="left" port="m_dba23bb0"><init></td></tr></table>>, shape=box]
-k_dbdd067e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CertificateManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_7dc25cb3"><init></td></tr></table>>, shape=box]
-k_a0ee12e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">HashSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_54776227"><init></td></tr></table>>, shape=box]
-k_5293dba6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MemorySearchProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_5b65d1b7"><init></td></tr></table>>, shape=box]
-k_529b935b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">Markup<br align="left"/></font></td></tr><tr><td align="left" port="m_6e9c9f8f"><init></td></tr></table>>, shape=box]
-k_7b520ec6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GadgetRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_4e215f96"><init></td></tr></table>>, shape=box]
-k_c3234f04 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SecureRandom<br align="left"/></font></td></tr></table>>, shape=box]
-i_c3234f04 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:112<br align="left"/></font><font color="#ffffff">#provideSecureRandom()<br align="left"/></font></td></tr></table>>, shape=box]
-k_c5aa0274 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationRemote<br align="left"/></font></td></tr><tr><td align="left" port="m_8c82dc4e"><init></td></tr></table>>, shape=box]
-k_218c2334 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RemoteWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
-i_218c2334 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideRemoteWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
-k_7b747c12 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LocalWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
-i_7b747c12 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideLocalWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
-k_ab27ace4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletNotificationSubscriber<br align="left"/></font></td></tr></table>>, shape=box]
-k_6d08d305 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveDigester<br align="left"/></font></td></tr><tr><td align="left" port="m_3d5a1b27"><init></td></tr></table>>, shape=box]
-k_2050c643 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaAndSnapshotStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_52a8a871 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertPathStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_7c3a84a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SignatureHandler<br align="left"/></font></td></tr></table>>, shape=box]
-k_28873eb1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveSignatureVerifier<br align="left"/></font></td></tr><tr><td align="left" port="m_a87b4d2a"><init></td></tr></table>>, shape=box]
-k_c3c30021 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
-i_c3c30021 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
-k_4ff24fca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PerUserWaveViewSubscriber<br align="left"/></font></td></tr><tr><td align="left" port="m_bf9bd871"><init></td></tr></table>>, shape=box]
-k_556cc59f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_a7dbb996 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DeltaStoreBasedSnapshotStore<br align="left"/></font></td></tr><tr><td align="left" port="m_f7ad7a10"><init></td></tr></table>>, shape=box]
-k_928bb0fd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileSignerInfoStore<br align="left"/></font></td></tr><tr><td align="left" port="m_d805501f"><init></td></tr></table>>, shape=box]
-k_70d75d3e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NonSigningSignatureHandler$NonSigningSignatureHandlerProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_6c0a518"><init></td></tr></table>>, shape=box]
-k_e19e23b5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveCertPathValidator<br align="left"/></font></td></tr></table>>, shape=box]
-i_e19e23b5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideWaveCertPathValidator(boolean, TimeSource, VerifiedCertChainCache, TrustRootsProvider)<br align="left"/></font></td></tr></table>>, shape=box]
-k_8823a3e5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDeltaStore<br align="left"/></font></td></tr><tr><td align="left" port="m_408652f3"><init></td></tr></table>>, shape=box]
-k_4481b49f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=signer_info_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_4481b49f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_certificates"<br align="left"/></font></td></tr></table>>, shape=box]
-k_6bad9e01 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TrustRootsProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_2845e07 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">VerifiedCertChainCache<br align="left"/></font></td></tr></table>>, shape=box]
-k_4e3cfd49 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TimeSource<br align="left"/></font></td></tr></table>>, shape=box]
-k_ae676420 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_signer_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
-i_ae676420 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
-k_f7c49aa [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=delta_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_f7c49aa [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_deltas"<br align="left"/></font></td></tr></table>>, shape=box]
-k_2288b0a9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTrustRootsProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_518d5280"><init></td></tr></table>>, shape=box]
-k_d073cdd5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultCacheImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_5a8716ec"><init></td></tr></table>>, shape=box]
-k_fbd16a34 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTimeSource<br align="left"/></font></td></tr><tr><td align="left" port="m_24dcbc5e"><init></td></tr></table>>, shape=box]
-k_c92e8c4d -> k_3208fff2 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_2ca5daf6 -> k_ef0fca5f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_57676221 -> k_3e59236a [style=dashed, arrowtail=none, arrowhead=onormal]
-k_c2892102 -> k_9aa7b1a3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_3208fff2 -> i_3208fff2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_ef0fca5f -> i_ef0fca5f [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_e44414fe -> i_e44414fe [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_77c04a82 -> i_77c04a82 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_d7819d58 -> i_d7819d58 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_ec0eec1 -> i_ec0eec1 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_3025761f -> i_3025761f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_4af18928 -> k_ae1a7ede [style=dashed, arrowtail=none, arrowhead=onormal]
-k_34d8ea68 -> k_ae1a7ede [style=dashed, arrowtail=none, arrowhead=onormal]
-k_bd577e32 -> k_ae1a7ede [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_efaafb9a -> k_4c3181a3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_ed3850fe -> i_ed3850fe [style=dashed, arrowtail=none, arrowhead=onormal]
-k_50c5378e -> i_50c5378e [style=dashed, arrowtail=none, arrowhead=onormal]
-k_e32fd65a -> i_e32fd65a [style=dashed, arrowtail=none, arrowhead=onormal]
-k_c52e8b1f -> i_c52e8b1f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f190cf1a -> i_f190cf1a [style=dashed, arrowtail=none, arrowhead=onormal]
-k_9e4d04a6 -> i_9e4d04a6 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_e0cca2c0 -> i_e0cca2c0 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_571c5d0 -> i_571c5d0 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_d05d4d -> i_d05d4d [style=dashed, arrowtail=none, arrowhead=onormal]
-k_a599624d -> i_a599624d [style=dashed, arrowtail=none, arrowhead=onormal]
-k_23d1709 -> i_23d1709 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_975262ab -> i_975262ab [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f7b6406d -> k_76fbe1f5 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_779877f7 -> i_779877f7 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_91a74692 -> k_d7664ccd [style=dashed, arrowtail=none, arrowhead=onormal]
-k_23eb5148 -> i_23eb5148 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_713ad964 -> k_34146061 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_38aee1f8 -> k_23e4713d [style=dashed, arrowtail=none, arrowhead=onormal]
-k_157473fe -> k_a95a0142 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_1acc6318 -> k_6e7a86e2 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_a4692fd8 -> k_211a147a [style=dashed, arrowtail=none, arrowhead=onormal]
-k_74d7c200 -> k_bcc05686 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_90277b38 -> k_4d9521fe [style=dashed, arrowtail=none, arrowhead=onormal]
-k_4984b5f -> k_6d7939e2 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f4865409 -> k_74d84ba7 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_a164c085 -> k_aa995474 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_313e6bb7 -> k_a1ef436f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_1e55cee9 -> k_d9cc655c [style=dashed, arrowtail=none, arrowhead=onormal]
-k_2b3b226a -> k_be0df4f2 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_d1eae4dc -> k_8d8763fc [style=dashed, arrowtail=none, arrowhead=onormal]
-k_19107f5b -> k_ce20d85e [style=dashed, arrowtail=none, arrowhead=onormal]
-k_a0509078 -> k_33ad704e [style=dashed, arrowtail=none, arrowhead=onormal]
-k_45bff81a -> k_648b0d65 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f2e2f2a7 -> k_13cb7cfc [style=dashed, arrowtail=none, arrowhead=onormal]
-k_11ed20eb -> k_710db6c7 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_b8cb81fe -> k_9954bf2a [style=dashed, arrowtail=none, arrowhead=onormal]
-k_8453f77 -> k_ba1ed833 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_3c71cd07 -> k_9e1c3bcd [style=dashed, arrowtail=none, arrowhead=onormal]
-k_4d085577 -> k_3e2c542c [style=dashed, arrowtail=none, arrowhead=onormal]
-k_cdb92fce -> k_27aebc9 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_d1806ccf -> k_1522a94f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_94078109 -> k_94a0c3b7 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f4da46d1 -> k_78c34902 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_ab46457f -> k_994472f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f99f2b86 -> k_acd8cfab [style=dashed, arrowtail=none, arrowhead=onormal]
-k_8636f4ac -> k_6f494958 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_7ecc0a55 -> k_d357d6a [style=dashed, arrowtail=none, arrowhead=onormal]
-k_a66e0dc0 -> k_cabb1647 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_24961ca8 -> k_2da29983 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_b81a1c1 -> k_2da29983 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_aa3c53ae -> k_26f8fb23 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_2eb97c23 -> k_1e755bca [style=dashed, arrowtail=none, arrowhead=onormal]
-k_5fe7fac5 -> k_75cf6687 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_9f28c448 -> k_1ea1ab37 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_48c0beec -> k_c6d9dbe4 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_5676f2ec -> k_92a2ff20 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_3edb753c -> i_3edb753c [style=dashed, arrowtail=none, arrowhead=onormal]
-i_3edb753c:m_ea7d63:e -> k_5d423cd2 [style=solid, arrowtail=none, arrowhead=normal]
-k_e518eb99 -> k_8b7d57ca [style=dashed, arrowtail=none, arrowhead=onormal]
-k_79cc66c6 -> k_ebdd5943 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_3e59236a:m_84fd56bb:e -> k_5d423cd2 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e59236a:m_84fd56bb:e -> k_e20aa4f9 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e59236a:m_84fd56bb:e -> k_c2892102 [style=solid, arrowtail=none, arrowhead=normal]
-k_e20aa4f9:m_c910e7a6:e -> k_5d423cd2 [style=solid, arrowtail=none, arrowhead=normal]
-k_ae1a7ede:m_39b7e4fa:e -> k_ec0eec1 [style=solid, arrowtail=none, arrowhead=normal]
-k_ae1a7ede:m_39b7e4fa:e -> k_3025761f [style=solid, arrowtail=none, arrowhead=normal]
-k_33bd1bc8:m_724ea93f:e -> k_4af18928 [style=solid, arrowtail=none, arrowhead=normal]
-k_9b3b57fa:m_b7f26df5:e -> k_58b25e68 [style=solid, arrowtail=none, arrowhead=normal]
-k_b8b1fb55:m_b4a6ea93:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_aa5efde3:m_fbf8f608:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_aa5efde3:m_75d06daa:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_aa5efde3:m_9a2f00cb:e -> k_8636f4ac [style=solid, arrowtail=none, arrowhead=normal]
-k_aa5efde3:m_3f42d6ac:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_aa5efde3:m_55fe5eeb:e -> k_a0509078 [style=solid, arrowtail=none, arrowhead=normal]
-k_aa5efde3:m_f73bea64:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_aa5efde3:m_9359f431:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_3fdfa1f3:m_e765dc67:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_3fdfa1f3:m_1457c827:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_3fdfa1f3:m_116dcc06:e -> k_a51f5dd5 [style=solid, arrowtail=none, arrowhead=normal]
-k_f073050a:m_1d803b88:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_f073050a:m_1d803b88:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_f073050a:m_1d803b88:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_cc3648a:m_e17f200f:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_e01da407:m_ffdcacd3:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_e01da407:m_ffdcacd3:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
-k_96a0f6e3:m_dadc2f23:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
-k_96a0f6e3:m_dadc2f23:e -> k_4eb32c88 [style=solid, arrowtail=none, arrowhead=normal]
-k_96a0f6e3:m_dadc2f23:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
-k_96a0f6e3:m_dadc2f23:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
-k_96a0f6e3:m_dadc2f23:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
-k_96a0f6e3:m_dadc2f23:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
-k_4eb32c88:m_6683cfea:e -> k_5676f2ec [style=solid, arrowtail=none, arrowhead=normal]
-k_888ff559:m_6e568d1e:e -> k_d1a9c6cf [style=solid, arrowtail=none, arrowhead=normal]
-k_888ff559:m_6e568d1e:e -> k_deac30bd [style=solid, arrowtail=none, arrowhead=normal]
-k_a385bbee:m_7d837e0d:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_a385bbee:m_7d837e0d:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_a385bbee:m_7d837e0d:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
-k_a385bbee:m_7d837e0d:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_a385bbee:m_7d837e0d:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_a385bbee:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_c39634b7:m_15dbf5cc:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_c39634b7:m_15dbf5cc:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_c39634b7:m_15dbf5cc:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
-k_c39634b7:m_15dbf5cc:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_c39634b7:m_15dbf5cc:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_c39634b7:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_d29d0090:m_760be197:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_d29d0090:m_760be197:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_d29d0090:m_760be197:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
-k_d29d0090:m_760be197:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_d29d0090:m_760be197:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_d29d0090:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e11d995:m_a9ff88e7:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e11d995:m_a9ff88e7:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_3e11d995:m_a9ff88e7:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e11d995:m_a9ff88e7:e -> k_74d84ba7 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e11d995:m_a9ff88e7:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e11d995:m_a9ff88e7:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_3e11d995:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_d7ead9b2:m_f138584c:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_d7ead9b2:m_f138584c:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_d7ead9b2:m_f138584c:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
-k_d7ead9b2:m_f138584c:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_d7ead9b2:m_f138584c:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_d7ead9b2:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_bf14fe3a:m_3b84fb69:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_bf14fe3a:m_3b84fb69:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_bf14fe3a:m_3b84fb69:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
-k_bf14fe3a:m_3b84fb69:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_bf14fe3a:m_3b84fb69:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_bf14fe3a:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_928ab46b:m_1e5046ac:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_928ab46b:m_1e5046ac:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_928ab46b:m_1e5046ac:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
-k_928ab46b:m_1e5046ac:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_928ab46b:m_1e5046ac:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_928ab46b:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_a489c883:m_d1e0d2bd:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_a489c883:m_d1e0d2bd:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_a489c883:m_d1e0d2bd:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
-k_a489c883:m_d1e0d2bd:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_a489c883:m_d1e0d2bd:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_a489c883:m_d1e0d2bd:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
-k_a489c883:m_d1e0d2bd:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_a489c883:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_4c3181a3:m_535448fb:e -> k_ae1a7ede [style=solid, arrowtail=none, arrowhead=normal]
-k_76fbe1f5:m_4835dd36:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_d7664ccd:m_762b5a60:e -> k_34d8ea68 [style=solid, arrowtail=none, arrowhead=normal]
-k_d7664ccd:m_762b5a60:e -> k_4af18928 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_313e6bb7 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_4984b5f [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_d09b5324 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_b81a1c1 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_2dec6c9 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_34146061:m_a1db3271:e -> k_ed3bb2d4 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_c52e8b1f [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_74d7c200 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_571c5d0 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_a0509078 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_23e4713d:m_7182081:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_50c5378e [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_ed3850fe [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_7ecc0a55 [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_9e4d04a6 [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_19107f5b [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_a95a0142:m_540a509d:e -> k_8c7fc3dd [style=solid, arrowtail=none, arrowhead=normal]
-k_6e7a86e2:m_80d9bd00:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_211a147a:m_4eabfea5:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_211a147a:m_4eabfea5:e -> k_50c5378e [style=solid, arrowtail=none, arrowhead=normal]
-k_211a147a:m_4eabfea5:e -> k_ed3850fe [style=solid, arrowtail=none, arrowhead=normal]
-k_bcc05686:m_b8b71743:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_bcc05686:m_b8b71743:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
-k_bcc05686:m_b8b71743:e -> k_571c5d0 [style=solid, arrowtail=none, arrowhead=normal]
-k_bcc05686:m_702001c6:e -> k_571c5d0 [style=solid, arrowtail=none, arrowhead=normal]
-k_4d9521fe:m_155ec683:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_4d9521fe:m_155ec683:e -> k_c52e8b1f [style=solid, arrowtail=none, arrowhead=normal]
-k_4d9521fe:m_155ec683:e -> k_f99f2b86 [style=solid, arrowtail=none, arrowhead=normal]
-k_4d9521fe:m_155ec683:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
-k_6d7939e2:m_101e3d67:e -> k_d09b5324 [style=solid, arrowtail=none, arrowhead=normal]
-k_74d84ba7:m_5a841140:e -> k_4984b5f [style=solid, arrowtail=none, arrowhead=normal]
-k_74d84ba7:m_5a841140:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_74d84ba7:m_5a841140:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_aa995474:m_4f9b8ac6:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_aa995474:m_4f9b8ac6:e -> k_d05d4d [style=solid, arrowtail=none, arrowhead=normal]
-k_a1ef436f:m_eb61cf5a:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_a1ef436f:m_eb61cf5a:e -> k_f190cf1a [style=solid, arrowtail=none, arrowhead=normal]
-k_d9cc655c:m_eccba8fc:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_d9cc655c:m_eccba8fc:e -> k_9e4d04a6 [style=solid, arrowtail=none, arrowhead=normal]
-k_be0df4f2:m_f548b735:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_be0df4f2:m_f548b735:e -> k_e0cca2c0 [style=solid, arrowtail=none, arrowhead=normal]
-k_be0df4f2:m_f548b735:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
-k_8d8763fc:m_aa2699dc:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_8d8763fc:m_aa2699dc:e -> k_a599624d [style=solid, arrowtail=none, arrowhead=normal]
-k_ce20d85e:m_b707ae9a:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_ce20d85e:m_b707ae9a:e -> k_d1eae4dc [style=solid, arrowtail=none, arrowhead=normal]
-k_ce20d85e:m_b707ae9a:e -> k_23d1709 [style=solid, arrowtail=none, arrowhead=normal]
-k_648b0d65:m_caed5f27:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
-k_648b0d65:m_caed5f27:e -> k_e32fd65a [style=solid, arrowtail=none, arrowhead=normal]
-k_13cb7cfc:m_d21306a0:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
-k_13cb7cfc:m_d21306a0:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
-k_13cb7cfc:m_d21306a0:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_13cb7cfc:m_d21306a0:e -> k_c52e8b1f [style=solid, arrowtail=none, arrowhead=normal]
-k_13cb7cfc:m_d21306a0:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
-k_13cb7cfc:m_d21306a0:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_f4da46d1 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_74d7c200 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_d09b5324 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_313e6bb7 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_710db6c7:m_94bc12fa:e -> k_45bff81a [style=solid, arrowtail=none, arrowhead=normal]
-k_9954bf2a:m_f8b7308a:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_9954bf2a:m_f8b7308a:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_9954bf2a:m_f8b7308a:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_9954bf2a:m_f8b7308a:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
-k_9954bf2a:m_f8b7308a:e -> k_2501bc07 [style=solid, arrowtail=none, arrowhead=normal]
-k_9954bf2a:m_f8b7308a:e -> k_ba1ed833 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_7ecc0a55 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_8636f4ac [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_f99f2b86 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_a66e0dc0 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_19107f5b [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_f4865409 [style=solid, arrowtail=none, arrowhead=normal]
-k_ba1ed833:m_6bc89f50:e -> k_f2e2f2a7 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_c1b15a81 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_4bf632c5 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_f4da46d1 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_f1928bf8 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_7ec03d78 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_2501bc07 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_ba1ed833 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_9e1c3bcd:m_ecb87f6:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
-k_3e2c542c:m_b56ae5c8:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e2c542c:m_b56ae5c8:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e2c542c:m_b56ae5c8:e -> k_90277b38 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e2c542c:m_b56ae5c8:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e2c542c:m_b56ae5c8:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
-k_3e2c542c:m_b56ae5c8:e -> k_ed3bb2d4 [style=solid, arrowtail=none, arrowhead=normal]
-k_27aebc9:m_20e4f4c3:e -> k_3208fff2 [style=solid, arrowtail=none, arrowhead=normal]
-k_27aebc9:m_20e4f4c3:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_27aebc9:m_20e4f4c3:e -> k_2b3b226a [style=solid, arrowtail=none, arrowhead=normal]
-k_27aebc9:m_20e4f4c3:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
-k_27aebc9:m_20e4f4c3:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
-k_1522a94f:m_19f5554c:e -> k_ba1ed833 [style=solid, arrowtail=none, arrowhead=normal]
-k_1522a94f:m_19f5554c:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_1522a94f:m_19f5554c:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_94a0c3b7:m_29212e6a:e -> k_5fe7fac5 [style=solid, arrowtail=none, arrowhead=normal]
-k_94a0c3b7:m_29212e6a:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_94a0c3b7:m_29212e6a:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
-k_78c34902:m_e2253da6:e -> k_90277b38 [style=solid, arrowtail=none, arrowhead=normal]
-k_78c34902:m_e2253da6:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_994472f:m_3ada629b:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_994472f:m_3ada629b:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_994472f:m_3ada629b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
-k_6f494958:m_63a0fdbf:e -> k_7ecc0a55 [style=solid, arrowtail=none, arrowhead=normal]
-k_6f494958:m_63a0fdbf:e -> k_f99f2b86 [style=solid, arrowtail=none, arrowhead=normal]
-k_d357d6a:m_2d8dc501:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_d357d6a:m_2d8dc501:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
-k_d357d6a:m_2d8dc501:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_d357d6a:m_2d8dc501:e -> k_a164c085 [style=solid, arrowtail=none, arrowhead=normal]
-k_cabb1647:m_fc5df405:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_cabb1647:m_fc5df405:e -> k_90277b38 [style=solid, arrowtail=none, arrowhead=normal]
-k_cabb1647:m_fc5df405:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_cabb1647:m_fc5df405:e -> k_19107f5b [style=solid, arrowtail=none, arrowhead=normal]
-k_cabb1647:m_fc5df405:e -> k_f99f2b86 [style=solid, arrowtail=none, arrowhead=normal]
-k_cabb1647:m_fc5df405:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
-k_cabb1647:m_fc5df405:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
-k_2da29983:m_1b1ed846:e -> k_2b3b226a [style=solid, arrowtail=none, arrowhead=normal]
-k_2da29983:m_1b1ed846:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
-k_2da29983:m_1b1ed846:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
-k_26f8fb23:m_f42f63ac:e -> k_7034c7d2 [style=solid, arrowtail=none, arrowhead=normal]
-k_26f8fb23:m_f42f63ac:e -> k_5ecb29e3 [style=solid, arrowtail=none, arrowhead=normal]
-k_26f8fb23:m_f42f63ac:e -> k_66a99b94 [style=solid, arrowtail=none, arrowhead=normal]
-k_26f8fb23:m_f42f63ac:e -> k_c5f43fe [style=solid, arrowtail=none, arrowhead=normal]
-k_26f8fb23:m_f42f63ac:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
-k_26f8fb23:m_f42f63ac:e -> k_ef3f9bf1 [style=solid, arrowtail=none, arrowhead=normal]
-k_26f8fb23:m_f42f63ac:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_1e755bca:m_a2bece9f:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_75cf6687:m_96bb30a1:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
-k_75cf6687:m_96bb30a1:e -> k_c52e8b1f [style=solid, arrowtail=none, arrowhead=normal]
-k_75cf6687:m_96bb30a1:e -> k_50c5378e [style=solid, arrowtail=none, arrowhead=normal]
-k_c6d9dbe4:m_c72f445d:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
-k_c6d9dbe4:m_c72f445d:e -> k_c1b15a81 [style=solid, arrowtail=none, arrowhead=normal]
-k_92a2ff20:m_87014a14:e -> k_2eb97c23 [style=solid, arrowtail=none, arrowhead=normal]
-k_92a2ff20:m_87014a14:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
-k_92a2ff20:m_87014a14:e -> k_4984b5f [style=solid, arrowtail=none, arrowhead=normal]
-k_92a2ff20:m_87014a14:e -> k_b81a1c1 [style=solid, arrowtail=none, arrowhead=normal]
-k_92a2ff20:m_87014a14:e -> k_48c0beec [style=solid, arrowtail=none, arrowhead=normal]
-k_92a2ff20:m_87014a14:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_5d423cd2 -> i_5d423cd2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_58b25e68:m_1b090b84:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
-k_58b25e68:m_1b090b84:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
-k_58b25e68:m_1b090b84:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
-k_58b25e68:m_1b090b84:e -> k_74d7c200 [style=solid, arrowtail=none, arrowhead=normal]
-k_58b25e68:m_1b090b84:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
-k_58b25e68:m_1b090b84:e -> k_313e6bb7 [style=solid, arrowtail=none, arrowhead=normal]
-k_58b25e68:m_1b090b84:e -> k_2b3b226a [style=solid, arrowtail=none, arrowhead=normal]
-k_58b25e68:m_1b090b84:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
-k_58b25e68:m_1b090b84:e -> k_2da29983 [style=solid, arrowtail=none, arrowhead=normal]
-k_63626340:m_94b0e6a0:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_bbcefa18 -> i_bbcefa18 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_a32471fe -> k_2721f26b [style=dashed, arrowtail=none, arrowhead=onormal]
-k_107a33fb -> k_6b87e61f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_d09b5324:m_14070d2b:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_2dec6c9:m_145a2d5b:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
-k_2dec6c9:m_145a2d5b:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_2dec6c9:m_145a2d5b:e -> k_fcb759e6 [style=solid, arrowtail=none, arrowhead=normal]
-k_ed3bb2d4:m_f7fa287d:e -> k_4eb32c88 [style=solid, arrowtail=none, arrowhead=normal]
-k_ed3bb2d4:m_f7fa287d:e -> k_f3f49125 [style=solid, arrowtail=none, arrowhead=normal]
-k_2501bc07:m_de674d3e:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
-k_7ec03d78:m_ab1e54db:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_7ec03d78:m_ab1e54db:e -> k_4bf632c5 [style=solid, arrowtail=none, arrowhead=normal]
-k_7ec03d78:m_ab1e54db:e -> k_f1928bf8 [style=solid, arrowtail=none, arrowhead=normal]
-k_4bf632c5 -> i_4bf632c5 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f1928bf8 -> k_81bf39cf [style=dashed, arrowtail=none, arrowhead=onormal]
-k_7034c7d2 -> i_7034c7d2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_5ecb29e3 -> i_5ecb29e3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_5ecb29e3:header:e -> k_f801e1f1 [style=solid, arrowtail=none, arrowhead=normal]
-k_ef3f9bf1 -> k_ea6f93fe [style=dashed, arrowtail=none, arrowhead=onormal]
-k_c5f43fe:m_cb039b61:e -> k_140c93ab [style=solid, arrowtail=none, arrowhead=normal]
-k_66a99b94 -> k_744f2334 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_2721f26b:m_72bb3f17:e -> k_f7d047b9 [style=solid, arrowtail=none, arrowhead=normal]
-k_2721f26b:m_72bb3f17:e -> k_91161f83 [style=solid, arrowtail=none, arrowhead=normal]
-k_6b87e61f:m_2bca331e:e -> k_50cd9615 [style=solid, arrowtail=none, arrowhead=normal]
-k_fcb759e6 -> i_fcb759e6 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f3f49125:m_40754071:e -> k_ee7215a0 [style=solid, arrowtail=none, arrowhead=normal]
-k_81bf39cf:m_bc6356d8:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
-k_81bf39cf:m_bc6356d8:e -> k_3e09faf2 [style=solid, arrowtail=none, arrowhead=normal]
-k_f801e1f1:m_22b30b9b:e -> k_74c3c0d2 [style=solid, arrowtail=none, arrowhead=normal]
-k_ea6f93fe:m_b9a42285:e -> k_d63563c2 [style=solid, arrowtail=none, arrowhead=normal]
-k_ea6f93fe:m_b9a42285:e -> k_c898c54b [style=solid, arrowtail=none, arrowhead=normal]
-k_ea6f93fe:m_b9a42285:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_140c93ab -> i_140c93ab [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_140c93ab:header:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-i_140c93ab:header:e -> k_33570740 [style=solid, arrowtail=none, arrowhead=normal]
-k_744f2334:m_3065e839:e -> k_ca34da5f [style=solid, arrowtail=none, arrowhead=normal]
-k_744f2334:m_3065e839:e -> k_f7d047b9 [style=solid, arrowtail=none, arrowhead=normal]
-k_744f2334:m_3065e839:e -> k_9831ace4 [style=solid, arrowtail=none, arrowhead=normal]
-k_744f2334:m_3065e839:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
-k_91161f83 -> k_c9a11a3 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f7d047b9 -> k_dbdd067e [style=dashed, arrowtail=none, arrowhead=onormal]
-k_50cd9615 -> i_50cd9615 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_ee7215a0:m_30d2c19e:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
-k_3e09faf2 -> k_a0ee12e3 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_74c3c0d2 -> k_5293dba6 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_d63563c2:m_c73d3a59:e -> k_529b935b [style=solid, arrowtail=none, arrowhead=normal]
-k_c898c54b:m_946dead5:e -> k_7b520ec6 [style=solid, arrowtail=none, arrowhead=normal]
-k_c898c54b:m_946dead5:e -> k_ef3f9bf1 [style=solid, arrowtail=none, arrowhead=normal]
-k_33570740 -> i_33570740 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_33570740:header:e -> k_c3234f04 [style=solid, arrowtail=none, arrowhead=normal]
-k_ca34da5f -> i_ca34da5f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_9831ace4 -> k_c5aa0274 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_73658105:m_a29919e6:e -> k_2050c643 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_ab27ace4 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_7b747c12 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_218c2334 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_6d08d305 [style=solid, arrowtail=none, arrowhead=normal]
-k_dbdd067e:m_7dc25cb3:e -> k_c3c30021 [style=solid, arrowtail=none, arrowhead=normal]
-k_dbdd067e:m_7dc25cb3:e -> k_7c3a84a [style=solid, arrowtail=none, arrowhead=normal]
-k_dbdd067e:m_7dc25cb3:e -> k_28873eb1 [style=solid, arrowtail=none, arrowhead=normal]
-k_dbdd067e:m_7dc25cb3:e -> k_52a8a871 [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_6d08d305 [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_4ff24fca [style=solid, arrowtail=none, arrowhead=normal]
-k_7b520ec6:m_4e215f96:e -> k_3208fff2 [style=solid, arrowtail=none, arrowhead=normal]
-k_c3234f04 -> i_c3234f04 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_218c2334 -> i_218c2334 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_218c2334:header:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
-k_7b747c12 -> i_7b747c12 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_7b747c12:header:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
-k_ab27ace4 -> k_2721f26b [style=dashed, arrowtail=none, arrowhead=onormal]
-k_6d08d305:m_3d5a1b27:e -> k_c5f43fe [style=solid, arrowtail=none, arrowhead=normal]
-k_2050c643 -> k_a7dbb996 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_52a8a871 -> k_928bb0fd [style=dashed, arrowtail=none, arrowhead=onormal]
-k_7c3a84a -> k_70d75d3e [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_28873eb1:m_a87b4d2a:e -> k_e19e23b5 [style=solid, arrowtail=none, arrowhead=normal]
-k_28873eb1:m_a87b4d2a:e -> k_52a8a871 [style=solid, arrowtail=none, arrowhead=normal]
-k_c3c30021 -> i_c3c30021 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_4ff24fca:m_bf9bd871:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
-k_556cc59f -> k_8823a3e5 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_a7dbb996:m_f7ad7a10:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
-k_928bb0fd:m_d805501f:e -> k_4481b49f [style=solid, arrowtail=none, arrowhead=normal]
-k_70d75d3e:m_6c0a518:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_e19e23b5 -> i_e19e23b5 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_e19e23b5:header:e -> k_ae676420 [style=solid, arrowtail=none, arrowhead=normal]
-i_e19e23b5:header:e -> k_4e3cfd49 [style=solid, arrowtail=none, arrowhead=normal]
-i_e19e23b5:header:e -> k_2845e07 [style=solid, arrowtail=none, arrowhead=normal]
-i_e19e23b5:header:e -> k_6bad9e01 [style=solid, arrowtail=none, arrowhead=normal]
-k_8823a3e5:m_408652f3:e -> k_f7c49aa [style=solid, arrowtail=none, arrowhead=normal]
-k_4481b49f -> i_4481b49f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_6bad9e01 -> k_2288b0a9 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_2845e07 -> k_d073cdd5 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_4e3cfd49 -> k_fbd16a34 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_ae676420 -> i_ae676420 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f7c49aa -> i_f7c49aa [style=dashed, arrowtail=none, arrowhead=onormal]
-k_d073cdd5:m_5a8716ec:e -> k_4e3cfd49 [style=solid, arrowtail=none, arrowhead=normal]
+k_bf29a0e0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletRequest<br align="left"/></font></td></tr></table>>, shape=box]
+k_ce3816f4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletResponse<br align="left"/></font></td></tr></table>>, shape=box]
+k_4703c789 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FilterPipeline<br align="left"/></font></td></tr></table>>, shape=box]
+k_c35365e1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletContext<br align="left"/></font></td></tr></table>>, shape=box]
+k_4032ff01 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpServletRequest<br align="left"/></font></td></tr></table>>, shape=box]
+i_4032ff01 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:95<br align="left"/></font><font color="#ffffff">#provideHttpServletRequest()<br align="left"/></font></td></tr></table>>, shape=box]
+k_be9e2855 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpServletResponse<br align="left"/></font></td></tr></table>>, shape=box]
+i_be9e2855 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:99<br align="left"/></font><font color="#ffffff">#provideHttpServletResponse()<br align="left"/></font></td></tr></table>>, shape=box]
+k_d54fadf [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpSession<br align="left"/></font></td></tr></table>>, shape=box]
+i_d54fadf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:103<br align="left"/></font><font color="#ffffff">#provideHttpSession()<br align="left"/></font></td></tr></table>>, shape=box]
+k_dc114126 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@RequestParameters<br align="left"/></font><font color="#000000">Map<String, String[]><br align="left"/></font></td></tr></table>>, shape=box]
+i_dc114126 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:108<br align="left"/></font><font color="#ffffff">#provideRequestParameters()<br align="left"/></font></td></tr></table>>, shape=box]
+k_f4d27dcc [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneProperties<br align="left"/></font></td></tr></table>>, shape=box]
+i_f4d27dcc [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">DataSourceKunePersistModule.java:62<br align="left"/></font><font color="#ffffff">KunePropertiesDefault<br align="left"/></font></td></tr></table>>, shape=box]
+k_e5c4d047 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Jpa<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_e5c4d047 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:58<br align="left"/></font><font color="#ffffff">"development"<br align="left"/></font></td></tr></table>>, shape=box]
+k_15e1368d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Jpa<br align="left"/></font><font color="#000000">Properties<br align="left"/></font></td></tr></table>>, shape=box]
+i_15e1368d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:61<br align="left"/></font><font color="#ffffff">{hibernate.connection.username=kune, hibernate.connection.password=db4kune, hibernate.connection.url=jdbc:mysql://localhost/kune_dev?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8}<br align="left"/></font></td></tr></table>>, shape=box]
+k_12479946 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">PersistService<br align="left"/></font></td></tr></table>>, shape=box]
+k_14d21a2b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UnitOfWork<br align="left"/></font></td></tr></table>>, shape=box]
+k_e86e62f7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EntityManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_18f1fc32 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EntityManagerFactory<br align="left"/></font></td></tr></table>>, shape=box]
+k_1772d9e8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContainerFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_1772d9e8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@4f57011e<br align="left"/></font></td></tr></table>>, shape=box]
+k_d0fdbe65 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_d0fdbe65 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@590a8143<br align="left"/></font></td></tr></table>>, shape=box]
+k_ef684fca [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ExtMediaDescripFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_ef684fca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@40ac8360<br align="left"/></font></td></tr></table>>, shape=box]
+k_d9249a6e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_d9249a6e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@7de534cb<br align="left"/></font></td></tr></table>>, shape=box]
+k_213bdf7f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nCountryFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_213bdf7f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@52ed3bff<br align="left"/></font></td></tr></table>>, shape=box]
+k_dc5f834d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nLanguageFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_dc5f834d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@54fe0ce1<br align="left"/></font></td></tr></table>>, shape=box]
+k_1005c140 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_1005c140 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@72ffb35e<br align="left"/></font></td></tr></table>>, shape=box]
+k_faf47dc8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LicenseFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_faf47dc8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@71591b4d<br align="left"/></font></td></tr></table>>, shape=box]
+k_18a73330 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RateFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_18a73330 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@110f965e<br align="left"/></font></td></tr></table>>, shape=box]
+k_7eecdc15 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_7eecdc15 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@1658fe12<br align="left"/></font></td></tr></table>>, shape=box]
+k_4b700a5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagUserContentFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_4b700a5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@2c905b34<br align="left"/></font></td></tr></table>>, shape=box]
+k_9f662e9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_9f662e9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@3953c9c7<br align="left"/></font></td></tr></table>>, shape=box]
+k_f7c5b0c1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@DataSourceKune<br align="left"/></font><font color="#000000">Session<br align="left"/></font></td></tr></table>>, shape=box]
+k_f8b499ae [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@DataSourceKune<br align="left"/></font><font color="#000000">EntityManager<br align="left"/></font></td></tr></table>>, shape=box]
+i_f8b499ae [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">DataSourceKunePersistModule.java:116<br align="left"/></font><font color="#ffffff">Provider<javax.persistence.EntityManager><br align="left"/></font></td></tr></table>>, shape=box]
+k_850b4af8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@DataSourceKune<br align="left"/></font><font color="#000000">CustomPersistFilter<br align="left"/></font></td></tr></table>>, shape=box]
+k_7205138c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Internal(value=1)<br align="left"/></font><font color="#000000">FilterDefinition<br align="left"/></font></td></tr></table>>, shape=box]
+i_7205138c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">FiltersModuleBuilder.java:49<br align="left"/></font><font color="#ffffff">FilterDefinition<br align="left"/></font></td></tr></table>>, shape=box]
+k_c879f5b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_9f44e5f9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_1e1f5154 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_1f701e2f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ToolConfigurationManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_357f2e47 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContainerManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_a44b8adc [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LicenseManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_25fc6a23 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SocialNetworkManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_a5aa636a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">XmppManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_64d2d986 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ChatManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_2cfdfb8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RateManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_f2c4f820 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nCountryManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_a3db4306 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nLanguageManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_88b7f5ae [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_f7896e04 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_3b2cdd5d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagUserContentManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_e06650fc [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FileManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_735efec6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ExtMediaDescripManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_c9e328f9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneWaveManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_2f4cdb5a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SiteService<br align="left"/></font></td></tr></table>>, shape=box]
+k_63285b16 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupService<br align="left"/></font></td></tr></table>>, shape=box]
+k_bc4bf410 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentService<br align="left"/></font></td></tr></table>>, shape=box]
+k_1a0e9acf [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserService<br align="left"/></font></td></tr></table>>, shape=box]
+k_6fba67c8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SocialNetService<br align="left"/></font></td></tr></table>>, shape=box]
+k_729616b4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nService<br align="left"/></font></td></tr></table>>, shape=box]
+k_b2893bab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ListsService<br align="left"/></font></td></tr></table>>, shape=box]
+k_1294d93f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ClientStatsService<br align="left"/></font></td></tr></table>>, shape=box]
+k_4e76cb5b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserInfoService<br align="left"/></font></td></tr></table>>, shape=box]
+k_d0882540 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CreationService<br align="left"/></font></td></tr></table>>, shape=box]
+k_a32f5269 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccessRightsService<br align="left"/></font></td></tr></table>>, shape=box]
+k_573c0666 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccessService<br align="left"/></font></td></tr></table>>, shape=box]
+k_34e613cd [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FinderService<br align="left"/></font></td></tr></table>>, shape=box]
+k_d70fa3ba [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">StateService<br align="left"/></font></td></tr></table>>, shape=box]
+k_2e46bac4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationService<br align="left"/></font></td></tr></table>>, shape=box]
+k_6819c0ed [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationServiceMultiLang<br align="left"/></font></td></tr></table>>, shape=box]
+k_924c6e54 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneWaveService<br align="left"/></font></td></tr></table>>, shape=box]
+k_17a7737d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">MailService<br align="left"/></font></td></tr></table>>, shape=box]
+k_7e39f9ba [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">StatsService<br align="left"/></font></td></tr></table>>, shape=box]
+k_f150a261 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Mapper<br align="left"/></font></td></tr></table>>, shape=box]
+k_cdbf7f4b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UsersOnline<br align="left"/></font></td></tr></table>>, shape=box]
+k_39f3d176 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">NotificationSender<br align="left"/></font></td></tr></table>>, shape=box]
+k_fecf6b4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ExtendedModule-1)<br align="left"/></font><font color="#000000">AbstractExtendedModule<br align="left"/></font></td></tr></table>>, shape=box]
+i_fecf6b4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">AbstractExtendedModule.java:100<br align="left"/></font><font color="#ffffff">PlatformServerModule<br align="left"/></font></td></tr><tr><td align="left" port="m_ea7d63">#injectRegisteredObjects(...)</td></tr></table>>, shape=box]
+k_b6771c88 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RESTMethodFinder<br align="left"/></font></td></tr></table>>, shape=box]
+k_7f970f01 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RESTSerializer<br align="left"/></font></td></tr></table>>, shape=box]
+k_176a0ec3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ManagedFilterPipeline<br align="left"/></font></td></tr><tr><td align="left" port="m_84fd56bb"><init></td></tr></table>>, shape=box]
+k_9322b9af [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ManagedServletPipeline<br align="left"/></font></td></tr><tr><td align="left" port="m_c910e7a6"><init></td></tr></table>>, shape=box]
+k_d7958032 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JpaPersistService<br align="left"/></font></td></tr><tr><td align="left" port="m_39b7e4fa"><init></td></tr></table>>, shape=box]
+k_f9ab25ce [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GenericPersistenceInitializer<br align="left"/></font></td></tr><tr><td align="left" port="m_97f9671f"><init></td></tr></table>>, shape=box]
+k_98dea9ff [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KunePersistenceService<br align="left"/></font></td></tr><tr><td align="left" port="m_1af67f92"><init></td></tr><tr><td align="left" port="m_b7f26df5">databaseInitializer</td></tr></table>>, shape=box]
+k_f243b324 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetwork<br align="left"/></font></td></tr><tr><td align="left" port="m_29530556"><init></td></tr></table>>, shape=box]
+k_7490fd9c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">XMLActionReader<br align="left"/></font></td></tr><tr><td align="left" port="m_8e4df240"><init></td></tr></table>>, shape=box]
+k_5623cddf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ServerToolRegistry<br align="left"/></font></td></tr><tr><td align="left" port="m_b4a6ea93"><init></td></tr></table>>, shape=box]
+k_c2d2e277 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileUploadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_f70b907a"><init></td></tr><tr><td align="left" port="m_fbf8f608">kuneProperties</td></tr><tr><td align="left" port="m_75d06daa">i18n</td></tr><tr><td align="left" port="m_9a2f00cb">accessService</td></tr><tr><td align="left" port="m_3f42d6ac">creationService</td></tr><tr><td align="left" port="m_55fe5eeb">fileManager</td></tr><tr><td align="left" port="m_f73bea64">i18n</td></tr><tr><td align="left" port="m_9359f431">userSession</td></tr></table>>, shape=box]
+k_9d47b88c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDownloadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_a193f493"><init></td></tr><tr><td align="left" port="m_e765dc67">contentManager</td></tr><tr><td align="left" port="m_1457c827">kuneProperties</td></tr><tr><td align="left" port="m_116dcc06">fileUtils</td></tr></table>>, shape=box]
+k_49d78e28 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EntityLogoUploadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_1d803b88"><init></td></tr></table>>, shape=box]
+k_e0e8db71 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EntityLogoDownloadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_fd8a1421"><init></td></tr><tr><td align="left" port="m_e17f200f">groupManager</td></tr></table>>, shape=box]
+k_702975fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ParticipantUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_ffdcacd3"><init></td></tr></table>>, shape=box]
+k_788bccb8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveEmailNotifier<br align="left"/></font></td></tr><tr><td align="left" port="m_dadc2f23"><init></td></tr></table>>, shape=box]
+k_f2314e28 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PendingNotificationSender<br align="left"/></font></td></tr><tr><td align="left" port="m_6683cfea"><init></td></tr></table>>, shape=box]
+k_8d44110d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CronServerTasksManager<br align="left"/></font></td></tr><tr><td align="left" port="m_6e568d1e"><init></td></tr></table>>, shape=box]
+k_6e8c9fc2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DocumentServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_7d837e0d"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_f5b56df3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">BlogServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_15dbf5cc"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_2cb43807 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WikiServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_760be197"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_7a06c9a6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_a9ff88e7"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_b8c49f49 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">BarterServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_f138584c"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_6f765ddc [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EventsServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_3b84fb69"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_a7de6098 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TaskServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_1e5046ac"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_d5a7e1dc [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ListsServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_d1e0d2bd"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_61f807f3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">InternalServletModule$BackwardsCompatibleServletContextProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_2e3e1d1"><init></td></tr></table>>, shape=box]
+k_4845a1e6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JpaPersistService$EntityManagerFactoryProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_535448fb"><init></td></tr></table>>, shape=box]
+k_ef59204a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DataSourceKuneSessionProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_f26888c6"><init></td></tr><tr><td align="left" port="m_6499269d">entityManagerProvider</td></tr></table>>, shape=box]
+k_74c51441 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomPersistFilter<br align="left"/></font></td></tr><tr><td align="left" port="m_762b5a60"><init></td></tr></table>>, shape=box]
+k_bbc95303 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a1db3271"><init></td></tr></table>>, shape=box]
+k_f34ff9ea [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GroupManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_7182081"><init></td></tr></table>>, shape=box]
+k_b1a4f82b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_540a509d"><init></td></tr></table>>, shape=box]
+k_47585c11 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ToolConfigurationManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_80d9bd00"><init></td></tr></table>>, shape=box]
+k_b62d8344 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContainerManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_4eabfea5"><init></td></tr></table>>, shape=box]
+k_9b5d414b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">LicenseManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_b8b71743"><init></td></tr><tr><td align="left" port="m_702001c6">#setLicenseFinder(...)</td></tr></table>>, shape=box]
+k_21d3f12e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetworkManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_155ec683"><init></td></tr></table>>, shape=box]
+k_5de23819 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">XmppManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_101e3d67"><init></td></tr></table>>, shape=box]
+k_8b96e75f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_5a841140"><init></td></tr></table>>, shape=box]
+k_76134569 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">RateManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_4f9b8ac6"><init></td></tr></table>>, shape=box]
+k_ba93a98c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nCountryManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_eb61cf5a"><init></td></tr></table>>, shape=box]
+k_c05ad95f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nLanguageManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_eccba8fc"><init></td></tr></table>>, shape=box]
+k_f52e7d89 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nTranslationManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_f548b735"><init></td></tr></table>>, shape=box]
+k_c41beabb [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TagManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_aa2699dc"><init></td></tr></table>>, shape=box]
+k_a82eb95 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TagUserContentManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_b707ae9a"><init></td></tr></table>>, shape=box]
+k_9e12335c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_11088986"><init></td></tr></table>>, shape=box]
+k_450ccc35 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ExtMediaDescripManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_caed5f27"><init></td></tr></table>>, shape=box]
+k_460604a9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneWaveManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_d21306a0"><init></td></tr></table>>, shape=box]
+k_e530d502 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SiteRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_94bc12fa"><init></td></tr></table>>, shape=box]
+k_429304ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GroupRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_f8b7308a"><init></td></tr></table>>, shape=box]
+k_51262743 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_6bc89f50"><init></td></tr></table>>, shape=box]
+k_8879d106 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_ecb87f6"><init></td></tr></table>>, shape=box]
+k_17a1e70 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetworkRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_b56ae5c8"><init></td></tr></table>>, shape=box]
+k_3bd18497 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_20e4f4c3"><init></td></tr></table>>, shape=box]
+k_f9103a4d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ListsRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_19f5554c"><init></td></tr></table>>, shape=box]
+k_f7f7c758 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StatsRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_29212e6a"><init></td></tr></table>>, shape=box]
+k_e9917fd1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserInfoServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_e2253da6"><init></td></tr></table>>, shape=box]
+k_bcb957ef [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CreationServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_3ada629b"><init></td></tr></table>>, shape=box]
+k_4408d4ca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AccessRightsServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a352c536"><init></td></tr></table>>, shape=box]
+k_748ed78e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AccessServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_63a0fdbf"><init></td></tr></table>>, shape=box]
+k_3aada672 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FinderServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_2d8dc501"><init></td></tr></table>>, shape=box]
+k_ac6dfe45 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StateServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_fc5df405"><init></td></tr></table>>, shape=box]
+k_dd1a5d5d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nTranslationServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_1b1ed846"><init></td></tr></table>>, shape=box]
+k_d29e6df8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneWaveServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_f42f63ac"><init></td></tr></table>>, shape=box]
+k_cc9daff5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MailServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a2bece9f"><init></td></tr></table>>, shape=box]
+k_8879400b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StatsServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_96bb30a1"><init></td></tr></table>>, shape=box]
+k_770f77ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DozerMapper<br align="left"/></font></td></tr><tr><td align="left" port="m_100deaab"><init></td></tr></table>>, shape=box]
+k_8f78ed85 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_c72f445d"><init></td></tr></table>>, shape=box]
+k_8d275c11 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationSenderDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_87014a14"><init></td></tr></table>>, shape=box]
+k_a05d6146 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Injector<br align="left"/></font></td></tr></table>>, shape=box]
+i_a05d6146 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">[unknown source]<br align="left"/></font><font color="#ffffff">Provider<Injector><br align="left"/></font></td></tr></table>>, shape=box]
+k_902a88a2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultRESTMethodFinder<br align="left"/></font></td></tr><tr><td align="left" port="m_ed90671"><init></td></tr></table>>, shape=box]
+k_eb7f0c08 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JSONLibRESTSerializer<br align="left"/></font></td></tr><tr><td align="left" port="m_38c8ab78"><init></td></tr></table>>, shape=box]
+k_88302e2c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DatabaseInitializer<br align="left"/></font></td></tr><tr><td align="left" port="m_1b090b84"><init></td></tr></table>>, shape=box]
+k_d0481e3a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_ed1988bf"><init></td></tr></table>>, shape=box]
+k_97d4a3f4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=wave_server_domain)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_97d4a3f4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost"<br align="left"/></font></td></tr></table>>, shape=box]
+k_f3d26d13 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneBasicProperties<br align="left"/></font></td></tr><tr><td align="left" port="m_94b0e6a0"><init></td></tr></table>>, shape=box]
+k_799adfe1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveBus<br align="left"/></font></td></tr></table>>, shape=box]
+k_25cd781d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomJobFactory<br align="left"/></font></td></tr><tr><td align="left" port="m_d67d262c"><init></td></tr></table>>, shape=box]
+k_bfb1b3ee [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StdSchedulerFactory<br align="left"/></font></td></tr><tr><td align="left" port="m_b26be00d"><init></td></tr></table>>, shape=box]
+k_bb878434 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomUserRegistrationServlet<br align="left"/></font></td></tr><tr><td align="left" port="m_145a2d5b"><init></td></tr></table>>, shape=box]
+k_382db0d2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationService<br align="left"/></font></td></tr><tr><td align="left" port="m_f7fa287d"><init></td></tr></table>>, shape=box]
+k_44eb80b7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatProperties<br align="left"/></font></td></tr><tr><td align="left" port="m_14070d2b"><init></td></tr></table>>, shape=box]
+k_c7f722e6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccountStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_a1ac9b1d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ReservedWordsRegistry<br align="left"/></font></td></tr><tr><td align="left" port="m_de674d3e"><init></td></tr></table>>, shape=box]
+k_fe832cf7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomWaveClientServlet<br align="left"/></font></td></tr><tr><td align="left" port="m_ab1e54db"><init></td></tr></table>>, shape=box]
+k_1cba41af [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=use_socketio)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_1cba41af [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_79387d6e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_f5f31c26 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveRenderer<br align="left"/></font></td></tr></table>>, shape=box]
+k_efe9d328 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_4ac9f0a7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ConversationUtil<br align="left"/></font></td></tr><tr><td align="left" port="m_cb039b61"><init></td></tr></table>>, shape=box]
+k_ad3b717b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EventDataConverterManager<br align="left"/></font></td></tr></table>>, shape=box]
+i_ad3b717b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">EventDataConverterModule.java:43<br align="left"/></font><font color="#ffffff">#provideEventDataConverterManager()<br align="left"/></font></td></tr></table>>, shape=box]
+k_50ad1c96 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=DataApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
+i_50ad1c96 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:117<br align="left"/></font><font color="#ffffff">#provideDataApiRegistry(SearchService)<br align="left"/></font></td></tr></table>>, shape=box]
+k_ecee0859 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveletNotificationDispatcher<br align="left"/></font></td></tr><tr><td align="left" port="m_72bb3f17"><init></td></tr></table>>, shape=box]
+k_cd7b68d0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=disable_registration)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_cd7b68d0 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">false<br align="left"/></font></td></tr></table>>, shape=box]
+k_4ae6eaa1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationHtmlHelper<br align="left"/></font></td></tr><tr><td align="left" port="m_40754071"><init></td></tr></table>>, shape=box]
+k_25087fa1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAccountStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2bca331e"><init></td></tr></table>>, shape=box]
+k_ec347c1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserSession<br align="left"/></font></td></tr><tr><td align="left" port="m_4d2e2d30"><init></td></tr></table>>, shape=box]
+k_e8023afd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SessionManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_bc6356d8"><init></td></tr></table>>, shape=box]
+k_aa9c0656 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ThreadedWaveRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_b9a42285"><init></td></tr></table>>, shape=box]
+k_278e5d1c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveServerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_3065e839"><init></td></tr></table>>, shape=box]
+k_1d57ace5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGenerator<br align="left"/></font></td></tr></table>>, shape=box]
+i_1d57ace5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:106<br align="left"/></font><font color="#ffffff">#provideIdGenerator(String, Seed)<br align="left"/></font></td></tr></table>>, shape=box]
+k_187912c5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SearchService<br align="left"/></font></td></tr><tr><td align="left" port="m_22b30b9b"><init></td></tr></table>>, shape=box]
+k_1ce5e340 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertificateManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_b9fa0bc7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+k_e22cd5ac [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AbsoluteFileDownloadUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_30d2c19e"><init></td></tr></table>>, shape=box]
+k_2cd33ff1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=account_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_2cd33ff1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_accounts"<br align="left"/></font></td></tr></table>>, shape=box]
+k_c7da405 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_2245b240 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">Templates<br align="left"/></font></td></tr><tr><td align="left" port="m_c73d3a59"><init></td></tr></table>>, shape=box]
+k_87ea5d92 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_946dead5"><init></td></tr></table>>, shape=box]
+k_d8ca8cf7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_4789c3c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveMap<br align="left"/></font></td></tr><tr><td align="left" port="m_a29919e6"><init></td></tr></table>>, shape=box]
+k_6be82e3e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=listener_executor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
+i_6be82e3e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:106<br align="left"/></font><font color="#ffffff">ThreadPoolExecutor<br align="left"/></font></td></tr></table>>, shape=box]
+k_352f09ab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGeneratorImpl$Seed<br align="left"/></font></td></tr></table>>, shape=box]
+i_352f09ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:126<br align="left"/></font><font color="#ffffff">#provideSeed(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
+k_75860e40 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SearchProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_78b7d1b7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CertificateManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_7dc25cb3"><init></td></tr></table>>, shape=box]
+k_fca7bf8a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationHost<br align="left"/></font></td></tr><tr><td align="left" port="m_dba23bb0"><init></td></tr></table>>, shape=box]
+k_e4c64ebf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">HashSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_54776227"><init></td></tr></table>>, shape=box]
+k_f4a9a99 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">Markup<br align="left"/></font></td></tr><tr><td align="left" port="m_6e9c9f8f"><init></td></tr></table>>, shape=box]
+k_ea624eab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GadgetRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_4e215f96"><init></td></tr></table>>, shape=box]
+k_3a7d7e4d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationRemote<br align="left"/></font></td></tr><tr><td align="left" port="m_8c82dc4e"><init></td></tr></table>>, shape=box]
+k_686e361c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LocalWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+i_686e361c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideLocalWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
+k_21185d9b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletNotificationSubscriber<br align="left"/></font></td></tr></table>>, shape=box]
+k_5ecb104 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RemoteWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+i_5ecb104 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideRemoteWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
+k_b256b8b4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaAndSnapshotStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_f282996 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveDigester<br align="left"/></font></td></tr><tr><td align="left" port="m_3d5a1b27"><init></td></tr></table>>, shape=box]
+k_614b523c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SecureRandom<br align="left"/></font></td></tr></table>>, shape=box]
+i_614b523c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:112<br align="left"/></font><font color="#ffffff">#provideSecureRandom()<br align="left"/></font></td></tr></table>>, shape=box]
+k_5df6cba1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MemorySearchProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_5b65d1b7"><init></td></tr></table>>, shape=box]
+k_9dc1ac3d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertPathStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_4d6e10f4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveSignatureVerifier<br align="left"/></font></td></tr><tr><td align="left" port="m_a87b4d2a"><init></td></tr></table>>, shape=box]
+k_7cf68b55 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SignatureHandler<br align="left"/></font></td></tr></table>>, shape=box]
+k_94870f0b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_94870f0b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_39c6c49e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_29fd6908 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DeltaStoreBasedSnapshotStore<br align="left"/></font></td></tr><tr><td align="left" port="m_f7ad7a10"><init></td></tr></table>>, shape=box]
+k_81703b8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PerUserWaveViewSubscriber<br align="left"/></font></td></tr><tr><td align="left" port="m_bf9bd871"><init></td></tr></table>>, shape=box]
+k_d5449967 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileSignerInfoStore<br align="left"/></font></td></tr><tr><td align="left" port="m_d805501f"><init></td></tr></table>>, shape=box]
+k_6a848a3f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveCertPathValidator<br align="left"/></font></td></tr></table>>, shape=box]
+i_6a848a3f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideWaveCertPathValidator(boolean, TimeSource, VerifiedCertChainCache, TrustRootsProvider)<br align="left"/></font></td></tr></table>>, shape=box]
+k_f1b10e50 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NonSigningSignatureHandler$NonSigningSignatureHandlerProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_6c0a518"><init></td></tr></table>>, shape=box]
+k_139f8f1c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDeltaStore<br align="left"/></font></td></tr><tr><td align="left" port="m_408652f3"><init></td></tr></table>>, shape=box]
+k_20875e7b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=signer_info_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_20875e7b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_certificates"<br align="left"/></font></td></tr></table>>, shape=box]
+k_456ad2eb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">VerifiedCertChainCache<br align="left"/></font></td></tr></table>>, shape=box]
+k_e3aadf3c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TimeSource<br align="left"/></font></td></tr></table>>, shape=box]
+k_7f2b730a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_signer_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_7f2b730a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_a5518feb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TrustRootsProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_eb81f386 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=delta_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_eb81f386 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_deltas"<br align="left"/></font></td></tr></table>>, shape=box]
+k_72ceec06 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultCacheImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_5a8716ec"><init></td></tr></table>>, shape=box]
+k_fb665a1f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTimeSource<br align="left"/></font></td></tr><tr><td align="left" port="m_24dcbc5e"><init></td></tr></table>>, shape=box]
+k_6417e530 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTrustRootsProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_518d5280"><init></td></tr></table>>, shape=box]
+k_bf29a0e0 -> k_4032ff01 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ce3816f4 -> k_be9e2855 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4703c789 -> k_176a0ec3 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c35365e1 -> k_61f807f3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_4032ff01 -> i_4032ff01 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_be9e2855 -> i_be9e2855 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_d54fadf -> i_d54fadf [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_dc114126 -> i_dc114126 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_f4d27dcc -> i_f4d27dcc [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e5c4d047 -> i_e5c4d047 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_15e1368d -> i_15e1368d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_12479946 -> k_d7958032 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_14d21a2b -> k_d7958032 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e86e62f7 -> k_d7958032 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_18f1fc32 -> k_4845a1e6 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_1772d9e8 -> i_1772d9e8 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d0fdbe65 -> i_d0fdbe65 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ef684fca -> i_ef684fca [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d9249a6e -> i_d9249a6e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_213bdf7f -> i_213bdf7f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_dc5f834d -> i_dc5f834d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1005c140 -> i_1005c140 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_faf47dc8 -> i_faf47dc8 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_18a73330 -> i_18a73330 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7eecdc15 -> i_7eecdc15 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4b700a5 -> i_4b700a5 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_9f662e9 -> i_9f662e9 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f7c5b0c1 -> k_ef59204a [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_f8b499ae -> i_f8b499ae [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_850b4af8 -> k_74c51441 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7205138c -> i_7205138c [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_c879f5b -> k_bbc95303 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_9f44e5f9 -> k_f34ff9ea [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1e1f5154 -> k_b1a4f82b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1f701e2f -> k_47585c11 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_357f2e47 -> k_b62d8344 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a44b8adc -> k_9b5d414b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_25fc6a23 -> k_21d3f12e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a5aa636a -> k_5de23819 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_64d2d986 -> k_8b96e75f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2cfdfb8 -> k_76134569 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f2c4f820 -> k_ba93a98c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a3db4306 -> k_c05ad95f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_88b7f5ae -> k_f52e7d89 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f7896e04 -> k_c41beabb [style=dashed, arrowtail=none, arrowhead=onormal]
+k_3b2cdd5d -> k_a82eb95 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e06650fc -> k_9e12335c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_735efec6 -> k_450ccc35 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c9e328f9 -> k_460604a9 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2f4cdb5a -> k_e530d502 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_63285b16 -> k_429304ab [style=dashed, arrowtail=none, arrowhead=onormal]
+k_bc4bf410 -> k_51262743 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1a0e9acf -> k_8879d106 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6fba67c8 -> k_17a1e70 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_729616b4 -> k_3bd18497 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b2893bab -> k_f9103a4d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1294d93f -> k_f7f7c758 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4e76cb5b -> k_e9917fd1 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d0882540 -> k_bcb957ef [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a32f5269 -> k_4408d4ca [style=dashed, arrowtail=none, arrowhead=onormal]
+k_573c0666 -> k_748ed78e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_34e613cd -> k_3aada672 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d70fa3ba -> k_ac6dfe45 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2e46bac4 -> k_dd1a5d5d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6819c0ed -> k_dd1a5d5d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_924c6e54 -> k_d29e6df8 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_17a7737d -> k_cc9daff5 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7e39f9ba -> k_8879400b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f150a261 -> k_770f77ab [style=dashed, arrowtail=none, arrowhead=onormal]
+k_cdbf7f4b -> k_8f78ed85 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_39f3d176 -> k_8d275c11 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_fecf6b4 -> i_fecf6b4 [style=dashed, arrowtail=none, arrowhead=onormal]
+i_fecf6b4:m_ea7d63:e -> k_a05d6146 [style=solid, arrowtail=none, arrowhead=normal]
+k_b6771c88 -> k_902a88a2 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7f970f01 -> k_eb7f0c08 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_176a0ec3:m_84fd56bb:e -> k_a05d6146 [style=solid, arrowtail=none, arrowhead=normal]
+k_176a0ec3:m_84fd56bb:e -> k_9322b9af [style=solid, arrowtail=none, arrowhead=normal]
+k_176a0ec3:m_84fd56bb:e -> k_c35365e1 [style=solid, arrowtail=none, arrowhead=normal]
+k_9322b9af:m_c910e7a6:e -> k_a05d6146 [style=solid, arrowtail=none, arrowhead=normal]
+k_d7958032:m_39b7e4fa:e -> k_e5c4d047 [style=solid, arrowtail=none, arrowhead=normal]
+k_d7958032:m_39b7e4fa:e -> k_15e1368d [style=solid, arrowtail=none, arrowhead=normal]
+k_f9ab25ce:m_97f9671f:e -> k_12479946 [style=solid, arrowtail=none, arrowhead=normal]
+k_98dea9ff:m_b7f26df5:e -> k_88302e2c [style=solid, arrowtail=none, arrowhead=normal]
+k_5623cddf:m_b4a6ea93:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_c2d2e277:m_fbf8f608:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_c2d2e277:m_75d06daa:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_c2d2e277:m_9a2f00cb:e -> k_573c0666 [style=solid, arrowtail=none, arrowhead=normal]
+k_c2d2e277:m_3f42d6ac:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_c2d2e277:m_55fe5eeb:e -> k_e06650fc [style=solid, arrowtail=none, arrowhead=normal]
+k_c2d2e277:m_f73bea64:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_c2d2e277:m_9359f431:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_9d47b88c:m_e765dc67:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_9d47b88c:m_1457c827:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_9d47b88c:m_116dcc06:e -> k_d0481e3a [style=solid, arrowtail=none, arrowhead=normal]
+k_49d78e28:m_1d803b88:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_49d78e28:m_1d803b88:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_49d78e28:m_1d803b88:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_e0e8db71:m_e17f200f:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_702975fe:m_ffdcacd3:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_702975fe:m_ffdcacd3:e -> k_f3d26d13 [style=solid, arrowtail=none, arrowhead=normal]
+k_788bccb8:m_dadc2f23:e -> k_799adfe1 [style=solid, arrowtail=none, arrowhead=normal]
+k_788bccb8:m_dadc2f23:e -> k_f2314e28 [style=solid, arrowtail=none, arrowhead=normal]
+k_788bccb8:m_dadc2f23:e -> k_f3d26d13 [style=solid, arrowtail=none, arrowhead=normal]
+k_788bccb8:m_dadc2f23:e -> k_702975fe [style=solid, arrowtail=none, arrowhead=normal]
+k_788bccb8:m_dadc2f23:e -> k_924c6e54 [style=solid, arrowtail=none, arrowhead=normal]
+k_788bccb8:m_dadc2f23:e -> k_9f662e9 [style=solid, arrowtail=none, arrowhead=normal]
+k_f2314e28:m_6683cfea:e -> k_39f3d176 [style=solid, arrowtail=none, arrowhead=normal]
+k_8d44110d:m_6e568d1e:e -> k_bfb1b3ee [style=solid, arrowtail=none, arrowhead=normal]
+k_8d44110d:m_6e568d1e:e -> k_25cd781d [style=solid, arrowtail=none, arrowhead=normal]
+k_6e8c9fc2:m_7d837e0d:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_6e8c9fc2:m_7d837e0d:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_6e8c9fc2:m_7d837e0d:e -> k_1f701e2f [style=solid, arrowtail=none, arrowhead=normal]
+k_6e8c9fc2:m_7d837e0d:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_6e8c9fc2:m_7d837e0d:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_6e8c9fc2:m_fce6b61b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_f5b56df3:m_15dbf5cc:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_f5b56df3:m_15dbf5cc:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_f5b56df3:m_15dbf5cc:e -> k_1f701e2f [style=solid, arrowtail=none, arrowhead=normal]
+k_f5b56df3:m_15dbf5cc:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_f5b56df3:m_15dbf5cc:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_f5b56df3:m_fce6b61b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_2cb43807:m_760be197:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_2cb43807:m_760be197:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_2cb43807:m_760be197:e -> k_1f701e2f [style=solid, arrowtail=none, arrowhead=normal]
+k_2cb43807:m_760be197:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_2cb43807:m_760be197:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_2cb43807:m_fce6b61b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_7a06c9a6:m_a9ff88e7:e -> k_1f701e2f [style=solid, arrowtail=none, arrowhead=normal]
+k_7a06c9a6:m_a9ff88e7:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_7a06c9a6:m_a9ff88e7:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_7a06c9a6:m_a9ff88e7:e -> k_8b96e75f [style=solid, arrowtail=none, arrowhead=normal]
+k_7a06c9a6:m_a9ff88e7:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_7a06c9a6:m_a9ff88e7:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_7a06c9a6:m_fce6b61b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_b8c49f49:m_f138584c:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_b8c49f49:m_f138584c:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_b8c49f49:m_f138584c:e -> k_1f701e2f [style=solid, arrowtail=none, arrowhead=normal]
+k_b8c49f49:m_f138584c:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_b8c49f49:m_f138584c:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_b8c49f49:m_fce6b61b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_6f765ddc:m_3b84fb69:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_6f765ddc:m_3b84fb69:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_6f765ddc:m_3b84fb69:e -> k_1f701e2f [style=solid, arrowtail=none, arrowhead=normal]
+k_6f765ddc:m_3b84fb69:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_6f765ddc:m_3b84fb69:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_6f765ddc:m_fce6b61b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_a7de6098:m_1e5046ac:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_a7de6098:m_1e5046ac:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_a7de6098:m_1e5046ac:e -> k_1f701e2f [style=solid, arrowtail=none, arrowhead=normal]
+k_a7de6098:m_1e5046ac:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_a7de6098:m_1e5046ac:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_a7de6098:m_fce6b61b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_d5a7e1dc:m_d1e0d2bd:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_d5a7e1dc:m_d1e0d2bd:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_d5a7e1dc:m_d1e0d2bd:e -> k_1f701e2f [style=solid, arrowtail=none, arrowhead=normal]
+k_d5a7e1dc:m_d1e0d2bd:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_d5a7e1dc:m_d1e0d2bd:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_d5a7e1dc:m_d1e0d2bd:e -> k_924c6e54 [style=solid, arrowtail=none, arrowhead=normal]
+k_d5a7e1dc:m_d1e0d2bd:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_d5a7e1dc:m_fce6b61b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_4845a1e6:m_535448fb:e -> k_d7958032 [style=solid, arrowtail=none, arrowhead=normal]
+k_ef59204a:m_6499269d:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_74c51441:m_762b5a60:e -> k_14d21a2b [style=solid, arrowtail=none, arrowhead=normal]
+k_74c51441:m_762b5a60:e -> k_12479946 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_9f662e9 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_a3db4306 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_f2c4f820 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_a5aa636a [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_44eb80b7 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_6819c0ed [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_bb878434 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_c7f722e6 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_924c6e54 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_702975fe [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_f3d26d13 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbc95303:m_a1db3271:e -> k_382db0d2 [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_d9249a6e [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_9f662e9 [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_f3d26d13 [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_a44b8adc [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_faf47dc8 [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_e06650fc [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_f34ff9ea:m_7182081:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_d0fdbe65 [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_1772d9e8 [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_34e613cd [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_9f662e9 [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_dc5f834d [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_3b2cdd5d [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_924c6e54 [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_702975fe [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_b1a4f82b:m_540a509d:e -> k_7490fd9c [style=solid, arrowtail=none, arrowhead=normal]
+k_47585c11:m_80d9bd00:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_b62d8344:m_4eabfea5:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_b62d8344:m_4eabfea5:e -> k_d0fdbe65 [style=solid, arrowtail=none, arrowhead=normal]
+k_b62d8344:m_4eabfea5:e -> k_1772d9e8 [style=solid, arrowtail=none, arrowhead=normal]
+k_9b5d414b:m_b8b71743:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_9b5d414b:m_b8b71743:e -> k_f3d26d13 [style=solid, arrowtail=none, arrowhead=normal]
+k_9b5d414b:m_b8b71743:e -> k_faf47dc8 [style=solid, arrowtail=none, arrowhead=normal]
+k_9b5d414b:m_702001c6:e -> k_faf47dc8 [style=solid, arrowtail=none, arrowhead=normal]
+k_21d3f12e:m_155ec683:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_21d3f12e:m_155ec683:e -> k_d9249a6e [style=solid, arrowtail=none, arrowhead=normal]
+k_21d3f12e:m_155ec683:e -> k_a32f5269 [style=solid, arrowtail=none, arrowhead=normal]
+k_21d3f12e:m_155ec683:e -> k_c879f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_5de23819:m_101e3d67:e -> k_44eb80b7 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b96e75f:m_5a841140:e -> k_a5aa636a [style=solid, arrowtail=none, arrowhead=normal]
+k_8b96e75f:m_5a841140:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b96e75f:m_5a841140:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_76134569:m_4f9b8ac6:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_76134569:m_4f9b8ac6:e -> k_18a73330 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba93a98c:m_eb61cf5a:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_ba93a98c:m_eb61cf5a:e -> k_213bdf7f [style=solid, arrowtail=none, arrowhead=normal]
+k_c05ad95f:m_eccba8fc:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_c05ad95f:m_eccba8fc:e -> k_dc5f834d [style=solid, arrowtail=none, arrowhead=normal]
+k_f52e7d89:m_f548b735:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_f52e7d89:m_f548b735:e -> k_1005c140 [style=solid, arrowtail=none, arrowhead=normal]
+k_f52e7d89:m_f548b735:e -> k_a3db4306 [style=solid, arrowtail=none, arrowhead=normal]
+k_c41beabb:m_aa2699dc:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_c41beabb:m_aa2699dc:e -> k_7eecdc15 [style=solid, arrowtail=none, arrowhead=normal]
+k_a82eb95:m_b707ae9a:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_a82eb95:m_b707ae9a:e -> k_f7896e04 [style=solid, arrowtail=none, arrowhead=normal]
+k_a82eb95:m_b707ae9a:e -> k_4b700a5 [style=solid, arrowtail=none, arrowhead=normal]
+k_450ccc35:m_caed5f27:e -> k_f8b499ae [style=solid, arrowtail=none, arrowhead=normal]
+k_450ccc35:m_caed5f27:e -> k_ef684fca [style=solid, arrowtail=none, arrowhead=normal]
+k_460604a9:m_d21306a0:e -> k_924c6e54 [style=solid, arrowtail=none, arrowhead=normal]
+k_460604a9:m_d21306a0:e -> k_702975fe [style=solid, arrowtail=none, arrowhead=normal]
+k_460604a9:m_d21306a0:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_460604a9:m_d21306a0:e -> k_d9249a6e [style=solid, arrowtail=none, arrowhead=normal]
+k_460604a9:m_d21306a0:e -> k_9f662e9 [style=solid, arrowtail=none, arrowhead=normal]
+k_460604a9:m_d21306a0:e -> k_c879f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_c879f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_4e76cb5b [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_a44b8adc [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_f150a261 [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_44eb80b7 [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_a3db4306 [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_f2c4f820 [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_e530d502:m_94bc12fa:e -> k_735efec6 [style=solid, arrowtail=none, arrowhead=normal]
+k_429304ab:m_f8b7308a:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_429304ab:m_f8b7308a:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_429304ab:m_f8b7308a:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_429304ab:m_f8b7308a:e -> k_f150a261 [style=solid, arrowtail=none, arrowhead=normal]
+k_429304ab:m_f8b7308a:e -> k_a1ac9b1d [style=solid, arrowtail=none, arrowhead=normal]
+k_429304ab:m_f8b7308a:e -> k_51262743 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_34e613cd [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_573c0666 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_a32f5269 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_d70fa3ba [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_d0882540 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_3b2cdd5d [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_f150a261 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_64d2d986 [style=solid, arrowtail=none, arrowhead=normal]
+k_51262743:m_6bc89f50:e -> k_c9e328f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_ec347c1 [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_c879f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_1cba41af [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_4e76cb5b [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_f150a261 [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_79387d6e [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_fe832cf7 [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_a1ac9b1d [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_51262743 [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_8879d106:m_ecb87f6:e -> k_9f662e9 [style=solid, arrowtail=none, arrowhead=normal]
+k_17a1e70:m_b56ae5c8:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_17a1e70:m_b56ae5c8:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_17a1e70:m_b56ae5c8:e -> k_25fc6a23 [style=solid, arrowtail=none, arrowhead=normal]
+k_17a1e70:m_b56ae5c8:e -> k_f150a261 [style=solid, arrowtail=none, arrowhead=normal]
+k_17a1e70:m_b56ae5c8:e -> k_9f662e9 [style=solid, arrowtail=none, arrowhead=normal]
+k_17a1e70:m_b56ae5c8:e -> k_382db0d2 [style=solid, arrowtail=none, arrowhead=normal]
+k_3bd18497:m_20e4f4c3:e -> k_4032ff01 [style=solid, arrowtail=none, arrowhead=normal]
+k_3bd18497:m_20e4f4c3:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_3bd18497:m_20e4f4c3:e -> k_88b7f5ae [style=solid, arrowtail=none, arrowhead=normal]
+k_3bd18497:m_20e4f4c3:e -> k_a3db4306 [style=solid, arrowtail=none, arrowhead=normal]
+k_3bd18497:m_20e4f4c3:e -> k_f150a261 [style=solid, arrowtail=none, arrowhead=normal]
+k_f9103a4d:m_19f5554c:e -> k_51262743 [style=solid, arrowtail=none, arrowhead=normal]
+k_f9103a4d:m_19f5554c:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_f9103a4d:m_19f5554c:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_f7f7c758:m_29212e6a:e -> k_7e39f9ba [style=solid, arrowtail=none, arrowhead=normal]
+k_f7f7c758:m_29212e6a:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_f7f7c758:m_29212e6a:e -> k_f150a261 [style=solid, arrowtail=none, arrowhead=normal]
+k_e9917fd1:m_e2253da6:e -> k_25fc6a23 [style=solid, arrowtail=none, arrowhead=normal]
+k_e9917fd1:m_e2253da6:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_bcb957ef:m_3ada629b:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_bcb957ef:m_3ada629b:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_bcb957ef:m_3ada629b:e -> k_5623cddf [style=solid, arrowtail=none, arrowhead=normal]
+k_748ed78e:m_63a0fdbf:e -> k_34e613cd [style=solid, arrowtail=none, arrowhead=normal]
+k_748ed78e:m_63a0fdbf:e -> k_a32f5269 [style=solid, arrowtail=none, arrowhead=normal]
+k_3aada672:m_2d8dc501:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_3aada672:m_2d8dc501:e -> k_357f2e47 [style=solid, arrowtail=none, arrowhead=normal]
+k_3aada672:m_2d8dc501:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_3aada672:m_2d8dc501:e -> k_2cfdfb8 [style=solid, arrowtail=none, arrowhead=normal]
+k_ac6dfe45:m_fc5df405:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_ac6dfe45:m_fc5df405:e -> k_25fc6a23 [style=solid, arrowtail=none, arrowhead=normal]
+k_ac6dfe45:m_fc5df405:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_ac6dfe45:m_fc5df405:e -> k_3b2cdd5d [style=solid, arrowtail=none, arrowhead=normal]
+k_ac6dfe45:m_fc5df405:e -> k_a32f5269 [style=solid, arrowtail=none, arrowhead=normal]
+k_ac6dfe45:m_fc5df405:e -> k_2e46bac4 [style=solid, arrowtail=none, arrowhead=normal]
+k_ac6dfe45:m_fc5df405:e -> k_924c6e54 [style=solid, arrowtail=none, arrowhead=normal]
+k_dd1a5d5d:m_1b1ed846:e -> k_88b7f5ae [style=solid, arrowtail=none, arrowhead=normal]
+k_dd1a5d5d:m_1b1ed846:e -> k_8f78ed85 [style=solid, arrowtail=none, arrowhead=normal]
+k_dd1a5d5d:m_1b1ed846:e -> k_a3db4306 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29e6df8:m_f42f63ac:e -> k_ad3b717b [style=solid, arrowtail=none, arrowhead=normal]
+k_d29e6df8:m_f42f63ac:e -> k_50ad1c96 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29e6df8:m_f42f63ac:e -> k_efe9d328 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29e6df8:m_f42f63ac:e -> k_4ac9f0a7 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29e6df8:m_f42f63ac:e -> k_702975fe [style=solid, arrowtail=none, arrowhead=normal]
+k_d29e6df8:m_f42f63ac:e -> k_f5f31c26 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29e6df8:m_f42f63ac:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_cc9daff5:m_a2bece9f:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_8879400b:m_96bb30a1:e -> k_9f662e9 [style=solid, arrowtail=none, arrowhead=normal]
+k_8879400b:m_96bb30a1:e -> k_d9249a6e [style=solid, arrowtail=none, arrowhead=normal]
+k_8879400b:m_96bb30a1:e -> k_d0fdbe65 [style=solid, arrowtail=none, arrowhead=normal]
+k_8f78ed85:m_c72f445d:e -> k_c879f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_8f78ed85:m_c72f445d:e -> k_ec347c1 [style=solid, arrowtail=none, arrowhead=normal]
+k_8d275c11:m_87014a14:e -> k_17a7737d [style=solid, arrowtail=none, arrowhead=normal]
+k_8d275c11:m_87014a14:e -> k_924c6e54 [style=solid, arrowtail=none, arrowhead=normal]
+k_8d275c11:m_87014a14:e -> k_a5aa636a [style=solid, arrowtail=none, arrowhead=normal]
+k_8d275c11:m_87014a14:e -> k_6819c0ed [style=solid, arrowtail=none, arrowhead=normal]
+k_8d275c11:m_87014a14:e -> k_cdbf7f4b [style=solid, arrowtail=none, arrowhead=normal]
+k_8d275c11:m_87014a14:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_a05d6146 -> i_a05d6146 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_88302e2c:m_1b090b84:e -> k_f3d26d13 [style=solid, arrowtail=none, arrowhead=normal]
+k_88302e2c:m_1b090b84:e -> k_c879f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_88302e2c:m_1b090b84:e -> k_9f44e5f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_88302e2c:m_1b090b84:e -> k_a44b8adc [style=solid, arrowtail=none, arrowhead=normal]
+k_88302e2c:m_1b090b84:e -> k_a3db4306 [style=solid, arrowtail=none, arrowhead=normal]
+k_88302e2c:m_1b090b84:e -> k_f2c4f820 [style=solid, arrowtail=none, arrowhead=normal]
+k_88302e2c:m_1b090b84:e -> k_88b7f5ae [style=solid, arrowtail=none, arrowhead=normal]
+k_88302e2c:m_1b090b84:e -> k_1e1f5154 [style=solid, arrowtail=none, arrowhead=normal]
+k_88302e2c:m_1b090b84:e -> k_dd1a5d5d [style=solid, arrowtail=none, arrowhead=normal]
+k_97d4a3f4 -> i_97d4a3f4 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f3d26d13:m_94b0e6a0:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_799adfe1 -> k_ecee0859 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_bb878434:m_145a2d5b:e -> k_c7f722e6 [style=solid, arrowtail=none, arrowhead=normal]
+k_bb878434:m_145a2d5b:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_bb878434:m_145a2d5b:e -> k_cd7b68d0 [style=solid, arrowtail=none, arrowhead=normal]
+k_382db0d2:m_f7fa287d:e -> k_f2314e28 [style=solid, arrowtail=none, arrowhead=normal]
+k_382db0d2:m_f7fa287d:e -> k_4ae6eaa1 [style=solid, arrowtail=none, arrowhead=normal]
+k_44eb80b7:m_14070d2b:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_c7f722e6 -> k_25087fa1 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a1ac9b1d:m_de674d3e:e -> k_f4d27dcc [style=solid, arrowtail=none, arrowhead=normal]
+k_fe832cf7:m_ab1e54db:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_fe832cf7:m_ab1e54db:e -> k_1cba41af [style=solid, arrowtail=none, arrowhead=normal]
+k_fe832cf7:m_ab1e54db:e -> k_79387d6e [style=solid, arrowtail=none, arrowhead=normal]
+k_1cba41af -> i_1cba41af [style=dashed, arrowtail=none, arrowhead=onormal]
+k_79387d6e -> k_e8023afd [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f5f31c26 -> k_aa9c0656 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_efe9d328 -> k_278e5d1c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4ac9f0a7:m_cb039b61:e -> k_1d57ace5 [style=solid, arrowtail=none, arrowhead=normal]
+k_ad3b717b -> i_ad3b717b [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_50ad1c96 -> i_50ad1c96 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_50ad1c96:header:e -> k_187912c5 [style=solid, arrowtail=none, arrowhead=normal]
+k_ecee0859:m_72bb3f17:e -> k_1ce5e340 [style=solid, arrowtail=none, arrowhead=normal]
+k_ecee0859:m_72bb3f17:e -> k_b9fa0bc7 [style=solid, arrowtail=none, arrowhead=normal]
+k_cd7b68d0 -> i_cd7b68d0 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4ae6eaa1:m_40754071:e -> k_e22cd5ac [style=solid, arrowtail=none, arrowhead=normal]
+k_25087fa1:m_2bca331e:e -> k_2cd33ff1 [style=solid, arrowtail=none, arrowhead=normal]
+k_e8023afd:m_bc6356d8:e -> k_c7f722e6 [style=solid, arrowtail=none, arrowhead=normal]
+k_e8023afd:m_bc6356d8:e -> k_c7da405 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa9c0656:m_b9a42285:e -> k_2245b240 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa9c0656:m_b9a42285:e -> k_87ea5d92 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa9c0656:m_b9a42285:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_278e5d1c:m_3065e839:e -> k_6be82e3e [style=solid, arrowtail=none, arrowhead=normal]
+k_278e5d1c:m_3065e839:e -> k_1ce5e340 [style=solid, arrowtail=none, arrowhead=normal]
+k_278e5d1c:m_3065e839:e -> k_d8ca8cf7 [style=solid, arrowtail=none, arrowhead=normal]
+k_278e5d1c:m_3065e839:e -> k_4789c3c [style=solid, arrowtail=none, arrowhead=normal]
+k_1d57ace5 -> i_1d57ace5 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_1d57ace5:header:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+i_1d57ace5:header:e -> k_352f09ab [style=solid, arrowtail=none, arrowhead=normal]
+k_187912c5:m_22b30b9b:e -> k_75860e40 [style=solid, arrowtail=none, arrowhead=normal]
+k_1ce5e340 -> k_78b7d1b7 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b9fa0bc7 -> k_fca7bf8a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e22cd5ac:m_30d2c19e:e -> k_f3d26d13 [style=solid, arrowtail=none, arrowhead=normal]
+k_2cd33ff1 -> i_2cd33ff1 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c7da405 -> k_e4c64ebf [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2245b240:m_c73d3a59:e -> k_f4a9a99 [style=solid, arrowtail=none, arrowhead=normal]
+k_87ea5d92:m_946dead5:e -> k_ea624eab [style=solid, arrowtail=none, arrowhead=normal]
+k_87ea5d92:m_946dead5:e -> k_f5f31c26 [style=solid, arrowtail=none, arrowhead=normal]
+k_d8ca8cf7 -> k_3a7d7e4d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4789c3c:m_a29919e6:e -> k_b256b8b4 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_21185d9b [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_799adfe1 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_686e361c [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_5ecb104 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_f282996 [style=solid, arrowtail=none, arrowhead=normal]
+k_6be82e3e -> i_6be82e3e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_352f09ab -> i_352f09ab [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_352f09ab:header:e -> k_614b523c [style=solid, arrowtail=none, arrowhead=normal]
+k_75860e40 -> k_5df6cba1 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_78b7d1b7:m_7dc25cb3:e -> k_94870f0b [style=solid, arrowtail=none, arrowhead=normal]
+k_78b7d1b7:m_7dc25cb3:e -> k_7cf68b55 [style=solid, arrowtail=none, arrowhead=normal]
+k_78b7d1b7:m_7dc25cb3:e -> k_4d6e10f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_78b7d1b7:m_7dc25cb3:e -> k_9dc1ac3d [style=solid, arrowtail=none, arrowhead=normal]
+k_ea624eab:m_4e215f96:e -> k_4032ff01 [style=solid, arrowtail=none, arrowhead=normal]
+k_686e361c -> i_686e361c [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_686e361c:header:e -> k_39c6c49e [style=solid, arrowtail=none, arrowhead=normal]
+k_21185d9b -> k_ecee0859 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_5ecb104 -> i_5ecb104 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_5ecb104:header:e -> k_39c6c49e [style=solid, arrowtail=none, arrowhead=normal]
+k_b256b8b4 -> k_29fd6908 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f282996:m_3d5a1b27:e -> k_4ac9f0a7 [style=solid, arrowtail=none, arrowhead=normal]
+k_614b523c -> i_614b523c [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_5df6cba1:m_5b65d1b7:e -> k_799adfe1 [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_f282996 [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_4789c3c [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_81703b8 [style=solid, arrowtail=none, arrowhead=normal]
+k_9dc1ac3d -> k_d5449967 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4d6e10f4:m_a87b4d2a:e -> k_6a848a3f [style=solid, arrowtail=none, arrowhead=normal]
+k_4d6e10f4:m_a87b4d2a:e -> k_9dc1ac3d [style=solid, arrowtail=none, arrowhead=normal]
+k_7cf68b55 -> k_f1b10e50 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_94870f0b -> i_94870f0b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_39c6c49e -> k_139f8f1c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_29fd6908:m_f7ad7a10:e -> k_39c6c49e [style=solid, arrowtail=none, arrowhead=normal]
+k_81703b8:m_bf9bd871:e -> k_4789c3c [style=solid, arrowtail=none, arrowhead=normal]
+k_d5449967:m_d805501f:e -> k_20875e7b [style=solid, arrowtail=none, arrowhead=normal]
+k_6a848a3f -> i_6a848a3f [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_6a848a3f:header:e -> k_7f2b730a [style=solid, arrowtail=none, arrowhead=normal]
+i_6a848a3f:header:e -> k_e3aadf3c [style=solid, arrowtail=none, arrowhead=normal]
+i_6a848a3f:header:e -> k_456ad2eb [style=solid, arrowtail=none, arrowhead=normal]
+i_6a848a3f:header:e -> k_a5518feb [style=solid, arrowtail=none, arrowhead=normal]
+k_f1b10e50:m_6c0a518:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_139f8f1c:m_408652f3:e -> k_eb81f386 [style=solid, arrowtail=none, arrowhead=normal]
+k_20875e7b -> i_20875e7b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_456ad2eb -> k_72ceec06 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e3aadf3c -> k_fb665a1f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7f2b730a -> i_7f2b730a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a5518feb -> k_6417e530 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_eb81f386 -> i_eb81f386 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_72ceec06:m_5a8716ec:e -> k_e3aadf3c [style=solid, arrowtail=none, arrowhead=normal]
}
Modified: trunk/docs/wave-guice-graph.dot
===================================================================
--- trunk/docs/wave-guice-graph.dot 2012-03-06 21:40:19 UTC (rev 1743)
+++ trunk/docs/wave-guice-graph.dot 2012-03-07 02:43:00 UTC (rev 1744)
@@ -1,254 +1,254 @@
digraph injector {
graph [rankdir=TB];
-k_5206913e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
-k_d7413b29 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_4e3cfd49 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TimeSource<br align="left"/></font></td></tr></table>>, shape=box]
-k_7c3a84a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SignatureHandler<br align="left"/></font></td></tr></table>>, shape=box]
-k_28873eb1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveSignatureVerifier<br align="left"/></font></td></tr><tr><td align="left" port="m_a87b4d2a"><init></td></tr></table>>, shape=box]
-k_2845e07 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">VerifiedCertChainCache<br align="left"/></font></td></tr></table>>, shape=box]
-k_d073cdd5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultCacheImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_5a8716ec"><init></td></tr></table>>, shape=box]
-k_a32471fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveBus<br align="left"/></font></td></tr></table>>, shape=box]
-k_ab27ace4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletNotificationSubscriber<br align="left"/></font></td></tr></table>>, shape=box]
-k_6bad9e01 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TrustRootsProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_f7d047b9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertificateManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_2050c643 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaAndSnapshotStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_74c3c0d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SearchProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_66a99b94 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_6e4268e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HashedVersionFactory<br align="left"/></font></td></tr></table>>, shape=box]
-i_6e4268e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:105<br align="left"/></font><font color="#ffffff">HashedVersionFactoryImpl<br align="left"/></font></td></tr></table>>, shape=box]
-k_ca34da5f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=listener_executor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
-i_ca34da5f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:106<br align="left"/></font><font color="#ffffff">ThreadPoolExecutor<br align="left"/></font></td></tr></table>>, shape=box]
-k_7b747c12 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LocalWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
-i_7b747c12 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideLocalWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
-k_218c2334 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RemoteWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
-i_218c2334 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideRemoteWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
-k_e19e23b5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveCertPathValidator<br align="left"/></font></td></tr></table>>, shape=box]
-i_e19e23b5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideWaveCertPathValidator(boolean, TimeSource, VerifiedCertChainCache, TrustRootsProvider)<br align="left"/></font></td></tr></table>>, shape=box]
-k_fe215264 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=certs)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
-i_fe215264 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:86<br align="left"/></font><font color="#ffffff">[]<br align="left"/></font></td></tr></table>>, shape=box]
-k_b4448035 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Configuration<br align="left"/></font></td></tr></table>>, shape=box]
-i_b4448035 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:90<br align="left"/></font><font color="#ffffff">ConfigFile<br align="left"/></font></td></tr></table>>, shape=box]
-k_f1928bf8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_3e09faf2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
-k_c0398744 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotRegistrar<br align="left"/></font></td></tr></table>>, shape=box]
-k_140c93ab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGenerator<br align="left"/></font></td></tr></table>>, shape=box]
-i_140c93ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:106<br align="left"/></font><font color="#ffffff">#provideIdGenerator(String, Seed)<br align="left"/></font></td></tr></table>>, shape=box]
-k_c3234f04 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SecureRandom<br align="left"/></font></td></tr></table>>, shape=box]
-i_c3234f04 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:112<br align="left"/></font><font color="#ffffff">#provideSecureRandom()<br align="left"/></font></td></tr></table>>, shape=box]
-k_c089fc31 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TokenGenerator<br align="left"/></font></td></tr></table>>, shape=box]
-i_c089fc31 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:119<br align="left"/></font><font color="#ffffff">#provideTokenGenerator(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
-k_33570740 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGeneratorImpl$Seed<br align="left"/></font></td></tr></table>>, shape=box]
-i_33570740 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:126<br align="left"/></font><font color="#ffffff">#provideSeed(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
-k_7034c7d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EventDataConverterManager<br align="left"/></font></td></tr></table>>, shape=box]
-i_7034c7d2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">EventDataConverterModule.java:43<br align="left"/></font><font color="#ffffff">#provideEventDataConverterManager()<br align="left"/></font></td></tr></table>>, shape=box]
-k_b62d731b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotSerializer<br align="left"/></font></td></tr></table>>, shape=box]
-i_b62d731b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotSerializerModule.java:46<br align="left"/></font><font color="#ffffff">#provideRobotSerializer()<br align="left"/></font></td></tr></table>>, shape=box]
-k_e8fb7071 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=authorize_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_e8fb7071 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:68<br align="left"/></font><font color="#ffffff">"/OAuthAuthorizeToken"<br align="left"/></font></td></tr></table>>, shape=box]
-k_f0bb7df7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=request_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_f0bb7df7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:70<br align="left"/></font><font color="#ffffff">"/OAuthGetRequestToken"<br align="left"/></font></td></tr></table>>, shape=box]
-k_6af4580c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=access_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_6af4580c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:72<br align="left"/></font><font color="#ffffff">"/OAuthGetAccessToken"<br align="left"/></font></td></tr></table>>, shape=box]
-k_f907821 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotConnector<br align="left"/></font></td></tr></table>>, shape=box]
-i_f907821 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:81<br align="left"/></font><font color="#ffffff">#provideRobotConnector(RobotConnection, RobotSerializer)<br align="left"/></font></td></tr></table>>, shape=box]
-k_7279ac52 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotConnection<br align="left"/></font></td></tr></table>>, shape=box]
-i_7279ac52 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:87<br align="left"/></font><font color="#ffffff">#provideRobotConnection()<br align="left"/></font></td></tr></table>>, shape=box]
-k_85eb8186 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=GatewayExecutor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
-i_85eb8186 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:99<br align="left"/></font><font color="#ffffff">#provideGatewayExecutor()<br align="left"/></font></td></tr></table>>, shape=box]
-k_45c331f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ActiveApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
-i_45c331f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:109<br align="left"/></font><font color="#ffffff">#provideActiveApiRegistry(NotifyOperationService)<br align="left"/></font></td></tr></table>>, shape=box]
-k_5ecb29e3 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=DataApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
-i_5ecb29e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:117<br align="left"/></font><font color="#ffffff">#provideDataApiRegistry(SearchService)<br align="left"/></font></td></tr></table>>, shape=box]
-k_410c2a1b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">OAuthValidator<br align="left"/></font></td></tr></table>>, shape=box]
-i_410c2a1b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:125<br align="left"/></font><font color="#ffffff">#provideOAuthValidator()<br align="left"/></font></td></tr></table>>, shape=box]
-k_e773e20e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">OAuthServiceProvider<br align="left"/></font></td></tr></table>>, shape=box]
-i_e773e20e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:135<br align="left"/></font><font color="#ffffff">#provideOAuthServiceProvider(String)<br align="left"/></font></td></tr></table>>, shape=box]
-k_9831ace4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
-k_91161f83 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
-k_e2a7bed0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FederationTransport<br align="left"/></font></td></tr></table>>, shape=box]
-k_52a8a871 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertPathStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_fe671237 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AttachmentStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_107a33fb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccountStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_556cc59f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaStore<br align="left"/></font></td></tr></table>>, shape=box]
-k_2721f26b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveletNotificationDispatcher<br align="left"/></font></td></tr><tr><td align="left" port="m_72bb3f17"><init></td></tr></table>>, shape=box]
-k_73658105 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveMap<br align="left"/></font></td></tr><tr><td align="left" port="m_a29919e6"><init></td></tr></table>>, shape=box]
-k_53cbb880 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ProtoSerializer<br align="left"/></font></td></tr><tr><td align="left" port="m_a1715b3c"><init></td></tr></table>>, shape=box]
-k_8b5bb722 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ServerRpcProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_e92070d5"><init></td></tr></table>>, shape=box]
-k_744f2334 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveServerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_3065e839"><init></td></tr></table>>, shape=box]
-k_fbd16a34 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTimeSource<br align="left"/></font></td></tr><tr><td align="left" port="m_24dcbc5e"><init></td></tr></table>>, shape=box]
-k_70d75d3e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NonSigningSignatureHandler$NonSigningSignatureHandlerProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_6c0a518"><init></td></tr></table>>, shape=box]
-k_2288b0a9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTrustRootsProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_518d5280"><init></td></tr></table>>, shape=box]
-k_dbdd067e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CertificateManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_7dc25cb3"><init></td></tr></table>>, shape=box]
-k_a7dbb996 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DeltaStoreBasedSnapshotStore<br align="left"/></font></td></tr><tr><td align="left" port="m_f7ad7a10"><init></td></tr></table>>, shape=box]
-k_5293dba6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MemorySearchProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_5b65d1b7"><init></td></tr></table>>, shape=box]
-k_ae676420 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_signer_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
-i_ae676420 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
-k_81bf39cf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SessionManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_bc6356d8"><init></td></tr></table>>, shape=box]
-k_a0ee12e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">HashSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_54776227"><init></td></tr></table>>, shape=box]
-k_b3ed662 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">RobotRegistrarImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_6c669f5e"><init></td></tr></table>>, shape=box]
-k_bbcefa18 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=wave_server_domain)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_bbcefa18 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost"<br align="left"/></font></td></tr></table>>, shape=box]
-k_532d3e82 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotifyOperationService<br align="left"/></font></td></tr><tr><td align="left" port="m_23e9a4c9"><init></td></tr></table>>, shape=box]
-k_f801e1f1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SearchService<br align="left"/></font></td></tr><tr><td align="left" port="m_22b30b9b"><init></td></tr></table>>, shape=box]
-k_9d976cde [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=http_frontend_public_address)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_9d976cde [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost:8888"<br align="left"/></font></td></tr></table>>, shape=box]
-k_c5aa0274 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationRemote<br align="left"/></font></td></tr><tr><td align="left" port="m_8c82dc4e"><init></td></tr></table>>, shape=box]
-k_c9a11a3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationHost<br align="left"/></font></td></tr><tr><td align="left" port="m_dba23bb0"><init></td></tr></table>>, shape=box]
-k_49848daa [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationTransport<br align="left"/></font></td></tr><tr><td align="left" port="m_62d43621"><init></td></tr></table>>, shape=box]
-k_928bb0fd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileSignerInfoStore<br align="left"/></font></td></tr><tr><td align="left" port="m_d805501f"><init></td></tr></table>>, shape=box]
-k_ed47c2a9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAttachmentStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2188bcd4"><init></td></tr></table>>, shape=box]
-k_6b87e61f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAccountStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2bca331e"><init></td></tr></table>>, shape=box]
-k_8823a3e5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDeltaStore<br align="left"/></font></td></tr><tr><td align="left" port="m_408652f3"><init></td></tr></table>>, shape=box]
-k_6d08d305 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveDigester<br align="left"/></font></td></tr><tr><td align="left" port="m_3d5a1b27"><init></td></tr></table>>, shape=box]
-k_31620886 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=enable_ssl)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
-i_31620886 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">false<br align="left"/></font></td></tr></table>>, shape=box]
-k_51dec085 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=sessions_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_51dec085 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_sessions"<br align="left"/></font></td></tr></table>>, shape=box]
-k_5ee5c667 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=http_frontend_addresses)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
-i_5ee5c667 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:188<br align="left"/></font><font color="#ffffff">[localhost:8888]<br align="left"/></font></td></tr></table>>, shape=box]
-k_1275d402 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=resource_bases)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
-i_1275d402 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:188<br align="left"/></font><font color="#ffffff">[target/kune-0.1.0-SNAPSHOT/, src/main/webapp/]<br align="left"/></font></td></tr></table>>, shape=box]
-k_dcaff08d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ssl_keystore_password)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_dcaff08d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"fafafa"<br align="left"/></font></td></tr></table>>, shape=box]
-k_77c98103 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ssl_keystore_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_77c98103 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"src/main/resources/wiab.ks"<br align="left"/></font></td></tr></table>>, shape=box]
-k_feb78535 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=flashsocket_policy_port)<br align="left"/></font><font color="#000000">Integer<br align="left"/></font></td></tr></table>>, shape=box]
-i_feb78535 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:171<br align="left"/></font><font color="#ffffff">843<br align="left"/></font></td></tr></table>>, shape=box]
-k_c3c30021 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
-i_c3c30021 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
-k_4ff24fca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PerUserWaveViewSubscriber<br align="left"/></font></td></tr><tr><td align="left" port="m_bf9bd871"><init></td></tr></table>>, shape=box]
-k_4481b49f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=signer_info_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_4481b49f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_certificates"<br align="left"/></font></td></tr></table>>, shape=box]
-k_b1d0731f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=attachment_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_b1d0731f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_attachments"<br align="left"/></font></td></tr></table>>, shape=box]
-k_50cd9615 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=account_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_50cd9615 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_accounts"<br align="left"/></font></td></tr></table>>, shape=box]
-k_f7c49aa [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=delta_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
-i_f7c49aa [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_deltas"<br align="left"/></font></td></tr></table>>, shape=box]
-k_c5f43fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ConversationUtil<br align="left"/></font></td></tr><tr><td align="left" port="m_cb039b61"><init></td></tr></table>>, shape=box]
-k_5206913e -> k_744f2334 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_d7413b29 -> k_744f2334 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_4e3cfd49 -> k_fbd16a34 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_7c3a84a -> k_70d75d3e [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_28873eb1:m_a87b4d2a:e -> k_e19e23b5 [style=solid, arrowtail=none, arrowhead=normal]
-k_28873eb1:m_a87b4d2a:e -> k_52a8a871 [style=solid, arrowtail=none, arrowhead=normal]
-k_2845e07 -> k_d073cdd5 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_d073cdd5:m_5a8716ec:e -> k_4e3cfd49 [style=solid, arrowtail=none, arrowhead=normal]
-k_a32471fe -> k_2721f26b [style=dashed, arrowtail=none, arrowhead=onormal]
-k_ab27ace4 -> k_2721f26b [style=dashed, arrowtail=none, arrowhead=onormal]
-k_6bad9e01 -> k_2288b0a9 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f7d047b9 -> k_dbdd067e [style=dashed, arrowtail=none, arrowhead=onormal]
-k_2050c643 -> k_a7dbb996 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_74c3c0d2 -> k_5293dba6 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_66a99b94 -> k_744f2334 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_6e4268e -> i_6e4268e [style=dashed, arrowtail=none, arrowhead=onormal]
-k_ca34da5f -> i_ca34da5f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_7b747c12 -> i_7b747c12 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_7b747c12:header:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
-k_218c2334 -> i_218c2334 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_218c2334:header:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
-k_e19e23b5 -> i_e19e23b5 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_e19e23b5:header:e -> k_ae676420 [style=solid, arrowtail=none, arrowhead=normal]
-i_e19e23b5:header:e -> k_4e3cfd49 [style=solid, arrowtail=none, arrowhead=normal]
-i_e19e23b5:header:e -> k_2845e07 [style=solid, arrowtail=none, arrowhead=normal]
-i_e19e23b5:header:e -> k_6bad9e01 [style=solid, arrowtail=none, arrowhead=normal]
-k_fe215264 -> i_fe215264 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_b4448035 -> i_b4448035 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f1928bf8 -> k_81bf39cf [style=dashed, arrowtail=none, arrowhead=onormal]
-k_3e09faf2 -> k_a0ee12e3 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_c0398744 -> k_b3ed662 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_140c93ab -> i_140c93ab [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_140c93ab:header:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-i_140c93ab:header:e -> k_33570740 [style=solid, arrowtail=none, arrowhead=normal]
-k_c3234f04 -> i_c3234f04 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_c089fc31 -> i_c089fc31 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_c089fc31:header:e -> k_c3234f04 [style=solid, arrowtail=none, arrowhead=normal]
-k_33570740 -> i_33570740 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_33570740:header:e -> k_c3234f04 [style=solid, arrowtail=none, arrowhead=normal]
-k_7034c7d2 -> i_7034c7d2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_b62d731b -> i_b62d731b [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_e8fb7071 -> i_e8fb7071 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f0bb7df7 -> i_f0bb7df7 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_6af4580c -> i_6af4580c [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f907821 -> i_f907821 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_f907821:header:e -> k_7279ac52 [style=solid, arrowtail=none, arrowhead=normal]
-i_f907821:header:e -> k_b62d731b [style=solid, arrowtail=none, arrowhead=normal]
-k_7279ac52 -> i_7279ac52 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_85eb8186 -> i_85eb8186 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_45c331f -> i_45c331f [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_45c331f:header:e -> k_532d3e82 [style=solid, arrowtail=none, arrowhead=normal]
-k_5ecb29e3 -> i_5ecb29e3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_5ecb29e3:header:e -> k_f801e1f1 [style=solid, arrowtail=none, arrowhead=normal]
-k_410c2a1b -> i_410c2a1b [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-k_e773e20e -> i_e773e20e [style=dashed, arrowtail=none, arrowhead=onormalonormal]
-i_e773e20e:header:e -> k_9d976cde [style=solid, arrowtail=none, arrowhead=normal]
-k_9831ace4 -> k_c5aa0274 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_91161f83 -> k_c9a11a3 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_e2a7bed0 -> k_49848daa [style=dashed, arrowtail=none, arrowhead=onormal]
-k_52a8a871 -> k_928bb0fd [style=dashed, arrowtail=none, arrowhead=onormal]
-k_fe671237 -> k_ed47c2a9 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_107a33fb -> k_6b87e61f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_556cc59f -> k_8823a3e5 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_2721f26b:m_72bb3f17:e -> k_f7d047b9 [style=solid, arrowtail=none, arrowhead=normal]
-k_2721f26b:m_72bb3f17:e -> k_91161f83 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_2050c643 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_ab27ace4 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_7b747c12 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_218c2334 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_73658105:m_a29919e6:e -> k_6d08d305 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_5ee5c667 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_feb78535 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_1275d402 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_f1928bf8 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_3e09faf2 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_51dec085 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_31620886 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_77c98103 [style=solid, arrowtail=none, arrowhead=normal]
-k_8b5bb722:m_e92070d5:e -> k_dcaff08d [style=solid, arrowtail=none, arrowhead=normal]
-k_744f2334:m_3065e839:e -> k_ca34da5f [style=solid, arrowtail=none, arrowhead=normal]
-k_744f2334:m_3065e839:e -> k_f7d047b9 [style=solid, arrowtail=none, arrowhead=normal]
-k_744f2334:m_3065e839:e -> k_9831ace4 [style=solid, arrowtail=none, arrowhead=normal]
-k_744f2334:m_3065e839:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
-k_70d75d3e:m_6c0a518:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_dbdd067e:m_7dc25cb3:e -> k_c3c30021 [style=solid, arrowtail=none, arrowhead=normal]
-k_dbdd067e:m_7dc25cb3:e -> k_7c3a84a [style=solid, arrowtail=none, arrowhead=normal]
-k_dbdd067e:m_7dc25cb3:e -> k_28873eb1 [style=solid, arrowtail=none, arrowhead=normal]
-k_dbdd067e:m_7dc25cb3:e -> k_52a8a871 [style=solid, arrowtail=none, arrowhead=normal]
-k_a7dbb996:m_f7ad7a10:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_6d08d305 [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
-k_5293dba6:m_5b65d1b7:e -> k_4ff24fca [style=solid, arrowtail=none, arrowhead=normal]
-k_ae676420 -> i_ae676420 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_81bf39cf:m_bc6356d8:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
-k_81bf39cf:m_bc6356d8:e -> k_3e09faf2 [style=solid, arrowtail=none, arrowhead=normal]
-k_b3ed662:m_6c669f5e:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
-k_b3ed662:m_6c669f5e:e -> k_c089fc31 [style=solid, arrowtail=none, arrowhead=normal]
-k_bbcefa18 -> i_bbcefa18 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_532d3e82:m_23e9a4c9:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
-k_532d3e82:m_23e9a4c9:e -> k_f907821 [style=solid, arrowtail=none, arrowhead=normal]
-k_f801e1f1:m_22b30b9b:e -> k_74c3c0d2 [style=solid, arrowtail=none, arrowhead=normal]
-k_9d976cde -> i_9d976cde [style=dashed, arrowtail=none, arrowhead=onormal]
-k_928bb0fd:m_d805501f:e -> k_4481b49f [style=solid, arrowtail=none, arrowhead=normal]
-k_ed47c2a9:m_2188bcd4:e -> k_b1d0731f [style=solid, arrowtail=none, arrowhead=normal]
-k_6b87e61f:m_2bca331e:e -> k_50cd9615 [style=solid, arrowtail=none, arrowhead=normal]
-k_8823a3e5:m_408652f3:e -> k_f7c49aa [style=solid, arrowtail=none, arrowhead=normal]
-k_6d08d305:m_3d5a1b27:e -> k_c5f43fe [style=solid, arrowtail=none, arrowhead=normal]
-k_31620886 -> i_31620886 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_51dec085 -> i_51dec085 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_5ee5c667 -> i_5ee5c667 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_1275d402 -> i_1275d402 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_dcaff08d -> i_dcaff08d [style=dashed, arrowtail=none, arrowhead=onormal]
-k_77c98103 -> i_77c98103 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_feb78535 -> i_feb78535 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_c3c30021 -> i_c3c30021 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_4ff24fca:m_bf9bd871:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
-k_4481b49f -> i_4481b49f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_b1d0731f -> i_b1d0731f [style=dashed, arrowtail=none, arrowhead=onormal]
-k_50cd9615 -> i_50cd9615 [style=dashed, arrowtail=none, arrowhead=onormal]
-k_f7c49aa -> i_f7c49aa [style=dashed, arrowtail=none, arrowhead=onormal]
-k_c5f43fe:m_cb039b61:e -> k_140c93ab [style=solid, arrowtail=none, arrowhead=normal]
+k_ea5411f5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+k_a87086c9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_e3aadf3c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TimeSource<br align="left"/></font></td></tr></table>>, shape=box]
+k_7cf68b55 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SignatureHandler<br align="left"/></font></td></tr></table>>, shape=box]
+k_4d6e10f4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveSignatureVerifier<br align="left"/></font></td></tr><tr><td align="left" port="m_a87b4d2a"><init></td></tr></table>>, shape=box]
+k_456ad2eb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">VerifiedCertChainCache<br align="left"/></font></td></tr></table>>, shape=box]
+k_72ceec06 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultCacheImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_5a8716ec"><init></td></tr></table>>, shape=box]
+k_799adfe1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveBus<br align="left"/></font></td></tr></table>>, shape=box]
+k_21185d9b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletNotificationSubscriber<br align="left"/></font></td></tr></table>>, shape=box]
+k_a5518feb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TrustRootsProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_1ce5e340 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertificateManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_b256b8b4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaAndSnapshotStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_75860e40 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SearchProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_efe9d328 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_da56a31f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HashedVersionFactory<br align="left"/></font></td></tr></table>>, shape=box]
+i_da56a31f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:105<br align="left"/></font><font color="#ffffff">HashedVersionFactoryImpl<br align="left"/></font></td></tr></table>>, shape=box]
+k_6be82e3e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=listener_executor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
+i_6be82e3e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:106<br align="left"/></font><font color="#ffffff">ThreadPoolExecutor<br align="left"/></font></td></tr></table>>, shape=box]
+k_686e361c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LocalWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+i_686e361c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideLocalWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
+k_5ecb104 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RemoteWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+i_5ecb104 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideRemoteWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
+k_6a848a3f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveCertPathValidator<br align="left"/></font></td></tr></table>>, shape=box]
+i_6a848a3f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideWaveCertPathValidator(boolean, TimeSource, VerifiedCertChainCache, TrustRootsProvider)<br align="left"/></font></td></tr></table>>, shape=box]
+k_3f32b04c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=certs)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
+i_3f32b04c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:86<br align="left"/></font><font color="#ffffff">[]<br align="left"/></font></td></tr></table>>, shape=box]
+k_dc7baec4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Configuration<br align="left"/></font></td></tr></table>>, shape=box]
+i_dc7baec4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:90<br align="left"/></font><font color="#ffffff">ConfigFile<br align="left"/></font></td></tr></table>>, shape=box]
+k_79387d6e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_c7da405 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_8567e1dc [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotRegistrar<br align="left"/></font></td></tr></table>>, shape=box]
+k_1d57ace5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGenerator<br align="left"/></font></td></tr></table>>, shape=box]
+i_1d57ace5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:106<br align="left"/></font><font color="#ffffff">#provideIdGenerator(String, Seed)<br align="left"/></font></td></tr></table>>, shape=box]
+k_614b523c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SecureRandom<br align="left"/></font></td></tr></table>>, shape=box]
+i_614b523c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:112<br align="left"/></font><font color="#ffffff">#provideSecureRandom()<br align="left"/></font></td></tr></table>>, shape=box]
+k_9234d74b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TokenGenerator<br align="left"/></font></td></tr></table>>, shape=box]
+i_9234d74b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:119<br align="left"/></font><font color="#ffffff">#provideTokenGenerator(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
+k_352f09ab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGeneratorImpl$Seed<br align="left"/></font></td></tr></table>>, shape=box]
+i_352f09ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:126<br align="left"/></font><font color="#ffffff">#provideSeed(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
+k_ad3b717b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EventDataConverterManager<br align="left"/></font></td></tr></table>>, shape=box]
+i_ad3b717b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">EventDataConverterModule.java:43<br align="left"/></font><font color="#ffffff">#provideEventDataConverterManager()<br align="left"/></font></td></tr></table>>, shape=box]
+k_8296ce09 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotSerializer<br align="left"/></font></td></tr></table>>, shape=box]
+i_8296ce09 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotSerializerModule.java:46<br align="left"/></font><font color="#ffffff">#provideRobotSerializer()<br align="left"/></font></td></tr></table>>, shape=box]
+k_c5011a4d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=authorize_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_c5011a4d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:68<br align="left"/></font><font color="#ffffff">"/OAuthAuthorizeToken"<br align="left"/></font></td></tr></table>>, shape=box]
+k_ccc127d3 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=request_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_ccc127d3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:70<br align="left"/></font><font color="#ffffff">"/OAuthGetRequestToken"<br align="left"/></font></td></tr></table>>, shape=box]
+k_46fa01e8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=access_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_46fa01e8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:72<br align="left"/></font><font color="#ffffff">"/OAuthGetAccessToken"<br align="left"/></font></td></tr></table>>, shape=box]
+k_6c6180bf [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotConnector<br align="left"/></font></td></tr></table>>, shape=box]
+i_6c6180bf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:81<br align="left"/></font><font color="#ffffff">#provideRobotConnector(RobotConnection, RobotSerializer)<br align="left"/></font></td></tr></table>>, shape=box]
+k_421505be [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotConnection<br align="left"/></font></td></tr></table>>, shape=box]
+i_421505be [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:87<br align="left"/></font><font color="#ffffff">#provideRobotConnection()<br align="left"/></font></td></tr></table>>, shape=box]
+k_279ed565 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=GatewayExecutor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
+i_279ed565 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:99<br align="left"/></font><font color="#ffffff">#provideGatewayExecutor()<br align="left"/></font></td></tr></table>>, shape=box]
+k_f63e25d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ActiveApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
+i_f63e25d2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:109<br align="left"/></font><font color="#ffffff">#provideActiveApiRegistry(NotifyOperationService)<br align="left"/></font></td></tr></table>>, shape=box]
+k_50ad1c96 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=DataApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
+i_50ad1c96 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:117<br align="left"/></font><font color="#ffffff">#provideDataApiRegistry(SearchService)<br align="left"/></font></td></tr></table>>, shape=box]
+k_aef74292 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">OAuthValidator<br align="left"/></font></td></tr></table>>, shape=box]
+i_aef74292 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:125<br align="left"/></font><font color="#ffffff">#provideOAuthValidator()<br align="left"/></font></td></tr></table>>, shape=box]
+k_796f7f06 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">OAuthServiceProvider<br align="left"/></font></td></tr></table>>, shape=box]
+i_796f7f06 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:135<br align="left"/></font><font color="#ffffff">#provideOAuthServiceProvider(String)<br align="left"/></font></td></tr></table>>, shape=box]
+k_d8ca8cf7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_b9fa0bc7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+k_3e284ce9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FederationTransport<br align="left"/></font></td></tr></table>>, shape=box]
+k_9dc1ac3d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertPathStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_88a7a0b5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AttachmentStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_c7f722e6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccountStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_39c6c49e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_ecee0859 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveletNotificationDispatcher<br align="left"/></font></td></tr><tr><td align="left" port="m_72bb3f17"><init></td></tr></table>>, shape=box]
+k_4789c3c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveMap<br align="left"/></font></td></tr><tr><td align="left" port="m_a29919e6"><init></td></tr></table>>, shape=box]
+k_5be3c87c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ProtoSerializer<br align="left"/></font></td></tr><tr><td align="left" port="m_a1715b3c"><init></td></tr></table>>, shape=box]
+k_8378d4e2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ServerRpcProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_e92070d5"><init></td></tr></table>>, shape=box]
+k_278e5d1c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveServerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_3065e839"><init></td></tr></table>>, shape=box]
+k_fb665a1f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTimeSource<br align="left"/></font></td></tr><tr><td align="left" port="m_24dcbc5e"><init></td></tr></table>>, shape=box]
+k_f1b10e50 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NonSigningSignatureHandler$NonSigningSignatureHandlerProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_6c0a518"><init></td></tr></table>>, shape=box]
+k_6417e530 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTrustRootsProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_518d5280"><init></td></tr></table>>, shape=box]
+k_78b7d1b7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CertificateManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_7dc25cb3"><init></td></tr></table>>, shape=box]
+k_29fd6908 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DeltaStoreBasedSnapshotStore<br align="left"/></font></td></tr><tr><td align="left" port="m_f7ad7a10"><init></td></tr></table>>, shape=box]
+k_5df6cba1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MemorySearchProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_5b65d1b7"><init></td></tr></table>>, shape=box]
+k_7f2b730a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_signer_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_7f2b730a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_e8023afd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SessionManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_bc6356d8"><init></td></tr></table>>, shape=box]
+k_e4c64ebf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">HashSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_54776227"><init></td></tr></table>>, shape=box]
+k_6558149b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">RobotRegistrarImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_6c669f5e"><init></td></tr></table>>, shape=box]
+k_97d4a3f4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=wave_server_domain)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_97d4a3f4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost"<br align="left"/></font></td></tr></table>>, shape=box]
+k_ef83a5a5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotifyOperationService<br align="left"/></font></td></tr><tr><td align="left" port="m_23e9a4c9"><init></td></tr></table>>, shape=box]
+k_187912c5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SearchService<br align="left"/></font></td></tr><tr><td align="left" port="m_22b30b9b"><init></td></tr></table>>, shape=box]
+k_799d16ba [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=http_frontend_public_address)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_799d16ba [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost:8888"<br align="left"/></font></td></tr></table>>, shape=box]
+k_3a7d7e4d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationRemote<br align="left"/></font></td></tr><tr><td align="left" port="m_8c82dc4e"><init></td></tr></table>>, shape=box]
+k_fca7bf8a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationHost<br align="left"/></font></td></tr><tr><td align="left" port="m_dba23bb0"><init></td></tr></table>>, shape=box]
+k_6ae3b04f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationTransport<br align="left"/></font></td></tr><tr><td align="left" port="m_62d43621"><init></td></tr></table>>, shape=box]
+k_d5449967 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileSignerInfoStore<br align="left"/></font></td></tr><tr><td align="left" port="m_d805501f"><init></td></tr></table>>, shape=box]
+k_d70d0361 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAttachmentStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2188bcd4"><init></td></tr></table>>, shape=box]
+k_25087fa1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAccountStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2bca331e"><init></td></tr></table>>, shape=box]
+k_139f8f1c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDeltaStore<br align="left"/></font></td></tr><tr><td align="left" port="m_408652f3"><init></td></tr></table>>, shape=box]
+k_f282996 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveDigester<br align="left"/></font></td></tr><tr><td align="left" port="m_3d5a1b27"><init></td></tr></table>>, shape=box]
+k_538731ea [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=resource_bases)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
+i_538731ea [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:188<br align="left"/></font><font color="#ffffff">[target/kune-0.1.0-SNAPSHOT/, src/main/webapp/]<br align="left"/></font></td></tr></table>>, shape=box]
+k_17c5541c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=flashsocket_policy_port)<br align="left"/></font><font color="#000000">Integer<br align="left"/></font></td></tr></table>>, shape=box]
+i_17c5541c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:171<br align="left"/></font><font color="#ffffff">843<br align="left"/></font></td></tr></table>>, shape=box]
+k_b8b59a69 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ssl_keystore_password)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_b8b59a69 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"fafafa"<br align="left"/></font></td></tr></table>>, shape=box]
+k_53cf2adf [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ssl_keystore_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_53cf2adf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"src/main/resources/wiab.ks"<br align="left"/></font></td></tr></table>>, shape=box]
+k_2261770 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=enable_ssl)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_2261770 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">false<br align="left"/></font></td></tr></table>>, shape=box]
+k_2de46a61 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=sessions_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_2de46a61 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_sessions"<br align="left"/></font></td></tr></table>>, shape=box]
+k_9ff7244f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=http_frontend_addresses)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
+i_9ff7244f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:188<br align="left"/></font><font color="#ffffff">[localhost:8888]<br align="left"/></font></td></tr></table>>, shape=box]
+k_94870f0b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_94870f0b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_81703b8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PerUserWaveViewSubscriber<br align="left"/></font></td></tr><tr><td align="left" port="m_bf9bd871"><init></td></tr></table>>, shape=box]
+k_20875e7b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=signer_info_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_20875e7b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_certificates"<br align="left"/></font></td></tr></table>>, shape=box]
+k_8dd61cfb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=attachment_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_8dd61cfb [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_attachments"<br align="left"/></font></td></tr></table>>, shape=box]
+k_2cd33ff1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=account_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_2cd33ff1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_accounts"<br align="left"/></font></td></tr></table>>, shape=box]
+k_eb81f386 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=delta_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_eb81f386 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_deltas"<br align="left"/></font></td></tr></table>>, shape=box]
+k_4ac9f0a7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ConversationUtil<br align="left"/></font></td></tr><tr><td align="left" port="m_cb039b61"><init></td></tr></table>>, shape=box]
+k_ea5411f5 -> k_278e5d1c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a87086c9 -> k_278e5d1c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e3aadf3c -> k_fb665a1f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7cf68b55 -> k_f1b10e50 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_4d6e10f4:m_a87b4d2a:e -> k_6a848a3f [style=solid, arrowtail=none, arrowhead=normal]
+k_4d6e10f4:m_a87b4d2a:e -> k_9dc1ac3d [style=solid, arrowtail=none, arrowhead=normal]
+k_456ad2eb -> k_72ceec06 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_72ceec06:m_5a8716ec:e -> k_e3aadf3c [style=solid, arrowtail=none, arrowhead=normal]
+k_799adfe1 -> k_ecee0859 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_21185d9b -> k_ecee0859 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a5518feb -> k_6417e530 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1ce5e340 -> k_78b7d1b7 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b256b8b4 -> k_29fd6908 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_75860e40 -> k_5df6cba1 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_efe9d328 -> k_278e5d1c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_da56a31f -> i_da56a31f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6be82e3e -> i_6be82e3e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_686e361c -> i_686e361c [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_686e361c:header:e -> k_39c6c49e [style=solid, arrowtail=none, arrowhead=normal]
+k_5ecb104 -> i_5ecb104 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_5ecb104:header:e -> k_39c6c49e [style=solid, arrowtail=none, arrowhead=normal]
+k_6a848a3f -> i_6a848a3f [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_6a848a3f:header:e -> k_7f2b730a [style=solid, arrowtail=none, arrowhead=normal]
+i_6a848a3f:header:e -> k_e3aadf3c [style=solid, arrowtail=none, arrowhead=normal]
+i_6a848a3f:header:e -> k_456ad2eb [style=solid, arrowtail=none, arrowhead=normal]
+i_6a848a3f:header:e -> k_a5518feb [style=solid, arrowtail=none, arrowhead=normal]
+k_3f32b04c -> i_3f32b04c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_dc7baec4 -> i_dc7baec4 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_79387d6e -> k_e8023afd [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c7da405 -> k_e4c64ebf [style=dashed, arrowtail=none, arrowhead=onormal]
+k_8567e1dc -> k_6558149b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1d57ace5 -> i_1d57ace5 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_1d57ace5:header:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+i_1d57ace5:header:e -> k_352f09ab [style=solid, arrowtail=none, arrowhead=normal]
+k_614b523c -> i_614b523c [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_9234d74b -> i_9234d74b [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_9234d74b:header:e -> k_614b523c [style=solid, arrowtail=none, arrowhead=normal]
+k_352f09ab -> i_352f09ab [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_352f09ab:header:e -> k_614b523c [style=solid, arrowtail=none, arrowhead=normal]
+k_ad3b717b -> i_ad3b717b [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_8296ce09 -> i_8296ce09 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_c5011a4d -> i_c5011a4d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ccc127d3 -> i_ccc127d3 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_46fa01e8 -> i_46fa01e8 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6c6180bf -> i_6c6180bf [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_6c6180bf:header:e -> k_421505be [style=solid, arrowtail=none, arrowhead=normal]
+i_6c6180bf:header:e -> k_8296ce09 [style=solid, arrowtail=none, arrowhead=normal]
+k_421505be -> i_421505be [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_279ed565 -> i_279ed565 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_f63e25d2 -> i_f63e25d2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_f63e25d2:header:e -> k_ef83a5a5 [style=solid, arrowtail=none, arrowhead=normal]
+k_50ad1c96 -> i_50ad1c96 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_50ad1c96:header:e -> k_187912c5 [style=solid, arrowtail=none, arrowhead=normal]
+k_aef74292 -> i_aef74292 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_796f7f06 -> i_796f7f06 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_796f7f06:header:e -> k_799d16ba [style=solid, arrowtail=none, arrowhead=normal]
+k_d8ca8cf7 -> k_3a7d7e4d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b9fa0bc7 -> k_fca7bf8a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_3e284ce9 -> k_6ae3b04f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_9dc1ac3d -> k_d5449967 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_88a7a0b5 -> k_d70d0361 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c7f722e6 -> k_25087fa1 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_39c6c49e -> k_139f8f1c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ecee0859:m_72bb3f17:e -> k_1ce5e340 [style=solid, arrowtail=none, arrowhead=normal]
+k_ecee0859:m_72bb3f17:e -> k_b9fa0bc7 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_b256b8b4 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_21185d9b [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_799adfe1 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_686e361c [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_5ecb104 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_4789c3c:m_a29919e6:e -> k_f282996 [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_9ff7244f [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_17c5541c [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_538731ea [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_79387d6e [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_c7da405 [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_2de46a61 [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_2261770 [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_53cf2adf [style=solid, arrowtail=none, arrowhead=normal]
+k_8378d4e2:m_e92070d5:e -> k_b8b59a69 [style=solid, arrowtail=none, arrowhead=normal]
+k_278e5d1c:m_3065e839:e -> k_6be82e3e [style=solid, arrowtail=none, arrowhead=normal]
+k_278e5d1c:m_3065e839:e -> k_1ce5e340 [style=solid, arrowtail=none, arrowhead=normal]
+k_278e5d1c:m_3065e839:e -> k_d8ca8cf7 [style=solid, arrowtail=none, arrowhead=normal]
+k_278e5d1c:m_3065e839:e -> k_4789c3c [style=solid, arrowtail=none, arrowhead=normal]
+k_f1b10e50:m_6c0a518:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_78b7d1b7:m_7dc25cb3:e -> k_94870f0b [style=solid, arrowtail=none, arrowhead=normal]
+k_78b7d1b7:m_7dc25cb3:e -> k_7cf68b55 [style=solid, arrowtail=none, arrowhead=normal]
+k_78b7d1b7:m_7dc25cb3:e -> k_4d6e10f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_78b7d1b7:m_7dc25cb3:e -> k_9dc1ac3d [style=solid, arrowtail=none, arrowhead=normal]
+k_29fd6908:m_f7ad7a10:e -> k_39c6c49e [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_799adfe1 [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_97d4a3f4 [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_f282996 [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_4789c3c [style=solid, arrowtail=none, arrowhead=normal]
+k_5df6cba1:m_5b65d1b7:e -> k_81703b8 [style=solid, arrowtail=none, arrowhead=normal]
+k_7f2b730a -> i_7f2b730a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e8023afd:m_bc6356d8:e -> k_c7f722e6 [style=solid, arrowtail=none, arrowhead=normal]
+k_e8023afd:m_bc6356d8:e -> k_c7da405 [style=solid, arrowtail=none, arrowhead=normal]
+k_6558149b:m_6c669f5e:e -> k_c7f722e6 [style=solid, arrowtail=none, arrowhead=normal]
+k_6558149b:m_6c669f5e:e -> k_9234d74b [style=solid, arrowtail=none, arrowhead=normal]
+k_97d4a3f4 -> i_97d4a3f4 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ef83a5a5:m_23e9a4c9:e -> k_c7f722e6 [style=solid, arrowtail=none, arrowhead=normal]
+k_ef83a5a5:m_23e9a4c9:e -> k_6c6180bf [style=solid, arrowtail=none, arrowhead=normal]
+k_187912c5:m_22b30b9b:e -> k_75860e40 [style=solid, arrowtail=none, arrowhead=normal]
+k_799d16ba -> i_799d16ba [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d5449967:m_d805501f:e -> k_20875e7b [style=solid, arrowtail=none, arrowhead=normal]
+k_d70d0361:m_2188bcd4:e -> k_8dd61cfb [style=solid, arrowtail=none, arrowhead=normal]
+k_25087fa1:m_2bca331e:e -> k_2cd33ff1 [style=solid, arrowtail=none, arrowhead=normal]
+k_139f8f1c:m_408652f3:e -> k_eb81f386 [style=solid, arrowtail=none, arrowhead=normal]
+k_f282996:m_3d5a1b27:e -> k_4ac9f0a7 [style=solid, arrowtail=none, arrowhead=normal]
+k_538731ea -> i_538731ea [style=dashed, arrowtail=none, arrowhead=onormal]
+k_17c5541c -> i_17c5541c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b8b59a69 -> i_b8b59a69 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_53cf2adf -> i_53cf2adf [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2261770 -> i_2261770 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2de46a61 -> i_2de46a61 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_9ff7244f -> i_9ff7244f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_94870f0b -> i_94870f0b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_81703b8:m_bf9bd871:e -> k_4789c3c [style=solid, arrowtail=none, arrowhead=normal]
+k_20875e7b -> i_20875e7b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_8dd61cfb -> i_8dd61cfb [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2cd33ff1 -> i_2cd33ff1 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_eb81f386 -> i_eb81f386 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4ac9f0a7:m_cb039b61:e -> k_1d57ace5 [style=solid, arrowtail=none, arrowhead=normal]
}
Modified: trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java 2012-03-06 21:40:19 UTC (rev 1743)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java 2012-03-07 02:43:00 UTC (rev 1744)
@@ -60,7 +60,6 @@
final KunePropertiesDefault kuneProperties = new KunePropertiesDefault(kuneConfig);
bind(KuneProperties.class).toInstance(kuneProperties);
- // expose(KuneProperties.class);
// precedence method param > properties
final String configuredJpaUnit = kuneProperties.get(KuneProperties.SITE_DB_PERSISTENCE_NAME);
@@ -95,6 +94,31 @@
jpm.addFinder(TagUserContentFinder.class);
jpm.addFinder(UserFinder.class);
install(jpm);
+
+ bind(Session.class).annotatedWith(DataSourceKune.class).toProvider(
+ DataSourceKuneSessionProvider.class);
+
+ // bind(UnitOfWork.class).annotatedWith(DataSourceKune.class).toProvider(
+ // DataSourceKuneUnitOfWorkProvider.class);
+ // expose(UnitOfWork.class).annotatedWith(DataSourceKune.class);
+
+ // final KuneJpaLocalTxnInterceptor transactionInterceptor = new
+ // KuneJpaLocalTxnInterceptor();
+ // requestInjection(transactionInterceptor);
+ //
+ // bindInterceptor(annotatedWith(KuneTransactional.class), any(),
+ // transactionInterceptor);
+ // bindInterceptor(any(), annotatedWith(KuneTransactional.class),
+ // transactionInterceptor);
+
+ final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class);
+ bind(EntityManager.class).annotatedWith(DataSourceKune.class).toProvider(entityManagerProvider);
+
+ bind(MY_DATA_SOURCE_ONE_FILTER_KEY).to(CustomPersistFilter.class);
+
+ // expose(EntityManager.class).annotatedWith(DataSourceKune.class);
+ // expose(Session.class).annotatedWith(DataSourceKune.class);
+ // expose(KuneProperties.class);
// expose(ContainerFinder.class);
// expose(ContentFinder.class);
// expose(ExtMediaDescripFinder.class);
@@ -107,16 +131,6 @@
// expose(TagFinder.class);
// expose(TagUserContentFinder.class);
// expose(UserFinder.class);
-
- bind(Session.class).annotatedWith(DataSourceKune.class).toProvider(
- DataSourceKuneSessionProvider.class);
- // expose(Session.class).annotatedWith(MyDataSourceOne.class);
-
- final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class);
- bind(EntityManager.class).annotatedWith(DataSourceKune.class).toProvider(entityManagerProvider);
- // expose(EntityManager.class).annotatedWith(MyDataSourceOne.class);
-
- bind(MY_DATA_SOURCE_ONE_FILTER_KEY).to(CustomPersistFilter.class);
// expose(MY_DATA_SOURCE_ONE_FILTER_KEY);
bind(GenericPersistenceInitializer.class).asEagerSingleton();
Added: trunk/src/main/java/cc/kune/core/server/KuneTransactional.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KuneTransactional.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/KuneTransactional.java 2012-03-07 02:43:00 UTC (rev 1744)
@@ -0,0 +1,29 @@
+package cc.kune.core.server;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ ElementType.METHOD, ElementType.TYPE })
+(a)Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface KuneTransactional {
+
+ /**
+ * A list of exceptions to <b>not<b> rollback on. A caveat to the rollbackOn
+ * clause. The disjunction of rollbackOn and ignore represents the list of
+ * exceptions that will trigger a rollback. The complement of rollbackOn and
+ * the universal set plus any exceptions in the ignore set represents the list
+ * of exceptions that will trigger a commit. Note that ignore exceptions take
+ * precedence over rollbackOn, but with subtype granularity.
+ */
+ Class<? extends Exception>[] ignore() default {};
+
+ /**
+ * A list of exceptions to rollback on, if thrown by the transactional method.
+ * These exceptions are propagated correctly after a rollback.
+ */
+ Class<? extends Exception>[] rollbackOn() default RuntimeException.class;
+}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java 2012-03-06 21:40:19 UTC (rev 1743)
+++ trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java 2012-03-07 02:43:00 UTC (rev 1744)
@@ -55,12 +55,14 @@
private static final Log LOG = LogFactory.getLog(DatabaseInitializer.class);
private final ContentManager contentManager;
private final I18nCountryManager countryManager;
+
private final GroupManager groupManager;
private final I18nLanguageManager languageManager;
private final LicenseManager licenseManager;
private final KuneBasicProperties properties;
private final I18nTranslationManager translationManager;
private final I18nTranslationServiceDefault translationService;
+
private final UserManager userManager;
@Inject
@@ -85,7 +87,6 @@
// LOG.info("Roster items: " + borrar.count());
}
- @Transactional
private void createDefUsersGroup() throws Exception, UserMustBeLoggedException {
final String adminName = properties.getAdminUserName();
final String adminShortName = properties.getAdminShortName();
@@ -120,7 +121,6 @@
groupManager.reIndex();
}
- @Transactional
private void createLicenses() {
// FIXME: Add CC RDF info (seems CC is working on new forms to add
// license metadata)
@@ -167,7 +167,6 @@
licenseManager.persist(license);
}
- @Transactional
public void createOthers() {
final I18nLanguage english = new I18nLanguage(Long.valueOf(1819), "en", "ltr", "English", "", "",
"en", "eng", "eng", false, "", "", "", "c == 1 ? 1 : 2", null, "L", "MMM d\\, yyyy");
@@ -193,8 +192,6 @@
public void initDatabase() throws Exception {
createLicenses();
createOthers();
- LOG.warn("langs: " + languageManager.getAll().size());
- // createLicenses();
createDefUsersGroup();
}
Modified: trunk/src/test/java/cc/kune/core/server/integration/DatabaseInitializerTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/integration/DatabaseInitializerTest.java 2012-03-06 21:40:19 UTC (rev 1743)
+++ trunk/src/test/java/cc/kune/core/server/integration/DatabaseInitializerTest.java 2012-03-07 02:43:00 UTC (rev 1744)
@@ -59,7 +59,6 @@
I18nLanguageManager languageManager;
@Inject
LicenseManager licenseManager;
-
@Inject
I18nTranslationManager transManager;
Added: trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java
===================================================================
--- trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java (rev 0)
+++ trunk/src/test/java/com/google/inject/persist/jpa/KuneJpaLocalTxnInterceptor.java 2012-03-07 02:43:00 UTC (rev 1744)
@@ -0,0 +1,171 @@
+/**
+ * Copyright (C) 2010 Google, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.inject.persist.jpa;
+
+import java.lang.reflect.Method;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
+
+import cc.kune.core.server.KuneTransactional;
+
+import com.google.inject.Inject;
+import com.google.inject.persist.UnitOfWork;
+
+/**
+ * @author Dhanji R. Prasanna (dhanji(a)gmail.com)
+ */
+public class KuneJpaLocalTxnInterceptor implements MethodInterceptor {
+
+ @KuneTransactional
+ private static class Internal {
+ }
+
+ // Tracks if the unit of work was begun implicitly by this transaction.
+ private final ThreadLocal<Boolean> didWeStartWork = new ThreadLocal<Boolean>();
+
+ @Inject
+ private final JpaPersistService emProvider = null;
+
+ @Inject
+ private final UnitOfWork unitOfWork = null;
+
+ @Override
+ public Object invoke(final MethodInvocation methodInvocation) throws Throwable {
+
+ // Should we start a unit of work?
+ if (!emProvider.isWorking()) {
+ emProvider.begin();
+ didWeStartWork.set(true);
+ }
+
+ final KuneTransactional transactional = readTransactionMetadata(methodInvocation);
+ final EntityManager em = this.emProvider.get();
+
+ // Allow 'joining' of transactions if there is an enclosing
+ // @KuneTransactional method.
+ if (em.getTransaction().isActive()) {
+ return methodInvocation.proceed();
+ }
+
+ final EntityTransaction txn = em.getTransaction();
+ txn.begin();
+
+ Object result;
+ try {
+ result = methodInvocation.proceed();
+
+ } catch (final Exception e) {
+ // commit transaction only if rollback didnt occur
+ if (rollbackIfNecessary(transactional, e, txn)) {
+ txn.commit();
+ }
+
+ // propagate whatever exception is thrown anyway
+ throw e;
+ } finally {
+ // Close the em if necessary (guarded so this code doesn't run unless
+ // catch fired).
+ if (null != didWeStartWork.get() && !txn.isActive()) {
+ didWeStartWork.remove();
+ unitOfWork.end();
+ }
+ }
+
+ // everything was normal so commit the txn (do not move into try block above
+ // as it
+ // interferes with the advised method's throwing semantics)
+ try {
+ txn.commit();
+ } finally {
+ // close the em if necessary
+ if (null != didWeStartWork.get()) {
+ didWeStartWork.remove();
+ unitOfWork.end();
+ }
+ }
+
+ // or return result
+ return result;
+ }
+
+ // TODO(dhanji): Cache this method's results.
+ private KuneTransactional readTransactionMetadata(final MethodInvocation methodInvocation) {
+ KuneTransactional transactional;
+ final Method method = methodInvocation.getMethod();
+ final Class<?> targetClass = methodInvocation.getThis().getClass();
+
+ transactional = method.getAnnotation(KuneTransactional.class);
+ if (null == transactional) {
+ // If none on method, try the class.
+ transactional = targetClass.getAnnotation(KuneTransactional.class);
+ }
+ if (null == transactional) {
+ // If there is no transactional annotation present, use the default
+ transactional = Internal.class.getAnnotation(KuneTransactional.class);
+ }
+
+ return transactional;
+ }
+
+ /**
+ * Returns True if rollback DID NOT HAPPEN (i.e. if commit should continue).
+ *
+ * @param transactional
+ * The metadata annotaiton of the method
+ * @param e
+ * The exception to test for rollback
+ * @param txn
+ * A JPA Transaction to issue rollbacks on
+ */
+ private boolean rollbackIfNecessary(final KuneTransactional transactional, final Exception e,
+ final EntityTransaction txn) {
+ boolean commit = true;
+
+ // check rollback clauses
+ for (final Class<? extends Exception> rollBackOn : transactional.rollbackOn()) {
+
+ // if one matched, try to perform a rollback
+ if (rollBackOn.isInstance(e)) {
+ commit = false;
+
+ // check ignore clauses (supercedes rollback clause)
+ for (final Class<? extends Exception> exceptOn : transactional.ignore()) {
+ // An exception to the rollback clause was found, DON'T rollback
+ // (i.e. commit and throw anyway)
+ if (exceptOn.isInstance(e)) {
+ commit = true;
+ break;
+ }
+ }
+
+ // rollback only if nothing matched the ignore check
+ if (!commit) {
+ txn.rollback();
+ }
+ // otherwise continue to commit
+
+ break;
+ }
+ }
+
+ return commit;
+ }
+}
1
0
06 Mar '12
Author: vjrj_
Date: 2012-03-06 22:40:19 +0100 (Tue, 06 Mar 2012)
New Revision: 1743
Modified:
trunk/INSTALL
trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java
Log:
minor changes
Modified: trunk/INSTALL
===================================================================
--- trunk/INSTALL 2012-03-06 21:17:53 UTC (rev 1742)
+++ trunk/INSTALL 2012-03-06 21:40:19 UTC (rev 1743)
@@ -183,7 +183,7 @@
TODO: configure/select db via properties
-=== Customization: Adapting Kune to your site ===
+===Customization: Adapting Kune to your site===
Copy and adapt as much as possible to your needs these files:
@@ -319,6 +319,8 @@
When you add this to the configuration and you restart, openfire will import (and remove) this part of the configuration to its database so you will see it in 'Server > Server Manager > System Properties'.
+Troubleshooting: If you cannot login to openfire after the kune installation, or the chat client don't login correctly you can check if the previous values are correct looking in the table ofProperty of openfire database. Using mysql command line, or MySql Browser you can fix there also the System Properties.
+
For more details:
http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/db-…
@@ -329,7 +331,7 @@
After the section 'Run the server for the first time' you'll be able to use the password of the admin user of the kune instalation (specified in kune.properties), or other admin new users you want to register using kune and configure in the authorizedUsernames attribute.
-=== Configure your DNS for your XMPP service correctly ===
+===Configure your DNS for your XMPP service correctly===
You have to configure your DNS domain adding SRV records for your XMPP services if you wanna use kune in production (not necessary for development). This permit that your XMPP server comunicates with other similar servers correctly. You should follow:
http://jabberd.org/1.4/doc/adminguide#dnssrv
Modified: trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java 2012-03-06 21:17:53 UTC (rev 1742)
+++ trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java 2012-03-06 21:40:19 UTC (rev 1743)
@@ -175,8 +175,8 @@
LOG.debug("INITIALIZATION DONE!");
// Uncomment to generate the graph
- graph("docs/wave-guice-graph.dot", injector);
- graph("docs/kune-guice-graph.dot", kuneChildInjector);
+ // graph("docs/wave-guice-graph.dot", injector);
+ // graph("docs/kune-guice-graph.dot", kuneChildInjector);
}
private void initFilters(final FilterConfig filterConfig) throws ServletException {
1
0
06 Mar '12
Author: vjrj_
Date: 2012-03-06 22:17:53 +0100 (Tue, 06 Mar 2012)
New Revision: 1742
Added:
trunk/docs/kune-guice-graph.dot
trunk/docs/kune-guice-graph.png
trunk/docs/kune-guice-graph.svg
trunk/docs/wave-guice-graph.dot
trunk/src/main/java/cc/kune/core/server/DataSourceKune.java
trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java
trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java
trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java
trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java
trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java
trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java
trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterFinder.java
trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java
trunk/src/main/java/cc/kune/core/server/xmpp/Roster.java
trunk/src/main/java/cc/kune/core/server/xmpp/XmppRosterProvider.java
Modified:
trunk/.classpath
trunk/TROUBLESHOOT
trunk/pom.xml
trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java
trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java
trunk/src/main/java/cc/kune/core/server/KuneRackModule.java
trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java
trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java
trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java
trunk/src/main/resources/META-INF/persistence.xml
trunk/src/main/resources/log4j.properties
trunk/src/test/java/cc/kune/core/server/PersistenceTest.java
trunk/src/test/java/cc/kune/core/server/TestConstants.java
trunk/src/test/java/cc/kune/core/server/TestHelper.java
trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java
Log:
Added Multiple Persistence (to connecto to openfire via guice-persist). Work in progress
Modified: trunk/.classpath
===================================================================
--- trunk/.classpath 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/.classpath 2012-03-06 21:17:53 UTC (rev 1742)
@@ -48,6 +48,9 @@
<classpathentry kind="var" path="M2_REPO/com/google/guava/guava-gwt/r09/guava-gwt-r09.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/inject/guice/3.0/guice-3.0.jar" sourcepath="M2_REPO/com/google/inject/guice/3.0/guice-3.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/inject/extensions/guice-assisted-inject/2.0/guice-assisted-inject-2.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/inject/extensions/guice-assistedinject/3.0/guice-assistedinject-3.0.jar" sourcepath="M2_REPO/com/google/inject/extensions/guice-assistedinject/3.0/guice-assistedinject-3.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/inject/extensions/guice-grapher/3.0/guice-grapher-3.0.jar" sourcepath="M2_REPO/com/google/inject/extensions/guice-grapher/3.0/guice-grapher-3.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/google/inject/extensions/guice-multibindings/3.0/guice-multibindings-3.0.jar" sourcepath="M2_REPO/com/google/inject/extensions/guice-multibindings/3.0/guice-multibindings-3.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/inject/extensions/guice-persist/3.0/guice-persist-3.0.jar" sourcepath="M2_REPO/com/google/inject/extensions/guice-persist/3.0/guice-persist-3.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/inject/extensions/guice-servlet/3.0/guice-servlet-3.0.jar" sourcepath="M2_REPO/com/google/inject/extensions/guice-servlet/3.0/guice-servlet-3.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/com/bradrydzewski/gwt-cal/0.9.3-dndCreation/gwt-cal-0.9.3-dndCreation.jar"/>
Modified: trunk/TROUBLESHOOT
===================================================================
--- trunk/TROUBLESHOOT 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/TROUBLESHOOT 2012-03-06 21:17:53 UTC (rev 1742)
@@ -1,6 +1,6 @@
=TROUBLESHOOTING=
-== Server debug ==
+==Server debug==
You can debug the server running from eclipse as external tool:
'script/kune server via mvn with debug.launch'
@@ -15,30 +15,30 @@
See also log4j.properties in src/main/resources/
-== Client debug ==
+==Client debug==
You can debug the client with the eclipse launch configuration 'script/kune client -no-server.launch'.
-== Firebug and client log levels ==
+==Firebug and client log levels==
To increase client logging add ?log_level=DEBUG# to the url and use firebug firefox extension to see the output.
-== Emite troubleshooting ==
+==Emite troubleshooting==
See:
http://code.google.com/p/emite/wiki/Troubleshooting
-== Liquibase ==
+==Liquibase==
-=== Checksum errors ===
+===Checksum errors===
Migration Failed: Validation Failed:1 change sets failed MD5Sum Check src/main/resources/db/liquibase_changelog.xml :: 18 :: vjrj :: (MD5Sum: bde0aa519108e1e3d1f29bb2483bc9)
Don't try to update the liquibase changelogs you have already use. Better create new ones to delete, update, and so on. If you are developing and want to clear the checksums, you can use the command "clearCheckSums". See script/liquibase-* and http://www.liquibase.org/manual/command_line
-== Lucene ==
+==Lucene==
-=== Indexes problems during upgrades ===
+===Indexes problems during upgrades===
If you get errors like:
@@ -52,28 +52,28 @@
Sometimes the tests also fails without any error (use the same workaround).
-== JUnit ==
+==JUnit==
Running all the Kune test from eclipse I get connection pool exceptions like:
Connections could not be acquired from the underlying database
We have problems testing all test together from eclipse and using real db (not the h2 memory db)
-== Too many files open ==
+==Too many files open==
If running all the Kune test you get errors about "Too many files open" see:
http://code.google.com/p/gwt-examples/wiki/gwtEclipseFaqs
about how to fix it in your system.
-== If you change some .properties or configuration files in src directory ==
+==If you change some .properties or configuration files in src directory==
Be sure to do mvn compile (that copy them to the target directory)
-== If the client get: Error fetching initial data from Kune server ==
+==If the client get: Error fetching initial data from Kune server==
Probably the client code is outdated from the server code (or viceversa). Try to get both codes in sync compiling it.
-== Mysql: Caused by: java.sql.SQLException: Access denied for user 'kune'@'localhost' (using password: YES) ==
+==Mysql: Caused by: java.sql.SQLException: Access denied for user 'kune'@'localhost' (using password: YES)==
Check that the password you have use in the database creation it's the same like the kune.properties. If it's wrong maybe you have to remove the mysql user (DROP USER) and repeat the GRANT sentences of the INSTALL.
@@ -81,7 +81,7 @@
If you have this problem with openfire it's not enough to change the password in openfire.xml because probably it's already stored in the ofProperty openfire table and you need to change the password there.
-== Other mysql errors ==
+==Other mysql errors==
If you get this warning, probably you have connection problems between kune and your database:
@@ -100,7 +100,7 @@
#general_log = 1
in /etc/mysql/my.cnf
-== If during initialization (first start) you get a 'Account already exists' ==
+==If during initialization (first start) you get a 'Account already exists'==
If you stopped the first initialization and the server init is half started you will get something like:
@@ -109,7 +109,7 @@
trying to run kune and creating the DB. So better remove the first account of wave and related /var/lib/kune/_*
-== Eclipse & GWT ==
+==Eclipse & GWT==
If you have some tests with error like "can not be found in source packages. Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly" and you have installed GWTDesigner, uncheck "client classpath": http://code.google.com/webtoolkit/tools/gwtdesigner/preferences/gwt/prefere…
@@ -125,18 +125,18 @@
Error: Problem with Eclipse plugin and UiBinder "Field xxx has no corresponding field in template file yyy.ui.xml"
https://code.google.com/p/google-web-toolkit/issues/detail?id=4353
-== Too many GWT permutations? ==
+==Too many GWT permutations?==
Compile in PRETTY mode and edit target/kune-VERSION/ws/ws.nocache.js and look for 'unflattenKeylistIntoAnswers' to see a permutation list. See:
https://groups.google.com/group/google-web-toolkit/browse_thread/thread/ec7…
If you want to compile less permutations (only for dev or testing), comment some locale and user.agent in src/main/java/cc/kune/Kune.gwt.xml
-== Outbound variable M2_REPO ==
+==Outbound variable M2_REPO==
Set M2_REPO to eclipse in Preferences > Java > Build Path > Classpath Variable (normally to /home/youruser/.m2/repository/)
-== Error generating CoreResources ==
+==Error generating CoreResources==
[INFO] Computing all possible rebind results for 'cc.kune.core.client.resources.CoreResources' [INFO] Rebinding cc.kune.core.client.resources.CoreResources [INFO] Invoking generator com.google.gwt.resources.rebind.context.StaticClientBundleGenerator [INFO] [ERROR] Generator 'com.google.gwt.resources.rebind.context.StaticClientBundleGenerator' threw an exception while rebinding 'cc.kune.cor
[INFO] at com.google.gwt.dev.util.Util.computeStrongName(Util.java:170) [INFO] at com.google.gwt.dev.util.Util.computeStrongName(Util.java:145) [INFO] at com.google.gwt.resources.rebind.context.StaticResourceContext.deploy(StaticResourceContext.java:61)
@@ -144,3 +144,7 @@
http://code.google.com/p/google-web-toolkit/issues/detail?id=6103
The gwt compiler is trying to create a sprite sheet, an image with all the icons all together (to minimize calls from client to server) but cannot open all the files. This happens normally when ulimit is not setted. See: "Too many files open" above.
+
+==Eclipse startup is slow==
+Check, for instance, the first points of:
+http://www.beyondlinux.com/2011/06/25/speed-up-your-eclipse-as-a-super-fast-ide/
\ No newline at end of file
Added: trunk/docs/kune-guice-graph.dot
===================================================================
--- trunk/docs/kune-guice-graph.dot (rev 0)
+++ trunk/docs/kune-guice-graph.dot 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,709 @@
+digraph injector {
+graph [rankdir=TB];
+k_c92e8c4d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletRequest<br align="left"/></font></td></tr></table>>, shape=box]
+k_2ca5daf6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletResponse<br align="left"/></font></td></tr></table>>, shape=box]
+k_57676221 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FilterPipeline<br align="left"/></font></td></tr></table>>, shape=box]
+k_c2892102 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ServletContext<br align="left"/></font></td></tr></table>>, shape=box]
+k_3208fff2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpServletRequest<br align="left"/></font></td></tr></table>>, shape=box]
+i_3208fff2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:95<br align="left"/></font><font color="#ffffff">#provideHttpServletRequest()<br align="left"/></font></td></tr></table>>, shape=box]
+k_ef0fca5f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpServletResponse<br align="left"/></font></td></tr></table>>, shape=box]
+i_ef0fca5f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:99<br align="left"/></font><font color="#ffffff">#provideHttpServletResponse()<br align="left"/></font></td></tr></table>>, shape=box]
+k_e44414fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HttpSession<br align="left"/></font></td></tr></table>>, shape=box]
+i_e44414fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:103<br align="left"/></font><font color="#ffffff">#provideHttpSession()<br align="left"/></font></td></tr></table>>, shape=box]
+k_77c04a82 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@RequestParameters<br align="left"/></font><font color="#000000">Map<String, String[]><br align="left"/></font></td></tr></table>>, shape=box]
+i_77c04a82 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">InternalServletModule.java:108<br align="left"/></font><font color="#ffffff">#provideRequestParameters()<br align="left"/></font></td></tr></table>>, shape=box]
+k_d7819d58 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneProperties<br align="left"/></font></td></tr></table>>, shape=box]
+i_d7819d58 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">MyDataSourceOnePersistModule.java:62<br align="left"/></font><font color="#ffffff">KunePropertiesDefault<br align="left"/></font></td></tr></table>>, shape=box]
+k_ec0eec1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Jpa<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_ec0eec1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:58<br align="left"/></font><font color="#ffffff">"development"<br align="left"/></font></td></tr></table>>, shape=box]
+k_3025761f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Jpa<br align="left"/></font><font color="#000000">Properties<br align="left"/></font></td></tr></table>>, shape=box]
+i_3025761f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:61<br align="left"/></font><font color="#ffffff">{hibernate.connection.username=kune, hibernate.connection.password=db4kune, hibernate.connection.url=jdbc:mysql://localhost/kune_dev?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8}<br align="left"/></font></td></tr></table>>, shape=box]
+k_4af18928 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">PersistService<br align="left"/></font></td></tr></table>>, shape=box]
+k_34d8ea68 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UnitOfWork<br align="left"/></font></td></tr></table>>, shape=box]
+k_bd577e32 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EntityManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_efaafb9a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EntityManagerFactory<br align="left"/></font></td></tr></table>>, shape=box]
+k_ed3850fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContainerFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_ed3850fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@7e64cfe0<br align="left"/></font></td></tr></table>>, shape=box]
+k_50c5378e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_50c5378e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@c8bbbf4<br align="left"/></font></td></tr></table>>, shape=box]
+k_e32fd65a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ExtMediaDescripFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_e32fd65a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@29e0969b<br align="left"/></font></td></tr></table>>, shape=box]
+k_c52e8b1f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_c52e8b1f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@57bfaf97<br align="left"/></font></td></tr></table>>, shape=box]
+k_f190cf1a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nCountryFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_f190cf1a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@69a10f82<br align="left"/></font></td></tr></table>>, shape=box]
+k_9e4d04a6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nLanguageFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_9e4d04a6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@4d0155fb<br align="left"/></font></td></tr></table>>, shape=box]
+k_e0cca2c0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_e0cca2c0 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@12b3f93c<br align="left"/></font></td></tr></table>>, shape=box]
+k_571c5d0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LicenseFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_571c5d0 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@65afdbbb<br align="left"/></font></td></tr></table>>, shape=box]
+k_d05d4d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RateFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_d05d4d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@7c830624<br align="left"/></font></td></tr></table>>, shape=box]
+k_a599624d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_a599624d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@7e086558<br align="left"/></font></td></tr></table>>, shape=box]
+k_23d1709 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagUserContentFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_23d1709 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@5935b50c<br align="left"/></font></td></tr></table>>, shape=box]
+k_975262ab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserFinder<br align="left"/></font></td></tr></table>>, shape=box]
+i_975262ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">JpaPersistModule.java:159<br align="left"/></font><font color="#ffffff">com.google.inject.persist.jpa.JpaPersistModule$1@55015495<br align="left"/></font></td></tr></table>>, shape=box]
+k_f7b6406d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@MyDataSourceOne<br align="left"/></font><font color="#000000">Session<br align="left"/></font></td></tr></table>>, shape=box]
+k_779877f7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@MyDataSourceOne<br align="left"/></font><font color="#000000">EntityManager<br align="left"/></font></td></tr></table>>, shape=box]
+i_779877f7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">MyDataSourceOnePersistModule.java:116<br align="left"/></font><font color="#ffffff">Provider<javax.persistence.EntityManager><br align="left"/></font></td></tr></table>>, shape=box]
+k_91a74692 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@MyDataSourceOne<br align="left"/></font><font color="#000000">CustomPersistFilter<br align="left"/></font></td></tr></table>>, shape=box]
+k_23eb5148 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Internal(value=1)<br align="left"/></font><font color="#000000">FilterDefinition<br align="left"/></font></td></tr></table>>, shape=box]
+i_23eb5148 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">FiltersModuleBuilder.java:49<br align="left"/></font><font color="#ffffff">FilterDefinition<br align="left"/></font></td></tr></table>>, shape=box]
+k_713ad964 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_38aee1f8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_157473fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_1acc6318 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ToolConfigurationManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_a4692fd8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContainerManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_74d7c200 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LicenseManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_90277b38 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SocialNetworkManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_4984b5f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">XmppManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_f4865409 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ChatManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_a164c085 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RateManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_313e6bb7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nCountryManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_1e55cee9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nLanguageManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_2b3b226a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_d1eae4dc [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_19107f5b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TagUserContentManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_a0509078 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FileManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_45bff81a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ExtMediaDescripManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_f2e2f2a7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneWaveManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_11ed20eb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SiteService<br align="left"/></font></td></tr></table>>, shape=box]
+k_b8cb81fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">GroupService<br align="left"/></font></td></tr></table>>, shape=box]
+k_8453f77 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ContentService<br align="left"/></font></td></tr></table>>, shape=box]
+k_3c71cd07 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserService<br align="left"/></font></td></tr></table>>, shape=box]
+k_4d085577 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SocialNetService<br align="left"/></font></td></tr></table>>, shape=box]
+k_cdb92fce [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nService<br align="left"/></font></td></tr></table>>, shape=box]
+k_d1806ccf [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ListsService<br align="left"/></font></td></tr></table>>, shape=box]
+k_94078109 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">ClientStatsService<br align="left"/></font></td></tr></table>>, shape=box]
+k_f4da46d1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UserInfoService<br align="left"/></font></td></tr></table>>, shape=box]
+k_ab46457f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CreationService<br align="left"/></font></td></tr></table>>, shape=box]
+k_f99f2b86 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccessRightsService<br align="left"/></font></td></tr></table>>, shape=box]
+k_8636f4ac [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccessService<br align="left"/></font></td></tr></table>>, shape=box]
+k_7ecc0a55 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FinderService<br align="left"/></font></td></tr></table>>, shape=box]
+k_a66e0dc0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">StateService<br align="left"/></font></td></tr></table>>, shape=box]
+k_24961ca8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationService<br align="left"/></font></td></tr></table>>, shape=box]
+k_b81a1c1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">I18nTranslationServiceMultiLang<br align="left"/></font></td></tr></table>>, shape=box]
+k_aa3c53ae [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">KuneWaveService<br align="left"/></font></td></tr></table>>, shape=box]
+k_2eb97c23 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">MailService<br align="left"/></font></td></tr></table>>, shape=box]
+k_5fe7fac5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">StatsService<br align="left"/></font></td></tr></table>>, shape=box]
+k_9f28c448 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Mapper<br align="left"/></font></td></tr></table>>, shape=box]
+k_48c0beec [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">UsersOnline<br align="left"/></font></td></tr></table>>, shape=box]
+k_5676f2ec [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">NotificationSender<br align="left"/></font></td></tr></table>>, shape=box]
+k_3edb753c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ExtendedModule-1)<br align="left"/></font><font color="#000000">AbstractExtendedModule<br align="left"/></font></td></tr></table>>, shape=box]
+i_3edb753c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">AbstractExtendedModule.java:100<br align="left"/></font><font color="#ffffff">PlatformServerModule<br align="left"/></font></td></tr><tr><td align="left" port="m_ea7d63">#injectRegisteredObjects(...)</td></tr></table>>, shape=box]
+k_e518eb99 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RESTMethodFinder<br align="left"/></font></td></tr></table>>, shape=box]
+k_79cc66c6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RESTSerializer<br align="left"/></font></td></tr></table>>, shape=box]
+k_3e59236a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ManagedFilterPipeline<br align="left"/></font></td></tr><tr><td align="left" port="m_84fd56bb"><init></td></tr></table>>, shape=box]
+k_e20aa4f9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ManagedServletPipeline<br align="left"/></font></td></tr><tr><td align="left" port="m_c910e7a6"><init></td></tr></table>>, shape=box]
+k_ae1a7ede [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JpaPersistService<br align="left"/></font></td></tr><tr><td align="left" port="m_39b7e4fa"><init></td></tr></table>>, shape=box]
+k_33bd1bc8 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KunePersistenceInitializer<br align="left"/></font></td></tr><tr><td align="left" port="m_724ea93f"><init></td></tr></table>>, shape=box]
+k_9b3b57fa [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KunePersistenceService<br align="left"/></font></td></tr><tr><td align="left" port="m_1af67f92"><init></td></tr><tr><td align="left" port="m_b7f26df5">databaseInitializer</td></tr></table>>, shape=box]
+k_edd20636 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetwork<br align="left"/></font></td></tr><tr><td align="left" port="m_29530556"><init></td></tr></table>>, shape=box]
+k_8c7fc3dd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">XMLActionReader<br align="left"/></font></td></tr><tr><td align="left" port="m_8e4df240"><init></td></tr></table>>, shape=box]
+k_b8b1fb55 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ServerToolRegistry<br align="left"/></font></td></tr><tr><td align="left" port="m_b4a6ea93"><init></td></tr></table>>, shape=box]
+k_aa5efde3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileUploadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_f70b907a"><init></td></tr><tr><td align="left" port="m_fbf8f608">kuneProperties</td></tr><tr><td align="left" port="m_75d06daa">i18n</td></tr><tr><td align="left" port="m_9a2f00cb">accessService</td></tr><tr><td align="left" port="m_3f42d6ac">creationService</td></tr><tr><td align="left" port="m_55fe5eeb">fileManager</td></tr><tr><td align="left" port="m_f73bea64">i18n</td></tr><tr><td align="left" port="m_9359f431">userSession</td></tr></table>>, shape=box]
+k_3fdfa1f3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDownloadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_a193f493"><init></td></tr><tr><td align="left" port="m_e765dc67">contentManager</td></tr><tr><td align="left" port="m_1457c827">kuneProperties</td></tr><tr><td align="left" port="m_116dcc06">fileUtils</td></tr></table>>, shape=box]
+k_f073050a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EntityLogoUploadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_1d803b88"><init></td></tr></table>>, shape=box]
+k_cc3648a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EntityLogoDownloadManager<br align="left"/></font></td></tr><tr><td align="left" port="m_fd8a1421"><init></td></tr><tr><td align="left" port="m_e17f200f">groupManager</td></tr></table>>, shape=box]
+k_e01da407 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ParticipantUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_ffdcacd3"><init></td></tr></table>>, shape=box]
+k_96a0f6e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveEmailNotifier<br align="left"/></font></td></tr><tr><td align="left" port="m_dadc2f23"><init></td></tr></table>>, shape=box]
+k_4eb32c88 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PendingNotificationSender<br align="left"/></font></td></tr><tr><td align="left" port="m_6683cfea"><init></td></tr></table>>, shape=box]
+k_888ff559 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CronServerTasksManager<br align="left"/></font></td></tr><tr><td align="left" port="m_6e568d1e"><init></td></tr></table>>, shape=box]
+k_a385bbee [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DocumentServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_7d837e0d"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_c39634b7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">BlogServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_15dbf5cc"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_d29d0090 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WikiServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_760be197"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_3e11d995 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_a9ff88e7"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_d7ead9b2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">BarterServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_f138584c"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_bf14fe3a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">EventsServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_3b84fb69"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_928ab46b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TaskServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_1e5046ac"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_a489c883 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ListsServerTool<br align="left"/></font></td></tr><tr><td align="left" port="m_d1e0d2bd"><init></td></tr><tr><td align="left" port="m_fce6b61b">#register(...)</td></tr></table>>, shape=box]
+k_9aa7b1a3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">InternalServletModule$BackwardsCompatibleServletContextProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_2e3e1d1"><init></td></tr></table>>, shape=box]
+k_4c3181a3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JpaPersistService$EntityManagerFactoryProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_535448fb"><init></td></tr></table>>, shape=box]
+k_76fbe1f5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MyDataSourceOneSessionProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_dec4736d"><init></td></tr><tr><td align="left" port="m_4835dd36">entityManagerProvider</td></tr></table>>, shape=box]
+k_d7664ccd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomPersistFilter<br align="left"/></font></td></tr><tr><td align="left" port="m_762b5a60"><init></td></tr></table>>, shape=box]
+k_34146061 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a1db3271"><init></td></tr></table>>, shape=box]
+k_23e4713d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GroupManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_7182081"><init></td></tr></table>>, shape=box]
+k_a95a0142 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_540a509d"><init></td></tr></table>>, shape=box]
+k_6e7a86e2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ToolConfigurationManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_80d9bd00"><init></td></tr></table>>, shape=box]
+k_211a147a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContainerManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_4eabfea5"><init></td></tr></table>>, shape=box]
+k_bcc05686 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">LicenseManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_b8b71743"><init></td></tr><tr><td align="left" port="m_702001c6">#setLicenseFinder(...)</td></tr></table>>, shape=box]
+k_4d9521fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetworkManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_155ec683"><init></td></tr></table>>, shape=box]
+k_6d7939e2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">XmppManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_101e3d67"><init></td></tr></table>>, shape=box]
+k_74d84ba7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_5a841140"><init></td></tr></table>>, shape=box]
+k_aa995474 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">RateManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_4f9b8ac6"><init></td></tr></table>>, shape=box]
+k_a1ef436f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nCountryManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_eb61cf5a"><init></td></tr></table>>, shape=box]
+k_d9cc655c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nLanguageManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_eccba8fc"><init></td></tr></table>>, shape=box]
+k_be0df4f2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nTranslationManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_f548b735"><init></td></tr></table>>, shape=box]
+k_8d8763fc [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TagManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_aa2699dc"><init></td></tr></table>>, shape=box]
+k_ce20d85e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">TagUserContentManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_b707ae9a"><init></td></tr></table>>, shape=box]
+k_33ad704e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_11088986"><init></td></tr></table>>, shape=box]
+k_648b0d65 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ExtMediaDescripManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_caed5f27"><init></td></tr></table>>, shape=box]
+k_13cb7cfc [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneWaveManagerDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_d21306a0"><init></td></tr></table>>, shape=box]
+k_710db6c7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SiteRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_94bc12fa"><init></td></tr></table>>, shape=box]
+k_9954bf2a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GroupRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_f8b7308a"><init></td></tr></table>>, shape=box]
+k_ba1ed833 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_6bc89f50"><init></td></tr></table>>, shape=box]
+k_9e1c3bcd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_ecb87f6"><init></td></tr></table>>, shape=box]
+k_3e2c542c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SocialNetworkRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_b56ae5c8"><init></td></tr></table>>, shape=box]
+k_27aebc9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_20e4f4c3"><init></td></tr></table>>, shape=box]
+k_1522a94f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ListsRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_19f5554c"><init></td></tr></table>>, shape=box]
+k_94a0c3b7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StatsRPC<br align="left"/></font></td></tr><tr><td align="left" port="m_29212e6a"><init></td></tr></table>>, shape=box]
+k_78c34902 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserInfoServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_e2253da6"><init></td></tr></table>>, shape=box]
+k_994472f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CreationServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_3ada629b"><init></td></tr></table>>, shape=box]
+k_acd8cfab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AccessRightsServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a352c536"><init></td></tr></table>>, shape=box]
+k_6f494958 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AccessServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_63a0fdbf"><init></td></tr></table>>, shape=box]
+k_d357d6a [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FinderServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_2d8dc501"><init></td></tr></table>>, shape=box]
+k_cabb1647 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StateServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_fc5df405"><init></td></tr></table>>, shape=box]
+k_2da29983 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">I18nTranslationServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_1b1ed846"><init></td></tr></table>>, shape=box]
+k_26f8fb23 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneWaveServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_f42f63ac"><init></td></tr></table>>, shape=box]
+k_1e755bca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MailServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_a2bece9f"><init></td></tr></table>>, shape=box]
+k_75cf6687 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StatsServiceDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_96bb30a1"><init></td></tr></table>>, shape=box]
+k_1ea1ab37 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DozerMapper<br align="left"/></font></td></tr><tr><td align="left" port="m_100deaab"><init></td></tr></table>>, shape=box]
+k_c6d9dbe4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_c72f445d"><init></td></tr></table>>, shape=box]
+k_92a2ff20 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationSenderDefault<br align="left"/></font></td></tr><tr><td align="left" port="m_87014a14"><init></td></tr></table>>, shape=box]
+k_5d423cd2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Injector<br align="left"/></font></td></tr></table>>, shape=box]
+i_5d423cd2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">[unknown source]<br align="left"/></font><font color="#ffffff">Provider<Injector><br align="left"/></font></td></tr></table>>, shape=box]
+k_8b7d57ca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultRESTMethodFinder<br align="left"/></font></td></tr><tr><td align="left" port="m_ed90671"><init></td></tr></table>>, shape=box]
+k_ebdd5943 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">JSONLibRESTSerializer<br align="left"/></font></td></tr><tr><td align="left" port="m_38c8ab78"><init></td></tr></table>>, shape=box]
+k_58b25e68 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DatabaseInitializer<br align="left"/></font></td></tr><tr><td align="left" port="m_1b090b84"><init></td></tr></table>>, shape=box]
+k_a51f5dd5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_ed1988bf"><init></td></tr></table>>, shape=box]
+k_63626340 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">KuneBasicProperties<br align="left"/></font></td></tr><tr><td align="left" port="m_94b0e6a0"><init></td></tr></table>>, shape=box]
+k_bbcefa18 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=wave_server_domain)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_bbcefa18 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost"<br align="left"/></font></td></tr></table>>, shape=box]
+k_a32471fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveBus<br align="left"/></font></td></tr></table>>, shape=box]
+k_deac30bd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomJobFactory<br align="left"/></font></td></tr><tr><td align="left" port="m_d67d262c"><init></td></tr></table>>, shape=box]
+k_d1a9c6cf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">StdSchedulerFactory<br align="left"/></font></td></tr><tr><td align="left" port="m_b26be00d"><init></td></tr></table>>, shape=box]
+k_107a33fb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccountStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_d09b5324 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ChatProperties<br align="left"/></font></td></tr><tr><td align="left" port="m_14070d2b"><init></td></tr></table>>, shape=box]
+k_2dec6c9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomUserRegistrationServlet<br align="left"/></font></td></tr><tr><td align="left" port="m_145a2d5b"><init></td></tr></table>>, shape=box]
+k_ed3bb2d4 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationService<br align="left"/></font></td></tr><tr><td align="left" port="m_f7fa287d"><init></td></tr></table>>, shape=box]
+k_2501bc07 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ReservedWordsRegistry<br align="left"/></font></td></tr><tr><td align="left" port="m_de674d3e"><init></td></tr></table>>, shape=box]
+k_7ec03d78 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CustomWaveClientServlet<br align="left"/></font></td></tr><tr><td align="left" port="m_ab1e54db"><init></td></tr></table>>, shape=box]
+k_4bf632c5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=use_socketio)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_4bf632c5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_f1928bf8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_7034c7d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EventDataConverterManager<br align="left"/></font></td></tr></table>>, shape=box]
+i_7034c7d2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">EventDataConverterModule.java:43<br align="left"/></font><font color="#ffffff">#provideEventDataConverterManager()<br align="left"/></font></td></tr></table>>, shape=box]
+k_5ecb29e3 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=DataApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
+i_5ecb29e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:117<br align="left"/></font><font color="#ffffff">#provideDataApiRegistry(SearchService)<br align="left"/></font></td></tr></table>>, shape=box]
+k_ef3f9bf1 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveRenderer<br align="left"/></font></td></tr></table>>, shape=box]
+k_c5f43fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ConversationUtil<br align="left"/></font></td></tr><tr><td align="left" port="m_cb039b61"><init></td></tr></table>>, shape=box]
+k_66a99b94 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_2721f26b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveletNotificationDispatcher<br align="left"/></font></td></tr><tr><td align="left" port="m_72bb3f17"><init></td></tr></table>>, shape=box]
+k_6b87e61f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAccountStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2bca331e"><init></td></tr></table>>, shape=box]
+k_fcb759e6 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=disable_registration)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_fcb759e6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">false<br align="left"/></font></td></tr></table>>, shape=box]
+k_f3f49125 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotificationHtmlHelper<br align="left"/></font></td></tr><tr><td align="left" port="m_40754071"><init></td></tr></table>>, shape=box]
+k_c1b15a81 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">UserSession<br align="left"/></font></td></tr><tr><td align="left" port="m_4d2e2d30"><init></td></tr></table>>, shape=box]
+k_81bf39cf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SessionManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_bc6356d8"><init></td></tr></table>>, shape=box]
+k_f801e1f1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SearchService<br align="left"/></font></td></tr><tr><td align="left" port="m_22b30b9b"><init></td></tr></table>>, shape=box]
+k_ea6f93fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ThreadedWaveRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_b9a42285"><init></td></tr></table>>, shape=box]
+k_140c93ab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGenerator<br align="left"/></font></td></tr></table>>, shape=box]
+i_140c93ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:106<br align="left"/></font><font color="#ffffff">#provideIdGenerator(String, Seed)<br align="left"/></font></td></tr></table>>, shape=box]
+k_744f2334 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveServerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_3065e839"><init></td></tr></table>>, shape=box]
+k_91161f83 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+k_f7d047b9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertificateManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_50cd9615 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=account_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_50cd9615 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_accounts"<br align="left"/></font></td></tr></table>>, shape=box]
+k_ee7215a0 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">AbsoluteFileDownloadUtils<br align="left"/></font></td></tr><tr><td align="left" port="m_30d2c19e"><init></td></tr></table>>, shape=box]
+k_3e09faf2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_74c3c0d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SearchProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_d63563c2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">Templates<br align="left"/></font></td></tr><tr><td align="left" port="m_c73d3a59"><init></td></tr></table>>, shape=box]
+k_c898c54b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ContentRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_946dead5"><init></td></tr></table>>, shape=box]
+k_33570740 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGeneratorImpl$Seed<br align="left"/></font></td></tr></table>>, shape=box]
+i_33570740 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:126<br align="left"/></font><font color="#ffffff">#provideSeed(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
+k_ca34da5f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=listener_executor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
+i_ca34da5f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:106<br align="left"/></font><font color="#ffffff">ThreadPoolExecutor<br align="left"/></font></td></tr></table>>, shape=box]
+k_9831ace4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_73658105 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveMap<br align="left"/></font></td></tr><tr><td align="left" port="m_a29919e6"><init></td></tr></table>>, shape=box]
+k_c9a11a3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationHost<br align="left"/></font></td></tr><tr><td align="left" port="m_dba23bb0"><init></td></tr></table>>, shape=box]
+k_dbdd067e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CertificateManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_7dc25cb3"><init></td></tr></table>>, shape=box]
+k_a0ee12e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">HashSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_54776227"><init></td></tr></table>>, shape=box]
+k_5293dba6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MemorySearchProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_5b65d1b7"><init></td></tr></table>>, shape=box]
+k_529b935b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">Markup<br align="left"/></font></td></tr><tr><td align="left" port="m_6e9c9f8f"><init></td></tr></table>>, shape=box]
+k_7b520ec6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">GadgetRenderer<br align="left"/></font></td></tr><tr><td align="left" port="m_4e215f96"><init></td></tr></table>>, shape=box]
+k_c3234f04 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SecureRandom<br align="left"/></font></td></tr></table>>, shape=box]
+i_c3234f04 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:112<br align="left"/></font><font color="#ffffff">#provideSecureRandom()<br align="left"/></font></td></tr></table>>, shape=box]
+k_c5aa0274 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationRemote<br align="left"/></font></td></tr><tr><td align="left" port="m_8c82dc4e"><init></td></tr></table>>, shape=box]
+k_218c2334 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RemoteWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+i_218c2334 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideRemoteWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
+k_7b747c12 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LocalWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+i_7b747c12 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideLocalWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
+k_ab27ace4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletNotificationSubscriber<br align="left"/></font></td></tr></table>>, shape=box]
+k_6d08d305 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveDigester<br align="left"/></font></td></tr><tr><td align="left" port="m_3d5a1b27"><init></td></tr></table>>, shape=box]
+k_2050c643 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaAndSnapshotStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_52a8a871 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertPathStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_7c3a84a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SignatureHandler<br align="left"/></font></td></tr></table>>, shape=box]
+k_28873eb1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveSignatureVerifier<br align="left"/></font></td></tr><tr><td align="left" port="m_a87b4d2a"><init></td></tr></table>>, shape=box]
+k_c3c30021 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_c3c30021 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_4ff24fca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PerUserWaveViewSubscriber<br align="left"/></font></td></tr><tr><td align="left" port="m_bf9bd871"><init></td></tr></table>>, shape=box]
+k_556cc59f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_a7dbb996 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DeltaStoreBasedSnapshotStore<br align="left"/></font></td></tr><tr><td align="left" port="m_f7ad7a10"><init></td></tr></table>>, shape=box]
+k_928bb0fd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileSignerInfoStore<br align="left"/></font></td></tr><tr><td align="left" port="m_d805501f"><init></td></tr></table>>, shape=box]
+k_70d75d3e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NonSigningSignatureHandler$NonSigningSignatureHandlerProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_6c0a518"><init></td></tr></table>>, shape=box]
+k_e19e23b5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveCertPathValidator<br align="left"/></font></td></tr></table>>, shape=box]
+i_e19e23b5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideWaveCertPathValidator(boolean, TimeSource, VerifiedCertChainCache, TrustRootsProvider)<br align="left"/></font></td></tr></table>>, shape=box]
+k_8823a3e5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDeltaStore<br align="left"/></font></td></tr><tr><td align="left" port="m_408652f3"><init></td></tr></table>>, shape=box]
+k_4481b49f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=signer_info_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_4481b49f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_certificates"<br align="left"/></font></td></tr></table>>, shape=box]
+k_6bad9e01 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TrustRootsProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_2845e07 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">VerifiedCertChainCache<br align="left"/></font></td></tr></table>>, shape=box]
+k_4e3cfd49 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TimeSource<br align="left"/></font></td></tr></table>>, shape=box]
+k_ae676420 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_signer_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_ae676420 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_f7c49aa [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=delta_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_f7c49aa [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_deltas"<br align="left"/></font></td></tr></table>>, shape=box]
+k_2288b0a9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTrustRootsProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_518d5280"><init></td></tr></table>>, shape=box]
+k_d073cdd5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultCacheImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_5a8716ec"><init></td></tr></table>>, shape=box]
+k_fbd16a34 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTimeSource<br align="left"/></font></td></tr><tr><td align="left" port="m_24dcbc5e"><init></td></tr></table>>, shape=box]
+k_c92e8c4d -> k_3208fff2 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2ca5daf6 -> k_ef0fca5f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_57676221 -> k_3e59236a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c2892102 -> k_9aa7b1a3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_3208fff2 -> i_3208fff2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_ef0fca5f -> i_ef0fca5f [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_e44414fe -> i_e44414fe [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_77c04a82 -> i_77c04a82 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_d7819d58 -> i_d7819d58 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ec0eec1 -> i_ec0eec1 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_3025761f -> i_3025761f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4af18928 -> k_ae1a7ede [style=dashed, arrowtail=none, arrowhead=onormal]
+k_34d8ea68 -> k_ae1a7ede [style=dashed, arrowtail=none, arrowhead=onormal]
+k_bd577e32 -> k_ae1a7ede [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_efaafb9a -> k_4c3181a3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_ed3850fe -> i_ed3850fe [style=dashed, arrowtail=none, arrowhead=onormal]
+k_50c5378e -> i_50c5378e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e32fd65a -> i_e32fd65a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c52e8b1f -> i_c52e8b1f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f190cf1a -> i_f190cf1a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_9e4d04a6 -> i_9e4d04a6 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e0cca2c0 -> i_e0cca2c0 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_571c5d0 -> i_571c5d0 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d05d4d -> i_d05d4d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a599624d -> i_a599624d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_23d1709 -> i_23d1709 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_975262ab -> i_975262ab [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f7b6406d -> k_76fbe1f5 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_779877f7 -> i_779877f7 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_91a74692 -> k_d7664ccd [style=dashed, arrowtail=none, arrowhead=onormal]
+k_23eb5148 -> i_23eb5148 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_713ad964 -> k_34146061 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_38aee1f8 -> k_23e4713d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_157473fe -> k_a95a0142 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1acc6318 -> k_6e7a86e2 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a4692fd8 -> k_211a147a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_74d7c200 -> k_bcc05686 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_90277b38 -> k_4d9521fe [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4984b5f -> k_6d7939e2 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f4865409 -> k_74d84ba7 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a164c085 -> k_aa995474 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_313e6bb7 -> k_a1ef436f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1e55cee9 -> k_d9cc655c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2b3b226a -> k_be0df4f2 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d1eae4dc -> k_8d8763fc [style=dashed, arrowtail=none, arrowhead=onormal]
+k_19107f5b -> k_ce20d85e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a0509078 -> k_33ad704e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_45bff81a -> k_648b0d65 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f2e2f2a7 -> k_13cb7cfc [style=dashed, arrowtail=none, arrowhead=onormal]
+k_11ed20eb -> k_710db6c7 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b8cb81fe -> k_9954bf2a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_8453f77 -> k_ba1ed833 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_3c71cd07 -> k_9e1c3bcd [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4d085577 -> k_3e2c542c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_cdb92fce -> k_27aebc9 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d1806ccf -> k_1522a94f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_94078109 -> k_94a0c3b7 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f4da46d1 -> k_78c34902 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ab46457f -> k_994472f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f99f2b86 -> k_acd8cfab [style=dashed, arrowtail=none, arrowhead=onormal]
+k_8636f4ac -> k_6f494958 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7ecc0a55 -> k_d357d6a [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a66e0dc0 -> k_cabb1647 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_24961ca8 -> k_2da29983 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b81a1c1 -> k_2da29983 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_aa3c53ae -> k_26f8fb23 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2eb97c23 -> k_1e755bca [style=dashed, arrowtail=none, arrowhead=onormal]
+k_5fe7fac5 -> k_75cf6687 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_9f28c448 -> k_1ea1ab37 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_48c0beec -> k_c6d9dbe4 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_5676f2ec -> k_92a2ff20 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_3edb753c -> i_3edb753c [style=dashed, arrowtail=none, arrowhead=onormal]
+i_3edb753c:m_ea7d63:e -> k_5d423cd2 [style=solid, arrowtail=none, arrowhead=normal]
+k_e518eb99 -> k_8b7d57ca [style=dashed, arrowtail=none, arrowhead=onormal]
+k_79cc66c6 -> k_ebdd5943 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_3e59236a:m_84fd56bb:e -> k_5d423cd2 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e59236a:m_84fd56bb:e -> k_e20aa4f9 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e59236a:m_84fd56bb:e -> k_c2892102 [style=solid, arrowtail=none, arrowhead=normal]
+k_e20aa4f9:m_c910e7a6:e -> k_5d423cd2 [style=solid, arrowtail=none, arrowhead=normal]
+k_ae1a7ede:m_39b7e4fa:e -> k_ec0eec1 [style=solid, arrowtail=none, arrowhead=normal]
+k_ae1a7ede:m_39b7e4fa:e -> k_3025761f [style=solid, arrowtail=none, arrowhead=normal]
+k_33bd1bc8:m_724ea93f:e -> k_4af18928 [style=solid, arrowtail=none, arrowhead=normal]
+k_9b3b57fa:m_b7f26df5:e -> k_58b25e68 [style=solid, arrowtail=none, arrowhead=normal]
+k_b8b1fb55:m_b4a6ea93:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa5efde3:m_fbf8f608:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa5efde3:m_75d06daa:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa5efde3:m_9a2f00cb:e -> k_8636f4ac [style=solid, arrowtail=none, arrowhead=normal]
+k_aa5efde3:m_3f42d6ac:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_aa5efde3:m_55fe5eeb:e -> k_a0509078 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa5efde3:m_f73bea64:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa5efde3:m_9359f431:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_3fdfa1f3:m_e765dc67:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_3fdfa1f3:m_1457c827:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_3fdfa1f3:m_116dcc06:e -> k_a51f5dd5 [style=solid, arrowtail=none, arrowhead=normal]
+k_f073050a:m_1d803b88:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_f073050a:m_1d803b88:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_f073050a:m_1d803b88:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_cc3648a:m_e17f200f:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_e01da407:m_ffdcacd3:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_e01da407:m_ffdcacd3:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
+k_96a0f6e3:m_dadc2f23:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
+k_96a0f6e3:m_dadc2f23:e -> k_4eb32c88 [style=solid, arrowtail=none, arrowhead=normal]
+k_96a0f6e3:m_dadc2f23:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
+k_96a0f6e3:m_dadc2f23:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
+k_96a0f6e3:m_dadc2f23:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
+k_96a0f6e3:m_dadc2f23:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
+k_4eb32c88:m_6683cfea:e -> k_5676f2ec [style=solid, arrowtail=none, arrowhead=normal]
+k_888ff559:m_6e568d1e:e -> k_d1a9c6cf [style=solid, arrowtail=none, arrowhead=normal]
+k_888ff559:m_6e568d1e:e -> k_deac30bd [style=solid, arrowtail=none, arrowhead=normal]
+k_a385bbee:m_7d837e0d:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_a385bbee:m_7d837e0d:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_a385bbee:m_7d837e0d:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
+k_a385bbee:m_7d837e0d:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_a385bbee:m_7d837e0d:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_a385bbee:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_c39634b7:m_15dbf5cc:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_c39634b7:m_15dbf5cc:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_c39634b7:m_15dbf5cc:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
+k_c39634b7:m_15dbf5cc:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_c39634b7:m_15dbf5cc:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_c39634b7:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29d0090:m_760be197:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_d29d0090:m_760be197:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29d0090:m_760be197:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29d0090:m_760be197:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_d29d0090:m_760be197:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_d29d0090:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e11d995:m_a9ff88e7:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e11d995:m_a9ff88e7:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_3e11d995:m_a9ff88e7:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e11d995:m_a9ff88e7:e -> k_74d84ba7 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e11d995:m_a9ff88e7:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e11d995:m_a9ff88e7:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_3e11d995:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_d7ead9b2:m_f138584c:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_d7ead9b2:m_f138584c:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_d7ead9b2:m_f138584c:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
+k_d7ead9b2:m_f138584c:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_d7ead9b2:m_f138584c:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_d7ead9b2:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_bf14fe3a:m_3b84fb69:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_bf14fe3a:m_3b84fb69:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_bf14fe3a:m_3b84fb69:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
+k_bf14fe3a:m_3b84fb69:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_bf14fe3a:m_3b84fb69:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_bf14fe3a:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_928ab46b:m_1e5046ac:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_928ab46b:m_1e5046ac:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_928ab46b:m_1e5046ac:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
+k_928ab46b:m_1e5046ac:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_928ab46b:m_1e5046ac:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_928ab46b:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_a489c883:m_d1e0d2bd:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_a489c883:m_d1e0d2bd:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_a489c883:m_d1e0d2bd:e -> k_1acc6318 [style=solid, arrowtail=none, arrowhead=normal]
+k_a489c883:m_d1e0d2bd:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_a489c883:m_d1e0d2bd:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_a489c883:m_d1e0d2bd:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
+k_a489c883:m_d1e0d2bd:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_a489c883:m_fce6b61b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_4c3181a3:m_535448fb:e -> k_ae1a7ede [style=solid, arrowtail=none, arrowhead=normal]
+k_76fbe1f5:m_4835dd36:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_d7664ccd:m_762b5a60:e -> k_34d8ea68 [style=solid, arrowtail=none, arrowhead=normal]
+k_d7664ccd:m_762b5a60:e -> k_4af18928 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_313e6bb7 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_4984b5f [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_d09b5324 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_b81a1c1 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_2dec6c9 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_34146061:m_a1db3271:e -> k_ed3bb2d4 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_c52e8b1f [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_74d7c200 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_571c5d0 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_a0509078 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_23e4713d:m_7182081:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_50c5378e [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_ed3850fe [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_7ecc0a55 [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_9e4d04a6 [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_19107f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_a95a0142:m_540a509d:e -> k_8c7fc3dd [style=solid, arrowtail=none, arrowhead=normal]
+k_6e7a86e2:m_80d9bd00:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_211a147a:m_4eabfea5:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_211a147a:m_4eabfea5:e -> k_50c5378e [style=solid, arrowtail=none, arrowhead=normal]
+k_211a147a:m_4eabfea5:e -> k_ed3850fe [style=solid, arrowtail=none, arrowhead=normal]
+k_bcc05686:m_b8b71743:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_bcc05686:m_b8b71743:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
+k_bcc05686:m_b8b71743:e -> k_571c5d0 [style=solid, arrowtail=none, arrowhead=normal]
+k_bcc05686:m_702001c6:e -> k_571c5d0 [style=solid, arrowtail=none, arrowhead=normal]
+k_4d9521fe:m_155ec683:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_4d9521fe:m_155ec683:e -> k_c52e8b1f [style=solid, arrowtail=none, arrowhead=normal]
+k_4d9521fe:m_155ec683:e -> k_f99f2b86 [style=solid, arrowtail=none, arrowhead=normal]
+k_4d9521fe:m_155ec683:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
+k_6d7939e2:m_101e3d67:e -> k_d09b5324 [style=solid, arrowtail=none, arrowhead=normal]
+k_74d84ba7:m_5a841140:e -> k_4984b5f [style=solid, arrowtail=none, arrowhead=normal]
+k_74d84ba7:m_5a841140:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_74d84ba7:m_5a841140:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_aa995474:m_4f9b8ac6:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_aa995474:m_4f9b8ac6:e -> k_d05d4d [style=solid, arrowtail=none, arrowhead=normal]
+k_a1ef436f:m_eb61cf5a:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_a1ef436f:m_eb61cf5a:e -> k_f190cf1a [style=solid, arrowtail=none, arrowhead=normal]
+k_d9cc655c:m_eccba8fc:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_d9cc655c:m_eccba8fc:e -> k_9e4d04a6 [style=solid, arrowtail=none, arrowhead=normal]
+k_be0df4f2:m_f548b735:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_be0df4f2:m_f548b735:e -> k_e0cca2c0 [style=solid, arrowtail=none, arrowhead=normal]
+k_be0df4f2:m_f548b735:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
+k_8d8763fc:m_aa2699dc:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_8d8763fc:m_aa2699dc:e -> k_a599624d [style=solid, arrowtail=none, arrowhead=normal]
+k_ce20d85e:m_b707ae9a:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_ce20d85e:m_b707ae9a:e -> k_d1eae4dc [style=solid, arrowtail=none, arrowhead=normal]
+k_ce20d85e:m_b707ae9a:e -> k_23d1709 [style=solid, arrowtail=none, arrowhead=normal]
+k_648b0d65:m_caed5f27:e -> k_779877f7 [style=solid, arrowtail=none, arrowhead=normal]
+k_648b0d65:m_caed5f27:e -> k_e32fd65a [style=solid, arrowtail=none, arrowhead=normal]
+k_13cb7cfc:m_d21306a0:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
+k_13cb7cfc:m_d21306a0:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
+k_13cb7cfc:m_d21306a0:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_13cb7cfc:m_d21306a0:e -> k_c52e8b1f [style=solid, arrowtail=none, arrowhead=normal]
+k_13cb7cfc:m_d21306a0:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
+k_13cb7cfc:m_d21306a0:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_f4da46d1 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_74d7c200 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_d09b5324 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_313e6bb7 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_710db6c7:m_94bc12fa:e -> k_45bff81a [style=solid, arrowtail=none, arrowhead=normal]
+k_9954bf2a:m_f8b7308a:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_9954bf2a:m_f8b7308a:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_9954bf2a:m_f8b7308a:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_9954bf2a:m_f8b7308a:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
+k_9954bf2a:m_f8b7308a:e -> k_2501bc07 [style=solid, arrowtail=none, arrowhead=normal]
+k_9954bf2a:m_f8b7308a:e -> k_ba1ed833 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_7ecc0a55 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_8636f4ac [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_f99f2b86 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_a66e0dc0 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_ab46457f [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_19107f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_f4865409 [style=solid, arrowtail=none, arrowhead=normal]
+k_ba1ed833:m_6bc89f50:e -> k_f2e2f2a7 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_c1b15a81 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_4bf632c5 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_f4da46d1 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_f1928bf8 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_7ec03d78 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_2501bc07 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_ba1ed833 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_9e1c3bcd:m_ecb87f6:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
+k_3e2c542c:m_b56ae5c8:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e2c542c:m_b56ae5c8:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e2c542c:m_b56ae5c8:e -> k_90277b38 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e2c542c:m_b56ae5c8:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e2c542c:m_b56ae5c8:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
+k_3e2c542c:m_b56ae5c8:e -> k_ed3bb2d4 [style=solid, arrowtail=none, arrowhead=normal]
+k_27aebc9:m_20e4f4c3:e -> k_3208fff2 [style=solid, arrowtail=none, arrowhead=normal]
+k_27aebc9:m_20e4f4c3:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_27aebc9:m_20e4f4c3:e -> k_2b3b226a [style=solid, arrowtail=none, arrowhead=normal]
+k_27aebc9:m_20e4f4c3:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
+k_27aebc9:m_20e4f4c3:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
+k_1522a94f:m_19f5554c:e -> k_ba1ed833 [style=solid, arrowtail=none, arrowhead=normal]
+k_1522a94f:m_19f5554c:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_1522a94f:m_19f5554c:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_94a0c3b7:m_29212e6a:e -> k_5fe7fac5 [style=solid, arrowtail=none, arrowhead=normal]
+k_94a0c3b7:m_29212e6a:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_94a0c3b7:m_29212e6a:e -> k_9f28c448 [style=solid, arrowtail=none, arrowhead=normal]
+k_78c34902:m_e2253da6:e -> k_90277b38 [style=solid, arrowtail=none, arrowhead=normal]
+k_78c34902:m_e2253da6:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_994472f:m_3ada629b:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_994472f:m_3ada629b:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_994472f:m_3ada629b:e -> k_b8b1fb55 [style=solid, arrowtail=none, arrowhead=normal]
+k_6f494958:m_63a0fdbf:e -> k_7ecc0a55 [style=solid, arrowtail=none, arrowhead=normal]
+k_6f494958:m_63a0fdbf:e -> k_f99f2b86 [style=solid, arrowtail=none, arrowhead=normal]
+k_d357d6a:m_2d8dc501:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_d357d6a:m_2d8dc501:e -> k_a4692fd8 [style=solid, arrowtail=none, arrowhead=normal]
+k_d357d6a:m_2d8dc501:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_d357d6a:m_2d8dc501:e -> k_a164c085 [style=solid, arrowtail=none, arrowhead=normal]
+k_cabb1647:m_fc5df405:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_cabb1647:m_fc5df405:e -> k_90277b38 [style=solid, arrowtail=none, arrowhead=normal]
+k_cabb1647:m_fc5df405:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_cabb1647:m_fc5df405:e -> k_19107f5b [style=solid, arrowtail=none, arrowhead=normal]
+k_cabb1647:m_fc5df405:e -> k_f99f2b86 [style=solid, arrowtail=none, arrowhead=normal]
+k_cabb1647:m_fc5df405:e -> k_24961ca8 [style=solid, arrowtail=none, arrowhead=normal]
+k_cabb1647:m_fc5df405:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
+k_2da29983:m_1b1ed846:e -> k_2b3b226a [style=solid, arrowtail=none, arrowhead=normal]
+k_2da29983:m_1b1ed846:e -> k_c6d9dbe4 [style=solid, arrowtail=none, arrowhead=normal]
+k_2da29983:m_1b1ed846:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
+k_26f8fb23:m_f42f63ac:e -> k_7034c7d2 [style=solid, arrowtail=none, arrowhead=normal]
+k_26f8fb23:m_f42f63ac:e -> k_5ecb29e3 [style=solid, arrowtail=none, arrowhead=normal]
+k_26f8fb23:m_f42f63ac:e -> k_66a99b94 [style=solid, arrowtail=none, arrowhead=normal]
+k_26f8fb23:m_f42f63ac:e -> k_c5f43fe [style=solid, arrowtail=none, arrowhead=normal]
+k_26f8fb23:m_f42f63ac:e -> k_e01da407 [style=solid, arrowtail=none, arrowhead=normal]
+k_26f8fb23:m_f42f63ac:e -> k_ef3f9bf1 [style=solid, arrowtail=none, arrowhead=normal]
+k_26f8fb23:m_f42f63ac:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_1e755bca:m_a2bece9f:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_75cf6687:m_96bb30a1:e -> k_975262ab [style=solid, arrowtail=none, arrowhead=normal]
+k_75cf6687:m_96bb30a1:e -> k_c52e8b1f [style=solid, arrowtail=none, arrowhead=normal]
+k_75cf6687:m_96bb30a1:e -> k_50c5378e [style=solid, arrowtail=none, arrowhead=normal]
+k_c6d9dbe4:m_c72f445d:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
+k_c6d9dbe4:m_c72f445d:e -> k_c1b15a81 [style=solid, arrowtail=none, arrowhead=normal]
+k_92a2ff20:m_87014a14:e -> k_2eb97c23 [style=solid, arrowtail=none, arrowhead=normal]
+k_92a2ff20:m_87014a14:e -> k_aa3c53ae [style=solid, arrowtail=none, arrowhead=normal]
+k_92a2ff20:m_87014a14:e -> k_4984b5f [style=solid, arrowtail=none, arrowhead=normal]
+k_92a2ff20:m_87014a14:e -> k_b81a1c1 [style=solid, arrowtail=none, arrowhead=normal]
+k_92a2ff20:m_87014a14:e -> k_48c0beec [style=solid, arrowtail=none, arrowhead=normal]
+k_92a2ff20:m_87014a14:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_5d423cd2 -> i_5d423cd2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_58b25e68:m_1b090b84:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
+k_58b25e68:m_1b090b84:e -> k_713ad964 [style=solid, arrowtail=none, arrowhead=normal]
+k_58b25e68:m_1b090b84:e -> k_38aee1f8 [style=solid, arrowtail=none, arrowhead=normal]
+k_58b25e68:m_1b090b84:e -> k_74d7c200 [style=solid, arrowtail=none, arrowhead=normal]
+k_58b25e68:m_1b090b84:e -> k_1e55cee9 [style=solid, arrowtail=none, arrowhead=normal]
+k_58b25e68:m_1b090b84:e -> k_313e6bb7 [style=solid, arrowtail=none, arrowhead=normal]
+k_58b25e68:m_1b090b84:e -> k_2b3b226a [style=solid, arrowtail=none, arrowhead=normal]
+k_58b25e68:m_1b090b84:e -> k_157473fe [style=solid, arrowtail=none, arrowhead=normal]
+k_58b25e68:m_1b090b84:e -> k_2da29983 [style=solid, arrowtail=none, arrowhead=normal]
+k_63626340:m_94b0e6a0:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbcefa18 -> i_bbcefa18 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a32471fe -> k_2721f26b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_107a33fb -> k_6b87e61f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d09b5324:m_14070d2b:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_2dec6c9:m_145a2d5b:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
+k_2dec6c9:m_145a2d5b:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_2dec6c9:m_145a2d5b:e -> k_fcb759e6 [style=solid, arrowtail=none, arrowhead=normal]
+k_ed3bb2d4:m_f7fa287d:e -> k_4eb32c88 [style=solid, arrowtail=none, arrowhead=normal]
+k_ed3bb2d4:m_f7fa287d:e -> k_f3f49125 [style=solid, arrowtail=none, arrowhead=normal]
+k_2501bc07:m_de674d3e:e -> k_d7819d58 [style=solid, arrowtail=none, arrowhead=normal]
+k_7ec03d78:m_ab1e54db:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_7ec03d78:m_ab1e54db:e -> k_4bf632c5 [style=solid, arrowtail=none, arrowhead=normal]
+k_7ec03d78:m_ab1e54db:e -> k_f1928bf8 [style=solid, arrowtail=none, arrowhead=normal]
+k_4bf632c5 -> i_4bf632c5 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f1928bf8 -> k_81bf39cf [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7034c7d2 -> i_7034c7d2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_5ecb29e3 -> i_5ecb29e3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_5ecb29e3:header:e -> k_f801e1f1 [style=solid, arrowtail=none, arrowhead=normal]
+k_ef3f9bf1 -> k_ea6f93fe [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c5f43fe:m_cb039b61:e -> k_140c93ab [style=solid, arrowtail=none, arrowhead=normal]
+k_66a99b94 -> k_744f2334 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2721f26b:m_72bb3f17:e -> k_f7d047b9 [style=solid, arrowtail=none, arrowhead=normal]
+k_2721f26b:m_72bb3f17:e -> k_91161f83 [style=solid, arrowtail=none, arrowhead=normal]
+k_6b87e61f:m_2bca331e:e -> k_50cd9615 [style=solid, arrowtail=none, arrowhead=normal]
+k_fcb759e6 -> i_fcb759e6 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f3f49125:m_40754071:e -> k_ee7215a0 [style=solid, arrowtail=none, arrowhead=normal]
+k_81bf39cf:m_bc6356d8:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
+k_81bf39cf:m_bc6356d8:e -> k_3e09faf2 [style=solid, arrowtail=none, arrowhead=normal]
+k_f801e1f1:m_22b30b9b:e -> k_74c3c0d2 [style=solid, arrowtail=none, arrowhead=normal]
+k_ea6f93fe:m_b9a42285:e -> k_d63563c2 [style=solid, arrowtail=none, arrowhead=normal]
+k_ea6f93fe:m_b9a42285:e -> k_c898c54b [style=solid, arrowtail=none, arrowhead=normal]
+k_ea6f93fe:m_b9a42285:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_140c93ab -> i_140c93ab [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_140c93ab:header:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+i_140c93ab:header:e -> k_33570740 [style=solid, arrowtail=none, arrowhead=normal]
+k_744f2334:m_3065e839:e -> k_ca34da5f [style=solid, arrowtail=none, arrowhead=normal]
+k_744f2334:m_3065e839:e -> k_f7d047b9 [style=solid, arrowtail=none, arrowhead=normal]
+k_744f2334:m_3065e839:e -> k_9831ace4 [style=solid, arrowtail=none, arrowhead=normal]
+k_744f2334:m_3065e839:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
+k_91161f83 -> k_c9a11a3 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f7d047b9 -> k_dbdd067e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_50cd9615 -> i_50cd9615 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ee7215a0:m_30d2c19e:e -> k_63626340 [style=solid, arrowtail=none, arrowhead=normal]
+k_3e09faf2 -> k_a0ee12e3 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_74c3c0d2 -> k_5293dba6 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d63563c2:m_c73d3a59:e -> k_529b935b [style=solid, arrowtail=none, arrowhead=normal]
+k_c898c54b:m_946dead5:e -> k_7b520ec6 [style=solid, arrowtail=none, arrowhead=normal]
+k_c898c54b:m_946dead5:e -> k_ef3f9bf1 [style=solid, arrowtail=none, arrowhead=normal]
+k_33570740 -> i_33570740 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_33570740:header:e -> k_c3234f04 [style=solid, arrowtail=none, arrowhead=normal]
+k_ca34da5f -> i_ca34da5f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_9831ace4 -> k_c5aa0274 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_73658105:m_a29919e6:e -> k_2050c643 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_ab27ace4 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_7b747c12 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_218c2334 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_6d08d305 [style=solid, arrowtail=none, arrowhead=normal]
+k_dbdd067e:m_7dc25cb3:e -> k_c3c30021 [style=solid, arrowtail=none, arrowhead=normal]
+k_dbdd067e:m_7dc25cb3:e -> k_7c3a84a [style=solid, arrowtail=none, arrowhead=normal]
+k_dbdd067e:m_7dc25cb3:e -> k_28873eb1 [style=solid, arrowtail=none, arrowhead=normal]
+k_dbdd067e:m_7dc25cb3:e -> k_52a8a871 [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_6d08d305 [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_4ff24fca [style=solid, arrowtail=none, arrowhead=normal]
+k_7b520ec6:m_4e215f96:e -> k_3208fff2 [style=solid, arrowtail=none, arrowhead=normal]
+k_c3234f04 -> i_c3234f04 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_218c2334 -> i_218c2334 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_218c2334:header:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
+k_7b747c12 -> i_7b747c12 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_7b747c12:header:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
+k_ab27ace4 -> k_2721f26b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6d08d305:m_3d5a1b27:e -> k_c5f43fe [style=solid, arrowtail=none, arrowhead=normal]
+k_2050c643 -> k_a7dbb996 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_52a8a871 -> k_928bb0fd [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7c3a84a -> k_70d75d3e [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_28873eb1:m_a87b4d2a:e -> k_e19e23b5 [style=solid, arrowtail=none, arrowhead=normal]
+k_28873eb1:m_a87b4d2a:e -> k_52a8a871 [style=solid, arrowtail=none, arrowhead=normal]
+k_c3c30021 -> i_c3c30021 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4ff24fca:m_bf9bd871:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
+k_556cc59f -> k_8823a3e5 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_a7dbb996:m_f7ad7a10:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
+k_928bb0fd:m_d805501f:e -> k_4481b49f [style=solid, arrowtail=none, arrowhead=normal]
+k_70d75d3e:m_6c0a518:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_e19e23b5 -> i_e19e23b5 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_e19e23b5:header:e -> k_ae676420 [style=solid, arrowtail=none, arrowhead=normal]
+i_e19e23b5:header:e -> k_4e3cfd49 [style=solid, arrowtail=none, arrowhead=normal]
+i_e19e23b5:header:e -> k_2845e07 [style=solid, arrowtail=none, arrowhead=normal]
+i_e19e23b5:header:e -> k_6bad9e01 [style=solid, arrowtail=none, arrowhead=normal]
+k_8823a3e5:m_408652f3:e -> k_f7c49aa [style=solid, arrowtail=none, arrowhead=normal]
+k_4481b49f -> i_4481b49f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6bad9e01 -> k_2288b0a9 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2845e07 -> k_d073cdd5 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4e3cfd49 -> k_fbd16a34 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ae676420 -> i_ae676420 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f7c49aa -> i_f7c49aa [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d073cdd5:m_5a8716ec:e -> k_4e3cfd49 [style=solid, arrowtail=none, arrowhead=normal]
+}
Added: trunk/docs/kune-guice-graph.png
===================================================================
(Binary files differ)
Property changes on: trunk/docs/kune-guice-graph.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/docs/kune-guice-graph.svg
===================================================================
--- trunk/docs/kune-guice-graph.svg (rev 0)
+++ trunk/docs/kune-guice-graph.svg 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,3040 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: injector Pages: 1 -->
+<svg width="8571pt" height="3366pt"
+ viewBox="0.00 0.00 8571.13 3366.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 3362)">
+<title>injector</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-3362 8568.13,-3362 8568.13,5 -4,5"/>
+<!-- k_95598cb0 -->
+<g id="node1" class="node"><title>k_95598cb0</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6083.13,-1288 5965.13,-1288 5965.13,-1252 6083.13,-1252 6083.13,-1288"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5966.13,-1257 5966.13,-1282 6083.13,-1282 6083.13,-1257 5966.13,-1257"/>
+<text text-anchor="start" x="5971.13" y="-1266.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ServletRequest</text>
+</g>
+<!-- k_fd02c51c -->
+<g id="node5" class="node"><title>k_fd02c51c</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6011.13,-1196 5863.13,-1196 5863.13,-1160 6011.13,-1160 6011.13,-1196"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5864.13,-1165 5864.13,-1190 6011.13,-1190 6011.13,-1165 5864.13,-1165"/>
+<text text-anchor="start" x="5869.13" y="-1174.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">HttpServletRequest</text>
+</g>
+<!-- k_95598cb0->k_fd02c51c -->
+<g id="edge2" class="edge"><title>k_95598cb0->k_fd02c51c</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6006.94,-1251.82C5993.95,-1238.09 5975.95,-1219.05 5961.48,-1203.75"/>
+<polygon fill="none" stroke="black" points="5963.7,-1201 5954.28,-1196.14 5958.61,-1205.81 5963.7,-1201"/>
+</g>
+<!-- k_13ba34b9 -->
+<g id="node2" class="node"><title>k_13ba34b9</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6411.13,-3348 6283.13,-3348 6283.13,-3312 6411.13,-3312 6411.13,-3348"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6284.13,-3317 6284.13,-3342 6410.13,-3342 6410.13,-3317 6284.13,-3317"/>
+<text text-anchor="start" x="6289.13" y="-3326.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ServletResponse</text>
+</g>
+<!-- k_78bb7008 -->
+<g id="node7" class="node"><title>k_78bb7008</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6426.13,-3256 6268.13,-3256 6268.13,-3220 6426.13,-3220 6426.13,-3256"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6269.13,-3225 6269.13,-3250 6425.13,-3250 6425.13,-3225 6269.13,-3225"/>
+<text text-anchor="start" x="6274.13" y="-3234.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">HttpServletResponse</text>
+</g>
+<!-- k_13ba34b9->k_78bb7008 -->
+<g id="edge4" class="edge"><title>k_13ba34b9->k_78bb7008</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6347.13,-3311.82C6347.13,-3298.85 6347.13,-3281.13 6347.13,-3266.31"/>
+<polygon fill="none" stroke="black" points="6350.63,-3266.14 6347.13,-3256.14 6343.63,-3266.14 6350.63,-3266.14"/>
+</g>
+<!-- k_967da645 -->
+<g id="node3" class="node"><title>k_967da645</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6719.13,-3348 6617.13,-3348 6617.13,-3312 6719.13,-3312 6719.13,-3348"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6618.13,-3317 6618.13,-3342 6719.13,-3342 6719.13,-3317 6618.13,-3317"/>
+<text text-anchor="start" x="6623.13" y="-3326.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">FilterPipeline</text>
+</g>
+<!-- k_f8162078 -->
+<!-- k_967da645->k_f8162078 -->
+<g id="edge6" class="edge"><title>k_967da645->k_f8162078</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6668.13,-3311.82C6668.13,-3301.51 6668.13,-3288.22 6668.13,-3275.76"/>
+<polygon fill="none" stroke="black" points="6671.63,-3275.57 6668.13,-3265.57 6664.63,-3275.57 6671.63,-3275.57"/>
+</g>
+<!-- k_6611e204 -->
+<g id="node4" class="node"><title>k_6611e204</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6637.13,-3157 6519.13,-3157 6519.13,-3121 6637.13,-3121 6637.13,-3157"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6520.13,-3126 6520.13,-3151 6637.13,-3151 6637.13,-3126 6520.13,-3126"/>
+<text text-anchor="start" x="6525.13" y="-3135.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ServletContext</text>
+</g>
+<!-- k_a5f0659e -->
+<!-- k_6611e204->k_a5f0659e -->
+<g id="edge8" class="edge"><title>k_6611e204->k_a5f0659e</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6577.63,-3120.51C6577.3,-3108.06 6576.85,-3091.05 6576.41,-3074.95"/>
+<polygon fill="none" stroke="black" points="6579.64,-3064.66 6575.87,-3054.76 6572.64,-3064.85 6579.64,-3064.66"/>
+<polygon fill="none" stroke="black" points="6579.91,-3074.66 6576.14,-3064.75 6572.91,-3074.84 6579.91,-3074.66"/>
+</g>
+<!-- i_fd02c51c -->
+<!-- k_fd02c51c->i_fd02c51c -->
+<g id="edge10" class="edge"><title>k_fd02c51c->i_fd02c51c</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5937.13,-1159.82C5937.13,-1150.7 5937.13,-1139.23 5937.13,-1128.07"/>
+<polygon fill="none" stroke="black" points="5940.63,-1117.7 5937.13,-1107.7 5933.63,-1117.7 5940.63,-1117.7"/>
+<polygon fill="none" stroke="black" points="5940.63,-1127.7 5937.13,-1117.7 5933.63,-1127.7 5940.63,-1127.7"/>
+</g>
+<!-- i_78bb7008 -->
+<!-- k_78bb7008->i_78bb7008 -->
+<g id="edge12" class="edge"><title>k_78bb7008->i_78bb7008</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6347.13,-3219.84C6347.13,-3208.93 6347.13,-3194.55 6347.13,-3180.96"/>
+<polygon fill="none" stroke="black" points="6350.63,-3170.84 6347.13,-3160.84 6343.63,-3170.84 6350.63,-3170.84"/>
+<polygon fill="none" stroke="black" points="6350.63,-3180.84 6347.13,-3170.84 6343.63,-3180.84 6350.63,-3180.84"/>
+</g>
+<!-- k_967b87ca -->
+<g id="node9" class="node"><title>k_967b87ca</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="7249.13,-3348 7153.13,-3348 7153.13,-3312 7249.13,-3312 7249.13,-3348"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="7154.13,-3317 7154.13,-3342 7248.13,-3342 7248.13,-3317 7154.13,-3317"/>
+<text text-anchor="start" x="7159.13" y="-3326.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">HttpSession</text>
+</g>
+<!-- i_967b87ca -->
+<!-- k_967b87ca->i_967b87ca -->
+<g id="edge14" class="edge"><title>k_967b87ca->i_967b87ca</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M7201.13,-3311.82C7201.13,-3302.7 7201.13,-3291.23 7201.13,-3280.07"/>
+<polygon fill="none" stroke="black" points="7204.63,-3269.7 7201.13,-3259.7 7197.63,-3269.7 7204.63,-3269.7"/>
+<polygon fill="none" stroke="black" points="7204.63,-3279.7 7201.13,-3269.7 7197.63,-3279.7 7204.63,-3279.7"/>
+</g>
+<!-- k_42e7d7b3 -->
+<g id="node11" class="node"><title>k_42e7d7b3</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="7501.13,-3350.5 7331.13,-3350.5 7331.13,-3309.5 7501.13,-3309.5 7501.13,-3350.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="7332.13,-3310 7332.13,-3349 7500.13,-3349 7500.13,-3310 7332.13,-3310"/>
+<text text-anchor="start" x="7337.13" y="-3336.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@RequestParameters</text>
+<text text-anchor="start" x="7337.13" y="-3321.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Map<String, String[]></text>
+</g>
+<!-- i_42e7d7b3 -->
+<!-- k_42e7d7b3->i_42e7d7b3 -->
+<g id="edge16" class="edge"><title>k_42e7d7b3->i_42e7d7b3</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M7416.13,-3309.12C7416.13,-3300.49 7416.13,-3290.15 7416.13,-3280.06"/>
+<polygon fill="none" stroke="black" points="7419.63,-3269.75 7416.13,-3259.75 7412.63,-3269.75 7419.63,-3269.75"/>
+<polygon fill="none" stroke="black" points="7419.63,-3279.75 7416.13,-3269.75 7412.63,-3279.75 7419.63,-3279.75"/>
+</g>
+<!-- k_5fde4291 -->
+<g id="node13" class="node"><title>k_5fde4291</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="7677.13,-3350.5 7561.13,-3350.5 7561.13,-3309.5 7677.13,-3309.5 7677.13,-3350.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="7562.13,-3310 7562.13,-3349 7676.13,-3349 7676.13,-3310 7562.13,-3310"/>
+<text text-anchor="start" x="7567.13" y="-3336.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Internal(value=1)</text>
+<text text-anchor="start" x="7567.13" y="-3321.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">FilterDefinition</text>
+</g>
+<!-- i_5fde4291 -->
+<!-- k_5fde4291->i_5fde4291 -->
+<g id="edge18" class="edge"><title>k_5fde4291->i_5fde4291</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M7619.13,-3309.12C7619.13,-3300.49 7619.13,-3290.15 7619.13,-3280.06"/>
+<polygon fill="none" stroke="black" points="7622.63,-3269.75 7619.13,-3259.75 7615.63,-3269.75 7622.63,-3269.75"/>
+<polygon fill="none" stroke="black" points="7622.63,-3279.75 7619.13,-3269.75 7615.63,-3279.75 7622.63,-3279.75"/>
+</g>
+<!-- k_9d43c1d5 -->
+<g id="node15" class="node"><title>k_9d43c1d5</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4441.13,-2352 4337.13,-2352 4337.13,-2316 4441.13,-2316 4441.13,-2352"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4338.13,-2321 4338.13,-2346 4441.13,-2346 4441.13,-2321 4338.13,-2321"/>
+<text text-anchor="start" x="4343.13" y="-2330.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">UserManager</text>
+</g>
+<!-- k_bd2e368b -->
+<!-- k_9d43c1d5->k_bd2e368b -->
+<g id="edge20" class="edge"><title>k_9d43c1d5->k_bd2e368b</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4441.31,-2316.15C4477.68,-2303.72 4527.08,-2286.82 4569.55,-2272.29"/>
+<polygon fill="none" stroke="black" points="4570.73,-2275.59 4579.06,-2269.04 4568.46,-2268.97 4570.73,-2275.59"/>
+</g>
+<!-- k_cd819caf -->
+<g id="node16" class="node"><title>k_cd819caf</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2841.13,-1958 2725.13,-1958 2725.13,-1922 2841.13,-1922 2841.13,-1958"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2726.13,-1927 2726.13,-1952 2840.13,-1952 2840.13,-1927 2726.13,-1927"/>
+<text text-anchor="start" x="2731.13" y="-1936.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">GroupManager</text>
+</g>
+<!-- k_ce071950 -->
+<!-- k_cd819caf->k_ce071950 -->
+<g id="edge22" class="edge"><title>k_cd819caf->k_ce071950</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2725,-1929.09C2641.67,-1913.44 2487.33,-1884.46 2387.5,-1865.72"/>
+<polygon fill="none" stroke="black" points="2387.89,-1862.23 2377.42,-1863.83 2386.6,-1869.11 2387.89,-1862.23"/>
+</g>
+<!-- k_fe8ab28b -->
+<g id="node17" class="node"><title>k_fe8ab28b</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1311.13,-2352 1181.13,-2352 1181.13,-2316 1311.13,-2316 1311.13,-2352"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1182.13,-2321 1182.13,-2346 1310.13,-2346 1310.13,-2321 1182.13,-2321"/>
+<text text-anchor="start" x="1187.13" y="-2330.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ContentManager</text>
+</g>
+<!-- k_2dde583f -->
+<!-- k_fe8ab28b->k_2dde583f -->
+<g id="edge24" class="edge"><title>k_fe8ab28b->k_2dde583f</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1271.42,-2315.82C1287.41,-2304.33 1308.57,-2289.12 1327.53,-2275.5"/>
+<polygon fill="none" stroke="black" points="1329.7,-2278.25 1335.77,-2269.57 1325.61,-2272.56 1329.7,-2278.25"/>
+</g>
+<!-- k_79d9c91b -->
+<g id="node18" class="node"><title>k_79d9c91b</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="895.13,-2640 701.13,-2640 701.13,-2604 895.13,-2604 895.13,-2640"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="702.13,-2609 702.13,-2634 894.13,-2634 894.13,-2609 702.13,-2609"/>
+<text text-anchor="start" x="707.13" y="-2618.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ToolConfigurationManager</text>
+</g>
+<!-- k_af50407e -->
+<!-- k_79d9c91b->k_af50407e -->
+<g id="edge26" class="edge"><title>k_79d9c91b->k_af50407e</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M794.251,-2603.98C784.307,-2557.79 757.736,-2434.36 744.239,-2371.67"/>
+<polygon fill="none" stroke="black" points="747.638,-2370.83 742.111,-2361.79 740.794,-2372.3 747.638,-2370.83"/>
+</g>
+<!-- k_8059d21c -->
+<g id="node19" class="node"><title>k_8059d21c</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="565.13,-1958 423.13,-1958 423.13,-1922 565.13,-1922 565.13,-1958"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="424.13,-1927 424.13,-1952 564.13,-1952 564.13,-1927 424.13,-1927"/>
+<text text-anchor="start" x="429.13" y="-1936.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ContainerManager</text>
+</g>
+<!-- k_b8507171 -->
+<!-- k_8059d21c->k_b8507171 -->
+<g id="edge28" class="edge"><title>k_8059d21c->k_b8507171</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M482.868,-1921.82C476.225,-1911.1 467.581,-1897.15 459.598,-1884.26"/>
+<polygon fill="none" stroke="black" points="462.452,-1882.23 454.21,-1875.57 456.501,-1885.91 462.452,-1882.23"/>
+</g>
+<!-- k_429c8161 -->
+<g id="node20" class="node"><title>k_429c8161</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2878.13,-1774 2754.13,-1774 2754.13,-1738 2878.13,-1738 2878.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2755.13,-1743 2755.13,-1768 2878.13,-1768 2878.13,-1743 2755.13,-1743"/>
+<text text-anchor="start" x="2760.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">LicenseManager</text>
+</g>
+<!-- k_d7fdc6fa -->
+<!-- k_429c8161->k_d7fdc6fa -->
+<g id="edge30" class="edge"><title>k_429c8161->k_d7fdc6fa</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2805.85,-1737.71C2800.06,-1727.4 2792.51,-1713.97 2785.09,-1700.77"/>
+<polygon fill="none" stroke="black" points="2787.95,-1698.71 2780,-1691.71 2781.85,-1702.14 2787.95,-1698.71"/>
+</g>
+<!-- k_e829e8e2 -->
+<g id="node21" class="node"><title>k_e829e8e2</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3763.13,-2640 3591.13,-2640 3591.13,-2604 3763.13,-2604 3763.13,-2640"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3592.13,-2609 3592.13,-2634 3763.13,-2634 3763.13,-2609 3592.13,-2609"/>
+<text text-anchor="start" x="3597.13" y="-2618.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">SocialNetworkManager</text>
+</g>
+<!-- k_672c32f9 -->
+<!-- k_e829e8e2->k_672c32f9 -->
+<g id="edge32" class="edge"><title>k_e829e8e2->k_672c32f9</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3675.06,-2603.99C3672.25,-2579.46 3667.15,-2534.93 3663.47,-2502.88"/>
+<polygon fill="none" stroke="black" points="3666.9,-2502.07 3662.29,-2492.53 3659.95,-2502.86 3666.9,-2502.07"/>
+</g>
+<!-- k_e65a2cb5 -->
+<g id="node22" class="node"><title>k_e65a2cb5</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4946.13,-1774 4834.13,-1774 4834.13,-1738 4946.13,-1738 4946.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4835.13,-1743 4835.13,-1768 4946.13,-1768 4946.13,-1743 4835.13,-1743"/>
+<text text-anchor="start" x="4840.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">XmppManager</text>
+</g>
+<!-- k_550eb5f6 -->
+<!-- k_e65a2cb5->k_550eb5f6 -->
+<g id="edge34" class="edge"><title>k_e65a2cb5->k_550eb5f6</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4890.48,-1737.71C4890.74,-1724.18 4891.1,-1705.29 4891.41,-1688.59"/>
+<polygon fill="none" stroke="black" points="4894.91,-1688.61 4891.6,-1678.54 4887.92,-1688.48 4894.91,-1688.61"/>
+</g>
+<!-- k_fe12a512 -->
+<g id="node23" class="node"><title>k_fe12a512</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2051.13,-3045 1945.13,-3045 1945.13,-3009 2051.13,-3009 2051.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1946.13,-3014 1946.13,-3039 2051.13,-3039 2051.13,-3014 1946.13,-3014"/>
+<text text-anchor="start" x="1951.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ChatManager</text>
+</g>
+<!-- k_b69674be -->
+<!-- k_fe12a512->k_b69674be -->
+<g id="edge36" class="edge"><title>k_fe12a512->k_b69674be</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1991.21,-3008.91C1979,-2977 1953.4,-2910.1 1937.3,-2868.04"/>
+<polygon fill="none" stroke="black" points="1940.57,-2866.78 1933.73,-2858.69 1934.03,-2869.28 1940.57,-2866.78"/>
+</g>
+<!-- k_54c1d756 -->
+<g id="node24" class="node"><title>k_54c1d756</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1020.13,-1958 914.13,-1958 914.13,-1922 1020.13,-1922 1020.13,-1958"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="915.13,-1927 915.13,-1952 1019.13,-1952 1019.13,-1927 915.13,-1927"/>
+<text text-anchor="start" x="920.13" y="-1936.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">RateManager</text>
+</g>
+<!-- k_891c668a -->
+<!-- k_54c1d756->k_891c668a -->
+<g id="edge38" class="edge"><title>k_54c1d756->k_891c668a</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M933.346,-1921.82C911.405,-1910.02 882.185,-1894.3 856.35,-1880.4"/>
+<polygon fill="none" stroke="black" points="857.835,-1877.22 847.37,-1875.57 854.518,-1883.39 857.835,-1877.22"/>
+</g>
+<!-- k_9d34b335 -->
+<g id="node25" class="node"><title>k_9d34b335</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4121.13,-2168 3961.13,-2168 3961.13,-2132 4121.13,-2132 4121.13,-2168"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3962.13,-2137 3962.13,-2162 4121.13,-2162 4121.13,-2137 3962.13,-2137"/>
+<text text-anchor="start" x="3967.13" y="-2146.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nCountryManager</text>
+</g>
+<!-- k_d30a49b4 -->
+<!-- k_9d34b335->k_d30a49b4 -->
+<g id="edge40" class="edge"><title>k_9d34b335->k_d30a49b4</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4081.01,-2131.95C4114.43,-2116.83 4162.93,-2094.88 4202.83,-2076.82"/>
+<polygon fill="none" stroke="black" points="4204.32,-2079.98 4211.99,-2072.67 4201.44,-2073.6 4204.32,-2079.98"/>
+</g>
+<!-- k_bebd50c7 -->
+<g id="node26" class="node"><title>k_bebd50c7</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3922.13,-1380 3750.13,-1380 3750.13,-1344 3922.13,-1344 3922.13,-1380"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3751.13,-1349 3751.13,-1374 3922.13,-1374 3922.13,-1349 3751.13,-1349"/>
+<text text-anchor="start" x="3756.13" y="-1358.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nLanguageManager</text>
+</g>
+<!-- k_a76b388f -->
+<!-- k_bebd50c7->k_a76b388f -->
+<g id="edge42" class="edge"><title>k_bebd50c7->k_a76b388f</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3801.75,-1343.82C3779.43,-1332.02 3749.7,-1316.3 3723.41,-1302.4"/>
+<polygon fill="none" stroke="black" points="3724.75,-1299.15 3714.27,-1297.57 3721.47,-1305.34 3724.75,-1299.15"/>
+</g>
+<!-- k_6d495d8 -->
+<g id="node27" class="node"><title>k_6d495d8</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3587.13,-1564 3407.13,-1564 3407.13,-1528 3587.13,-1528 3587.13,-1564"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3408.13,-1533 3408.13,-1558 3587.13,-1558 3587.13,-1533 3408.13,-1533"/>
+<text text-anchor="start" x="3413.13" y="-1542.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nTranslationManager</text>
+</g>
+<!-- k_a0aaa852 -->
+<!-- k_6d495d8->k_a0aaa852 -->
+<g id="edge44" class="edge"><title>k_6d495d8->k_a0aaa852</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3406.98,-1528.32C3335.66,-1514.33 3235.18,-1494.62 3155.63,-1479.01"/>
+<polygon fill="none" stroke="black" points="3156.02,-1475.52 3145.54,-1477.03 3154.68,-1482.39 3156.02,-1475.52"/>
+</g>
+<!-- k_c1f839a6 -->
+<g id="node28" class="node"><title>k_c1f839a6</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="993.13,-1380 897.13,-1380 897.13,-1344 993.13,-1344 993.13,-1380"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="898.13,-1349 898.13,-1374 993.13,-1374 993.13,-1349 898.13,-1349"/>
+<text text-anchor="start" x="903.13" y="-1358.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">TagManager</text>
+</g>
+<!-- k_cdd80b0b -->
+<!-- k_c1f839a6->k_cdd80b0b -->
+<g id="edge46" class="edge"><title>k_c1f839a6->k_cdd80b0b</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M942.364,-1343.82C940.795,-1333.51 938.771,-1320.22 936.875,-1307.76"/>
+<polygon fill="none" stroke="black" points="940.289,-1306.93 935.325,-1297.57 933.369,-1307.98 940.289,-1306.93"/>
+</g>
+<!-- k_49a1fb25 -->
+<g id="node29" class="node"><title>k_49a1fb25</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1157.13,-2168 973.13,-2168 973.13,-2132 1157.13,-2132 1157.13,-2168"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="974.13,-2137 974.13,-2162 1157.13,-2162 1157.13,-2137 974.13,-2137"/>
+<text text-anchor="start" x="979.13" y="-2146.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">TagUserContentManager</text>
+</g>
+<!-- k_c3321797 -->
+<!-- k_49a1fb25->k_c3321797 -->
+<g id="edge48" class="edge"><title>k_49a1fb25->k_c3321797</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1069.65,-2131.61C1085.94,-2062.45 1138.73,-1811.61 1100.13,-1610 1091.99,-1567.46 1072.4,-1521.73 1057.4,-1490.86"/>
+<polygon fill="none" stroke="black" points="1060.48,-1489.19 1052.91,-1481.77 1054.21,-1492.29 1060.48,-1489.19"/>
+</g>
+<!-- k_a939ddfc -->
+<g id="node30" class="node"><title>k_a939ddfc</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2528.13,-1774 2432.13,-1774 2432.13,-1738 2528.13,-1738 2528.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2433.13,-1743 2433.13,-1768 2528.13,-1768 2528.13,-1743 2433.13,-1743"/>
+<text text-anchor="start" x="2438.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">FileManager</text>
+</g>
+<!-- k_397ca544 -->
+<!-- k_a939ddfc->k_397ca544 -->
+<g id="edge50" class="edge"><title>k_a939ddfc->k_397ca544</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2480.13,-1737.71C2480.13,-1724.18 2480.13,-1705.29 2480.13,-1688.59"/>
+<polygon fill="none" stroke="black" points="2483.63,-1688.54 2480.13,-1678.54 2476.63,-1688.54 2483.63,-1688.54"/>
+</g>
+<!-- k_f516f38 -->
+<g id="node31" class="node"><title>k_f516f38</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4779.13,-3045 4591.13,-3045 4591.13,-3009 4779.13,-3009 4779.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4592.13,-3014 4592.13,-3039 4778.13,-3039 4778.13,-3014 4592.13,-3014"/>
+<text text-anchor="start" x="4597.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ExtMediaDescripManager</text>
+</g>
+<!-- k_68db9ec8 -->
+<!-- k_f516f38->k_68db9ec8 -->
+<g id="edge52" class="edge"><title>k_f516f38->k_68db9ec8</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4679.78,-3008.91C4670.35,-2977.06 4650.62,-2910.38 4638.17,-2868.31"/>
+<polygon fill="none" stroke="black" points="4641.52,-2867.29 4635.32,-2858.69 4634.81,-2869.27 4641.52,-2867.29"/>
+</g>
+<!-- k_35e58938 -->
+<g id="node32" class="node"><title>k_35e58938</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2898.13,-3045 2752.13,-3045 2752.13,-3009 2898.13,-3009 2898.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2753.13,-3014 2753.13,-3039 2898.13,-3039 2898.13,-3014 2753.13,-3014"/>
+<text text-anchor="start" x="2758.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">KuneWaveManager</text>
+</g>
+<!-- k_2aeba352 -->
+<!-- k_35e58938->k_2aeba352 -->
+<g id="edge54" class="edge"><title>k_35e58938->k_2aeba352</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2842.03,-3008.89C2889.35,-2957.89 3026.58,-2808.22 3131.13,-2676 3178.31,-2616.33 3228.95,-2543.57 3257.96,-2500.96"/>
+<polygon fill="none" stroke="black" points="3260.91,-2502.83 3263.63,-2492.59 3255.12,-2498.9 3260.91,-2502.83"/>
+</g>
+<!-- k_27120b47 -->
+<g id="node33" class="node"><title>k_27120b47</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5189.13,-3256 5099.13,-3256 5099.13,-3220 5189.13,-3220 5189.13,-3256"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5100.13,-3225 5100.13,-3250 5189.13,-3250 5189.13,-3225 5100.13,-3225"/>
+<text text-anchor="start" x="5105.13" y="-3234.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">SiteService</text>
+</g>
+<!-- k_49441f7c -->
+<!-- k_27120b47->k_49441f7c -->
+<g id="edge56" class="edge"><title>k_27120b47->k_49441f7c</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5144.13,-3219.84C5144.13,-3207.89 5144.13,-3191.81 5144.13,-3177.13"/>
+<polygon fill="none" stroke="black" points="5147.63,-3176.77 5144.13,-3166.77 5140.63,-3176.77 5147.63,-3176.77"/>
+</g>
+<!-- k_ea4fb6fe -->
+<g id="node34" class="node"><title>k_ea4fb6fe</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3530.13,-3348 3424.13,-3348 3424.13,-3312 3530.13,-3312 3530.13,-3348"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3425.13,-3317 3425.13,-3342 3530.13,-3342 3530.13,-3317 3425.13,-3317"/>
+<text text-anchor="start" x="3430.13" y="-3326.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">GroupService</text>
+</g>
+<!-- k_8fd7bcd5 -->
+<!-- k_ea4fb6fe->k_8fd7bcd5 -->
+<g id="edge58" class="edge"><title>k_ea4fb6fe->k_8fd7bcd5</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3477.13,-3311.82C3477.13,-3301.51 3477.13,-3288.22 3477.13,-3275.76"/>
+<polygon fill="none" stroke="black" points="3480.63,-3275.57 3477.13,-3265.57 3473.63,-3275.57 3480.63,-3275.57"/>
+</g>
+<!-- k_ef8f1942 -->
+<g id="node35" class="node"><title>k_ef8f1942</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2128.13,-3256 2008.13,-3256 2008.13,-3220 2128.13,-3220 2128.13,-3256"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2009.13,-3225 2009.13,-3250 2127.13,-3250 2127.13,-3225 2009.13,-3225"/>
+<text text-anchor="start" x="2014.13" y="-3234.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ContentService</text>
+</g>
+<!-- k_20a2e5ab -->
+<!-- k_ef8f1942->k_20a2e5ab -->
+<g id="edge60" class="edge"><title>k_ef8f1942->k_20a2e5ab</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2082.07,-3219.84C2091.69,-3207.31 2104.8,-3190.23 2116.49,-3175"/>
+<polygon fill="none" stroke="black" points="2119.5,-3176.83 2122.81,-3166.77 2113.95,-3172.57 2119.5,-3176.83"/>
+</g>
+<!-- k_f972cca4 -->
+<g id="node36" class="node"><title>k_f972cca4</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5557.13,-3348 5463.13,-3348 5463.13,-3312 5557.13,-3312 5557.13,-3348"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5464.13,-3317 5464.13,-3342 5557.13,-3342 5557.13,-3317 5464.13,-3317"/>
+<text text-anchor="start" x="5469.13" y="-3326.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">UserService</text>
+</g>
+<!-- k_f37daf18 -->
+<!-- k_f972cca4->k_f37daf18 -->
+<g id="edge62" class="edge"><title>k_f972cca4->k_f37daf18</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5510.13,-3311.82C5510.13,-3301.51 5510.13,-3288.22 5510.13,-3275.76"/>
+<polygon fill="none" stroke="black" points="5513.63,-3275.57 5510.13,-3265.57 5506.63,-3275.57 5513.63,-3275.57"/>
+</g>
+<!-- k_1355e9a3 -->
+<g id="node37" class="node"><title>k_1355e9a3</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3833.13,-3045 3705.13,-3045 3705.13,-3009 3833.13,-3009 3833.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3706.13,-3014 3706.13,-3039 3832.13,-3039 3832.13,-3014 3706.13,-3014"/>
+<text text-anchor="start" x="3711.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">SocialNetService</text>
+</g>
+<!-- k_f76f7877 -->
+<!-- k_1355e9a3->k_f76f7877 -->
+<g id="edge64" class="edge"><title>k_1355e9a3->k_f76f7877</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3769.13,-3008.91C3769.13,-2977.2 3769.13,-2910.94 3769.13,-2868.84"/>
+<polygon fill="none" stroke="black" points="3772.63,-2868.69 3769.13,-2858.69 3765.63,-2868.69 3772.63,-2868.69"/>
+</g>
+<!-- k_a2d4d2e -->
+<g id="node38" class="node"><title>k_a2d4d2e</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5835.13,-3045 5741.13,-3045 5741.13,-3009 5835.13,-3009 5835.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5742.13,-3014 5742.13,-3039 5835.13,-3039 5835.13,-3014 5742.13,-3014"/>
+<text text-anchor="start" x="5747.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nService</text>
+</g>
+<!-- k_cd183063 -->
+<!-- k_a2d4d2e->k_cd183063 -->
+<g id="edge66" class="edge"><title>k_a2d4d2e->k_cd183063</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5787.3,-3008.91C5785.84,-2977.2 5782.8,-2910.94 5780.87,-2868.84"/>
+<polygon fill="none" stroke="black" points="5784.36,-2868.52 5780.4,-2858.69 5777.36,-2868.84 5784.36,-2868.52"/>
+</g>
+<!-- k_41f22ba4 -->
+<g id="node39" class="node"><title>k_41f22ba4</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2231.13,-3348 2137.13,-3348 2137.13,-3312 2231.13,-3312 2231.13,-3348"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2138.13,-3317 2138.13,-3342 2231.13,-3342 2231.13,-3317 2138.13,-3317"/>
+<text text-anchor="start" x="2143.13" y="-3326.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ListsService</text>
+</g>
+<!-- k_a421d634 -->
+<!-- k_41f22ba4->k_a421d634 -->
+<g id="edge68" class="edge"><title>k_41f22ba4->k_a421d634</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2184.13,-3311.82C2184.13,-3301.51 2184.13,-3288.22 2184.13,-3275.76"/>
+<polygon fill="none" stroke="black" points="2187.63,-3275.57 2184.13,-3265.57 2180.63,-3275.57 2187.63,-3275.57"/>
+</g>
+<!-- k_7c585990 -->
+<g id="node40" class="node"><title>k_7c585990</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4999.13,-3045 4859.13,-3045 4859.13,-3009 4999.13,-3009 4999.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4860.13,-3014 4860.13,-3039 4998.13,-3039 4998.13,-3014 4860.13,-3014"/>
+<text text-anchor="start" x="4865.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ClientStatsService</text>
+</g>
+<!-- k_3309f8a4 -->
+<!-- k_7c585990->k_3309f8a4 -->
+<g id="edge70" class="edge"><title>k_7c585990->k_3309f8a4</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4930.05,-3008.91C4931.67,-2977.2 4935.05,-2910.94 4937.2,-2868.84"/>
+<polygon fill="none" stroke="black" points="4940.7,-2868.86 4937.72,-2858.69 4933.71,-2868.5 4940.7,-2868.86"/>
+</g>
+<!-- k_b3a78c62 -->
+<g id="node41" class="node"><title>k_b3a78c62</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5405.13,-3045 5283.13,-3045 5283.13,-3009 5405.13,-3009 5405.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5284.13,-3014 5284.13,-3039 5404.13,-3039 5404.13,-3014 5284.13,-3014"/>
+<text text-anchor="start" x="5289.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">UserInfoService</text>
+</g>
+<!-- k_a9deb790 -->
+<!-- k_b3a78c62->k_a9deb790 -->
+<g id="edge72" class="edge"><title>k_b3a78c62->k_a9deb790</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5339.52,-3008.91C5331.41,-2977.13 5314.45,-2910.66 5303.71,-2868.57"/>
+<polygon fill="none" stroke="black" points="5307.06,-2867.52 5301.19,-2858.69 5300.27,-2869.25 5307.06,-2867.52"/>
+</g>
+<!-- k_7824fe0f -->
+<g id="node42" class="node"><title>k_7824fe0f</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1481.13,-2640 1359.13,-2640 1359.13,-2604 1481.13,-2604 1481.13,-2640"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1360.13,-2609 1360.13,-2634 1481.13,-2634 1481.13,-2609 1360.13,-2609"/>
+<text text-anchor="start" x="1365.13" y="-2618.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">CreationService</text>
+</g>
+<!-- k_8d9226ee -->
+<!-- k_7824fe0f->k_8d9226ee -->
+<g id="edge74" class="edge"><title>k_7824fe0f->k_8d9226ee</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1424.37,-2603.99C1430.18,-2579.35 1440.74,-2534.54 1448.3,-2502.46"/>
+<polygon fill="none" stroke="black" points="1451.75,-2503.07 1450.64,-2492.53 1444.94,-2501.46 1451.75,-2503.07"/>
+</g>
+<!-- k_acce46b4 -->
+<g id="node43" class="node"><title>k_acce46b4</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2443.13,-2352 2291.13,-2352 2291.13,-2316 2443.13,-2316 2443.13,-2352"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2292.13,-2321 2292.13,-2346 2442.13,-2346 2442.13,-2321 2292.13,-2321"/>
+<text text-anchor="start" x="2297.13" y="-2330.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">AccessRightsService</text>
+</g>
+<!-- k_63e1eb38 -->
+<!-- k_acce46b4->k_63e1eb38 -->
+<g id="edge76" class="edge"><title>k_acce46b4->k_63e1eb38</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2361.99,-2315.82C2359.05,-2305.41 2355.25,-2291.95 2351.69,-2279.38"/>
+<polygon fill="none" stroke="black" points="2355.01,-2278.24 2348.92,-2269.57 2348.27,-2280.14 2355.01,-2278.24"/>
+</g>
+<!-- k_4bb9a563 -->
+<g id="node44" class="node"><title>k_4bb9a563</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2253.13,-2640 2145.13,-2640 2145.13,-2604 2253.13,-2604 2253.13,-2640"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2146.13,-2609 2146.13,-2634 2253.13,-2634 2253.13,-2609 2146.13,-2609"/>
+<text text-anchor="start" x="2151.13" y="-2618.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">AccessService</text>
+</g>
+<!-- k_63207c2c -->
+<!-- k_4bb9a563->k_63207c2c -->
+<g id="edge78" class="edge"><title>k_4bb9a563->k_63207c2c</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2196.03,-2603.99C2191.8,-2579.35 2184.09,-2534.54 2178.57,-2502.46"/>
+<polygon fill="none" stroke="black" points="2182.01,-2501.79 2176.86,-2492.53 2175.11,-2502.98 2182.01,-2501.79"/>
+</g>
+<!-- k_a7a419fb -->
+<g id="node45" class="node"><title>k_a7a419fb</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="955.13,-2168 849.13,-2168 849.13,-2132 955.13,-2132 955.13,-2168"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="850.13,-2137 850.13,-2162 955.13,-2162 955.13,-2137 850.13,-2137"/>
+<text text-anchor="start" x="855.13" y="-2146.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">FinderService</text>
+</g>
+<!-- k_a0b29af9 -->
+<!-- k_a7a419fb->k_a0b29af9 -->
+<g id="edge80" class="edge"><title>k_a7a419fb->k_a0b29af9</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M912.755,-2131.71C920.762,-2117.93 932.005,-2098.58 941.839,-2081.65"/>
+<polygon fill="none" stroke="black" points="945.131,-2082.95 947.128,-2072.54 939.078,-2079.43 945.131,-2082.95"/>
+</g>
+<!-- k_8d4befab -->
+<g id="node46" class="node"><title>k_8d4befab</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2334.13,-3045 2234.13,-3045 2234.13,-3009 2334.13,-3009 2334.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2235.13,-3014 2235.13,-3039 2334.13,-3039 2334.13,-3014 2235.13,-3014"/>
+<text text-anchor="start" x="2240.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">StateService</text>
+</g>
+<!-- k_7e776058 -->
+<!-- k_8d4befab->k_7e776058 -->
+<g id="edge82" class="edge"><title>k_8d4befab->k_7e776058</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2285.42,-3008.91C2287.69,-2977.2 2292.42,-2910.94 2295.43,-2868.84"/>
+<polygon fill="none" stroke="black" points="2298.93,-2868.92 2296.15,-2858.69 2291.95,-2868.42 2298.93,-2868.92"/>
+</g>
+<!-- k_9a759b9f -->
+<g id="node47" class="node"><title>k_9a759b9f</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1995.13,-1774 1825.13,-1774 1825.13,-1738 1995.13,-1738 1995.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1826.13,-1743 1826.13,-1768 1995.13,-1768 1995.13,-1743 1826.13,-1743"/>
+<text text-anchor="start" x="1831.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nTranslationService</text>
+</g>
+<!-- k_869b8de5 -->
+<!-- k_9a759b9f->k_869b8de5 -->
+<g id="edge84" class="edge"><title>k_9a759b9f->k_869b8de5</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1995.42,-1750.75C2097.2,-1744.62 2272.53,-1734.5 2423.13,-1728 2927.36,-1706.25 3056.97,-1751.64 3558.13,-1692 3582.44,-1689.11 3608.21,-1684.72 3632.82,-1679.88"/>
+<polygon fill="none" stroke="black" points="3633.8,-1683.26 3642.91,-1677.86 3632.42,-1676.39 3633.8,-1683.26"/>
+</g>
+<!-- k_a162095c -->
+<g id="node48" class="node"><title>k_a162095c</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4255.13,-1774 4017.13,-1774 4017.13,-1738 4255.13,-1738 4255.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4018.13,-1743 4018.13,-1768 4255.13,-1768 4255.13,-1743 4018.13,-1743"/>
+<text text-anchor="start" x="4023.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nTranslationServiceMultiLang</text>
+</g>
+<!-- k_a162095c->k_869b8de5 -->
+<g id="edge86" class="edge"><title>k_a162095c->k_869b8de5</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4070.63,-1737.95C4014.16,-1722.39 3931.44,-1699.59 3864.87,-1681.24"/>
+<polygon fill="none" stroke="black" points="3865.74,-1677.85 3855.17,-1678.57 3863.88,-1684.6 3865.74,-1677.85"/>
+</g>
+<!-- k_9fad21d -->
+<g id="node49" class="node"><title>k_9fad21d</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3817.13,-1774 3681.13,-1774 3681.13,-1738 3817.13,-1738 3817.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3682.13,-1743 3682.13,-1768 3817.13,-1768 3817.13,-1743 3682.13,-1743"/>
+<text text-anchor="start" x="3687.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">KuneWaveService</text>
+</g>
+<!-- k_4425af11 -->
+<!-- k_9fad21d->k_4425af11 -->
+<g id="edge88" class="edge"><title>k_9fad21d->k_4425af11</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3795.37,-1737.95C3834.51,-1722.67 3891.5,-1700.43 3938.04,-1682.26"/>
+<polygon fill="none" stroke="black" points="3939.46,-1685.47 3947.5,-1678.57 3936.91,-1678.94 3939.46,-1685.47"/>
+</g>
+<!-- k_e77113ec -->
+<g id="node50" class="node"><title>k_e77113ec</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4816.13,-1774 4724.13,-1774 4724.13,-1738 4816.13,-1738 4816.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4725.13,-1743 4725.13,-1768 4815.13,-1768 4815.13,-1743 4725.13,-1743"/>
+<text text-anchor="start" x="4730.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">MailService</text>
+</g>
+<!-- k_79e18302 -->
+<!-- k_e77113ec->k_79e18302 -->
+<g id="edge90" class="edge"><title>k_e77113ec->k_79e18302</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4772.53,-1737.75C4777.31,-1692.82 4782.63,-1576.3 4719.13,-1518 4674.22,-1476.77 4511.83,-1494.69 4435.51,-1481.82"/>
+<polygon fill="none" stroke="black" points="4435.83,-1478.31 4425.34,-1479.79 4434.46,-1485.18 4435.83,-1478.31"/>
+</g>
+<!-- k_d999378f -->
+<g id="node51" class="node"><title>k_d999378f</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5041.13,-2260 4941.13,-2260 4941.13,-2224 5041.13,-2224 5041.13,-2260"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4942.13,-2229 4942.13,-2254 5040.13,-2254 5040.13,-2229 4942.13,-2229"/>
+<text text-anchor="start" x="4947.13" y="-2238.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">StatsService</text>
+</g>
+<!-- k_59cf8930 -->
+<!-- k_d999378f->k_59cf8930 -->
+<g id="edge92" class="edge"><title>k_d999378f->k_59cf8930</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4980.68,-2223.79C4945.87,-2163.09 4833.34,-1966.92 4786.21,-1884.74"/>
+<polygon fill="none" stroke="black" points="4789.07,-1882.7 4781.06,-1875.77 4783,-1886.18 4789.07,-1882.7"/>
+</g>
+<!-- k_9085ee50 -->
+<g id="node52" class="node"><title>k_9085ee50</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5111.13,-2640 5047.13,-2640 5047.13,-2604 5111.13,-2604 5111.13,-2640"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5048.13,-2609 5048.13,-2634 5111.13,-2634 5111.13,-2609 5048.13,-2609"/>
+<text text-anchor="start" x="5053.13" y="-2618.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Mapper</text>
+</g>
+<!-- k_45d35b16 -->
+<!-- k_9085ee50->k_45d35b16 -->
+<g id="edge94" class="edge"><title>k_9085ee50->k_45d35b16</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5091.75,-2603.99C5109.31,-2578.93 5141.5,-2532.98 5164.04,-2500.8"/>
+<polygon fill="none" stroke="black" points="5166.97,-2502.73 5169.84,-2492.53 5161.24,-2498.71 5166.97,-2502.73"/>
+</g>
+<!-- k_35322ade -->
+<g id="node53" class="node"><title>k_35322ade</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5098.13,-1774 5002.13,-1774 5002.13,-1738 5098.13,-1738 5098.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5003.13,-1743 5003.13,-1768 5098.13,-1768 5098.13,-1743 5003.13,-1743"/>
+<text text-anchor="start" x="5008.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">UsersOnline</text>
+</g>
+<!-- k_8e9f39bf -->
+<!-- k_35322ade->k_8e9f39bf -->
+<g id="edge96" class="edge"><title>k_35322ade->k_8e9f39bf</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5053.03,-1774.17C5065.74,-1856.29 5113.05,-2192.21 5050.13,-2270 4878.92,-2481.66 4673.04,-2240.3 4451.13,-2398 4385.42,-2444.7 4345.52,-2534.06 4327.18,-2584.66"/>
+<polygon fill="none" stroke="black" points="4323.83,-2583.64 4323.8,-2594.24 4330.43,-2585.97 4323.83,-2583.64"/>
+</g>
+<!-- k_7d32a85c -->
+<g id="node54" class="node"><title>k_7d32a85c</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4130.13,-1958 3990.13,-1958 3990.13,-1922 4130.13,-1922 4130.13,-1958"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3991.13,-1927 3991.13,-1952 4130.13,-1952 4130.13,-1927 3991.13,-1927"/>
+<text text-anchor="start" x="3996.13" y="-1936.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">NotificationSender</text>
+</g>
+<!-- k_cb025297 -->
+<!-- k_7d32a85c->k_cb025297 -->
+<g id="edge98" class="edge"><title>k_7d32a85c->k_cb025297</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4050.25,-1921.82C4044.48,-1911.2 4036.99,-1897.42 4030.04,-1884.64"/>
+<polygon fill="none" stroke="black" points="4032.96,-1882.68 4025.11,-1875.57 4026.81,-1886.03 4032.96,-1882.68"/>
+</g>
+<!-- k_d2c57cc8 -->
+<g id="node55" class="node"><title>k_d2c57cc8</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="7097.13,-3258.5 6909.13,-3258.5 6909.13,-3217.5 7097.13,-3217.5 7097.13,-3258.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6910.13,-3218 6910.13,-3257 7097.13,-3257 7097.13,-3218 6910.13,-3218"/>
+<text text-anchor="start" x="6915.13" y="-3244.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=ExtendedModule-1)</text>
+<text text-anchor="start" x="6915.13" y="-3229.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">AbstractExtendedModule</text>
+</g>
+<!-- i_d2c57cc8 -->
+<!-- k_d2c57cc8->i_d2c57cc8 -->
+<g id="edge100" class="edge"><title>k_d2c57cc8->i_d2c57cc8</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M7003.13,-3217.49C7003.13,-3207.67 7003.13,-3195.52 7003.13,-3183.72"/>
+<polygon fill="none" stroke="black" points="7006.63,-3183.52 7003.13,-3173.52 6999.63,-3183.52 7006.63,-3183.52"/>
+</g>
+<!-- k_bf7a7634 -->
+<g id="node156" class="node"><title>k_bf7a7634</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6905.13,-3045 6839.13,-3045 6839.13,-3009 6905.13,-3009 6905.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6840.13,-3014 6840.13,-3039 6904.13,-3039 6904.13,-3014 6840.13,-3014"/>
+<text text-anchor="start" x="6845.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Injector</text>
+</g>
+<!-- i_d2c57cc8->k_bf7a7634 -->
+<g id="edge102" class="edge"><title>i_d2c57cc8:m_ea7d63:e->k_bf7a7634</title>
+<path fill="none" stroke="black" d="M7110.13,-3118C7198.28,-3118 7004.97,-3062.86 6914.99,-3038.42"/>
+<polygon fill="black" stroke="black" points="6915.89,-3035.04 6905.32,-3035.81 6914.06,-3041.8 6915.89,-3035.04"/>
+</g>
+<!-- k_b620db99 -->
+<g id="node57" class="node"><title>k_b620db99</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="7882.13,-3348 7738.13,-3348 7738.13,-3312 7882.13,-3312 7882.13,-3348"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="7739.13,-3317 7739.13,-3342 7882.13,-3342 7882.13,-3317 7739.13,-3317"/>
+<text text-anchor="start" x="7744.13" y="-3326.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">RESTMethodFinder</text>
+</g>
+<!-- k_a2520e48 -->
+<!-- k_b620db99->k_a2520e48 -->
+<g id="edge104" class="edge"><title>k_b620db99->k_a2520e48</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M7810.13,-3311.82C7810.13,-3301.51 7810.13,-3288.22 7810.13,-3275.76"/>
+<polygon fill="none" stroke="black" points="7813.63,-3275.57 7810.13,-3265.57 7806.63,-3275.57 7813.63,-3275.57"/>
+</g>
+<!-- k_88c808c2 -->
+<g id="node58" class="node"><title>k_88c808c2</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="8071.13,-3348 7955.13,-3348 7955.13,-3312 8071.13,-3312 8071.13,-3348"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="7956.13,-3317 7956.13,-3342 8070.13,-3342 8070.13,-3317 7956.13,-3317"/>
+<text text-anchor="start" x="7961.13" y="-3326.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">RESTSerializer</text>
+</g>
+<!-- k_29a18b23 -->
+<!-- k_88c808c2->k_29a18b23 -->
+<g id="edge106" class="edge"><title>k_88c808c2->k_29a18b23</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M8013.13,-3311.82C8013.13,-3301.51 8013.13,-3288.22 8013.13,-3275.76"/>
+<polygon fill="none" stroke="black" points="8016.63,-3275.57 8013.13,-3265.57 8009.63,-3275.57 8016.63,-3275.57"/>
+</g>
+<!-- k_1a7eca26 -->
+<g id="node59" class="node"><title>k_1a7eca26</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3466.13,-1380 3348.13,-1380 3348.13,-1344 3466.13,-1344 3466.13,-1380"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3349.13,-1349 3349.13,-1374 3466.13,-1374 3466.13,-1349 3349.13,-1349"/>
+<text text-anchor="start" x="3354.13" y="-1358.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">KuneProperties</text>
+</g>
+<!-- i_1a7eca26 -->
+<!-- k_1a7eca26->i_1a7eca26 -->
+<g id="edge108" class="edge"><title>k_1a7eca26->i_1a7eca26</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3407.13,-1343.82C3407.13,-1331.89 3407.13,-1315.95 3407.13,-1301.94"/>
+<polygon fill="none" stroke="black" points="3410.63,-1301.7 3407.13,-1291.7 3403.63,-1301.7 3410.63,-1301.7"/>
+</g>
+<!-- k_c3b7abd7 -->
+<g id="node61" class="node"><title>k_c3b7abd7</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2199.13,-1014.5 2143.13,-1014.5 2143.13,-973.5 2199.13,-973.5 2199.13,-1014.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2144.13,-974 2144.13,-1013 2198.13,-1013 2198.13,-974 2144.13,-974"/>
+<text text-anchor="start" x="2149.13" y="-1000.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Jpa</text>
+<text text-anchor="start" x="2149.13" y="-985.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">String</text>
+</g>
+<!-- i_c3b7abd7 -->
+<!-- k_c3b7abd7->i_c3b7abd7 -->
+<g id="edge110" class="edge"><title>k_c3b7abd7->i_c3b7abd7</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2199.22,-981.208C2229.4,-967.462 2278.18,-945.245 2316.41,-927.834"/>
+<polygon fill="none" stroke="black" points="2318.23,-930.849 2325.88,-923.519 2315.33,-924.479 2318.23,-930.849"/>
+</g>
+<!-- k_dc31a474 -->
+<g id="node63" class="node"><title>k_dc31a474</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1924.13,-1014.5 1840.13,-1014.5 1840.13,-973.5 1924.13,-973.5 1924.13,-1014.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1841.13,-974 1841.13,-1013 1923.13,-1013 1923.13,-974 1841.13,-974"/>
+<text text-anchor="start" x="1846.13" y="-1000.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Jpa</text>
+<text text-anchor="start" x="1846.13" y="-985.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Properties</text>
+</g>
+<!-- i_dc31a474 -->
+<!-- k_dc31a474->i_dc31a474 -->
+<g id="edge112" class="edge"><title>k_dc31a474->i_dc31a474</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1839.87,-984.328C1779.72,-970.563 1667.51,-944.882 1584.34,-925.849"/>
+<polygon fill="none" stroke="black" points="1584.87,-922.381 1574.34,-923.562 1583.31,-929.204 1584.87,-922.381"/>
+</g>
+<!-- k_34559978 -->
+<g id="node65" class="node"><title>k_34559978</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3021.13,-2260 2911.13,-2260 2911.13,-2224 3021.13,-2224 3021.13,-2260"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2912.13,-2229 2912.13,-2254 3020.13,-2254 3020.13,-2229 2912.13,-2229"/>
+<text text-anchor="start" x="2917.13" y="-2238.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">PersistService</text>
+</g>
+<!-- k_658873e3 -->
+<!-- k_34559978->k_658873e3 -->
+<g id="edge114" class="edge"><title>k_34559978->k_658873e3</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2964.8,-2223.87C2960.31,-2171.84 2942.2,-2018.91 2879.13,-1912 2837.28,-1841.07 2804.59,-1840.98 2745.13,-1784 2664.56,-1706.79 2654.44,-1675.54 2564.13,-1610 2374.57,-1472.42 2099.13,-1596.22 2099.13,-1362 2099.13,-1362 2099.13,-1362 2099.13,-1270 2099.13,-1218.42 2084.63,-1160.35 2073.54,-1123.5"/>
+<polygon fill="none" stroke="black" points="2076.81,-1122.21 2070.52,-1113.69 2070.12,-1124.27 2076.81,-1122.21"/>
+</g>
+<!-- k_32b0c5a5 -->
+<g id="node66" class="node"><title>k_32b0c5a5</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2071.13,-1196 1977.13,-1196 1977.13,-1160 2071.13,-1160 2071.13,-1196"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1978.13,-1165 1978.13,-1190 2071.13,-1190 2071.13,-1165 1978.13,-1165"/>
+<text text-anchor="start" x="1983.13" y="-1174.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">UnitOfWork</text>
+</g>
+<!-- k_32b0c5a5->k_658873e3 -->
+<g id="edge116" class="edge"><title>k_32b0c5a5->k_658873e3</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2031.44,-1159.82C2035.67,-1149.31 2041.15,-1135.68 2046.25,-1123.01"/>
+<polygon fill="none" stroke="black" points="2049.56,-1124.15 2050.04,-1113.57 2043.06,-1121.54 2049.56,-1124.15"/>
+</g>
+<!-- k_7ff585a7 -->
+<g id="node67" class="node"><title>k_7ff585a7</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1959.13,-1196 1843.13,-1196 1843.13,-1160 1959.13,-1160 1959.13,-1196"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1844.13,-1165 1844.13,-1190 1958.13,-1190 1958.13,-1165 1844.13,-1165"/>
+<text text-anchor="start" x="1849.13" y="-1174.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">EntityManager</text>
+</g>
+<!-- k_7ff585a7->k_658873e3 -->
+<g id="edge118" class="edge"><title>k_7ff585a7->k_658873e3</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1932.74,-1159.82C1950.76,-1149.46 1974.03,-1136.08 1995.79,-1123.57"/>
+<polygon fill="none" stroke="black" points="2006.26,-1121.59 2013.19,-1113.57 2002.77,-1115.52 2006.26,-1121.59"/>
+<polygon fill="none" stroke="black" points="1997.59,-1126.57 2004.52,-1118.55 1994.1,-1120.5 1997.59,-1126.57"/>
+</g>
+<!-- k_37a69ede -->
+<g id="node68" class="node"><title>k_37a69ede</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5389.13,-1288 5223.13,-1288 5223.13,-1252 5389.13,-1252 5389.13,-1288"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5224.13,-1257 5224.13,-1282 5388.13,-1282 5388.13,-1257 5224.13,-1257"/>
+<text text-anchor="start" x="5229.13" y="-1266.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">EntityManagerFactory</text>
+</g>
+<!-- k_ccf09ec3 -->
+<!-- k_37a69ede->k_ccf09ec3 -->
+<g id="edge120" class="edge"><title>k_37a69ede->k_ccf09ec3</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5251.74,-1251.96C5237.98,-1248.05 5223.13,-1244.37 5209.13,-1242 4922.56,-1193.38 4846.28,-1223.31 4556.13,-1206 4477.76,-1201.32 4391.48,-1195.85 4316.51,-1190.99"/>
+<polygon fill="none" stroke="black" points="4306.39,-1186.83 4296.18,-1189.67 4305.94,-1193.81 4306.39,-1186.83"/>
+<polygon fill="none" stroke="black" points="4316.37,-1187.47 4306.16,-1190.32 4315.92,-1194.46 4316.37,-1187.47"/>
+</g>
+<!-- k_5ca82e04 -->
+<g id="node69" class="node"><title>k_5ca82e04</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="565.13,-1774 441.13,-1774 441.13,-1738 565.13,-1738 565.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="442.13,-1743 442.13,-1768 565.13,-1768 565.13,-1743 442.13,-1743"/>
+<text text-anchor="start" x="447.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ContainerFinder</text>
+</g>
+<!-- i_5ca82e04 -->
+<!-- k_5ca82e04->i_5ca82e04 -->
+<g id="edge122" class="edge"><title>k_5ca82e04->i_5ca82e04</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M476.656,-1737.95C452.574,-1721.53 416.687,-1697.06 389.111,-1678.26"/>
+<polygon fill="none" stroke="black" points="391.076,-1675.36 380.842,-1672.62 387.133,-1681.15 391.076,-1675.36"/>
+</g>
+<!-- k_2f704481 -->
+<g id="node71" class="node"><title>k_2f704481</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1357.13,-1774 1245.13,-1774 1245.13,-1738 1357.13,-1738 1357.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1246.13,-1743 1246.13,-1768 1357.13,-1768 1357.13,-1743 1246.13,-1743"/>
+<text text-anchor="start" x="1251.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ContentFinder</text>
+</g>
+<!-- i_2f704481 -->
+<!-- k_2f704481->i_2f704481 -->
+<g id="edge124" class="edge"><title>k_2f704481->i_2f704481</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1318.37,-1737.71C1333.3,-1721.88 1355.17,-1698.69 1372.53,-1680.27"/>
+<polygon fill="none" stroke="black" points="1375.35,-1682.39 1379.66,-1672.71 1370.26,-1677.58 1375.35,-1682.39"/>
+</g>
+<!-- k_55c22c57 -->
+<g id="node73" class="node"><title>k_55c22c57</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4832.13,-2640 4662.13,-2640 4662.13,-2604 4832.13,-2604 4832.13,-2640"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4663.13,-2609 4663.13,-2634 4832.13,-2634 4832.13,-2609 4663.13,-2609"/>
+<text text-anchor="start" x="4668.13" y="-2618.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">ExtMediaDescripFinder</text>
+</g>
+<!-- i_55c22c57 -->
+<!-- k_55c22c57->i_55c22c57 -->
+<g id="edge126" class="edge"><title>k_55c22c57->i_55c22c57</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4747.13,-2603.99C4747.13,-2577.87 4747.13,-2529.07 4747.13,-2496.8"/>
+<polygon fill="none" stroke="black" points="4750.63,-2496.55 4747.13,-2486.55 4743.63,-2496.55 4750.63,-2496.55"/>
+</g>
+<!-- k_1f909b4 -->
+<g id="node75" class="node"><title>k_1f909b4</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3338.13,-1774 3240.13,-1774 3240.13,-1738 3338.13,-1738 3338.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3241.13,-1743 3241.13,-1768 3338.13,-1768 3338.13,-1743 3241.13,-1743"/>
+<text text-anchor="start" x="3246.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">GroupFinder</text>
+</g>
+<!-- i_1f909b4 -->
+<!-- k_1f909b4->i_1f909b4 -->
+<g id="edge128" class="edge"><title>k_1f909b4->i_1f909b4</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3297.66,-1737.71C3304.79,-1722.44 3315.11,-1700.33 3323.54,-1682.26"/>
+<polygon fill="none" stroke="black" points="3326.94,-1683.25 3328,-1672.71 3320.6,-1680.29 3326.94,-1683.25"/>
+</g>
+<!-- k_960ad002 -->
+<g id="node77" class="node"><title>k_960ad002</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4451.13,-1958 4307.13,-1958 4307.13,-1922 4451.13,-1922 4451.13,-1958"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4308.13,-1927 4308.13,-1952 4450.13,-1952 4450.13,-1927 4308.13,-1927"/>
+<text text-anchor="start" x="4313.13" y="-1936.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nCountryFinder</text>
+</g>
+<!-- i_960ad002 -->
+<!-- k_960ad002->i_960ad002 -->
+<g id="edge130" class="edge"><title>k_960ad002->i_960ad002</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4379.13,-1921.82C4379.13,-1909.89 4379.13,-1893.95 4379.13,-1879.94"/>
+<polygon fill="none" stroke="black" points="4382.63,-1879.7 4379.13,-1869.7 4375.63,-1879.7 4382.63,-1879.7"/>
+</g>
+<!-- k_11372840 -->
+<g id="node79" class="node"><title>k_11372840</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3704.13,-1196 3550.13,-1196 3550.13,-1160 3704.13,-1160 3704.13,-1196"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3551.13,-1165 3551.13,-1190 3704.13,-1190 3704.13,-1165 3551.13,-1165"/>
+<text text-anchor="start" x="3556.13" y="-1174.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nLanguageFinder</text>
+</g>
+<!-- i_11372840 -->
+<!-- k_11372840->i_11372840 -->
+<g id="edge132" class="edge"><title>k_11372840->i_11372840</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3627.13,-1159.82C3627.13,-1147.89 3627.13,-1131.95 3627.13,-1117.94"/>
+<polygon fill="none" stroke="black" points="3630.63,-1117.7 3627.13,-1107.7 3623.63,-1117.7 3630.63,-1117.7"/>
+</g>
+<!-- k_a952f2c4 -->
+<g id="node81" class="node"><title>k_a952f2c4</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3221.13,-1380 3057.13,-1380 3057.13,-1344 3221.13,-1344 3221.13,-1380"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3058.13,-1349 3058.13,-1374 3220.13,-1374 3220.13,-1349 3058.13,-1349"/>
+<text text-anchor="start" x="3063.13" y="-1358.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">I18nTranslationFinder</text>
+</g>
+<!-- i_a952f2c4 -->
+<!-- k_a952f2c4->i_a952f2c4 -->
+<g id="edge134" class="edge"><title>k_a952f2c4->i_a952f2c4</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3129.25,-1343.82C3122.57,-1331.54 3113.59,-1315.01 3105.82,-1300.71"/>
+<polygon fill="none" stroke="black" points="3108.77,-1298.81 3100.92,-1291.7 3102.62,-1302.16 3108.77,-1298.81"/>
+</g>
+<!-- k_2584ae8 -->
+<g id="node83" class="node"><title>k_2584ae8</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="2735.13,-1564 2629.13,-1564 2629.13,-1528 2735.13,-1528 2735.13,-1564"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="2630.13,-1533 2630.13,-1558 2735.13,-1558 2735.13,-1533 2630.13,-1533"/>
+<text text-anchor="start" x="2635.13" y="-1542.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">LicenseFinder</text>
+</g>
+<!-- i_2584ae8 -->
+<!-- k_2584ae8->i_2584ae8 -->
+<g id="edge136" class="edge"><title>k_2584ae8->i_2584ae8</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M2665.93,-1527.82C2654.67,-1515.19 2639.4,-1498.06 2626.41,-1483.49"/>
+<polygon fill="none" stroke="black" points="2628.74,-1480.84 2619.47,-1475.7 2623.51,-1485.49 2628.74,-1480.84"/>
+</g>
+<!-- k_fab1a897 -->
+<g id="node85" class="node"><title>k_fab1a897</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="919.13,-1774 831.13,-1774 831.13,-1738 919.13,-1738 919.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="832.13,-1743 832.13,-1768 919.13,-1768 919.13,-1743 832.13,-1743"/>
+<text text-anchor="start" x="837.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">RateFinder</text>
+</g>
+<!-- i_fab1a897 -->
+<!-- k_fab1a897->i_fab1a897 -->
+<g id="edge138" class="edge"><title>k_fab1a897->i_fab1a897</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M875.13,-1737.71C875.13,-1722.58 875.13,-1700.74 875.13,-1682.77"/>
+<polygon fill="none" stroke="black" points="878.63,-1682.71 875.13,-1672.71 871.63,-1682.71 878.63,-1682.71"/>
+</g>
+<!-- k_6beca52f -->
+<g id="node87" class="node"><title>k_6beca52f</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1045.13,-1196 965.13,-1196 965.13,-1160 1045.13,-1160 1045.13,-1196"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="966.13,-1165 966.13,-1190 1044.13,-1190 1044.13,-1165 966.13,-1165"/>
+<text text-anchor="start" x="971.13" y="-1174.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">TagFinder</text>
+</g>
+<!-- i_6beca52f -->
+<!-- k_6beca52f->i_6beca52f -->
+<g id="edge140" class="edge"><title>k_6beca52f->i_6beca52f</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1005.13,-1159.82C1005.13,-1147.89 1005.13,-1131.95 1005.13,-1117.94"/>
+<polygon fill="none" stroke="black" points="1008.63,-1117.7 1005.13,-1107.7 1001.63,-1117.7 1008.63,-1117.7"/>
+</g>
+<!-- k_7d67dc61 -->
+<g id="node89" class="node"><title>k_7d67dc61</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="1300.13,-1380 1134.13,-1380 1134.13,-1344 1300.13,-1344 1300.13,-1380"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="1135.13,-1349 1135.13,-1374 1300.13,-1374 1300.13,-1349 1135.13,-1349"/>
+<text text-anchor="start" x="1140.13" y="-1358.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">TagUserContentFinder</text>
+</g>
+<!-- i_7d67dc61 -->
+<!-- k_7d67dc61->i_7d67dc61 -->
+<g id="edge142" class="edge"><title>k_7d67dc61->i_7d67dc61</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1229.18,-1343.82C1237.4,-1331.42 1248.49,-1314.7 1258.04,-1300.3"/>
+<polygon fill="none" stroke="black" points="1261.13,-1301.97 1263.74,-1291.7 1255.3,-1298.1 1261.13,-1301.97"/>
+</g>
+<!-- k_5425561b -->
+<g id="node91" class="node"><title>k_5425561b</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3999.13,-1774 3911.13,-1774 3911.13,-1738 3999.13,-1738 3999.13,-1774"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3912.13,-1743 3912.13,-1768 3998.13,-1768 3998.13,-1743 3912.13,-1743"/>
+<text text-anchor="start" x="3917.13" y="-1752.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">UserFinder</text>
+</g>
+<!-- i_5425561b -->
+<!-- k_5425561b->i_5425561b -->
+<g id="edge144" class="edge"><title>k_5425561b->i_5425561b</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3985.53,-1737.94C3992.75,-1734.21 4000.56,-1730.63 4008.13,-1728 4021.76,-1723.26 4175.76,-1695.2 4292.22,-1674.31"/>
+<polygon fill="none" stroke="black" points="4293.08,-1677.71 4302.3,-1672.5 4291.84,-1670.82 4293.08,-1677.71"/>
+</g>
+<!-- k_f8162078->k_6611e204 -->
+<g id="edge150" class="edge"><title>k_f8162078:m_84fd56bb:e->k_6611e204</title>
+<path fill="none" stroke="black" d="M6752.13,-3224C6758.15,-3224 6754.75,-3215.31 6751.13,-3210.5 6722.91,-3173.05 6695.37,-3192.15 6652.13,-3174 6642.89,-3170.12 6633.13,-3165.72 6623.83,-3161.39"/>
+<polygon fill="black" stroke="black" points="6625.27,-3158.2 6614.73,-3157.1 6622.28,-3164.53 6625.27,-3158.2"/>
+</g>
+<!-- k_c2a0b067 -->
+<!-- k_f8162078->k_c2a0b067 -->
+<g id="edge148" class="edge"><title>k_f8162078:m_84fd56bb:e->k_c2a0b067</title>
+<path fill="none" stroke="black" d="M6752.13,-3224C6772.44,-3224 6770.62,-3199.43 6764.6,-3176.71"/>
+<polygon fill="black" stroke="black" points="6767.88,-3175.45 6761.71,-3166.83 6761.16,-3177.41 6767.88,-3175.45"/>
+</g>
+<!-- k_f8162078->k_bf7a7634 -->
+<g id="edge146" class="edge"><title>k_f8162078:m_84fd56bb:e->k_bf7a7634</title>
+<path fill="none" stroke="black" d="M6752.13,-3224C6801.03,-3224 6821.57,-3213.69 6850.13,-3174 6875.32,-3139 6877,-3087.05 6875.13,-3055.2"/>
+<polygon fill="black" stroke="black" points="6878.62,-3054.94 6874.38,-3045.22 6871.63,-3055.46 6878.62,-3054.94"/>
+</g>
+<!-- k_c2a0b067->k_bf7a7634 -->
+<g id="edge152" class="edge"><title>k_c2a0b067:m_c910e7a6:e->k_bf7a7634</title>
+<path fill="none" stroke="black" d="M6842.13,-3125C6849.46,-3125 6859.78,-3084.4 6866.21,-3055.47"/>
+<polygon fill="black" stroke="black" points="6869.68,-3055.95 6868.39,-3045.43 6862.84,-3054.46 6869.68,-3055.95"/>
+</g>
+<!-- k_f97969ae -->
+<!-- k_f97969ae->k_34559978 -->
+<g id="edge156" class="edge"><title>k_f97969ae:m_d0b4c484:e->k_34559978</title>
+<path fill="none" stroke="black" d="M3052.13,-2582C3058.15,-2582 3054.57,-2573.44 3051.13,-2568.5 3028.79,-2536.43 2992.55,-2564.69 2971.13,-2532 2917.47,-2450.09 2942.45,-2325.28 2957.56,-2270.01"/>
+<polygon fill="black" stroke="black" points="2960.97,-2270.8 2960.33,-2260.22 2954.24,-2268.89 2960.97,-2270.8"/>
+</g>
+<!-- k_40ce8a32 -->
+<!-- k_f97969ae->k_40ce8a32 -->
+<g id="edge154" class="edge"><title>k_f97969ae:m_b7f26df5:e->k_40ce8a32</title>
+<path fill="none" stroke="black" d="M3052.13,-2608C3094.51,-2608 3080.82,-2544.42 3066.99,-2502.05"/>
+<polygon fill="black" stroke="black" points="3070.3,-2500.92 3063.78,-2492.57 3063.67,-2503.17 3070.3,-2500.92"/>
+</g>
+<!-- k_a9b36b89 -->
+<!-- k_a5714fa9 -->
+<!-- k_3b5a6e9c -->
+<!-- k_3b5a6e9c->k_1a7eca26 -->
+<g id="edge158" class="edge"><title>k_3b5a6e9c:m_b4a6ea93:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M1525.13,-1742C1795.51,-1742 1839.08,-1613.85 2075.13,-1482 2114.95,-1459.76 2117.63,-1439.72 2161.13,-1426 2274.47,-1390.26 3111.82,-1401.31 3230.13,-1390 3265.91,-1386.58 3305.45,-1380.54 3338.07,-1374.95"/>
+<polygon fill="black" stroke="black" points="3338.71,-1378.39 3347.96,-1373.23 3337.51,-1371.49 3338.71,-1378.39"/>
+</g>
+<!-- k_80f5f7a4 -->
+<!-- k_80f5f7a4->k_a939ddfc -->
+<g id="edge168" class="edge"><title>k_80f5f7a4:m_55fe5eeb:e->k_a939ddfc</title>
+<path fill="none" stroke="black" d="M2715.13,-2778C2860.13,-2778 2807.13,-2610 2807.13,-2465 2807.13,-2465 2807.13,-2465 2807.13,-2334 2807.13,-2145.47 2958.29,-2066.42 2850.13,-1912 2823.27,-1873.65 2794.56,-1893.49 2751.13,-1876 2672.11,-1844.18 2581.95,-1803.33 2528.11,-1778.43"/>
+<polygon fill="black" stroke="black" points="2529.36,-1775.16 2518.82,-1774.13 2526.42,-1781.51 2529.36,-1775.16"/>
+</g>
+<!-- k_80f5f7a4->k_7824fe0f -->
+<g id="edge166" class="edge"><title>k_80f5f7a4:m_3f42d6ac:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M2715.13,-2804C2755.8,-2804 2742.13,-2742 2714.13,-2712.5 2669.83,-2665.83 2200.33,-2680.45 2136.13,-2676 1900.02,-2659.64 1620.31,-2637.85 1491.53,-2627.68"/>
+<polygon fill="black" stroke="black" points="1491.65,-2624.17 1481.41,-2626.88 1491.1,-2631.15 1491.65,-2624.17"/>
+</g>
+<!-- k_80f5f7a4->k_4bb9a563 -->
+<g id="edge164" class="edge"><title>k_80f5f7a4:m_9a2f00cb:e->k_4bb9a563</title>
+<path fill="none" stroke="black" d="M2715.13,-2830C2767.35,-2830 2747.88,-2752.35 2714.13,-2712.5 2685.18,-2678.32 2394.79,-2643.05 2263.26,-2628.69"/>
+<polygon fill="black" stroke="black" points="2263.63,-2625.21 2253.31,-2627.61 2262.88,-2632.17 2263.63,-2625.21"/>
+</g>
+<!-- k_80f5f7a4->k_9a759b9f -->
+<g id="edge162" class="edge"><title>k_80f5f7a4:m_75d06daa:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M2715.13,-2856C2765.21,-2856 2787.61,-2397.2 2637.13,-2214 2618.14,-2190.89 2413.17,-2129.17 2384.13,-2122 2326.65,-2107.8 2164.94,-2124.7 2120.13,-2086 2073.55,-2045.78 2082.87,-1866.99 2043.13,-1820 2027.42,-1801.43 2005.07,-1787.83 1983.17,-1778.07"/>
+<polygon fill="black" stroke="black" points="1984.4,-1774.79 1973.83,-1774.11 1981.67,-1781.23 1984.4,-1774.79"/>
+</g>
+<!-- k_80f5f7a4->k_9a759b9f -->
+<g id="edge170" class="edge"><title>k_80f5f7a4:m_f73bea64:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M2715.13,-2752C2722.99,-2752 2688.97,-2306.92 2589.13,-2214 2521.41,-2150.98 2473.23,-2202.88 2384.13,-2178 2317.99,-2159.53 2305.76,-2142.22 2240.13,-2122 2172.13,-2101.05 2138.5,-2131.9 2084.13,-2086 2059.66,-2065.34 1990.85,-1846.67 1973.13,-1820 1963.72,-1805.83 1950.88,-1792.12 1939.26,-1781.04"/>
+<polygon fill="black" stroke="black" points="1941.55,-1778.39 1931.84,-1774.16 1936.79,-1783.53 1941.55,-1778.39"/>
+</g>
+<!-- k_80f5f7a4->k_1a7eca26 -->
+<g id="edge160" class="edge"><title>k_80f5f7a4:m_fbf8f608:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M2715.13,-2882C2825.82,-2882 2799.14,-2763.48 2897.13,-2712 2963.19,-2677.3 3002,-2721.52 3061.13,-2676 3118.15,-2632.1 3108.74,-2598.94 3135.13,-2532 3157.83,-2474.41 3146.15,-2453.72 3173.13,-2398 3181.73,-2380.24 3193.06,-2380.78 3199.13,-2362 3219.59,-2298.73 3196.59,-2277.59 3177.13,-2214 3075.41,-1881.69 2964.24,-1823.94 2902.13,-1482 2897.68,-1457.51 2885.52,-1444.53 2902.13,-1426 2951.07,-1371.4 3157.45,-1399.73 3230.13,-1390 3265.76,-1385.23 3305.28,-1379.06 3337.93,-1373.73"/>
+<polygon fill="black" stroke="black" points="3338.53,-1377.18 3347.83,-1372.1 3337.39,-1370.27 3338.53,-1377.18"/>
+</g>
+<!-- k_80f5f7a4->k_8e9f39bf -->
+<g id="edge172" class="edge"><title>k_80f5f7a4:m_9359f431:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M2715.13,-2726C3185.43,-2726 3303.09,-2710.39 3772.13,-2676 3932.31,-2664.25 4118.47,-2644.38 4225.95,-2632.3"/>
+<polygon fill="black" stroke="black" points="4226.56,-2635.75 4236.11,-2631.16 4225.78,-2628.8 4226.56,-2635.75"/>
+</g>
+<!-- k_e73a9b6b -->
+<!-- k_e73a9b6b->k_fe8ab28b -->
+<g id="edge174" class="edge"><title>k_e73a9b6b:m_e765dc67:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M1732.13,-2464C1746.69,-2464 1740.8,-2409.38 1731.13,-2398.5 1717.65,-2383.34 1454.24,-2354.89 1321.4,-2341.43"/>
+<polygon fill="black" stroke="black" points="1321.59,-2337.93 1311.29,-2340.41 1320.89,-2344.89 1321.59,-2337.93"/>
+</g>
+<!-- k_e73a9b6b->k_1a7eca26 -->
+<g id="edge176" class="edge"><title>k_e73a9b6b:m_1457c827:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M1732.13,-2438C1737.07,-2438 1772.52,-1732.2 1775.13,-1728 1792.15,-1700.61 1810.27,-1708.25 1838.13,-1692 2037.83,-1575.54 2063.43,-1491.54 2285.13,-1426 2486.66,-1366.42 3020.98,-1410.45 3230.13,-1390 3265.91,-1386.5 3305.45,-1380.46 3338.06,-1374.88"/>
+<polygon fill="black" stroke="black" points="3338.7,-1378.32 3347.95,-1373.16 3337.5,-1371.42 3338.7,-1378.32"/>
+</g>
+<!-- k_9f620b87 -->
+<!-- k_e73a9b6b->k_9f620b87 -->
+<g id="edge178" class="edge"><title>k_e73a9b6b:m_116dcc06:e->k_9f620b87</title>
+<path fill="none" stroke="black" d="M1732.13,-2412C1738.15,-2412 1734.76,-2403.3 1731.13,-2398.5 1702.6,-2360.76 1674.04,-2381.92 1631.13,-2362 1629.57,-2361.28 1628,-2360.52 1626.42,-2359.74"/>
+<polygon fill="black" stroke="black" points="1627.84,-2356.54 1617.35,-2355.06 1624.63,-2362.76 1627.84,-2356.54"/>
+</g>
+<!-- k_b95207c -->
+<!-- k_b95207c->k_cd819caf -->
+<g id="edge182" class="edge"><title>k_b95207c:m_1d803b88:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M2327.13,-2031C2383.1,-2031 2395.31,-2015.28 2450.13,-2004 2541.59,-1985.18 2647.54,-1965.11 2714.92,-1952.57"/>
+<polygon fill="black" stroke="black" points="2715.8,-1955.97 2724.99,-1950.7 2714.52,-1949.08 2715.8,-1955.97"/>
+</g>
+<!-- k_b95207c->k_9a759b9f -->
+<g id="edge184" class="edge"><title>k_b95207c:m_1d803b88:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M2327.13,-2031C2392.97,-2031 2175.95,-1853.26 2119.13,-1820 2107.02,-1812.91 2039.17,-1792.66 1984.01,-1776.82"/>
+<polygon fill="black" stroke="black" points="1984.8,-1773.4 1974.23,-1774.01 1982.88,-1780.13 1984.8,-1773.4"/>
+</g>
+<!-- k_b95207c->k_1a7eca26 -->
+<g id="edge180" class="edge"><title>k_b95207c:m_1d803b88:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M2327.13,-2031C2340.65,-2031 2332.03,-2014 2341.13,-2004 2427.25,-1909.35 2583.13,-1975.97 2583.13,-1848 2583.13,-1848 2583.13,-1848 2583.13,-1756 2583.13,-1690.56 2598.54,-1665.66 2564.13,-1610 2502.32,-1510.01 2292.77,-1510.85 2374.13,-1426 2407.07,-1391.64 3182.77,-1394.73 3230.13,-1390 3265.9,-1386.43 3305.44,-1380.38 3338.06,-1374.81"/>
+<polygon fill="black" stroke="black" points="3338.69,-1378.26 3347.95,-1373.1 3337.5,-1371.36 3338.69,-1378.26"/>
+</g>
+<!-- k_3e6a4b92 -->
+<!-- k_3e6a4b92->k_cd819caf -->
+<g id="edge186" class="edge"><title>k_3e6a4b92:m_e17f200f:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M2679.13,-2018C2687.93,-2018 2686.41,-2009.68 2693.13,-2004 2709.96,-1989.77 2729.83,-1975.42 2746.61,-1963.92"/>
+<polygon fill="black" stroke="black" points="2748.75,-1966.69 2755.07,-1958.18 2744.82,-1960.89 2748.75,-1966.69"/>
+</g>
+<!-- k_414f39df -->
+<!-- k_832e9dc1 -->
+<g id="node163" class="node"><title>k_832e9dc1</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5479.13,-384.5 5279.13,-384.5 5279.13,-343.5 5479.13,-343.5 5479.13,-384.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5280.13,-344 5280.13,-383 5478.13,-383 5478.13,-344 5280.13,-344"/>
+<text text-anchor="start" x="5285.13" y="-370.167" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=wave_server_domain)</text>
+<text text-anchor="start" x="5285.13" y="-355.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">String</text>
+</g>
+<!-- k_414f39df->k_832e9dc1 -->
+<g id="edge188" class="edge"><title>k_414f39df:m_ffdcacd3:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M3985.13,-1532C3991.15,-1532 3987.49,-1523.49 3984.13,-1518.5 3968.76,-1495.64 3560.88,-1316.11 3540.13,-1298 3517.47,-1278.22 3519.84,-1266.31 3502.13,-1242 3459.62,-1183.65 3433.8,-1178.88 3402.13,-1114 3324.38,-954.706 3314.13,-902.258 3314.13,-725 3314.13,-725 3314.13,-725 3314.13,-548 3314.13,-351.187 4563,-415.714 5001.13,-392 5091.37,-387.116 5193.57,-379.414 5268.94,-373.323"/>
+<polygon fill="black" stroke="black" points="5269.24,-376.81 5278.92,-372.513 5268.67,-369.833 5269.24,-376.81"/>
+</g>
+<!-- k_1fa76df9 -->
+<!-- k_414f39df->k_1fa76df9 -->
+<g id="edge190" class="edge"><title>k_414f39df:m_ffdcacd3:e->k_1fa76df9</title>
+<path fill="none" stroke="black" d="M3985.13,-1532C3991.15,-1532 3988.38,-1522.76 3984.13,-1518.5 3946.59,-1480.87 3559.89,-1488.48 3507.13,-1482 3482.16,-1478.93 3455.21,-1474.74 3430.48,-1470.53"/>
+<polygon fill="black" stroke="black" points="3430.84,-1467.04 3420.39,-1468.79 3429.65,-1473.94 3430.84,-1467.04"/>
+</g>
+<!-- k_2e92a7ea -->
+<!-- k_2e92a7ea->k_9fad21d -->
+<g id="edge200" class="edge"><title>k_2e92a7ea:m_dadc2f23:e->k_9fad21d</title>
+<path fill="none" stroke="black" d="M4695.13,-2136C4768.21,-2136 4661.57,-1865.17 4604.13,-1820 4542.74,-1771.72 3979.71,-1793.05 3902.13,-1784 3877.72,-1781.15 3851.33,-1776.79 3827.46,-1772.35"/>
+<polygon fill="black" stroke="black" points="3827.87,-1768.87 3817.39,-1770.45 3826.57,-1775.75 3827.87,-1768.87"/>
+</g>
+<!-- k_2e92a7ea->k_5425561b -->
+<g id="edge202" class="edge"><title>k_2e92a7ea:m_dadc2f23:e->k_5425561b</title>
+<path fill="none" stroke="black" d="M4695.13,-2136C4752.91,-2136 4796.9,-1961.24 4827.13,-1912 4837.06,-1895.82 4844.8,-1894.22 4850.13,-1876 4857.11,-1852.11 4867.35,-1837.97 4850.13,-1820 4785.35,-1752.39 4098.52,-1808.47 4008.13,-1784 4003.11,-1782.64 3998.03,-1780.75 3993.11,-1778.58"/>
+<polygon fill="black" stroke="black" points="3994.41,-1775.32 3983.88,-1774.13 3991.37,-1781.63 3994.41,-1775.32"/>
+</g>
+<!-- k_2e92a7ea->k_414f39df -->
+<g id="edge198" class="edge"><title>k_2e92a7ea:m_dadc2f23:e->k_414f39df</title>
+<path fill="none" stroke="black" d="M4695.13,-2136C4740.11,-2136 4753.42,-2119.78 4783.13,-2086 4799.78,-2067.07 4864.26,-1900.74 4869.13,-1876 4873.94,-1851.58 4884.6,-1839.5 4869.13,-1820 4825.45,-1764.93 4768.14,-1830.16 4715.13,-1784 4652.63,-1729.58 4714.46,-1659.67 4648.13,-1610 4609.13,-1580.8 4259.65,-1578.37 4211.13,-1574 4137.16,-1567.35 4052.55,-1559 3994.47,-1553.16"/>
+<polygon fill="black" stroke="black" points="3994.6,-1549.66 3984.3,-1552.14 3993.9,-1556.62 3994.6,-1549.66"/>
+</g>
+<!-- k_bffd6740 -->
+<!-- k_2e92a7ea->k_bffd6740 -->
+<g id="edge194" class="edge"><title>k_2e92a7ea:m_dadc2f23:e->k_bffd6740</title>
+<path fill="none" stroke="black" d="M4695.13,-2136C4701.15,-2136 4698.4,-2126.74 4694.13,-2122.5 4651.71,-2080.34 4216.05,-2096.22 4157.13,-2086 4141.23,-2083.24 4124.57,-2079.43 4108.44,-2075.24"/>
+<polygon fill="black" stroke="black" points="4109.04,-2071.78 4098.48,-2072.58 4107.24,-2078.54 4109.04,-2071.78"/>
+</g>
+<!-- k_2e92a7ea->k_1fa76df9 -->
+<g id="edge196" class="edge"><title>k_2e92a7ea:m_dadc2f23:e->k_1fa76df9</title>
+<path fill="none" stroke="black" d="M4695.13,-2136C4753.73,-2136 4774.88,-2126.61 4817.13,-2086 4954.26,-1954.21 4955.2,-1879.98 4984.13,-1692 4989.67,-1655.98 5009.27,-1636.39 4984.13,-1610 4955.74,-1580.2 4284.92,-1579.5 4244.13,-1574 4130.86,-1558.72 4105.99,-1536.07 3993.13,-1518 3793.26,-1486 3556.13,-1467.54 3430.51,-1459.27"/>
+<polygon fill="black" stroke="black" points="3430.39,-1455.76 3420.18,-1458.6 3429.94,-1462.74 3430.39,-1455.76"/>
+</g>
+<!-- k_6d89dff1 -->
+<g id="node166" class="node"><title>k_6d89dff1</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4855.13,-920 4777.13,-920 4777.13,-884 4855.13,-884 4855.13,-920"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4778.13,-889 4778.13,-914 4854.13,-914 4854.13,-889 4778.13,-889"/>
+<text text-anchor="start" x="4783.13" y="-898.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">WaveBus</text>
+</g>
+<!-- k_2e92a7ea->k_6d89dff1 -->
+<g id="edge192" class="edge"><title>k_2e92a7ea:m_dadc2f23:e->k_6d89dff1</title>
+<path fill="none" stroke="black" d="M4695.13,-2136C4775.17,-2136 4798.72,-2125.86 4868.13,-2086 5036.88,-1989.1 5056.7,-1930.19 5185.13,-1784 5205.49,-1760.83 5202.03,-1747.25 5226.13,-1728 5257.55,-1702.9 5276.03,-1714.83 5309.13,-1692 5419.2,-1616.09 5493.13,-1587.7 5493.13,-1454 5493.13,-1454 5493.13,-1454 5493.13,-1362 5493.13,-1126.1 5066.97,-1227.54 4926.13,-1114 4866.08,-1065.59 4835.22,-975.605 4822.84,-930.019"/>
+<polygon fill="black" stroke="black" points="4826.19,-929.004 4820.27,-920.215 4819.42,-930.775 4826.19,-929.004"/>
+</g>
+<!-- k_bffd6740->k_7d32a85c -->
+<g id="edge204" class="edge"><title>k_bffd6740:m_6683cfea:e->k_7d32a85c</title>
+<path fill="none" stroke="black" d="M4111.13,-2031C4141.13,-2031 4110.95,-1992.9 4085.91,-1966"/>
+<polygon fill="black" stroke="black" points="4088.13,-1963.26 4078.71,-1958.42 4083.06,-1968.08 4088.13,-1963.26"/>
+</g>
+<!-- k_d85dae79 -->
+<!-- k_1ab51db2 -->
+<!-- k_d85dae79->k_1ab51db2 -->
+<g id="edge206" class="edge"><title>k_d85dae79:m_6e568d1e:e->k_1ab51db2</title>
+<path fill="none" stroke="black" d="M8412.13,-3316C8439.78,-3316 8412.45,-3292.72 8381.96,-3271.6"/>
+<polygon fill="black" stroke="black" points="8383.56,-3268.45 8373.32,-3265.72 8379.62,-3274.24 8383.56,-3268.45"/>
+</g>
+<!-- k_bb9023d5 -->
+<!-- k_d85dae79->k_bb9023d5 -->
+<g id="edge208" class="edge"><title>k_d85dae79:m_6e568d1e:e->k_bb9023d5</title>
+<path fill="none" stroke="black" d="M8412.13,-3316C8438.43,-3316 8459.65,-3294.67 8473.91,-3274.32"/>
+<polygon fill="black" stroke="black" points="8477,-3275.99 8479.59,-3265.72 8471.16,-3272.13 8477,-3275.99"/>
+</g>
+<!-- k_af7bdf52 -->
+<!-- k_af7bdf52->k_fe8ab28b -->
+<g id="edge210" class="edge"><title>k_af7bdf52:m_7d837e0d:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M595.13,-2830C608.279,-2830 601.024,-2724.78 604.13,-2712 620.544,-2644.46 618.523,-2619.56 665.13,-2568 800.946,-2417.74 1046.7,-2362.26 1170.51,-2343.18"/>
+<polygon fill="black" stroke="black" points="1171.29,-2346.6 1180.66,-2341.66 1170.25,-2339.68 1171.29,-2346.6"/>
+</g>
+<!-- k_af7bdf52->k_79d9c91b -->
+<g id="edge214" class="edge"><title>k_af7bdf52:m_7d837e0d:e->k_79d9c91b</title>
+<path fill="none" stroke="black" d="M595.13,-2830C608.279,-2830 596.637,-2722.81 604.13,-2712 627.532,-2678.25 666.93,-2656.86 704.132,-2643.46"/>
+<polygon fill="black" stroke="black" points="705.721,-2646.61 714.04,-2640.05 703.446,-2639.99 705.721,-2646.61"/>
+</g>
+<!-- k_af7bdf52->k_8059d21c -->
+<g id="edge212" class="edge"><title>k_af7bdf52:m_7d837e0d:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M595.13,-2830C612.691,-2830 597.542,-2807.73 594.13,-2790.5 570.227,-2669.82 524.754,-2651.41 495.13,-2532 473.785,-2445.96 471.13,-2422.64 471.13,-2334 471.13,-2334 471.13,-2334 471.13,-2150 471.13,-2084.52 482.317,-2008.23 489.087,-1968.06"/>
+<polygon fill="black" stroke="black" points="492.539,-1968.63 490.785,-1958.18 485.64,-1967.45 492.539,-1968.63"/>
+</g>
+<!-- k_af7bdf52->k_7824fe0f -->
+<g id="edge218" class="edge"><title>k_af7bdf52:m_7d837e0d:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M595.13,-2830C608.279,-2830 594.99,-2721.45 604.13,-2712 607.37,-2708.65 1151.06,-2650.59 1349.07,-2629.54"/>
+<polygon fill="black" stroke="black" points="1349.5,-2633.01 1359.08,-2628.48 1348.76,-2626.05 1349.5,-2633.01"/>
+</g>
+<!-- k_af7bdf52->k_9a759b9f -->
+<g id="edge216" class="edge"><title>k_af7bdf52:m_7d837e0d:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M595.13,-2830C603.91,-2830 597.436,-2798.63 594.13,-2790.5 568.015,-2726.26 517.607,-2738.77 488.13,-2676 415.626,-2521.6 295.669,-2034.73 414.13,-1912 453.393,-1871.32 1377.74,-1894.6 1431.13,-1876 1470.75,-1862.2 1468.42,-1836.19 1507.13,-1820 1561.15,-1797.4 1713.47,-1777.3 1814.6,-1765.89"/>
+<polygon fill="black" stroke="black" points="1815.28,-1769.34 1824.83,-1764.75 1814.5,-1762.38 1815.28,-1769.34"/>
+</g>
+<!-- k_af7bdf52->k_3b5a6e9c -->
+<g id="edge220" class="edge"><title>k_af7bdf52:m_fce6b61b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M595.13,-2804C601.146,-2804 597.099,-2795.73 594.13,-2790.5 550.434,-2713.5 486.187,-2745.33 431.13,-2676 217.582,-2407.1 25.7456,-2095.27 316.13,-1912 392.033,-1864.1 1038.51,-1905.92 1123.13,-1876 1162.69,-1862.02 1160.88,-1837.25 1199.13,-1820 1268.34,-1788.79 1292.82,-1803.78 1366.13,-1784 1367.41,-1783.65 1368.7,-1783.3 1369.99,-1782.94"/>
+<polygon fill="black" stroke="black" points="1371.38,-1786.19 1380.03,-1780.07 1369.45,-1779.46 1371.38,-1786.19"/>
+</g>
+<!-- k_3ea428f2 -->
+<!-- k_3ea428f2->k_fe8ab28b -->
+<g id="edge222" class="edge"><title>k_3ea428f2:m_15dbf5cc:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M981.13,-2830C1007.69,-2830 986.069,-2734.53 1000.13,-2712 1014.82,-2688.46 1033.88,-2697.73 1051.13,-2676 1134.07,-2571.55 1083.73,-2504.41 1164.13,-2398 1175.78,-2382.58 1192.01,-2368.87 1206.97,-2358.14"/>
+<polygon fill="black" stroke="black" points="1209.36,-2360.74 1215.58,-2352.17 1205.37,-2354.99 1209.36,-2360.74"/>
+</g>
+<!-- k_3ea428f2->k_79d9c91b -->
+<g id="edge226" class="edge"><title>k_3ea428f2:m_15dbf5cc:e->k_79d9c91b</title>
+<path fill="none" stroke="black" d="M981.13,-2830C998.691,-2830 987.364,-2806.5 980.13,-2790.5 950.673,-2725.34 882.851,-2673.82 838.831,-2645.65"/>
+<polygon fill="black" stroke="black" points="840.423,-2642.52 830.092,-2640.17 836.701,-2648.45 840.423,-2642.52"/>
+</g>
+<!-- k_3ea428f2->k_8059d21c -->
+<g id="edge224" class="edge"><title>k_3ea428f2:m_15dbf5cc:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M981.13,-2830C998.691,-2830 983.226,-2807.79 980.13,-2790.5 975.524,-2764.78 919.921,-2588.81 904.13,-2568 855.245,-2503.58 656.614,-2423.53 604.13,-2362 565.81,-2317.08 547.13,-2301.04 547.13,-2242 547.13,-2242 547.13,-2242 547.13,-2150 547.13,-2082.89 521.372,-2007.29 505.77,-1967.65"/>
+<polygon fill="black" stroke="black" points="508.927,-1966.12 501.95,-1958.15 502.432,-1968.73 508.927,-1966.12"/>
+</g>
+<!-- k_3ea428f2->k_7824fe0f -->
+<g id="edge230" class="edge"><title>k_3ea428f2:m_15dbf5cc:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M981.13,-2830C1007.69,-2830 981.838,-2731.26 1000.13,-2712 1012.18,-2699.31 1232.53,-2656.81 1349.11,-2635.06"/>
+<polygon fill="black" stroke="black" points="1349.84,-2638.49 1359.03,-2633.22 1348.56,-2631.61 1349.84,-2638.49"/>
+</g>
+<!-- k_3ea428f2->k_9a759b9f -->
+<g id="edge228" class="edge"><title>k_3ea428f2:m_15dbf5cc:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M981.13,-2830C984.207,-2830 985.312,-2703.36 967.13,-2568 951.158,-2449.09 951.43,-2415.38 902.13,-2306 874.849,-2245.48 842.888,-2241.97 825.13,-2178 818.472,-2154.02 820.263,-2146.41 825.13,-2122 830.681,-2094.15 851.677,-2021.38 874.13,-2004 919.384,-1968.97 1072.66,-1977.26 1129.13,-1968 1348.65,-1932 1407.91,-1939.44 1621.13,-1876 1709.73,-1849.64 1808.23,-1805.3 1864.32,-1778.54"/>
+<polygon fill="black" stroke="black" points="1866.12,-1781.56 1873.62,-1774.08 1863.09,-1775.25 1866.12,-1781.56"/>
+</g>
+<!-- k_3ea428f2->k_3b5a6e9c -->
+<g id="edge232" class="edge"><title>k_3ea428f2:m_fce6b61b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M981.13,-2804C983.841,-2804 995.786,-2777.28 939.13,-2568 934.684,-2551.58 931.139,-2548.26 926.13,-2532 895.596,-2432.9 927.763,-2390.84 868.13,-2306 851.754,-2282.7 834.838,-2290.55 815.13,-2270 781.839,-2235.28 771.3,-2224.26 758.13,-2178 736.532,-2102.13 749.523,-2069.73 793.13,-2004 828.741,-1950.32 845.742,-1936.96 905.13,-1912 1041.96,-1854.5 1109.93,-1952.47 1237.13,-1876 1262.91,-1860.5 1251.38,-1838.46 1275.13,-1820 1283.4,-1813.57 1327.84,-1797.51 1370.11,-1783.09"/>
+<polygon fill="black" stroke="black" points="1371.31,-1786.38 1379.65,-1779.85 1369.06,-1779.75 1371.31,-1786.38"/>
+</g>
+<!-- k_ce3e3216 -->
+<!-- k_ce3e3216->k_fe8ab28b -->
+<g id="edge234" class="edge"><title>k_ce3e3216:m_760be197:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M1640.13,-2830C1694.81,-2830 1815.96,-2781 1490.13,-2568 1414.17,-2518.34 1354.47,-2594.99 1289.13,-2532 1242.79,-2487.32 1240.73,-2405.35 1243.32,-2362.23"/>
+<polygon fill="black" stroke="black" points="1246.82,-2362.37 1244.05,-2352.15 1239.84,-2361.86 1246.82,-2362.37"/>
+</g>
+<!-- k_ce3e3216->k_79d9c91b -->
+<g id="edge238" class="edge"><title>k_ce3e3216:m_760be197:e->k_79d9c91b</title>
+<path fill="none" stroke="black" d="M1640.13,-2830C1954.58,-2830 1195.67,-2691.58 905.356,-2640.58"/>
+<polygon fill="black" stroke="black" points="905.684,-2637.08 895.229,-2638.8 904.474,-2643.98 905.684,-2637.08"/>
+</g>
+<!-- k_ce3e3216->k_8059d21c -->
+<g id="edge236" class="edge"><title>k_ce3e3216:m_760be197:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M1640.13,-2830C1837.21,-2830 1814.04,-2580.69 1740.13,-2398 1676.13,-2239.78 1624.52,-2200.81 1473.13,-2122 1382.91,-2075.03 1344.93,-2113.91 1247.13,-2086 1156.72,-2060.2 1143.08,-2027.82 1052.13,-2004 886.334,-1960.58 685.168,-1946.61 575.354,-1942.12"/>
+<polygon fill="black" stroke="black" points="575.47,-1938.63 565.34,-1941.73 575.195,-1945.62 575.47,-1938.63"/>
+</g>
+<!-- k_ce3e3216->k_7824fe0f -->
+<g id="edge242" class="edge"><title>k_ce3e3216:m_760be197:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M1640.13,-2830C1657.69,-2830 1647.09,-2806.16 1639.13,-2790.5 1633.91,-2780.23 1513.27,-2690.54 1453.32,-2646.37"/>
+<polygon fill="black" stroke="black" points="1455.06,-2643.3 1444.94,-2640.19 1450.91,-2648.94 1455.06,-2643.3"/>
+</g>
+<!-- k_ce3e3216->k_9a759b9f -->
+<g id="edge240" class="edge"><title>k_ce3e3216:m_760be197:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M1640.13,-2830C1693.79,-2830 1800.03,-2722.89 1826.13,-2676 1900.75,-2541.94 1873.13,-2487.43 1873.13,-2334 1873.13,-2334 1873.13,-2334 1873.13,-2242 1873.13,-2136.04 1848.4,-2109.42 1859.13,-2004 1867.37,-1923.06 1890.35,-1829.53 1902.45,-1783.92"/>
+<polygon fill="black" stroke="black" points="1905.86,-1784.72 1905.07,-1774.16 1899.1,-1782.91 1905.86,-1784.72"/>
+</g>
+<!-- k_ce3e3216->k_3b5a6e9c -->
+<g id="edge244" class="edge"><title>k_ce3e3216:m_fce6b61b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M1640.13,-2804C1730.85,-2804 1759.96,-2757.83 1799.13,-2676 1852.68,-2564.14 1811.18,-2516.66 1775.13,-2398 1692.2,-2125.07 1639.35,-2066.69 1496.13,-1820 1490.74,-1810.72 1484.45,-1801.03 1478.34,-1792.07"/>
+<polygon fill="black" stroke="black" points="1481.15,-1789.98 1472.58,-1783.75 1475.4,-1793.97 1481.15,-1789.98"/>
+</g>
+<!-- k_36bedd9c -->
+<!-- k_36bedd9c->k_fe8ab28b -->
+<g id="edge248" class="edge"><title>k_36bedd9c:m_a9ff88e7:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M1338.13,-3026C1355.69,-3026 1339.18,-3003.94 1337.13,-2986.5 1313.08,-2781.45 1262.58,-2737.34 1241.13,-2532 1234.85,-2471.92 1239.55,-2401.07 1243.11,-2362.51"/>
+<polygon fill="black" stroke="black" points="1246.64,-2362.37 1244.12,-2352.08 1239.67,-2361.7 1246.64,-2362.37"/>
+</g>
+<!-- k_36bedd9c->k_79d9c91b -->
+<g id="edge246" class="edge"><title>k_36bedd9c:m_a9ff88e7:e->k_79d9c91b</title>
+<path fill="none" stroke="black" d="M1338.13,-3026C1355.69,-3026 1349.23,-2999.22 1337.13,-2986.5 1262.95,-2908.5 933.722,-3022.47 854.13,-2950 768.322,-2871.88 782.697,-2714.4 792.866,-2650.21"/>
+<polygon fill="black" stroke="black" points="796.369,-2650.47 794.568,-2640.03 789.465,-2649.32 796.369,-2650.47"/>
+</g>
+<!-- k_36bedd9c->k_8059d21c -->
+<g id="edge250" class="edge"><title>k_36bedd9c:m_a9ff88e7:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M1338.13,-3026C1355.69,-3026 1349.5,-2998.97 1337.13,-2986.5 1252.19,-2900.85 335.977,-3036.72 252.13,-2950 178.602,-2873.96 237.273,-2816.73 252.13,-2712 298.141,-2387.66 328.652,-2305.35 457.13,-2004 462.517,-1991.36 469.867,-1978.11 476.597,-1966.96"/>
+<polygon fill="black" stroke="black" points="479.763,-1968.49 482.048,-1958.15 473.81,-1964.81 479.763,-1968.49"/>
+</g>
+<!-- k_36bedd9c->k_7824fe0f -->
+<g id="edge256" class="edge"><title>k_36bedd9c:m_a9ff88e7:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M1338.13,-3026C1491.82,-3026 1445.36,-2741.71 1426.4,-2650.09"/>
+<polygon fill="black" stroke="black" points="1429.79,-2649.2 1424.29,-2640.14 1422.94,-2650.65 1429.79,-2649.2"/>
+</g>
+<!-- k_36bedd9c->k_9a759b9f -->
+<g id="edge254" class="edge"><title>k_36bedd9c:m_a9ff88e7:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M1338.13,-3026C1409.06,-3026 1588.57,-2988.52 1648.13,-2950 1648.64,-2949.67 1861.88,-2676.55 1862.13,-2676 1937.58,-2511.87 1917.25,-1921.12 1911.43,-1784.39"/>
+<polygon fill="black" stroke="black" points="1914.92,-1784.14 1910.99,-1774.3 1907.92,-1784.44 1914.92,-1784.14"/>
+</g>
+<!-- k_36bedd9c->k_3b5a6e9c -->
+<g id="edge258" class="edge"><title>k_36bedd9c:m_fce6b61b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M1338.13,-3000C1344.15,-3000 1341.47,-2990.67 1337.13,-2986.5 1246.88,-2899.92 306.837,-3031.68 212.13,-2950 51.7647,-2811.69 29.4947,-2204.68 97.1297,-2004 113.038,-1956.8 117.571,-1936.16 161.13,-1912 301.808,-1833.98 746.487,-1959.26 884.13,-1876 908.848,-1861.05 892.64,-1835.32 917.13,-1820 1001.98,-1766.9 1267.98,-1803.63 1366.13,-1784 1367.39,-1783.75 1368.65,-1783.49 1369.92,-1783.21"/>
+<polygon fill="black" stroke="black" points="1370.79,-1786.6 1379.72,-1780.9 1369.19,-1779.79 1370.79,-1786.6"/>
+</g>
+<!-- k_36bedd9c->k_b69674be -->
+<g id="edge252" class="edge"><title>k_36bedd9c:m_a9ff88e7:e->k_b69674be</title>
+<path fill="none" stroke="black" d="M1338.13,-3026C1448.54,-3026 1733.75,-3005.62 1829.13,-2950 1862.23,-2930.7 1888.08,-2894.88 1904.22,-2867.56"/>
+<polygon fill="black" stroke="black" points="1907.39,-2869.08 1909.32,-2858.66 1901.31,-2865.6 1907.39,-2869.08"/>
+</g>
+<!-- k_96c3da4b -->
+<!-- k_96c3da4b->k_fe8ab28b -->
+<g id="edge260" class="edge"><title>k_96c3da4b:m_f138584c:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M1142.13,-2830C1190.27,-2830 1153.9,-2441.21 1175.13,-2398 1182.77,-2382.46 1195.97,-2368.95 1208.94,-2358.41"/>
+<polygon fill="black" stroke="black" points="1211.16,-2361.12 1216.93,-2352.23 1206.88,-2355.58 1211.16,-2361.12"/>
+</g>
+<!-- k_96c3da4b->k_79d9c91b -->
+<g id="edge264" class="edge"><title>k_96c3da4b:m_f138584c:e->k_79d9c91b</title>
+<path fill="none" stroke="black" d="M1142.13,-2830C1159.69,-2830 1150.43,-2805.39 1141.13,-2790.5 1109.21,-2739.4 949.921,-2675.99 860.068,-2643.46"/>
+<polygon fill="black" stroke="black" points="861.127,-2640.12 850.533,-2640.03 858.757,-2646.71 861.127,-2640.12"/>
+</g>
+<!-- k_96c3da4b->k_8059d21c -->
+<g id="edge262" class="edge"><title>k_96c3da4b:m_f138584c:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M1142.13,-2830C1159.69,-2830 1146.61,-2807.18 1141.13,-2790.5 1121.74,-2731.52 1093.33,-2729.08 1061.13,-2676 964.927,-2517.43 980.385,-2453.64 868.13,-2306 817.695,-2239.67 790.983,-2235.98 731.13,-2178 652.501,-2101.84 561.745,-2009.39 518.93,-1965.5"/>
+<polygon fill="black" stroke="black" points="521.236,-1962.85 511.75,-1958.14 516.223,-1967.74 521.236,-1962.85"/>
+</g>
+<!-- k_96c3da4b->k_7824fe0f -->
+<g id="edge268" class="edge"><title>k_96c3da4b:m_f138584c:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M1142.13,-2830C1262,-2830 1363.39,-2704.49 1402.68,-2648.46"/>
+<polygon fill="black" stroke="black" points="1405.65,-2650.31 1408.44,-2640.09 1399.89,-2646.34 1405.65,-2650.31"/>
+</g>
+<!-- k_96c3da4b->k_9a759b9f -->
+<g id="edge266" class="edge"><title>k_96c3da4b:m_f138584c:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M1142.13,-2830C1290.81,-2830 1219.36,-2638.75 1350.13,-2568 1426.68,-2526.59 1675.42,-2590.2 1740.13,-2532 1844.47,-2438.16 1834.67,-2050.01 1860.13,-1912 1867.67,-1871.11 1863.68,-1859.35 1877.13,-1820 1881.46,-1807.34 1887.94,-1794.08 1894.01,-1782.93"/>
+<polygon fill="black" stroke="black" points="1897.11,-1784.56 1898.96,-1774.13 1891.01,-1781.13 1897.11,-1784.56"/>
+</g>
+<!-- k_96c3da4b->k_3b5a6e9c -->
+<g id="edge270" class="edge"><title>k_96c3da4b:m_fce6b61b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M1142.13,-2804C1148.15,-2804 1142.53,-2796.35 1141.13,-2790.5 1116.18,-2686.26 1090.43,-2666.48 1048.13,-2568 1015.54,-2492.12 1015.33,-2468.98 973.13,-2398 918.633,-2306.34 898.567,-2285.15 819.13,-2214 798.732,-2195.73 781.614,-2202.37 769.13,-2178 757.783,-2155.85 761.917,-2145.82 769.13,-2122 774.702,-2103.6 782.935,-2102.3 793.13,-2086 815.518,-2050.19 806.643,-2028.37 841.13,-2004 910.606,-1954.9 947.219,-1990.98 1029.13,-1968 1141.52,-1936.47 1171.42,-1929.57 1275.13,-1876 1323.22,-1851.15 1373.95,-1815.68 1408.71,-1789.75"/>
+<polygon fill="black" stroke="black" points="1410.86,-1792.51 1416.76,-1783.71 1406.66,-1786.91 1410.86,-1792.51"/>
+</g>
+<!-- k_216a3af0 -->
+<!-- k_216a3af0->k_fe8ab28b -->
+<g id="edge272" class="edge"><title>k_216a3af0:m_3b84fb69:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M749.13,-2830C766.691,-2830 752.306,-2807.56 748.13,-2790.5 723.881,-2691.45 624.727,-2644.52 692.13,-2568 734.033,-2520.43 918.37,-2560.24 975.13,-2532 1049.7,-2494.9 1038,-2445.9 1106.13,-2398 1130.47,-2380.89 1160.12,-2366.56 1185.85,-2355.82"/>
+<polygon fill="black" stroke="black" points="1187.2,-2359.05 1195.14,-2352.03 1184.56,-2352.57 1187.2,-2359.05"/>
+</g>
+<!-- k_216a3af0->k_79d9c91b -->
+<g id="edge276" class="edge"><title>k_216a3af0:m_3b84fb69:e->k_79d9c91b</title>
+<path fill="none" stroke="black" d="M749.13,-2830C822.147,-2830 811.854,-2707.06 803.192,-2650.21"/>
+<polygon fill="black" stroke="black" points="806.608,-2649.41 801.56,-2640.09 799.697,-2650.52 806.608,-2649.41"/>
+</g>
+<!-- k_216a3af0->k_8059d21c -->
+<g id="edge274" class="edge"><title>k_216a3af0:m_3b84fb69:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M749.13,-2830C766.691,-2830 755.47,-2806.45 748.13,-2790.5 716.365,-2721.46 663.137,-2739.33 621.13,-2676 599.824,-2643.88 509.13,-2341.53 509.13,-2334 509.13,-2334 509.13,-2334 509.13,-2150 509.13,-2084.88 501.864,-2008.69 497.446,-1968.37"/>
+<polygon fill="black" stroke="black" points="500.901,-1967.78 496.311,-1958.23 493.945,-1968.55 500.901,-1967.78"/>
+</g>
+<!-- k_216a3af0->k_7824fe0f -->
+<g id="edge280" class="edge"><title>k_216a3af0:m_3b84fb69:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M749.13,-2830C819.331,-2830 792.545,-2745.7 854.13,-2712 938.243,-2665.98 1216.5,-2638.24 1348.91,-2627.34"/>
+<polygon fill="black" stroke="black" points="1349.27,-2630.82 1358.96,-2626.52 1348.71,-2623.85 1349.27,-2630.82"/>
+</g>
+<!-- k_216a3af0->k_9a759b9f -->
+<g id="edge278" class="edge"><title>k_216a3af0:m_3b84fb69:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M749.13,-2830C766.691,-2830 753.758,-2807.13 748.13,-2790.5 727.984,-2730.96 690.158,-2733.65 665.13,-2676 598.763,-2523.12 551.342,-2464.08 604.13,-2306 673.926,-2096.98 709.32,-2013.09 905.13,-1912 1024.21,-1850.52 1377.55,-1910.22 1507.13,-1876 1561.71,-1861.59 1567.86,-1838.68 1621.13,-1820 1684.15,-1797.9 1757.65,-1781.75 1814.76,-1771.2"/>
+<polygon fill="black" stroke="black" points="1815.66,-1774.59 1824.87,-1769.36 1814.4,-1767.71 1815.66,-1774.59"/>
+</g>
+<!-- k_216a3af0->k_3b5a6e9c -->
+<g id="edge282" class="edge"><title>k_216a3af0:m_fce6b61b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M749.13,-2804C755.146,-2804 751.15,-2795.7 748.13,-2790.5 702.393,-2711.72 635.307,-2746.92 578.13,-2676 358.031,-2403.02 94.0196,-2113.33 381.13,-1912 455.618,-1859.77 1119.7,-1920.36 1199.13,-1876 1225.39,-1861.34 1212.71,-1837.56 1237.13,-1820 1285.46,-1785.25 1309.15,-1801.22 1366.13,-1784 1367.4,-1783.62 1368.68,-1783.23 1369.96,-1782.84"/>
+<polygon fill="black" stroke="black" points="1371.42,-1786.05 1379.94,-1779.75 1369.35,-1779.36 1371.42,-1786.05"/>
+</g>
+<!-- k_f82d8f98 -->
+<!-- k_f82d8f98->k_fe8ab28b -->
+<g id="edge284" class="edge"><title>k_f82d8f98:m_1e5046ac:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M379.13,-2830C435.581,-2830 396.751,-2760.2 426.13,-2712 522.371,-2554.09 535.6,-2484.35 699.13,-2398 739.96,-2376.44 1030.61,-2350.98 1170.83,-2339.78"/>
+<polygon fill="black" stroke="black" points="1171.37,-2343.25 1181.06,-2338.96 1170.82,-2336.27 1171.37,-2343.25"/>
+</g>
+<!-- k_f82d8f98->k_79d9c91b -->
+<g id="edge288" class="edge"><title>k_f82d8f98:m_1e5046ac:e->k_79d9c91b</title>
+<path fill="none" stroke="black" d="M379.13,-2830C435.581,-2830 383.487,-2748.99 426.13,-2712 465.396,-2677.94 595.623,-2651.89 690.956,-2636.79"/>
+<polygon fill="black" stroke="black" points="691.602,-2640.23 700.941,-2635.23 690.52,-2633.31 691.602,-2640.23"/>
+</g>
+<!-- k_f82d8f98->k_8059d21c -->
+<g id="edge286" class="edge"><title>k_f82d8f98:m_1e5046ac:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M379.13,-2830C380.366,-2830 456.989,-2123.23 457.13,-2122 463.132,-2069.53 459.01,-2055.4 471.13,-2004 473.992,-1991.86 478.41,-1978.84 482.611,-1967.73"/>
+<polygon fill="black" stroke="black" points="485.976,-1968.74 486.358,-1958.15 479.456,-1966.19 485.976,-1968.74"/>
+</g>
+<!-- k_f82d8f98->k_7824fe0f -->
+<g id="edge292" class="edge"><title>k_f82d8f98:m_1e5046ac:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M379.13,-2830C435.581,-2830 380.631,-2745.42 426.13,-2712 469.058,-2680.47 851.082,-2680.77 904.13,-2676 1063.12,-2661.7 1249.28,-2641.32 1348.79,-2630.13"/>
+<polygon fill="black" stroke="black" points="1349.48,-2633.57 1359.02,-2628.98 1348.69,-2626.62 1349.48,-2633.57"/>
+</g>
+<!-- k_f82d8f98->k_9a759b9f -->
+<g id="edge290" class="edge"><title>k_f82d8f98:m_1e5046ac:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M379.13,-2830C396.691,-2830 382.608,-2807.48 378.13,-2790.5 344.921,-2664.57 271.742,-2658.34 240.13,-2532 209.448,-2409.38 216.777,-2101.72 267.13,-2004 281.882,-1975.37 349.059,-1923.54 379.13,-1912 544.444,-1848.56 999.56,-1899 1175.13,-1876 1290.61,-1860.87 1316.42,-1840.17 1431.13,-1820 1563.61,-1796.7 1718.02,-1777.48 1814.94,-1766.37"/>
+<polygon fill="black" stroke="black" points="1815.47,-1769.83 1825.01,-1765.22 1814.68,-1762.88 1815.47,-1769.83"/>
+</g>
+<!-- k_f82d8f98->k_3b5a6e9c -->
+<g id="edge294" class="edge"><title>k_f82d8f98:m_fce6b61b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M379.13,-2804C385.146,-2804 381.185,-2795.68 378.13,-2790.5 330.928,-2710.43 257.491,-2751.39 203.13,-2676 164.417,-2622.31 175.145,-2597.43 165.13,-2532 123.116,-2257.52 -2.37349,-2043.61 242.13,-1912 308.264,-1876.4 842.975,-1887.92 917.13,-1876 1010.81,-1860.94 1030.26,-1839.43 1123.13,-1820 1229.99,-1797.64 1259.85,-1808.99 1366.13,-1784 1367.42,-1783.7 1368.72,-1783.38 1370.02,-1783.06"/>
+<polygon fill="black" stroke="black" points="1371.33,-1786.34 1380.12,-1780.42 1369.56,-1779.56 1371.33,-1786.34"/>
+</g>
+<!-- k_340f81b4 -->
+<!-- k_340f81b4->k_fe8ab28b -->
+<g id="edge296" class="edge"><title>k_340f81b4:m_d1e0d2bd:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M2551.13,-2830C2559.91,-2830 2554.92,-2797.86 2550.13,-2790.5 2505.6,-2722.11 2462.26,-2735.57 2384.13,-2712 2277.5,-2679.84 2244.55,-2701.51 2136.13,-2676 1986.73,-2640.84 1958.57,-2598.36 1808.13,-2568 1710.23,-2548.24 1438.19,-2594.31 1360.13,-2532 1311.35,-2493.07 1352.02,-2450.41 1318.13,-2398 1308.43,-2383 1294.29,-2369.37 1281.1,-2358.58"/>
+<polygon fill="black" stroke="black" points="1283.08,-2355.69 1273.06,-2352.25 1278.75,-2361.19 1283.08,-2355.69"/>
+</g>
+<!-- k_340f81b4->k_79d9c91b -->
+<g id="edge300" class="edge"><title>k_340f81b4:m_d1e0d2bd:e->k_79d9c91b</title>
+<path fill="none" stroke="black" d="M2551.13,-2830C2559.91,-2830 2554.92,-2797.86 2550.13,-2790.5 2505.6,-2722.11 2463.44,-2731.26 2384.13,-2712 2160.71,-2657.74 1579.54,-2691.2 1350.13,-2676 1195.23,-2665.74 1016.51,-2646.98 905.404,-2634.51"/>
+<polygon fill="black" stroke="black" points="905.528,-2631 895.199,-2633.36 904.744,-2637.95 905.528,-2631"/>
+</g>
+<!-- k_340f81b4->k_8059d21c -->
+<g id="edge298" class="edge"><title>k_340f81b4:m_d1e0d2bd:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M2551.13,-2830C2568.69,-2830 2551.83,-2807.98 2550.13,-2790.5 2548.56,-2774.33 2464.05,-2225.04 2452.13,-2214 2388.28,-2154.85 2148.29,-2190.29 2062.13,-2178 1659.67,-2120.58 1566.5,-2062.06 1164.13,-2004 952.72,-1973.49 701.608,-1953.92 575.287,-1945.22"/>
+<polygon fill="black" stroke="black" points="575.517,-1941.73 565.302,-1944.54 575.04,-1948.71 575.517,-1941.73"/>
+</g>
+<!-- k_340f81b4->k_7824fe0f -->
+<g id="edge308" class="edge"><title>k_340f81b4:m_d1e0d2bd:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M2551.13,-2830C2559.91,-2830 2554.92,-2797.86 2550.13,-2790.5 2505.6,-2722.11 2462.84,-2733.56 2384.13,-2712 2362.57,-2706.09 1711.07,-2647.85 1491.54,-2628.33"/>
+<polygon fill="black" stroke="black" points="1491.69,-2624.83 1481.41,-2627.43 1491.07,-2631.81 1491.69,-2624.83"/>
+</g>
+<!-- k_340f81b4->k_9a759b9f -->
+<g id="edge302" class="edge"><title>k_340f81b4:m_d1e0d2bd:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M2551.13,-2830C2557.7,-2830 2559.55,-2718.55 2560.13,-2712 2569.88,-2602.09 2585.13,-2575.34 2585.13,-2465 2585.13,-2465 2585.13,-2465 2585.13,-2334 2585.13,-2279.61 2600.04,-2252 2561.13,-2214 2494.95,-2149.36 2446.15,-2199.31 2356.13,-2178 2217.52,-2145.18 2153.24,-2183.22 2049.13,-2086 2002.97,-2042.9 1976.79,-1876.77 1949.13,-1820 1942.97,-1807.36 1935.06,-1793.98 1927.97,-1782.74"/>
+<polygon fill="black" stroke="black" points="1930.86,-1780.77 1922.51,-1774.24 1924.97,-1784.55 1930.86,-1780.77"/>
+</g>
+<!-- k_340f81b4->k_9fad21d -->
+<g id="edge306" class="edge"><title>k_340f81b4:m_d1e0d2bd:e->k_9fad21d</title>
+<path fill="none" stroke="black" d="M2551.13,-2830C2564.28,-2830 2555.61,-2724.35 2560.13,-2712 2566.91,-2693.47 2578.18,-2694.06 2586.13,-2676 2660.38,-2507.36 2651.37,-2453.31 2670.13,-2270 2672.66,-2245.24 2682.54,-2235.58 2670.13,-2214 2613.73,-2115.94 2506.53,-2184.06 2450.13,-2086 2431.96,-2054.41 2426.5,-2031.75 2450.13,-2004 2515.22,-1927.56 2586.92,-2019.44 2673.13,-1968 2700.08,-1951.92 2688.92,-1927.63 2716.13,-1912 2826.08,-1848.86 2873.64,-1894.1 2999.13,-1876 3153.75,-1853.7 3191.88,-1844.7 3346.13,-1820 3459,-1801.93 3589.68,-1781.22 3670.88,-1768.37"/>
+<polygon fill="black" stroke="black" points="3671.69,-1771.78 3681.02,-1766.76 3670.6,-1764.87 3671.69,-1771.78"/>
+</g>
+<!-- k_340f81b4->k_3b5a6e9c -->
+<g id="edge310" class="edge"><title>k_340f81b4:m_fce6b61b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M2551.13,-2804C2569.96,-2804 2547.13,-2483.83 2547.13,-2465 2547.13,-2465 2547.13,-2465 2547.13,-2334 2547.13,-2119.8 2293.15,-2249.19 2091.13,-2178 1960.59,-2132 1619.68,-1881.66 1496.96,-1789.81"/>
+<polygon fill="black" stroke="black" points="1498.96,-1786.93 1488.86,-1783.74 1494.76,-1792.53 1498.96,-1786.93"/>
+</g>
+<!-- k_340f81b4->k_8e9f39bf -->
+<g id="edge304" class="edge"><title>k_340f81b4:m_d1e0d2bd:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M2551.13,-2830C2564.28,-2830 2550.62,-2721.08 2560.13,-2712 2608.86,-2665.49 3704.91,-2680.34 3772.13,-2676 3932.17,-2665.68 4118,-2645.39 4225.52,-2632.84"/>
+<polygon fill="black" stroke="black" points="4226.16,-2636.29 4235.68,-2631.65 4225.34,-2629.33 4226.16,-2636.29"/>
+</g>
+<!-- k_658873e3->k_c3b7abd7 -->
+<g id="edge312" class="edge"><title>k_658873e3:m_39b7e4fa:e->k_c3b7abd7</title>
+<path fill="none" stroke="black" d="M2128.13,-1072C2150.69,-1072 2161.5,-1046.67 2166.63,-1024.87"/>
+<polygon fill="black" stroke="black" points="2170.09,-1025.4 2168.66,-1014.9 2163.23,-1024 2170.09,-1025.4"/>
+</g>
+<!-- k_658873e3->k_dc31a474 -->
+<g id="edge314" class="edge"><title>k_658873e3:m_39b7e4fa:e->k_dc31a474</title>
+<path fill="none" stroke="black" d="M2128.13,-1072C2214.89,-1072 2029.63,-1027.37 1934.24,-1005.63"/>
+<polygon fill="black" stroke="black" points="1935,-1002.21 1924.47,-1003.41 1933.45,-1009.04 1935,-1002.21"/>
+</g>
+<!-- k_bd2e368b->k_cd819caf -->
+<g id="edge340" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4743.15,-2228 4740.46,-2218.68 4736.13,-2214.5 4698.29,-2177.97 3842.24,-2185.1 3790.13,-2178 3430.97,-2129.1 3012.39,-2009.43 2851.19,-1960.93"/>
+<polygon fill="black" stroke="black" points="2851.99,-1957.51 2841.4,-1957.98 2849.97,-1964.22 2851.99,-1957.51"/>
+</g>
+<!-- k_bd2e368b->k_e65a2cb5 -->
+<g id="edge324" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_e65a2cb5</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4922.09,-2228 4931.08,-2058.82 4959.13,-1876 4962.9,-1851.4 4969.08,-1842.81 4959.13,-1820 4952.38,-1804.52 4939.83,-1791.11 4927.26,-1780.62"/>
+<polygon fill="black" stroke="black" points="4929.09,-1777.6 4919.07,-1774.15 4924.75,-1783.09 4929.09,-1777.6"/>
+</g>
+<!-- k_bd2e368b->k_9d34b335 -->
+<g id="edge322" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_9d34b335</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4743.15,-2228 4740.41,-2218.73 4736.13,-2214.5 4688.51,-2167.51 4201.01,-2189.65 4135.13,-2178 4124.96,-2176.2 4114.34,-2173.69 4104.05,-2170.89"/>
+<polygon fill="black" stroke="black" points="4104.88,-2167.49 4094.31,-2168.14 4102.98,-2174.23 4104.88,-2167.49"/>
+</g>
+<!-- k_bd2e368b->k_bebd50c7 -->
+<g id="edge320" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_bebd50c7</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4738.32,-2228 5420.07,-2178.55 5421.13,-2178 5513.87,-2129.73 5513.74,-2071.69 5527.13,-1968 5553.78,-1761.66 5567.91,-1638.25 5398.13,-1518 5322.59,-1464.5 5072.7,-1505.38 4983.13,-1482 4924.62,-1466.73 4917.82,-1440.57 4859.13,-1426 4685.29,-1382.84 4152.29,-1367.99 3932.46,-1363.61"/>
+<polygon fill="black" stroke="black" points="3932.3,-1360.1 3922.23,-1363.41 3932.16,-1367.1 3932.3,-1360.1"/>
+</g>
+<!-- k_bd2e368b->k_a162095c -->
+<g id="edge328" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_a162095c</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4743.15,-2228 4740.14,-2218.98 4736.13,-2214.5 4734.96,-2213.19 4240.87,-2122.25 4239.13,-2122 4165.05,-2111.14 3954.16,-2141.7 3904.13,-2086 3864.63,-2042.03 3868.32,-1867.03 3904.13,-1820 3912.99,-1808.37 3981.5,-1790.33 4041.8,-1776.36"/>
+<polygon fill="black" stroke="black" points="4042.82,-1779.72 4051.78,-1774.07 4041.25,-1772.89 4042.82,-1779.72"/>
+</g>
+<!-- k_bd2e368b->k_9fad21d -->
+<g id="edge334" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_9fad21d</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4831.21,-2228 4915.38,-1887.77 4850.13,-1820 4813.58,-1782.03 3954.52,-1789.76 3902.13,-1784 3877.7,-1781.32 3851.31,-1777 3827.43,-1772.56"/>
+<polygon fill="black" stroke="black" points="3827.85,-1769.07 3817.37,-1770.65 3826.54,-1775.95 3827.85,-1769.07"/>
+</g>
+<!-- k_bd2e368b->k_7ff585a7 -->
+<g id="edge316" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4743.15,-2228 4740.4,-2218.74 4736.13,-2214.5 4651.62,-2130.48 4303.33,-2239.28 4201.13,-2178 4175.96,-2162.91 4191.01,-2137.56 4166.13,-2122 4101.71,-2081.72 3877.66,-2141.83 3826.13,-2086 3745.62,-1998.77 3803.91,-1929.33 3850.13,-1820 3868.42,-1776.74 3863.33,-1754.48 3902.13,-1728 3995.94,-1663.98 4062.34,-1757.49 4155.13,-1692 4188.75,-1668.27 4163.31,-1631.94 4198.13,-1610 4290.6,-1551.74 5077.41,-1608.46 5181.13,-1574 5222.66,-1560.2 5225.1,-1541.32 5262.13,-1518 5289.42,-1500.81 5308.94,-1509.89 5325.13,-1482 5358.15,-1425.11 5367.14,-1384.62 5325.13,-1334 5269.68,-1267.19 5205.75,-1345.58 5133.13,-1298 5107.97,-1281.52 5121.63,-1256.24 5095.13,-1242 5018.61,-1200.88 2053.2,-1223.57 1968.13,-1206 1961,-1204.53 1953.68,-1202.29 1946.61,-1199.72"/>
+<polygon fill="black" stroke="black" points="1947.77,-1196.41 1937.18,-1196.03 1945.22,-1202.93 1947.77,-1196.41"/>
+</g>
+<!-- k_bd2e368b->k_5425561b -->
+<g id="edge318" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_5425561b</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4743.15,-2228 4740.39,-2218.75 4736.13,-2214.5 4657.8,-2136.22 4335.02,-2233.4 4239.13,-2178 4213.09,-2162.95 4226.89,-2137.52 4201.13,-2122 4138.7,-2084.38 3924.44,-2139.67 3875.13,-2086 3795.13,-1998.93 3825.99,-1925.12 3880.13,-1820 3888.24,-1804.25 3902.06,-1790.77 3915.64,-1780.3"/>
+<polygon fill="black" stroke="black" points="3918,-1782.91 3924.01,-1774.18 3913.87,-1777.26 3918,-1782.91"/>
+</g>
+<!-- k_bd2e368b->k_414f39df -->
+<g id="edge336" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_414f39df</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4745.99,-2228 5365.11,-2181.78 5373.13,-2178 5424.6,-2153.76 5433.25,-2135.01 5462.13,-2086 5522.76,-1983.11 5522.82,-1937.25 5500.13,-1820 5491.75,-1776.73 5498.96,-1753.65 5463.13,-1728 5403.14,-1685.05 4870,-1715.69 4800.13,-1692 4738.95,-1671.26 4741.01,-1631.6 4680.13,-1610 4588.51,-1577.49 4341,-1582.24 4244.13,-1574 4158.15,-1566.69 4059.21,-1557.99 3994.38,-1552.25"/>
+<polygon fill="black" stroke="black" points="3994.55,-1548.75 3984.28,-1551.35 3993.93,-1555.72 3994.55,-1548.75"/>
+</g>
+<!-- k_bd2e368b->k_1fa76df9 -->
+<g id="edge338" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_1fa76df9</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4743.15,-2228 4740.4,-2218.73 4736.13,-2214.5 4647.07,-2126.26 4283.73,-2237.04 4173.13,-2178 4145.45,-2163.22 4157.49,-2137.36 4130.13,-2122 3999.55,-2048.7 3924.66,-2161.14 3795.13,-2086 3695.47,-2028.19 3685.71,-1983.06 3643.13,-1876 3613.48,-1801.44 3649.47,-1577.94 3596.13,-1518 3584.77,-1505.23 3499.13,-1485.38 3430.39,-1471.18"/>
+<polygon fill="black" stroke="black" points="3430.88,-1467.71 3420.38,-1469.12 3429.47,-1474.56 3430.88,-1467.71"/>
+</g>
+<!-- k_f9384575 -->
+<g id="node169" class="node"><title>k_f9384575</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5453.13,-2063 5347.13,-2063 5347.13,-2027 5453.13,-2027 5453.13,-2063"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5348.13,-2032 5348.13,-2057 5453.13,-2057 5453.13,-2032 5348.13,-2032"/>
+<text text-anchor="start" x="5353.13" y="-2041.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">AccountStore</text>
+</g>
+<!-- k_bd2e368b->k_f9384575 -->
+<g id="edge332" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_f9384575</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4745.51,-2228 5331.26,-2182.79 5338.13,-2178 5373.05,-2153.65 5388.8,-2104.42 5395.53,-2073.16"/>
+<polygon fill="black" stroke="black" points="5398.97,-2073.81 5397.48,-2063.32 5392.1,-2072.45 5398.97,-2073.81"/>
+</g>
+<!-- k_b545a68a -->
+<!-- k_bd2e368b->k_b545a68a -->
+<g id="edge326" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_b545a68a</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C5036.4,-2228 5015.82,-1972.68 5188.13,-1728 5225.03,-1675.6 5271.23,-1617.65 5300.72,-1581.53"/>
+<polygon fill="black" stroke="black" points="5303.49,-1583.68 5307.12,-1573.72 5298.07,-1579.24 5303.49,-1583.68"/>
+</g>
+<!-- k_b0057a76 -->
+<!-- k_bd2e368b->k_b0057a76 -->
+<g id="edge342" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_b0057a76</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4743.15,-2228 4740.44,-2218.7 4736.13,-2214.5 4675.52,-2155.53 4075.74,-2192.07 3953.31,-2177.59"/>
+<polygon fill="black" stroke="black" points="3953.68,-2174.11 3943.27,-2176.08 3952.64,-2181.03 3953.68,-2174.11"/>
+</g>
+<!-- k_c29d2db0 -->
+<!-- k_bd2e368b->k_c29d2db0 -->
+<g id="edge330" class="edge"><title>k_bd2e368b:m_a1db3271:e->k_c29d2db0</title>
+<path fill="none" stroke="black" d="M4737.13,-2228C4861.08,-2228 5000.82,-2201.93 5096.65,-2179.93"/>
+<polygon fill="black" stroke="black" points="5097.71,-2183.28 5106.66,-2177.61 5096.13,-2176.46 5097.71,-2183.28"/>
+</g>
+<!-- k_ce071950->k_429c8161 -->
+<g id="edge356" class="edge"><title>k_ce071950:m_7182081:e->k_429c8161</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2509.02,-1834 2658.56,-1799.82 2744.7,-1776.71"/>
+<polygon fill="black" stroke="black" points="2745.63,-1780.08 2754.37,-1774.09 2743.8,-1773.33 2745.63,-1780.08"/>
+</g>
+<!-- k_ce071950->k_a939ddfc -->
+<g id="edge360" class="edge"><title>k_ce071950:m_7182081:e->k_a939ddfc</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2413.07,-1834 2443.47,-1804.76 2461.78,-1782.08"/>
+<polygon fill="black" stroke="black" points="2464.61,-1784.14 2467.97,-1774.09 2459.08,-1779.86 2464.61,-1784.14"/>
+</g>
+<!-- k_ce071950->k_9a759b9f -->
+<g id="edge364" class="edge"><title>k_ce071950:m_7182081:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2384.15,-1834 2381.33,-1824.81 2377.13,-1820.5 2319.75,-1761.67 2089.87,-1799.3 2009.13,-1784 1998.65,-1782.01 1987.67,-1779.43 1977,-1776.64"/>
+<polygon fill="black" stroke="black" points="1977.87,-1773.25 1967.3,-1774.02 1976.05,-1780.01 1977.87,-1773.25"/>
+</g>
+<!-- k_ce071950->k_1a7eca26 -->
+<g id="edge350" class="edge"><title>k_ce071950:m_7182081:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2384.15,-1834 2378.9,-1826.25 2377.13,-1820.5 2351.49,-1737.34 2279.13,-1738.02 2279.13,-1651 2279.13,-1651 2279.13,-1651 2279.13,-1546 2279.13,-1485.97 2290.5,-1458.25 2341.13,-1426 2424.51,-1372.89 3131.75,-1399.74 3230.13,-1390 3265.9,-1386.46 3305.44,-1380.41 3338.06,-1374.84"/>
+<polygon fill="black" stroke="black" points="3338.69,-1378.28 3347.95,-1373.13 3337.5,-1371.38 3338.69,-1378.28"/>
+</g>
+<!-- k_ce071950->k_7ff585a7 -->
+<g id="edge344" class="edge"><title>k_ce071950:m_7182081:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2384.15,-1834 2380.52,-1825.47 2377.13,-1820.5 2364.83,-1802.49 2023.13,-1672.8 2023.13,-1651 2023.13,-1651 2023.13,-1651 2023.13,-1362 2023.13,-1295.9 1967.76,-1235.36 1931.63,-1202.88"/>
+<polygon fill="black" stroke="black" points="1933.62,-1199.97 1923.79,-1196 1929,-1205.23 1933.62,-1199.97"/>
+</g>
+<!-- k_ce071950->k_1f909b4 -->
+<g id="edge346" class="edge"><title>k_ce071950:m_7182081:e->k_1f909b4</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2462.98,-1834 3041.6,-1779.59 3229.99,-1761.66"/>
+<polygon fill="black" stroke="black" points="3230.36,-1765.14 3239.98,-1760.7 3229.69,-1758.17 3230.36,-1765.14"/>
+</g>
+<!-- k_ce071950->k_2584ae8 -->
+<g id="edge358" class="edge"><title>k_ce071950:m_7182081:e->k_2584ae8</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2478.01,-1834 2330.62,-1685.39 2396.13,-1610 2424.78,-1577.03 2543.62,-1559.5 2618.8,-1551.53"/>
+<polygon fill="black" stroke="black" points="2619.52,-1554.97 2629.11,-1550.46 2618.8,-1548.01 2619.52,-1554.97"/>
+</g>
+<!-- k_ce071950->k_5425561b -->
+<g id="edge348" class="edge"><title>k_ce071950:m_7182081:e->k_5425561b</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2700.1,-1834 3506.64,-1823.86 3826.13,-1784 3850.99,-1780.9 3878.14,-1775.34 3901.1,-1769.99"/>
+<polygon fill="black" stroke="black" points="3902.07,-1773.35 3910.99,-1767.63 3900.45,-1766.54 3902.07,-1773.35"/>
+</g>
+<!-- k_ce071950->k_3b5a6e9c -->
+<g id="edge354" class="edge"><title>k_ce071950:m_7182081:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2375.15,-1834 2372.4,-1824.74 2368.13,-1820.5 2323.76,-1776.53 1869.44,-1788.42 1807.13,-1784 1713.58,-1777.36 1606.56,-1769.04 1534.64,-1763.2"/>
+<polygon fill="black" stroke="black" points="1534.54,-1759.68 1524.29,-1762.36 1533.97,-1766.66 1534.54,-1759.68"/>
+</g>
+<!-- k_ce071950->k_3b5a6e9c -->
+<g id="edge362" class="edge"><title>k_ce071950:m_7182081:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2393.15,-1834 2390.4,-1824.74 2386.13,-1820.5 2341.76,-1776.53 1887.44,-1788.42 1825.13,-1784 1725.5,-1776.93 1610.6,-1767.95 1534.88,-1762.1"/>
+<polygon fill="black" stroke="black" points="1534.7,-1758.57 1524.46,-1761.29 1534.16,-1765.55 1534.7,-1758.57"/>
+</g>
+<!-- k_ce071950->k_1fa76df9 -->
+<g id="edge352" class="edge"><title>k_ce071950:m_7182081:e->k_1fa76df9</title>
+<path fill="none" stroke="black" d="M2378.13,-1834C2393.91,-1834 2375.3,-1707.78 2375.13,-1692 2374.74,-1655.56 2354.38,-1639.96 2375.13,-1610 2441.36,-1514.38 2506.45,-1542.62 2620.13,-1518 2852.61,-1467.65 2917.63,-1507.54 3154.13,-1482 3186.84,-1478.47 3222.59,-1473.44 3254.05,-1468.62"/>
+<polygon fill="black" stroke="black" points="3254.76,-1472.05 3264.11,-1467.06 3253.69,-1465.13 3254.76,-1472.05"/>
+</g>
+<!-- k_2dde583f->k_49a1fb25 -->
+<g id="edge378" class="edge"><title>k_2dde583f:m_540a509d:e->k_49a1fb25</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1472.15,-2228 1469.28,-2218.86 1465.13,-2214.5 1419.75,-2166.81 1235.77,-2190.49 1171.13,-2178 1160.22,-2175.89 1148.77,-2173.29 1137.59,-2170.52"/>
+<polygon fill="black" stroke="black" points="1138.42,-2167.12 1127.87,-2168.06 1136.7,-2173.91 1138.42,-2167.12"/>
+</g>
+<!-- k_2dde583f->k_a7a419fb -->
+<g id="edge372" class="edge"><title>k_2dde583f:m_540a509d:e->k_a7a419fb</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1472.15,-2228 1469.39,-2218.75 1465.13,-2214.5 1425.64,-2175.06 1018.23,-2191.73 964.13,-2178 958.044,-2176.46 951.813,-2174.35 945.759,-2171.97"/>
+<polygon fill="black" stroke="black" points="947.013,-2168.7 936.437,-2168.07 944.308,-2175.16 947.013,-2168.7"/>
+</g>
+<!-- k_2dde583f->k_9fad21d -->
+<g id="edge380" class="edge"><title>k_2dde583f:m_540a509d:e->k_9fad21d</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1522.68,-2228 1532.33,-2202.85 1583.13,-2178 1726.45,-2107.89 1752.9,-2072.21 1897.13,-2004 1997.4,-1956.58 2021.47,-1938.71 2129.13,-1912 2220.47,-1889.34 2877.45,-1828.97 2971.13,-1820 3226.79,-1795.52 3530.28,-1772.21 3670.68,-1761.76"/>
+<polygon fill="black" stroke="black" points="3671.2,-1765.23 3680.91,-1761 3670.68,-1758.25 3671.2,-1765.23"/>
+</g>
+<!-- k_2dde583f->k_7ff585a7 -->
+<g id="edge370" class="edge"><title>k_2dde583f:m_540a509d:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1472.15,-2228 1469.16,-2218.96 1465.13,-2214.5 1402.48,-2145.21 1323.94,-2244.3 1258.13,-2178 1168.29,-2087.49 1113.13,-1720.88 1176.13,-1610 1320.83,-1355.34 1681.63,-1234.97 1832.8,-1194.45"/>
+<polygon fill="black" stroke="black" points="1834.11,-1197.73 1842.88,-1191.79 1832.32,-1190.96 1834.11,-1197.73"/>
+</g>
+<!-- k_2dde583f->k_5ca82e04 -->
+<g id="edge368" class="edge"><title>k_2dde583f:m_540a509d:e->k_5ca82e04</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1472.15,-2228 1469.24,-2218.9 1465.13,-2214.5 1386.66,-2130.53 1308.36,-2235.98 1209.13,-2178 1182.04,-2162.17 1186.62,-2145.77 1166.13,-2122 1118.51,-2066.77 1115.36,-2040.32 1052.13,-2004 993.804,-1970.5 968.576,-1990.34 905.13,-1968 813.982,-1935.91 793.697,-1920.9 708.13,-1876 648.548,-1844.73 581.642,-1804.58 540.95,-1779.56"/>
+<polygon fill="black" stroke="black" points="542.531,-1776.43 532.182,-1774.16 538.858,-1782.39 542.531,-1776.43"/>
+</g>
+<!-- k_2dde583f->k_2f704481 -->
+<g id="edge366" class="edge"><title>k_2dde583f:m_540a509d:e->k_2f704481</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1472.15,-2228 1469.12,-2219 1465.13,-2214.5 1409.56,-2151.77 1333.35,-2242.74 1280.13,-2178 1230.88,-2118.09 1277.32,-1869.23 1294.97,-1784.44"/>
+<polygon fill="black" stroke="black" points="1298.43,-1785 1297.07,-1774.49 1291.58,-1783.55 1298.43,-1785"/>
+</g>
+<!-- k_2dde583f->k_11372840 -->
+<g id="edge376" class="edge"><title>k_2dde583f:m_540a509d:e->k_11372840</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1543.48,-2228 1531.13,-2071.81 1531.13,-2045 1531.13,-2045 1531.13,-2045 1531.13,-1940 1531.13,-1636.67 1838.11,-1710.91 2037.13,-1482 2056.86,-1459.3 2050.33,-1443.02 2075.13,-1426 2372.71,-1221.73 2509.58,-1298.16 2866.13,-1242 3108.26,-1203.86 3397.55,-1187.43 3539.61,-1181.24"/>
+<polygon fill="black" stroke="black" points="3540.16,-1184.72 3550,-1180.8 3539.86,-1177.73 3540.16,-1184.72"/>
+</g>
+<!-- k_2dde583f->k_5425561b -->
+<g id="edge374" class="edge"><title>k_2dde583f:m_540a509d:e->k_5425561b</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1550.44,-2228 1568.84,-2203.74 1649.13,-2178 1861.63,-2109.86 1905.07,-2063.59 2120.13,-2004 2332.4,-1945.18 2388.24,-1936.66 2607.13,-1912 3029.21,-1864.45 3145.04,-1956.28 3562.13,-1876 3634.88,-1862 3648.44,-1842.16 3719.13,-1820 3780.96,-1800.62 3852.96,-1781.6 3901.02,-1769.4"/>
+<polygon fill="black" stroke="black" points="3902.07,-1772.74 3910.9,-1766.9 3900.35,-1765.96 3902.07,-1772.74"/>
+</g>
+<!-- k_2dde583f->k_a5714fa9 -->
+<g id="edge386" class="edge"><title>k_2dde583f:m_540a509d:e->k_a5714fa9</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1499.03,-2228 1462.03,-2203.92 1422.64,-2182.52"/>
+<polygon fill="black" stroke="black" points="1424.16,-2179.36 1413.7,-2177.72 1420.85,-2185.53 1424.16,-2179.36"/>
+</g>
+<!-- k_2dde583f->k_3b5a6e9c -->
+<g id="edge384" class="edge"><title>k_2dde583f:m_540a509d:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1544.55,-2228 1443.91,-1954.37 1441.13,-1876 1440.25,-1851.13 1439.01,-1844.8 1441.13,-1820 1441.87,-1811.36 1443.15,-1802.14 1444.59,-1793.46"/>
+<polygon fill="black" stroke="black" points="1448.04,-1794.04 1446.33,-1783.59 1441.15,-1792.83 1448.04,-1794.04"/>
+</g>
+<!-- k_2dde583f->k_414f39df -->
+<g id="edge382" class="edge"><title>k_2dde583f:m_540a509d:e->k_414f39df</title>
+<path fill="none" stroke="black" d="M1466.13,-2228C1507.68,-2228 1516.08,-2207.71 1545.13,-2178 1565.53,-2157.14 1791.51,-1743.68 1816.13,-1728 1880.21,-1687.18 2081.94,-1708.38 2156.13,-1692 2266.2,-1667.69 2285.22,-1630.14 2396.13,-1610 2658.62,-1562.34 3329.79,-1589.35 3596.13,-1574 3685.09,-1568.87 3787.35,-1559.61 3853.71,-1553.14"/>
+<polygon fill="black" stroke="black" points="3854.44,-1556.59 3864.05,-1552.13 3853.75,-1549.62 3854.44,-1556.59"/>
+</g>
+<!-- k_af50407e->k_7ff585a7 -->
+<g id="edge388" class="edge"><title>k_af50407e:m_80d9bd00:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M860.13,-2320C866.146,-2320 862.682,-2311.36 859.13,-2306.5 833.399,-2271.33 802.936,-2296.22 768.13,-2270 666.941,-2193.78 593.13,-2171.69 593.13,-2045 593.13,-2045 593.13,-2045 593.13,-1362 593.13,-1302.76 601.772,-1274.75 651.13,-1242 675.936,-1225.54 1574.81,-1190.34 1832.64,-1180.57"/>
+<polygon fill="black" stroke="black" points="1833.13,-1184.05 1842.99,-1180.17 1832.87,-1177.05 1833.13,-1184.05"/>
+</g>
+<!-- k_b8507171->k_7ff585a7 -->
+<g id="edge394" class="edge"><title>k_b8507171:m_4eabfea5:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M535.13,-1834C541.146,-1834 537.868,-1825.21 534.13,-1820.5 519.297,-1801.8 142.071,-1707.74 124.13,-1692 109.034,-1678.75 105.13,-1671.08 105.13,-1651 105.13,-1651 105.13,-1651 105.13,-1362 105.13,-1144.69 364.198,-1274.08 579.13,-1242 703.327,-1223.46 1579.32,-1189.92 1832.66,-1180.51"/>
+<polygon fill="black" stroke="black" points="1832.97,-1184 1842.83,-1180.14 1832.71,-1177.01 1832.97,-1184"/>
+</g>
+<!-- k_b8507171->k_5ca82e04 -->
+<g id="edge392" class="edge"><title>k_b8507171:m_4eabfea5:e->k_5ca82e04</title>
+<path fill="none" stroke="black" d="M535.13,-1834C558.073,-1834 540.922,-1804.76 524.175,-1782.08"/>
+<polygon fill="black" stroke="black" points="526.938,-1779.93 518.099,-1774.09 521.366,-1784.17 526.938,-1779.93"/>
+</g>
+<!-- k_b8507171->k_2f704481 -->
+<g id="edge390" class="edge"><title>k_b8507171:m_4eabfea5:e->k_2f704481</title>
+<path fill="none" stroke="black" d="M535.13,-1834C569.94,-1834 1055.38,-1782.34 1234.96,-1763.11"/>
+<polygon fill="black" stroke="black" points="1235.5,-1766.57 1245.07,-1762.02 1234.75,-1759.61 1235.5,-1766.57"/>
+</g>
+<!-- k_d7fdc6fa->k_7ff585a7 -->
+<g id="edge396" class="edge"><title>k_d7fdc6fa:m_b8b71743:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M2846.13,-1650C2863.73,-1650 2905.96,-1518.64 2826.13,-1426 2569.16,-1127.77 2341.39,-1331.11 1968.13,-1206 1962.62,-1204.15 1956.91,-1202.06 1951.27,-1199.87"/>
+<polygon fill="black" stroke="black" points="1952.46,-1196.58 1941.87,-1196.13 1949.87,-1203.08 1952.46,-1196.58"/>
+</g>
+<!-- k_d7fdc6fa->k_2584ae8 -->
+<g id="edge400" class="edge"><title>k_d7fdc6fa:m_b8b71743:e->k_2584ae8</title>
+<path fill="none" stroke="black" d="M2846.13,-1650C2863.69,-1650 2855.18,-1624.9 2845.13,-1610.5 2822.43,-1578 2780.63,-1561.87 2745.05,-1553.87"/>
+<polygon fill="black" stroke="black" points="2745.7,-1550.44 2735.2,-1551.83 2744.28,-1557.29 2745.7,-1550.44"/>
+</g>
+<!-- k_d7fdc6fa->k_2584ae8 -->
+<g id="edge402" class="edge"><title>k_d7fdc6fa:m_702001c6:e->k_2584ae8</title>
+<path fill="none" stroke="black" d="M2846.13,-1624C2899.32,-1624 2811.18,-1590.13 2744.89,-1567.02"/>
+<polygon fill="black" stroke="black" points="2745.88,-1563.66 2735.29,-1563.7 2743.59,-1570.28 2745.88,-1563.66"/>
+</g>
+<!-- k_d7fdc6fa->k_1fa76df9 -->
+<g id="edge398" class="edge"><title>k_d7fdc6fa:m_b8b71743:e->k_1fa76df9</title>
+<path fill="none" stroke="black" d="M2846.13,-1650C2939.35,-1650 2924.6,-1557.31 3009.13,-1518 3051.71,-1498.2 3170.51,-1478.23 3254.02,-1465.98"/>
+<polygon fill="black" stroke="black" points="3254.63,-1469.43 3264.02,-1464.53 3253.62,-1462.5 3254.63,-1469.43"/>
+</g>
+<!-- k_672c32f9->k_9d43c1d5 -->
+<g id="edge410" class="edge"><title>k_672c32f9:m_155ec683:e->k_9d43c1d5</title>
+<path fill="none" stroke="black" d="M3772.13,-2451C3978.5,-2451 4217.01,-2387.03 4327.31,-2353.7"/>
+<polygon fill="black" stroke="black" points="4328.39,-2357.02 4336.94,-2350.76 4326.36,-2350.33 4328.39,-2357.02"/>
+</g>
+<!-- k_672c32f9->k_acce46b4 -->
+<g id="edge408" class="edge"><title>k_672c32f9:m_155ec683:e->k_acce46b4</title>
+<path fill="none" stroke="black" d="M3772.13,-2451C3778.15,-2451 3775.32,-2441.82 3771.13,-2437.5 3652.86,-2315.67 3560.34,-2412.08 3391.13,-2398 3043.96,-2369.12 2629.58,-2347.01 2453.31,-2338.19"/>
+<polygon fill="black" stroke="black" points="2453.48,-2334.69 2443.32,-2337.69 2453.13,-2341.68 2453.48,-2334.69"/>
+</g>
+<!-- k_672c32f9->k_7ff585a7 -->
+<g id="edge404" class="edge"><title>k_672c32f9:m_155ec683:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M3772.13,-2451C3854.09,-2451 3725.14,-2167.74 3719.13,-2086 3710.45,-1968.03 3655.78,-1913.58 3728.13,-1820 3756.51,-1783.29 3790.5,-1813.72 3826.13,-1784 3848.31,-1765.5 3835.08,-1744 3859.13,-1728 3957.35,-1662.64 4029.08,-1764.53 4122.13,-1692 4153.11,-1667.85 4122.98,-1632.58 4155.13,-1610 4245.48,-1546.55 5053.28,-1630.5 5148.13,-1574 5172.95,-1559.22 5158.86,-1536.4 5181.13,-1518 5217.87,-1487.65 5252.6,-1519.4 5282.13,-1482 5322.98,-1430.26 5334.35,-1384.64 5292.13,-1334 5235.13,-1265.64 5168.11,-1348.95 5095.13,-1298 5071.44,-1281.46 5087.13,-1256.48 5062.13,-1242 4987.75,-1198.92 2052.3,-1223.39 1968.13,-1206 1961,-1204.53 1953.68,-1202.29 1946.61,-1199.72"/>
+<polygon fill="black" stroke="black" points="1947.77,-1196.41 1937.18,-1196.03 1945.22,-1202.93 1947.77,-1196.41"/>
+</g>
+<!-- k_672c32f9->k_1f909b4 -->
+<g id="edge406" class="edge"><title>k_672c32f9:m_155ec683:e->k_1f909b4</title>
+<path fill="none" stroke="black" d="M3772.13,-2451C3886.37,-2451 3472.26,-2181.86 3410.13,-2086 3344.67,-1985.01 3308.25,-1843.76 3294.98,-1784.23"/>
+<polygon fill="black" stroke="black" points="3298.32,-1783.11 3292.77,-1774.09 3291.48,-1784.61 3298.32,-1783.11"/>
+</g>
+<!-- k_550eb5f6->k_b545a68a -->
+<g id="edge412" class="edge"><title>k_550eb5f6:m_101e3d67:e->k_b545a68a</title>
+<path fill="none" stroke="black" d="M4975.13,-1637C5077.22,-1637 5190.79,-1601.25 5261.35,-1574.57"/>
+<polygon fill="black" stroke="black" points="5262.93,-1577.71 5271.02,-1570.87 5260.43,-1571.17 5262.93,-1577.71"/>
+</g>
+<!-- k_b69674be->k_cd819caf -->
+<g id="edge416" class="edge"><title>k_b69674be:m_5a841140:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M2003.13,-2817C2190.47,-2817 1996.19,-2577.71 2049.13,-2398 2074.97,-2310.3 2069.38,-2270.67 2141.13,-2214 2239.1,-2136.62 2589.42,-2162.43 2688.13,-2086 2720.67,-2060.81 2708.49,-2038.36 2731.13,-2004 2739.81,-1990.82 2750.66,-1977.12 2760.2,-1965.8"/>
+<polygon fill="black" stroke="black" points="2763.02,-1967.89 2766.86,-1958.01 2757.7,-1963.34 2763.02,-1967.89"/>
+</g>
+<!-- k_b69674be->k_e65a2cb5 -->
+<g id="edge414" class="edge"><title>k_b69674be:m_5a841140:e->k_e65a2cb5</title>
+<path fill="none" stroke="black" d="M2003.13,-2817C2049.83,-2817 2029.56,-2444.24 2036.13,-2398 2042,-2356.66 2044.03,-2346.25 2055.13,-2306 2066.64,-2264.27 2060.57,-2248.19 2087.13,-2214 2132.58,-2155.49 2159.44,-2154.26 2226.13,-2122 2272.44,-2099.6 2290.27,-2109.29 2336.13,-2086 2391.78,-2057.74 2394.72,-2032.73 2450.13,-2004 2561.19,-1946.43 2593.04,-1934.32 2716.13,-1912 2792.69,-1898.12 4047.86,-1913.31 4116.13,-1876 4142.52,-1861.58 4127.94,-1834.79 4154.13,-1820 4284.15,-1746.57 4679.74,-1818.07 4825.13,-1784 4831.72,-1782.46 4838.49,-1780.28 4845.04,-1777.81"/>
+<polygon fill="black" stroke="black" points="4846.48,-1781.01 4854.46,-1774.04 4843.88,-1774.51 4846.48,-1781.01"/>
+</g>
+<!-- k_b69674be->k_7824fe0f -->
+<g id="edge418" class="edge"><title>k_b69674be:m_5a841140:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M2003.13,-2817C2227.47,-2817 1690.34,-2685.53 1490.97,-2638.49"/>
+<polygon fill="black" stroke="black" points="1491.7,-2635.07 1481.17,-2636.18 1490.1,-2641.88 1491.7,-2635.07"/>
+</g>
+<!-- k_891c668a->k_7ff585a7 -->
+<g id="edge420" class="edge"><title>k_891c668a:m_4f9b8ac6:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M876.13,-1834C935.443,-1834 690.251,-1735.68 650.13,-1692 636.544,-1677.21 631.13,-1671.08 631.13,-1651 631.13,-1651 631.13,-1651 631.13,-1362 631.13,-1252.18 741.705,-1272.76 847.13,-1242 941.273,-1214.53 1614.41,-1188.27 1832.87,-1180.39"/>
+<polygon fill="black" stroke="black" points="1833.05,-1183.88 1842.92,-1180.03 1832.8,-1176.89 1833.05,-1183.88"/>
+</g>
+<!-- k_891c668a->k_fab1a897 -->
+<g id="edge422" class="edge"><title>k_891c668a:m_4f9b8ac6:e->k_fab1a897</title>
+<path fill="none" stroke="black" d="M876.13,-1834C886.418,-1834 884.142,-1806.52 880.591,-1784.19"/>
+<polygon fill="black" stroke="black" points="883.999,-1783.35 878.853,-1774.09 877.1,-1784.54 883.999,-1783.35"/>
+</g>
+<!-- k_d30a49b4->k_7ff585a7 -->
+<g id="edge424" class="edge"><title>k_d30a49b4:m_eb61cf5a:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M4380.13,-2031C4721.38,-2031 4805.14,-1942.92 5107.13,-1784 5115.95,-1779.36 5393.45,-1582.8 5398.13,-1574 5448.78,-1478.85 5446.46,-1402.38 5363.13,-1334 5299.39,-1281.69 5252.33,-1339.59 5181.13,-1298 5152.83,-1281.46 5162.83,-1255.87 5133.13,-1242 4973.79,-1167.61 2140.34,-1241.56 1968.13,-1206 1961,-1204.53 1953.68,-1202.29 1946.61,-1199.72"/>
+<polygon fill="black" stroke="black" points="1947.77,-1196.41 1937.18,-1196.03 1945.22,-1202.93 1947.77,-1196.41"/>
+</g>
+<!-- k_d30a49b4->k_960ad002 -->
+<g id="edge426" class="edge"><title>k_d30a49b4:m_eb61cf5a:e->k_960ad002</title>
+<path fill="none" stroke="black" d="M4380.13,-2031C4405.63,-2031 4398.58,-1994.84 4389.89,-1968.1"/>
+<polygon fill="black" stroke="black" points="4393.11,-1966.72 4386.54,-1958.42 4386.5,-1969.01 4393.11,-1966.72"/>
+</g>
+<!-- k_a76b388f->k_7ff585a7 -->
+<g id="edge428" class="edge"><title>k_a76b388f:m_eccba8fc:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M3775.13,-1256C3781.15,-1256 3778.5,-1246.64 3774.13,-1242.5 3737.71,-1207.99 2017.22,-1216.36 1968.13,-1206 1961.09,-1204.51 1953.86,-1202.3 1946.88,-1199.76"/>
+<polygon fill="black" stroke="black" points="1948.13,-1196.49 1937.54,-1196.12 1945.59,-1203.01 1948.13,-1196.49"/>
+</g>
+<!-- k_a76b388f->k_11372840 -->
+<g id="edge430" class="edge"><title>k_a76b388f:m_eccba8fc:e->k_11372840</title>
+<path fill="none" stroke="black" d="M3775.13,-1256C3823.65,-1256 3745.82,-1222.78 3685.88,-1199.7"/>
+<polygon fill="black" stroke="black" points="3687.02,-1196.39 3676.43,-1196.09 3684.52,-1202.93 3687.02,-1196.39"/>
+</g>
+<!-- k_a0aaa852->k_bebd50c7 -->
+<g id="edge436" class="edge"><title>k_a0aaa852:m_f548b735:e->k_bebd50c7</title>
+<path fill="none" stroke="black" d="M3145.13,-1440C3153.93,-1440 3151.17,-1429.75 3159.13,-1426 3185,-1413.83 3559.35,-1383.43 3739.99,-1369.36"/>
+<polygon fill="black" stroke="black" points="3740.33,-1372.85 3750.03,-1368.58 3739.78,-1365.87 3740.33,-1372.85"/>
+</g>
+<!-- k_a0aaa852->k_7ff585a7 -->
+<g id="edge432" class="edge"><title>k_a0aaa852:m_f548b735:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M3145.13,-1440C3151.15,-1440 3147.73,-1431.32 3144.13,-1426.5 3116.84,-1389.91 3089.89,-1408.43 3048.13,-1390 2965.21,-1353.4 2935.92,-1355.83 2866.13,-1298 2841.97,-1277.98 2850.98,-1256.46 2823.13,-1242 2738.75,-1198.17 2060.94,-1226.65 1968.13,-1206 1961.35,-1204.49 1954.39,-1202.34 1947.63,-1199.88"/>
+<polygon fill="black" stroke="black" points="1948.51,-1196.47 1937.93,-1196.11 1945.98,-1202.99 1948.51,-1196.47"/>
+</g>
+<!-- k_a0aaa852->k_a952f2c4 -->
+<g id="edge434" class="edge"><title>k_a0aaa852:m_f548b735:e->k_a952f2c4</title>
+<path fill="none" stroke="black" d="M3145.13,-1440C3165.95,-1440 3159.68,-1412.03 3151.3,-1389.58"/>
+<polygon fill="black" stroke="black" points="3154.47,-1388.09 3147.52,-1380.09 3147.97,-1390.68 3154.47,-1388.09"/>
+</g>
+<!-- k_cdd80b0b->k_7ff585a7 -->
+<g id="edge438" class="edge"><title>k_cdd80b0b:m_aa2699dc:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M1006.13,-1256C1014.93,-1256 1012.13,-1245.66 1020.13,-1242 1093.3,-1208.53 1638.6,-1186.93 1832.75,-1180.23"/>
+<polygon fill="black" stroke="black" points="1832.95,-1183.72 1842.83,-1179.88 1832.71,-1176.72 1832.95,-1183.72"/>
+</g>
+<!-- k_cdd80b0b->k_6beca52f -->
+<g id="edge440" class="edge"><title>k_cdd80b0b:m_aa2699dc:e->k_6beca52f</title>
+<path fill="none" stroke="black" d="M1006.13,-1256C1016.42,-1256 1014.14,-1228.52 1010.59,-1206.19"/>
+<polygon fill="black" stroke="black" points="1014,-1205.35 1008.85,-1196.09 1007.1,-1206.54 1014,-1205.35"/>
+</g>
+<!-- k_c3321797->k_c1f839a6 -->
+<g id="edge444" class="edge"><title>k_c3321797:m_b707ae9a:e->k_c1f839a6</title>
+<path fill="none" stroke="black" d="M1157.13,-1440C1163.15,-1440 1159.97,-1431.14 1156.13,-1426.5 1116.23,-1378.28 1079.73,-1409.08 1020.13,-1390 1013.82,-1387.98 1007.25,-1385.74 1000.75,-1383.43"/>
+<polygon fill="black" stroke="black" points="1001.89,-1380.12 991.298,-1380.02 999.516,-1386.71 1001.89,-1380.12"/>
+</g>
+<!-- k_c3321797->k_7ff585a7 -->
+<g id="edge442" class="edge"><title>k_c3321797:m_b707ae9a:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M1157.13,-1440C1163.15,-1440 1158.41,-1432.07 1156.13,-1426.5 1148.06,-1406.81 1138.58,-1406.49 1125.13,-1390 1078.9,-1333.31 1003.39,-1295.63 1053.13,-1242 1079.54,-1213.52 1635.78,-1188.61 1832.75,-1180.65"/>
+<polygon fill="black" stroke="black" points="1833.12,-1184.14 1842.97,-1180.24 1832.84,-1177.14 1833.12,-1184.14"/>
+</g>
+<!-- k_c3321797->k_7d67dc61 -->
+<g id="edge446" class="edge"><title>k_c3321797:m_b707ae9a:e->k_7d67dc61</title>
+<path fill="none" stroke="black" d="M1157.13,-1440C1183.32,-1440 1199.66,-1412.03 1208.56,-1389.58"/>
+<polygon fill="black" stroke="black" points="1211.88,-1390.68 1212.02,-1380.09 1205.3,-1388.28 1211.88,-1390.68"/>
+</g>
+<!-- k_68db9ec8->k_7ff585a7 -->
+<g id="edge448" class="edge"><title>k_68db9ec8:m_caed5f27:e->k_7ff585a7</title>
+<path fill="none" stroke="black" d="M4748.13,-2817C4909.79,-2817 4576.96,-2684.08 4522.13,-2532 4501.93,-2475.97 4481.63,-2441.66 4522.13,-2398 4558.35,-2358.95 4947.5,-2370.15 5000.13,-2362 5175.69,-2334.8 5224.79,-2337.5 5389.13,-2270 5461.82,-2240.14 5486.43,-2235.38 5540.13,-2178 5799.84,-1900.47 5717.74,-1545.8 5402.13,-1334 5331.49,-1286.59 5286.54,-1342.65 5214.13,-1298 5187.42,-1281.53 5199.2,-1256.03 5171.13,-1242 5091.54,-1202.21 2055.27,-1223.99 1968.13,-1206 1961,-1204.53 1953.68,-1202.3 1946.61,-1199.72"/>
+<polygon fill="black" stroke="black" points="1947.77,-1196.41 1937.18,-1196.04 1945.22,-1202.93 1947.77,-1196.41"/>
+</g>
+<!-- k_68db9ec8->k_55c22c57 -->
+<g id="edge450" class="edge"><title>k_68db9ec8:m_caed5f27:e->k_55c22c57</title>
+<path fill="none" stroke="black" d="M4748.13,-2817C4814.12,-2817 4779.03,-2703.93 4758.54,-2649.99"/>
+<polygon fill="black" stroke="black" points="4761.67,-2648.4 4754.79,-2640.35 4755.15,-2650.93 4761.67,-2648.4"/>
+</g>
+<!-- k_2aeba352->k_9d43c1d5 -->
+<g id="edge462" class="edge"><title>k_2aeba352:m_d21306a0:e->k_9d43c1d5</title>
+<path fill="none" stroke="black" d="M3382.13,-2451C3454.93,-2451 3465.81,-2412.62 3537.13,-2398 3688.43,-2366.98 4157.36,-2344.08 4327.04,-2336.61"/>
+<polygon fill="black" stroke="black" points="4327.23,-2340.11 4337.06,-2336.17 4326.92,-2333.11 4327.23,-2340.11"/>
+</g>
+<!-- k_2aeba352->k_9fad21d -->
+<g id="edge452" class="edge"><title>k_2aeba352:m_d21306a0:e->k_9fad21d</title>
+<path fill="none" stroke="black" d="M3382.13,-2451C3571.08,-2451 3535.46,-2263.54 3600.13,-2086 3641.12,-1973.48 3576.11,-1919.25 3643.13,-1820 3655.07,-1802.32 3673.69,-1788.72 3692.01,-1778.71"/>
+<polygon fill="black" stroke="black" points="3693.68,-1781.79 3700.95,-1774.08 3690.46,-1775.57 3693.68,-1781.79"/>
+</g>
+<!-- k_2aeba352->k_1a7eca26 -->
+<g id="edge456" class="edge"><title>k_2aeba352:m_d21306a0:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M3382.13,-2451C3388.15,-2451 3383.41,-2443.07 3381.13,-2437.5 3364.46,-2396.79 3338.7,-2400.34 3317.13,-2362 3289.57,-2313 3277.13,-2298.22 3277.13,-2242 3277.13,-2242 3277.13,-2242 3277.13,-2150 3277.13,-1899.81 3039.43,-1847.49 3118.13,-1610 3150.2,-1513.22 3174.88,-1488.89 3255.13,-1426 3279.62,-1406.81 3310.72,-1392.37 3338.39,-1382.12"/>
+<polygon fill="black" stroke="black" points="3339.79,-1385.34 3348.02,-1378.67 3337.43,-1378.75 3339.79,-1385.34"/>
+</g>
+<!-- k_2aeba352->k_1f909b4 -->
+<g id="edge458" class="edge"><title>k_2aeba352:m_d21306a0:e->k_1f909b4</title>
+<path fill="none" stroke="black" d="M3382.13,-2451C3388.15,-2451 3382.85,-2443.26 3381.13,-2437.5 3370.12,-2400.71 3352.39,-2398.04 3339.13,-2362 3320.35,-2310.96 3315.13,-2296.39 3315.13,-2242 3315.13,-2242 3315.13,-2242 3315.13,-2150 3315.13,-2026.93 3284.04,-1998.75 3275.13,-1876 3273.33,-1851.18 3272.45,-1844.74 3275.13,-1820 3276.42,-1808.09 3279.02,-1795.14 3281.63,-1784.03"/>
+<polygon fill="black" stroke="black" points="3285.1,-1784.58 3284.09,-1774.04 3278.3,-1782.91 3285.1,-1784.58"/>
+</g>
+<!-- k_2aeba352->k_5425561b -->
+<g id="edge460" class="edge"><title>k_2aeba352:m_d21306a0:e->k_5425561b</title>
+<path fill="none" stroke="black" d="M3382.13,-2451C3427.52,-2451 3733.13,-2287.39 3733.13,-2242 3733.13,-2242 3733.13,-2242 3733.13,-1940 3733.13,-1885.61 3720.95,-1860.61 3757.13,-1820 3762.13,-1814.39 3844.26,-1789.04 3901.15,-1771.98"/>
+<polygon fill="black" stroke="black" points="3902.18,-1775.32 3910.76,-1769.11 3900.17,-1768.62 3902.18,-1775.32"/>
+</g>
+<!-- k_2aeba352->k_414f39df -->
+<g id="edge454" class="edge"><title>k_2aeba352:m_d21306a0:e->k_414f39df</title>
+<path fill="none" stroke="black" d="M3382.13,-2451C3475.91,-2451 3353.13,-2335.78 3353.13,-2242 3353.13,-2242 3353.13,-2242 3353.13,-2045 3353.13,-1944.95 3285.75,-1899.78 3346.13,-1820 3436.98,-1699.96 3525.37,-1761.57 3672.13,-1728 3761.88,-1707.47 3806.54,-1752.29 3876.13,-1692 3892.65,-1677.69 3907.69,-1621.88 3916.37,-1583.56"/>
+<polygon fill="black" stroke="black" points="3919.8,-1584.27 3918.54,-1573.75 3912.97,-1582.76 3919.8,-1584.27"/>
+</g>
+<!-- k_49441f7c->k_9d43c1d5 -->
+<g id="edge466" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_9d43c1d5</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5186.15,-3125 5180.28,-3117.41 5179.13,-3111.5 5175.24,-3091.57 5168.28,-3088.06 5165.13,-3068 5140.6,-2911.69 5132.73,-2866.87 5165.13,-2712 5179.43,-2643.62 5194.63,-2629.3 5228.13,-2568 5237.35,-2551.13 5246.56,-2550.4 5252.13,-2532 5269.39,-2475 5293.08,-2441.24 5252.13,-2398 5201.48,-2344.52 4663.45,-2369.09 4590.13,-2362 4543.51,-2357.49 4491.11,-2350.12 4451.51,-2344.07"/>
+<polygon fill="black" stroke="black" points="4451.88,-2340.58 4441.47,-2342.52 4450.82,-2347.5 4451.88,-2340.58"/>
+</g>
+<!-- k_49441f7c->k_429c8161 -->
+<g id="edge470" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_429c8161</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5186.15,-3125 5183.39,-3115.75 5179.13,-3111.5 5085.01,-3017.5 4698.06,-3133.22 4582.13,-3068 4472.44,-3006.29 4427.13,-2956.86 4427.13,-2831 4427.13,-2831 4427.13,-2831 4427.13,-2622 4427.13,-2518.7 4423.43,-2477.71 4489.13,-2398 4570.29,-2299.53 4678.96,-2378.5 4746.13,-2270 4790.31,-2198.64 4835.63,-1987.22 4604.13,-1820 4542.27,-1775.32 3307.35,-1787.57 3231.13,-1784 3110.82,-1778.37 2971.11,-1768.19 2888.36,-1761.78"/>
+<polygon fill="black" stroke="black" points="2888.55,-1758.28 2878.31,-1761 2888.01,-1765.26 2888.55,-1758.28"/>
+</g>
+<!-- k_49441f7c->k_9d34b335 -->
+<g id="edge480" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_9d34b335</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5203.1,-3125 5192.37,-2734.23 5198.13,-2712 5202.62,-2694.68 5208.59,-2692.22 5216.13,-2676 5245.5,-2612.81 5264.06,-2600.25 5278.13,-2532 5290.15,-2473.67 5316.31,-2443.7 5278.13,-2398 5226.88,-2336.65 4648.58,-2285.38 4570.13,-2270 4376.21,-2231.97 4326.65,-2226.69 4135.13,-2178 4126.62,-2175.84 4117.72,-2173.41 4108.93,-2170.91"/>
+<polygon fill="black" stroke="black" points="4109.67,-2167.48 4099.09,-2168.07 4107.73,-2174.2 4109.67,-2167.48"/>
+</g>
+<!-- k_49441f7c->k_bebd50c7 -->
+<g id="edge478" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_bebd50c7</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5181.21,-3125 5484.14,-3068.42 5485.13,-3068 5568.45,-3032.64 5604.22,-3027.41 5651.13,-2950 5779.48,-2738.21 5671.5,-2639.32 5727.13,-2398 5750.24,-2297.75 5773.93,-2277.75 5799.13,-2178 5813.84,-2119.76 5823.13,-2105.07 5823.13,-2045 5823.13,-2045 5823.13,-2045 5823.13,-1940 5823.13,-1688.2 5677.58,-1614.78 5445.13,-1518 5266.45,-1443.6 5192.35,-1549.98 5011.13,-1482 4971.85,-1467.26 4974.59,-1440.25 4935.13,-1426 4888.4,-1409.12 4192.28,-1377.43 3932.73,-1366.13"/>
+<polygon fill="black" stroke="black" points="3932.7,-1362.63 3922.56,-1365.69 3932.4,-1369.62 3932.7,-1362.63"/>
+</g>
+<!-- k_49441f7c->k_f516f38 -->
+<g id="edge484" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_f516f38</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5186.15,-3125 5183.26,-3115.87 5179.13,-3111.5 5128.5,-3057.87 4922.58,-3081.75 4850.13,-3068 4820.56,-3062.39 4788.36,-3054.74 4760.33,-3047.57"/>
+<polygon fill="black" stroke="black" points="4761.15,-3044.17 4750.6,-3045.06 4759.4,-3050.95 4761.15,-3044.17"/>
+</g>
+<!-- k_49441f7c->k_b3a78c62 -->
+<g id="edge468" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_b3a78c62</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5187.35,-3125 5260.74,-3079.59 5306.86,-3050.59"/>
+<polygon fill="black" stroke="black" points="5308.82,-3053.49 5315.42,-3045.2 5305.09,-3047.57 5308.82,-3053.49"/>
+</g>
+<!-- k_49441f7c->k_9085ee50 -->
+<g id="edge472" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_9085ee50</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5186.15,-3125 5181.88,-3116.85 5179.13,-3111.5 5165.37,-3084.69 5141.33,-3094.58 5127.13,-3068 5088.2,-2995.13 5080.83,-2736.68 5079.45,-2650.33"/>
+<polygon fill="black" stroke="black" points="5082.94,-2650.17 5079.3,-2640.22 5075.94,-2650.27 5082.94,-2650.17"/>
+</g>
+<!-- k_49441f7c->k_1a7eca26 -->
+<g id="edge474" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5206.89,-3125 5391.29,-3081.94 5414.13,-3068 5455.28,-3042.88 5450.57,-3019.61 5485.13,-2986 5503.24,-2968.38 5515.05,-2970.98 5529.13,-2950 5570.14,-2888.91 5785.13,-2157.46 5785.13,-2045 5785.13,-2045 5785.13,-2045 5785.13,-1940 5785.13,-1812.76 5513.81,-1571 5398.13,-1518 5179.86,-1417.99 5076.85,-1583.21 4859.13,-1482 4827.78,-1467.43 4836.72,-1440.06 4805.13,-1426 4697.06,-1377.91 3859.22,-1396.94 3741.13,-1390 3649.41,-1384.61 3543.77,-1375.22 3476.28,-1368.81"/>
+<polygon fill="black" stroke="black" points="3476.48,-1365.31 3466.19,-1367.85 3475.82,-1372.28 3476.48,-1365.31"/>
+</g>
+<!-- k_49441f7c->k_3b5a6e9c -->
+<g id="edge482" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5247.59,-3125 5189.41,-3029.32 5241.13,-2986 5293.36,-2942.26 5341.97,-2998.19 5390.13,-2950 5478.67,-2861.4 5440.73,-2800.31 5456.13,-2676 5492.85,-2379.59 5638.69,-2244.91 5462.13,-2004 5430.72,-1961.14 5395.49,-1992.08 5348.13,-1968 5310.73,-1948.98 5310.36,-1929.29 5272.13,-1912 5097.23,-1832.88 5040.86,-1841.69 4850.13,-1820 4515.15,-1781.9 2152.93,-1798.94 1816.13,-1784 1719.22,-1779.7 1608.08,-1770.54 1534.37,-1763.86"/>
+<polygon fill="black" stroke="black" points="1534.49,-1760.35 1524.22,-1762.93 1533.86,-1767.33 1534.49,-1760.35"/>
+</g>
+<!-- k_49441f7c->k_8e9f39bf -->
+<g id="edge464" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5186.15,-3125 5183.42,-3115.72 5179.13,-3111.5 5057.54,-2991.98 4542.91,-3178.57 4413.13,-3068 4291.35,-2964.25 4300.67,-2746.94 4310.07,-2659.56"/>
+<polygon fill="black" stroke="black" points="4313.56,-2659.9 4311.21,-2649.57 4306.6,-2659.11 4313.56,-2659.9"/>
+</g>
+<!-- k_49441f7c->k_b545a68a -->
+<g id="edge476" class="edge"><title>k_49441f7c:m_94bc12fa:e->k_b545a68a</title>
+<path fill="none" stroke="black" d="M5180.13,-3125C5217.23,-3125 5220.15,-3098.6 5241.13,-3068 5263.34,-3035.6 5244.17,-3011.41 5274.13,-2986 5330.38,-2938.29 5378.05,-2995.46 5436.13,-2950 5564.32,-2849.66 5599.13,-2784.79 5599.13,-2622 5599.13,-2622 5599.13,-2622 5599.13,-2465 5599.13,-2177.75 5744.79,-2087.5 5640.13,-1820 5615.42,-1756.83 5458.44,-1637.73 5377.8,-1579.61"/>
+<polygon fill="black" stroke="black" points="5379.47,-1576.5 5369.3,-1573.51 5375.38,-1582.18 5379.47,-1576.5"/>
+</g>
+<!-- k_8fd7bcd5->k_cd819caf -->
+<g id="edge488" class="edge"><title>k_8fd7bcd5:m_f8b7308a:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M3521.13,-3224C3914.49,-3224 3044.71,-3003.04 2826.13,-2676 2772.15,-2595.24 2769.13,-2562.14 2769.13,-2465 2769.13,-2465 2769.13,-2465 2769.13,-2334 2769.13,-2223.55 2781.57,-2196.39 2785.13,-2086 2786.3,-2049.57 2785.7,-2040.44 2785.13,-2004 2784.95,-1992.29 2784.58,-1979.38 2784.2,-1968.24"/>
+<polygon fill="black" stroke="black" points="2787.7,-1968.07 2783.85,-1958.2 2780.7,-1968.32 2787.7,-1968.07"/>
+</g>
+<!-- k_8fd7bcd5->k_fe8ab28b -->
+<g id="edge490" class="edge"><title>k_8fd7bcd5:m_f8b7308a:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M3521.13,-3224C3527.15,-3224 3524.39,-3214.74 3520.13,-3210.5 3478.36,-3168.94 3049.14,-3184.29 2991.13,-3174 2695.87,-3121.6 2631.71,-3067.51 2343.13,-2986 2285.02,-2969.59 2262.96,-2982.59 2212.13,-2950 2095.81,-2875.43 2101.81,-2817.11 2012.13,-2712 1892.29,-2571.54 1902.79,-2485.36 1740.13,-2398 1704.06,-2378.63 1451.04,-2352.89 1321.77,-2340.81"/>
+<polygon fill="black" stroke="black" points="1321.83,-2337.3 1311.55,-2339.86 1321.18,-2344.27 1321.83,-2337.3"/>
+</g>
+<!-- k_8fd7bcd5->k_9085ee50 -->
+<g id="edge492" class="edge"><title>k_8fd7bcd5:m_f8b7308a:e->k_9085ee50</title>
+<path fill="none" stroke="black" d="M3521.13,-3224C3690.57,-3224 4919.28,-3188.78 5038.13,-3068 5067.44,-3038.21 5076.44,-2743.91 5078.57,-2650.38"/>
+<polygon fill="black" stroke="black" points="5082.07,-2650.32 5078.79,-2640.24 5075.07,-2650.16 5082.07,-2650.32"/>
+</g>
+<!-- k_8fd7bcd5->k_20a2e5ab -->
+<g id="edge496" class="edge"><title>k_8fd7bcd5:m_f8b7308a:e->k_20a2e5ab</title>
+<path fill="none" stroke="black" d="M3521.13,-3224C3527.15,-3224 3524.47,-3214.67 3520.13,-3210.5 3475.45,-3167.63 2467.84,-3179.12 2406.13,-3174 2336.53,-3168.23 2257.08,-3156.95 2204.1,-3148.75"/>
+<polygon fill="black" stroke="black" points="2204.61,-3145.29 2194.19,-3147.21 2203.54,-3152.2 2204.61,-3145.29"/>
+</g>
+<!-- k_8fd7bcd5->k_8e9f39bf -->
+<g id="edge486" class="edge"><title>k_8fd7bcd5:m_f8b7308a:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M3521.13,-3224C3592.79,-3224 4108.89,-3219.65 4164.13,-3174 4245.26,-3106.94 4295.53,-2772.74 4310.45,-2659.55"/>
+<polygon fill="black" stroke="black" points="4313.92,-2659.98 4311.74,-2649.61 4306.98,-2659.08 4313.92,-2659.98"/>
+</g>
+<!-- k_9ea4242b -->
+<!-- k_8fd7bcd5->k_9ea4242b -->
+<g id="edge494" class="edge"><title>k_8fd7bcd5:m_f8b7308a:e->k_9ea4242b</title>
+<path fill="none" stroke="black" d="M3521.13,-3224C3891.74,-3224 4819.37,-3210.98 5188.13,-3174 5222.48,-3170.56 5259.77,-3164.77 5292.97,-3158.88"/>
+<polygon fill="black" stroke="black" points="5293.91,-3162.27 5303.13,-3157.05 5292.67,-3155.38 5293.91,-3162.27"/>
+</g>
+<!-- k_20a2e5ab->k_cd819caf -->
+<g id="edge510" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2227.66,-3125 2085.3,-2565.38 2082.13,-2532 2076.5,-2472.71 2064.52,-2454.89 2082.13,-2398 2111.44,-2303.32 2124.47,-2267.14 2208.13,-2214 2292.13,-2160.64 2332.28,-2200.87 2429.13,-2178 2462.55,-2170.11 2698.88,-2109.27 2724.13,-2086 2728.74,-2081.75 2757.02,-2008.67 2772.69,-1967.56"/>
+<polygon fill="black" stroke="black" points="2776.01,-1968.68 2776.29,-1958.09 2769.47,-1966.19 2776.01,-1968.68"/>
+</g>
+<!-- k_20a2e5ab->k_fe8ab28b -->
+<g id="edge512" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2200.15,-3125 2197.45,-3115.69 2193.13,-3111.5 2114.52,-3035.2 1286.97,-3144.06 1208.13,-3068 1132.08,-2994.63 1189.13,-2936.67 1189.13,-2831 1189.13,-2831 1189.13,-2831 1189.13,-2622 1189.13,-2524.96 1220.65,-2412.97 1236.82,-2361.94"/>
+<polygon fill="black" stroke="black" points="1240.19,-2362.87 1239.92,-2352.28 1233.53,-2360.73 1240.19,-2362.87"/>
+</g>
+<!-- k_20a2e5ab->k_8059d21c -->
+<g id="edge514" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2200.15,-3125 2197.49,-3115.64 2193.13,-3111.5 2114.55,-3036.88 330.242,-3132.45 243.13,-3068 3.62402,-2890.81 143.217,-2685.28 222.13,-2398 274.04,-2209.02 299.708,-2158.62 420.13,-2004 431.539,-1989.35 446.697,-1975.54 460.322,-1964.53"/>
+<polygon fill="black" stroke="black" points="462.864,-1966.98 468.56,-1958.05 458.536,-1961.48 462.864,-1966.98"/>
+</g>
+<!-- k_20a2e5ab->k_fe12a512 -->
+<g id="edge520" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_fe12a512</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2200.15,-3125 2196.62,-3116.4 2193.13,-3111.5 2188.71,-3105.28 2108.57,-3071.81 2052.42,-3048.91"/>
+<polygon fill="black" stroke="black" points="2053.52,-3045.58 2042.94,-3045.05 2050.88,-3052.06 2053.52,-3045.58"/>
+</g>
+<!-- k_20a2e5ab->k_49a1fb25 -->
+<g id="edge516" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_49a1fb25</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2200.15,-3125 2197.45,-3115.69 2193.13,-3111.5 2152.08,-3071.72 1222,-3073.72 1165.13,-3068 834.197,-3034.69 641.98,-3203.05 426.13,-2950 391.806,-2909.76 407.606,-2761.54 426.13,-2712 490.899,-2538.79 539.809,-2491.89 699.13,-2398 765.293,-2359.01 801.331,-2399.89 868.13,-2362 950.481,-2315.29 1018.34,-2222.48 1048.42,-2176.74"/>
+<polygon fill="black" stroke="black" points="1051.42,-2178.55 1053.92,-2168.25 1045.54,-2174.74 1051.42,-2178.55"/>
+</g>
+<!-- k_20a2e5ab->k_35e58938 -->
+<g id="edge522" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_35e58938</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2394.42,-3125 2626.29,-3076.19 2745.4,-3047.46"/>
+<polygon fill="black" stroke="black" points="2746.29,-3050.85 2755.18,-3045.09 2744.64,-3044.05 2746.29,-3050.85"/>
+</g>
+<!-- k_20a2e5ab->k_7824fe0f -->
+<g id="edge508" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_7824fe0f</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2200.15,-3125 2197.18,-3115.95 2193.13,-3111.5 2154.14,-3068.67 1992.66,-3080.62 1936.13,-3068 1745.22,-3025.4 1648.74,-3090 1512.13,-2950 1435.94,-2871.93 1483.77,-2816.4 1452.13,-2712 1445.74,-2690.91 1437.36,-2667.46 1430.77,-2649.78"/>
+<polygon fill="black" stroke="black" points="1433.93,-2648.23 1427.14,-2640.1 1427.38,-2650.7 1433.93,-2648.23"/>
+</g>
+<!-- k_20a2e5ab->k_acce46b4 -->
+<g id="edge504" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_acce46b4</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2265.03,-3125 2293.78,-3118.91 2343.13,-3068 2381.78,-3028.14 2373.59,-3004.51 2384.13,-2950 2416.36,-2783.21 2400.62,-2737.84 2397.13,-2568 2395.57,-2492.4 2404.64,-2472.21 2390.13,-2398 2387.74,-2385.76 2383.4,-2372.72 2379.13,-2361.63"/>
+<polygon fill="black" stroke="black" points="2382.27,-2360.04 2375.29,-2352.07 2375.77,-2362.65 2382.27,-2360.04"/>
+</g>
+<!-- k_20a2e5ab->k_4bb9a563 -->
+<g id="edge502" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_4bb9a563</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2218.04,-3125 2204.7,-2756.89 2200.34,-2650.49"/>
+<polygon fill="black" stroke="black" points="2203.83,-2650.05 2199.92,-2640.2 2196.84,-2650.34 2203.83,-2650.05"/>
+</g>
+<!-- k_20a2e5ab->k_a7a419fb -->
+<g id="edge498" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_a7a419fb</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2200.15,-3125 2197.49,-3115.65 2193.13,-3111.5 2123.35,-3045.05 552.708,-3091 459.13,-3068 343.703,-3039.63 281.957,-3050.9 219.13,-2950 185.831,-2896.52 233.817,-2407.8 241.13,-2398 315.59,-2298.18 688.321,-2200.57 838.889,-2164.56"/>
+<polygon fill="black" stroke="black" points="839.991,-2167.89 848.909,-2162.17 838.371,-2161.08 839.991,-2167.89"/>
+</g>
+<!-- k_20a2e5ab->k_8d4befab -->
+<g id="edge506" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_8d4befab</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2232.52,-3125 2259,-3083.69 2272.85,-3054.71"/>
+<polygon fill="black" stroke="black" points="2276.12,-3055.99 2277.06,-3045.43 2269.74,-3053.09 2276.12,-3055.99"/>
+</g>
+<!-- k_20a2e5ab->k_9085ee50 -->
+<g id="edge518" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_9085ee50</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2272.31,-3125 4950.15,-3120.45 5008.13,-3068 5067.22,-3014.54 5034.45,-2789.92 5051.13,-2712 5055.68,-2690.73 5063.06,-2667.29 5069.09,-2649.66"/>
+<polygon fill="black" stroke="black" points="5072.47,-2650.61 5072.46,-2640.01 5065.86,-2648.3 5072.47,-2650.61"/>
+</g>
+<!-- k_20a2e5ab->k_8e9f39bf -->
+<g id="edge500" class="edge"><title>k_20a2e5ab:m_6bc89f50:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M2194.13,-3125C2285.74,-3125 3759.94,-3108.47 3842.13,-3068 4026.23,-2977.35 3975.69,-2839.94 4136.13,-2712 4165.58,-2688.51 4202.16,-2668.79 4234.55,-2653.85"/>
+<polygon fill="black" stroke="black" points="4236.34,-2656.88 4244.01,-2649.57 4233.46,-2650.5 4236.34,-2656.88"/>
+</g>
+<!-- k_f37daf18->k_9d43c1d5 -->
+<g id="edge526" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_9d43c1d5</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5609.47,-3224 5565.86,-2992.31 5565.13,-2986 5531.57,-2697.14 5533.6,-2536.92 5278.13,-2398 5205.92,-2358.74 4641.22,-2340.56 4451.25,-2335.52"/>
+<polygon fill="black" stroke="black" points="4451.24,-2332.02 4441.15,-2335.25 4451.05,-2339.01 4451.24,-2332.02"/>
+</g>
+<!-- k_f37daf18->k_b3a78c62 -->
+<g id="edge530" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_b3a78c62</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5554.15,-3224 5551.27,-3214.87 5547.13,-3210.5 5458.95,-3117.52 5345.81,-3270.17 5261.13,-3174 5240.57,-3150.65 5248.69,-3132.51 5261.13,-3104 5270.45,-3082.63 5288.95,-3064.54 5306.12,-3051.27"/>
+<polygon fill="black" stroke="black" points="5308.44,-3053.91 5314.4,-3045.15 5304.28,-3048.28 5308.44,-3053.91"/>
+</g>
+<!-- k_f37daf18->k_9085ee50 -->
+<g id="edge532" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_9085ee50</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5558.17,-3224 5548.85,-3221.74 5533.13,-3174 5500.82,-3075.88 5495.13,-3050.47 5471.13,-2950 5446.05,-2845.05 5497.23,-2790.44 5423.13,-2712 5381.76,-2668.21 5203.56,-2638.88 5121.18,-2627.42"/>
+<polygon fill="black" stroke="black" points="5121.54,-2623.93 5111.16,-2626.04 5120.59,-2630.87 5121.54,-2623.93"/>
+</g>
+<!-- k_f37daf18->k_5425561b -->
+<g id="edge544" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_5425561b</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5666.95,-3224 5607.41,-3085.13 5613.13,-2950 5623.8,-2697.86 5690.35,-1985.84 5500.13,-1820 5437.63,-1765.51 4088.36,-1804.92 4008.13,-1784 4003.04,-1782.67 3997.89,-1780.78 3992.9,-1778.59"/>
+<polygon fill="black" stroke="black" points="3994.11,-1775.28 3983.58,-1774.09 3991.07,-1781.59 3994.11,-1775.28"/>
+</g>
+<!-- k_f37daf18->k_20a2e5ab -->
+<g id="edge540" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_20a2e5ab</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C6961.94,-3224 2763.25,-3149.82 2204.74,-3140.06"/>
+<polygon fill="black" stroke="black" points="2204.54,-3136.55 2194.48,-3139.88 2204.42,-3143.55 2204.54,-3136.55"/>
+</g>
+<!-- k_f37daf18->k_8e9f39bf -->
+<g id="edge542" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5554.15,-3224 5551.23,-3214.9 5547.13,-3210.5 5469.63,-3127.43 5368.51,-3259.88 5294.13,-3174 5273.76,-3150.48 5275.56,-3128.96 5294.13,-3104 5327.37,-3059.33 5380.89,-3112.67 5414.13,-3068 5427.35,-3050.24 5425.67,-2746.2 5390.13,-2712 5360.59,-2683.58 4693.9,-2680.24 4653.13,-2676 4568.38,-2667.19 4472.53,-2651.31 4404.6,-2639.04"/>
+<polygon fill="black" stroke="black" points="4404.83,-2635.52 4394.37,-2637.18 4403.58,-2642.41 4404.83,-2635.52"/>
+</g>
+<!-- k_f37daf18->k_9ea4242b -->
+<g id="edge538" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_9ea4242b</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5594.53,-3224 5532.51,-3194.64 5473.48,-3170.43"/>
+<polygon fill="black" stroke="black" points="5474.63,-3167.12 5464.05,-3166.6 5472,-3173.61 5474.63,-3167.12"/>
+</g>
+<!-- k_7ad9e7f3 -->
+<!-- k_f37daf18->k_7ad9e7f3 -->
+<g id="edge536" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_7ad9e7f3</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5661.3,-3224 5788.28,-3193.85 5872.49,-3169.46"/>
+<polygon fill="black" stroke="black" points="5873.67,-3172.77 5882.29,-3166.6 5871.71,-3166.05 5873.67,-3172.77"/>
+</g>
+<!-- k_5ed380ef -->
+<g id="node175" class="node"><title>k_5ed380ef</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6311.13,-3047.5 6149.13,-3047.5 6149.13,-3006.5 6311.13,-3006.5 6311.13,-3047.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6150.13,-3007 6150.13,-3046 6310.13,-3046 6310.13,-3007 6150.13,-3007"/>
+<text text-anchor="start" x="6155.13" y="-3033.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=use_socketio)</text>
+<text text-anchor="start" x="6155.13" y="-3018.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Boolean</text>
+</g>
+<!-- k_f37daf18->k_5ed380ef -->
+<g id="edge528" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_5ed380ef</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5665.55,-3224 5967.17,-3222.44 6074.13,-3174 6132.26,-3147.68 6182.5,-3090.67 6209.35,-3055.89"/>
+<polygon fill="black" stroke="black" points="6212.41,-3057.64 6215.66,-3047.56 6206.83,-3053.41 6212.41,-3057.64"/>
+</g>
+<!-- k_a0e8f908 -->
+<g id="node177" class="node"><title>k_a0e8f908</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6071.13,-3045 5947.13,-3045 5947.13,-3009 6071.13,-3009 6071.13,-3045"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5948.13,-3014 5948.13,-3039 6071.13,-3039 6071.13,-3014 5948.13,-3014"/>
+<text text-anchor="start" x="5953.13" y="-3023.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">SessionManager</text>
+</g>
+<!-- k_f37daf18->k_a0e8f908 -->
+<g id="edge534" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_a0e8f908</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5696.7,-3224 5728.4,-3172.7 5860.13,-3104 5895.19,-3085.71 5934.98,-3065.16 5964.62,-3049.89"/>
+<polygon fill="black" stroke="black" points="5966.58,-3052.82 5973.87,-3045.13 5963.38,-3046.6 5966.58,-3052.82"/>
+</g>
+<!-- k_6990a9aa -->
+<!-- k_f37daf18->k_6990a9aa -->
+<g id="edge524" class="edge"><title>k_f37daf18:m_ecb87f6:e->k_6990a9aa</title>
+<path fill="none" stroke="black" d="M5548.13,-3224C5573.81,-3224 5556.79,-2843.28 5461.13,-2712 5361.59,-2575.4 5258.07,-2637.64 5126.13,-2532 5114.73,-2522.87 5103.8,-2511.29 5094.57,-2500.34"/>
+<polygon fill="black" stroke="black" points="5097.21,-2498.04 5088.17,-2492.53 5091.8,-2502.48 5097.21,-2498.04"/>
+</g>
+<!-- k_f76f7877->k_cd819caf -->
+<g id="edge548" class="edge"><title>k_f76f7877:m_b56ae5c8:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M3841.13,-2817C3847.15,-2817 3844.26,-2807.87 3840.13,-2803.5 3802.6,-2763.8 2903.07,-2715.31 2865.13,-2676 2799.72,-2608.22 2845.13,-2559.2 2845.13,-2465 2845.13,-2465 2845.13,-2465 2845.13,-2334 2845.13,-2187.27 2886.31,-2141.52 2835.13,-2004 2829.83,-1989.75 2819.97,-1976.31 2810.25,-1965.45"/>
+<polygon fill="black" stroke="black" points="2812.67,-1962.92 2803.27,-1958.03 2807.58,-1967.72 2812.67,-1962.92"/>
+</g>
+<!-- k_f76f7877->k_e829e8e2 -->
+<g id="edge550" class="edge"><title>k_f76f7877:m_b56ae5c8:e->k_e829e8e2</title>
+<path fill="none" stroke="black" d="M3841.13,-2817C3929.33,-2817 3780.64,-2698.7 3710.58,-2646.39"/>
+<polygon fill="black" stroke="black" points="3712.56,-2643.5 3702.44,-2640.35 3708.38,-2649.12 3712.56,-2643.5"/>
+</g>
+<!-- k_f76f7877->k_9085ee50 -->
+<g id="edge552" class="edge"><title>k_f76f7877:m_b56ae5c8:e->k_9085ee50</title>
+<path fill="none" stroke="black" d="M3841.13,-2817C4136.84,-2817 4204.98,-2750.78 4498.13,-2712 4650.09,-2691.9 4689.9,-2701 4841.13,-2676 4910.45,-2664.54 4989.83,-2645.27 5037.15,-2633.11"/>
+<polygon fill="black" stroke="black" points="5038.23,-2636.45 5047.03,-2630.56 5036.47,-2629.67 5038.23,-2636.45"/>
+</g>
+<!-- k_f76f7877->k_5425561b -->
+<g id="edge554" class="edge"><title>k_f76f7877:m_b56ae5c8:e->k_5425561b</title>
+<path fill="none" stroke="black" d="M3841.13,-2817C3919.67,-2817 3809.13,-2543.54 3809.13,-2465 3809.13,-2465 3809.13,-2465 3809.13,-2334 3809.13,-2204.45 3771.13,-2174.55 3771.13,-2045 3771.13,-2045 3771.13,-2045 3771.13,-1940 3771.13,-1863.77 3851.07,-1808.09 3905.57,-1778.99"/>
+<polygon fill="black" stroke="black" points="3907.5,-1781.93 3914.75,-1774.21 3904.26,-1775.72 3907.5,-1781.93"/>
+</g>
+<!-- k_f76f7877->k_8e9f39bf -->
+<g id="edge546" class="edge"><title>k_f76f7877:m_b56ae5c8:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M3841.13,-2817C3948.27,-2817 3959.19,-2753.11 4058.13,-2712 4113.18,-2689.13 4176.35,-2666.95 4226.28,-2650.34"/>
+<polygon fill="black" stroke="black" points="4227.7,-2653.56 4236.09,-2647.09 4225.5,-2646.91 4227.7,-2653.56"/>
+</g>
+<!-- k_f76f7877->k_b0057a76 -->
+<g id="edge556" class="edge"><title>k_f76f7877:m_b56ae5c8:e->k_b0057a76</title>
+<path fill="none" stroke="black" d="M3841.13,-2817C3997.78,-2817 3859.13,-2621.65 3859.13,-2465 3859.13,-2465 3859.13,-2465 3859.13,-2334 3859.13,-2283.45 3863.7,-2225.25 3867.19,-2188.07"/>
+<polygon fill="black" stroke="black" points="3870.72,-2188 3868.19,-2177.71 3863.75,-2187.32 3870.72,-2188"/>
+</g>
+<!-- k_cd183063->k_fd02c51c -->
+<g id="edge558" class="edge"><title>k_cd183063:m_20e4f4c3:e->k_fd02c51c</title>
+<path fill="none" stroke="black" d="M5817.13,-2817C5829.56,-2817 5937.13,-2370.68 5937.13,-2242 5937.13,-2242 5937.13,-2242 5937.13,-1362 5937.13,-1306.85 5937.13,-1242.4 5937.13,-1206.28"/>
+<polygon fill="black" stroke="black" points="5940.63,-1206.02 5937.13,-1196.02 5933.63,-1206.02 5940.63,-1206.02"/>
+</g>
+<!-- k_cd183063->k_bebd50c7 -->
+<g id="edge564" class="edge"><title>k_cd183063:m_20e4f4c3:e->k_bebd50c7</title>
+<path fill="none" stroke="black" d="M5817.13,-2817C5863.84,-2817 5846.09,-2444.44 5851.13,-2398 5868.21,-2240.59 5899.13,-2203.33 5899.13,-2045 5899.13,-2045 5899.13,-2045 5899.13,-1848 5899.13,-1761.37 5705.56,-1528.63 5686.13,-1518 5562.72,-1450.49 5178.48,-1547.76 5054.13,-1482 5026.39,-1467.33 5038.89,-1440.63 5011.13,-1426 4963.74,-1401.01 4204.84,-1374 3932.48,-1365.06"/>
+<polygon fill="black" stroke="black" points="3932.33,-1361.55 3922.22,-1364.72 3932.1,-1368.55 3932.33,-1361.55"/>
+</g>
+<!-- k_cd183063->k_6d495d8 -->
+<g id="edge562" class="edge"><title>k_cd183063:m_20e4f4c3:e->k_6d495d8</title>
+<path fill="none" stroke="black" d="M5817.13,-2817C5823.15,-2817 5817.28,-2809.41 5816.13,-2803.5 5804.74,-2745.08 5789.34,-2733.8 5775.13,-2676 5745.2,-2554.24 5750.27,-2521.23 5727.13,-2398 5669.28,-2089.97 5760.95,-1911.87 5507.13,-1728 5314.16,-1588.2 5220.5,-1640.16 4984.13,-1610 4486.13,-1546.47 4356.4,-1601.58 3855.13,-1574 3768.06,-1569.21 3669.27,-1561.3 3597.55,-1555.1"/>
+<polygon fill="black" stroke="black" points="3597.43,-1551.58 3587.17,-1554.2 3596.83,-1558.55 3597.43,-1551.58"/>
+</g>
+<!-- k_cd183063->k_9085ee50 -->
+<g id="edge566" class="edge"><title>k_cd183063:m_20e4f4c3:e->k_9085ee50</title>
+<path fill="none" stroke="black" d="M5817.13,-2817C6115.76,-2817 5316.83,-2665.91 5121.19,-2629.72"/>
+<polygon fill="black" stroke="black" points="5121.75,-2626.26 5111.28,-2627.89 5120.48,-2633.15 5121.75,-2626.26"/>
+</g>
+<!-- k_cd183063->k_8e9f39bf -->
+<g id="edge560" class="edge"><title>k_cd183063:m_20e4f4c3:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M5817.13,-2817C5998.35,-2817 5602.64,-2736.88 5423.13,-2712 5083.78,-2664.96 4993.93,-2711.08 4653.13,-2676 4568.37,-2667.28 4472.52,-2651.38 4404.6,-2639.09"/>
+<polygon fill="black" stroke="black" points="4404.83,-2635.57 4394.36,-2637.23 4403.57,-2642.46 4404.83,-2635.57"/>
+</g>
+<!-- k_a421d634->k_8059d21c -->
+<g id="edge572" class="edge"><title>k_a421d634:m_19f5554c:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M2222.13,-3224C2228.15,-3224 2225.39,-3214.74 2221.13,-3210.5 2139.61,-3129.39 269.092,-3089.53 156.13,-3068 97.0338,-3056.74 27.1297,-3087.16 27.1297,-3027 27.1297,-3027 27.1297,-3027 27.1297,-2465 27.1297,-2321.08 -139.564,-2404.48 356.13,-2004 378.079,-1986.27 405.747,-1972.19 430.535,-1961.8"/>
+<polygon fill="black" stroke="black" points="431.933,-1965.01 439.877,-1958 429.295,-1958.53 431.933,-1965.01"/>
+</g>
+<!-- k_a421d634->k_20a2e5ab -->
+<g id="edge568" class="edge"><title>k_a421d634:m_19f5554c:e->k_20a2e5ab</title>
+<path fill="none" stroke="black" d="M2222.13,-3224C2251.27,-3224 2222.09,-3196.54 2191.47,-3172.84"/>
+<polygon fill="black" stroke="black" points="2193.35,-3169.87 2183.27,-3166.6 2189.11,-3175.44 2193.35,-3169.87"/>
+</g>
+<!-- k_a421d634->k_8e9f39bf -->
+<g id="edge570" class="edge"><title>k_a421d634:m_19f5554c:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M2222.13,-3224C2598.62,-3224 3557.29,-3201.98 3909.13,-3068 3991.7,-3036.56 4006.4,-3012.23 4069.13,-2950 4118.9,-2900.62 4237.74,-2733.02 4289.88,-2658.38"/>
+<polygon fill="black" stroke="black" points="4293.05,-2659.95 4295.9,-2649.75 4287.31,-2655.95 4293.05,-2659.95"/>
+</g>
+<!-- k_3309f8a4->k_d999378f -->
+<g id="edge574" class="edge"><title>k_3309f8a4:m_29212e6a:e->k_d999378f</title>
+<path fill="none" stroke="black" d="M4979.13,-2817C5034.45,-2817 5002.99,-2386.14 4993.53,-2270.35"/>
+<polygon fill="black" stroke="black" points="4997,-2269.84 4992.69,-2260.16 4990.03,-2270.41 4997,-2269.84"/>
+</g>
+<!-- k_3309f8a4->k_9085ee50 -->
+<g id="edge578" class="edge"><title>k_3309f8a4:m_29212e6a:e->k_9085ee50</title>
+<path fill="none" stroke="black" d="M4979.13,-2817C5028.18,-2817 4990.79,-2755.67 5013.13,-2712 5024.96,-2688.88 5042.5,-2665.29 5056.53,-2648.07"/>
+<polygon fill="black" stroke="black" points="5059.4,-2650.08 5063.09,-2640.15 5054.01,-2645.62 5059.4,-2650.08"/>
+</g>
+<!-- k_3309f8a4->k_8e9f39bf -->
+<g id="edge576" class="edge"><title>k_3309f8a4:m_29212e6a:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M4979.13,-2817C5088.68,-2817 4860.91,-2743.97 4756.13,-2712 4636.55,-2675.51 4494.17,-2649.48 4404.21,-2635.08"/>
+<polygon fill="black" stroke="black" points="4404.75,-2631.62 4394.32,-2633.51 4403.65,-2638.54 4404.75,-2631.62"/>
+</g>
+<!-- k_a9deb790->k_cd819caf -->
+<g id="edge582" class="edge"><title>k_a9deb790:m_e2253da6:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M5382.13,-2817C5571.72,-2817 5426.36,-2541.21 5302.13,-2398 5188.11,-2266.55 5088.66,-2346 4932.13,-2270 4823.12,-2217.07 4811.36,-2176.52 4703.13,-2122 4569.98,-2054.93 4535.25,-2033.57 4389.13,-2004 4237.17,-1973.25 3138.57,-1947.65 2851.57,-1941.44"/>
+<polygon fill="black" stroke="black" points="2851.38,-1937.94 2841.31,-1941.22 2851.23,-1944.93 2851.38,-1937.94"/>
+</g>
+<!-- k_a9deb790->k_e829e8e2 -->
+<g id="edge580" class="edge"><title>k_a9deb790:m_e2253da6:e->k_e829e8e2</title>
+<path fill="none" stroke="black" d="M5382.13,-2817C5388.15,-2817 5385.04,-2808.07 5381.13,-2803.5 5264.5,-2667.26 5165.76,-2736.67 4988.13,-2712 4652.75,-2665.42 4564.84,-2700.55 4227.13,-2676 4067.75,-2664.41 3882.96,-2645.05 3773.28,-2632.93"/>
+<polygon fill="black" stroke="black" points="3773.55,-2629.44 3763.23,-2631.81 3772.78,-2636.39 3773.55,-2629.44"/>
+</g>
+<!-- k_8d9226ee->k_fe8ab28b -->
+<g id="edge586" class="edge"><title>k_8d9226ee:m_3ada629b:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M1545.13,-2451C1551.15,-2451 1547.8,-2442.27 1544.13,-2437.5 1516.53,-2401.58 1400.16,-2368.87 1321.28,-2350.21"/>
+<polygon fill="black" stroke="black" points="1321.91,-2346.76 1311.37,-2347.9 1320.31,-2353.58 1321.91,-2346.76"/>
+</g>
+<!-- k_8d9226ee->k_8059d21c -->
+<g id="edge584" class="edge"><title>k_8d9226ee:m_3ada629b:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M1545.13,-2451C1551.15,-2451 1545.77,-2443.29 1544.13,-2437.5 1533.86,-2401.15 1517.78,-2397.59 1505.13,-2362 1467.95,-2257.43 1526.36,-2186.63 1436.13,-2122 1334.39,-2049.13 995.95,-2114.65 874.13,-2086 782.61,-2064.47 766.935,-2037.61 679.13,-2004 639.673,-1988.9 594.913,-1973.37 559.304,-1961.39"/>
+<polygon fill="black" stroke="black" points="560.109,-1957.97 549.515,-1958.11 557.884,-1964.61 560.109,-1957.97"/>
+</g>
+<!-- k_8d9226ee->k_3b5a6e9c -->
+<g id="edge588" class="edge"><title>k_8d9226ee:m_3ada629b:e->k_3b5a6e9c</title>
+<path fill="none" stroke="black" d="M1545.13,-2451C1551.15,-2451 1544.59,-2443.5 1544.13,-2437.5 1541.55,-2403.94 1539.46,-2395.63 1538.13,-2362 1537.14,-2337.13 1537.45,-2330.88 1538.13,-2306 1539.69,-2249.05 1543.57,-2234.95 1545.13,-2178 1545.81,-2153.12 1548.22,-2146.7 1545.13,-2122 1529.8,-1999.43 1486.66,-1859.02 1464.95,-1793.43"/>
+<polygon fill="black" stroke="black" points="1468.14,-1791.93 1461.65,-1783.55 1461.5,-1794.15 1468.14,-1791.93"/>
+</g>
+<!-- k_63207c2c->k_acce46b4 -->
+<g id="edge592" class="edge"><title>k_63207c2c:m_63a0fdbf:e->k_acce46b4</title>
+<path fill="none" stroke="black" d="M2253.13,-2451C2303.03,-2451 2338.19,-2395.73 2355.3,-2361.16"/>
+<polygon fill="black" stroke="black" points="2358.51,-2362.56 2359.64,-2352.02 2352.19,-2359.55 2358.51,-2362.56"/>
+</g>
+<!-- k_63207c2c->k_a7a419fb -->
+<g id="edge590" class="edge"><title>k_63207c2c:m_63a0fdbf:e->k_a7a419fb</title>
+<path fill="none" stroke="black" d="M2253.13,-2451C2259.15,-2451 2256.21,-2441.93 2252.13,-2437.5 2175.62,-2354.44 2112.97,-2413.64 2001.13,-2398 1870.76,-2379.76 1830.18,-2408.79 1707.13,-2362 1666.22,-2346.44 1667.26,-2320.97 1626.13,-2306 1464.64,-2247.22 1409.32,-2305.31 1241.13,-2270 1177.65,-2256.67 1024.54,-2201.6 964.13,-2178 959.437,-2176.17 954.587,-2174.17 949.762,-2172.11"/>
+<polygon fill="black" stroke="black" points="951.128,-2168.88 940.562,-2168.1 948.333,-2175.3 951.128,-2168.88"/>
+</g>
+<!-- k_a0b29af9->k_cd819caf -->
+<g id="edge594" class="edge"><title>k_a0b29af9:m_2d8dc501:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M1043.13,-2031C1694.77,-2031 2481.82,-1966.56 2714.96,-1946.13"/>
+<polygon fill="black" stroke="black" points="2715.33,-1949.61 2724.98,-1945.25 2714.72,-1942.64 2715.33,-1949.61"/>
+</g>
+<!-- k_a0b29af9->k_fe8ab28b -->
+<g id="edge598" class="edge"><title>k_a0b29af9:m_2d8dc501:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M1042.13,-2031C1060.57,-2031 1053.51,-2057.99 1042.13,-2072.5 985.075,-2145.22 897.184,-2049.28 840.13,-2122 824.767,-2141.58 824.931,-2158.29 840.13,-2178 878.575,-2227.85 917.724,-2193.16 977.13,-2214 1058.76,-2242.64 1150.1,-2285.69 1202.29,-2311.4"/>
+<polygon fill="black" stroke="black" points="1201.06,-2314.69 1211.57,-2315.99 1204.16,-2308.42 1201.06,-2314.69"/>
+</g>
+<!-- k_a0b29af9->k_8059d21c -->
+<g id="edge596" class="edge"><title>k_a0b29af9:m_2d8dc501:e->k_8059d21c</title>
+<path fill="none" stroke="black" d="M1043.13,-2031C1049.15,-2031 1046.24,-2021.89 1042.13,-2017.5 1010.74,-1983.95 720.302,-1957.27 575.466,-1945.92"/>
+<polygon fill="black" stroke="black" points="575.537,-1942.42 565.296,-1945.13 574.994,-1949.4 575.537,-1942.42"/>
+</g>
+<!-- k_a0b29af9->k_54c1d756 -->
+<g id="edge600" class="edge"><title>k_a0b29af9:m_2d8dc501:e->k_54c1d756</title>
+<path fill="none" stroke="black" d="M1043.13,-2031C1077.91,-2031 1033.68,-1991.36 999.576,-1964.41"/>
+<polygon fill="black" stroke="black" points="1001.65,-1961.59 991.616,-1958.2 997.347,-1967.11 1001.65,-1961.59"/>
+</g>
+<!-- k_7e776058->k_cd819caf -->
+<g id="edge602" class="edge"><title>k_7e776058:m_fc5df405:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M2375.13,-2817C2386.83,-2817 2339.03,-2408.1 2333.13,-2398 2319.14,-2374.04 2300.74,-2382.58 2282.13,-2362 2235.36,-2310.29 2182.98,-2265.36 2230.13,-2214 2293.63,-2144.83 2564.48,-2214.17 2651.13,-2178 2709.32,-2153.71 2728.12,-2140.9 2759.13,-2086 2779.92,-2049.18 2783.9,-1999.36 2784.09,-1968.47"/>
+<polygon fill="black" stroke="black" points="2787.59,-1968.36 2784.02,-1958.38 2780.59,-1968.41 2787.59,-1968.36"/>
+</g>
+<!-- k_7e776058->k_fe8ab28b -->
+<g id="edge606" class="edge"><title>k_7e776058:m_fc5df405:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M2375.13,-2817C2381.15,-2817 2377.91,-2808.18 2374.13,-2803.5 2315.92,-2731.4 1664.65,-2587.81 1574.13,-2568 1519.94,-2556.14 1369.94,-2567.27 1327.13,-2532 1278.42,-2491.87 1305.45,-2455.81 1280.13,-2398 1274.69,-2385.57 1267.8,-2372.26 1261.65,-2361.02"/>
+<polygon fill="black" stroke="black" points="1264.62,-2359.16 1256.7,-2352.12 1258.5,-2362.56 1264.62,-2359.16"/>
+</g>
+<!-- k_7e776058->k_e829e8e2 -->
+<g id="edge604" class="edge"><title>k_7e776058:m_fc5df405:e->k_e829e8e2</title>
+<path fill="none" stroke="black" d="M2375.13,-2817C2426.26,-2817 2380.02,-2741 2422.13,-2712 2480.7,-2671.66 2990.2,-2681.11 3061.13,-2676 3245.21,-2662.75 3459.86,-2642.94 3581,-2631.36"/>
+<polygon fill="black" stroke="black" points="3581.37,-2634.84 3590.99,-2630.4 3580.7,-2627.87 3581.37,-2634.84"/>
+</g>
+<!-- k_7e776058->k_49a1fb25 -->
+<g id="edge608" class="edge"><title>k_7e776058:m_fc5df405:e->k_49a1fb25</title>
+<path fill="none" stroke="black" d="M2375.13,-2817C2381.15,-2817 2375.82,-2809.27 2374.13,-2803.5 2356.01,-2741.67 2325.69,-2737.06 2305.13,-2676 2265.24,-2557.51 2350.38,-2486.56 2262.13,-2398 2250.6,-2386.43 1697.35,-2308 1681.13,-2306 1500.9,-2283.79 1447.36,-2324.48 1274.13,-2270 1256.08,-2264.32 1159.15,-2206.73 1103.85,-2173.44"/>
+<polygon fill="black" stroke="black" points="1105.39,-2170.29 1095.02,-2168.12 1101.78,-2176.28 1105.39,-2170.29"/>
+</g>
+<!-- k_7e776058->k_acce46b4 -->
+<g id="edge610" class="edge"><title>k_7e776058:m_fc5df405:e->k_acce46b4</title>
+<path fill="none" stroke="black" d="M2375.13,-2817C2398.04,-2817 2376.01,-2465.09 2369.07,-2362.03"/>
+<polygon fill="black" stroke="black" points="2372.56,-2361.79 2368.39,-2352.05 2365.58,-2362.27 2372.56,-2361.79"/>
+</g>
+<!-- k_7e776058->k_9a759b9f -->
+<g id="edge612" class="edge"><title>k_7e776058:m_fc5df405:e->k_9a759b9f</title>
+<path fill="none" stroke="black" d="M2375.13,-2817C2381.15,-2817 2374.91,-2809.47 2374.13,-2803.5 2372.63,-2792.13 2303.91,-2407.25 2297.13,-2398 2277.14,-2370.74 2256.06,-2383.69 2230.13,-2362 2110.01,-2261.54 2083.98,-2224.61 2011.13,-2086 1982.63,-2031.77 1935.21,-1853.6 1917.29,-1784.11"/>
+<polygon fill="black" stroke="black" points="1920.64,-1783.11 1914.77,-1774.29 1913.86,-1784.85 1920.64,-1783.11"/>
+</g>
+<!-- k_7e776058->k_9fad21d -->
+<g id="edge614" class="edge"><title>k_7e776058:m_fc5df405:e->k_9fad21d</title>
+<path fill="none" stroke="black" d="M2375.13,-2817C2426.4,-2817 2447.84,-2413.09 2452.13,-2362 2457.64,-2296.45 2457.47,-2279.56 2452.13,-2214 2444.51,-2120.51 2377.88,-2081.22 2431.13,-2004 2447.46,-1980.32 2645.82,-1921.03 2673.13,-1912 2816.07,-1864.76 2851.02,-1846.97 2999.13,-1820 3063.96,-1808.2 3492.25,-1775.26 3670.99,-1761.82"/>
+<polygon fill="black" stroke="black" points="3671.4,-1765.3 3681.11,-1761.06 3670.88,-1758.32 3671.4,-1765.3"/>
+</g>
+<!-- k_869b8de5->k_bebd50c7 -->
+<g id="edge620" class="edge"><title>k_869b8de5:m_1b1ed846:e->k_bebd50c7</title>
+<path fill="none" stroke="black" d="M3867.13,-1637C3873.15,-1637 3867.01,-1629.45 3866.13,-1623.5 3862.84,-1601.2 3858.59,-1596.27 3855.13,-1574 3844.98,-1508.64 3839.74,-1431.03 3837.5,-1390.26"/>
+<polygon fill="black" stroke="black" points="3840.99,-1390.05 3836.97,-1380.25 3834,-1390.42 3840.99,-1390.05"/>
+</g>
+<!-- k_869b8de5->k_6d495d8 -->
+<g id="edge616" class="edge"><title>k_869b8de5:m_1b1ed846:e->k_6d495d8</title>
+<path fill="none" stroke="black" d="M3867.13,-1637C3873.15,-1637 3870.09,-1628.03 3866.13,-1623.5 3831.42,-1583.83 3694.34,-1563.4 3597.43,-1553.7"/>
+<polygon fill="black" stroke="black" points="3597.6,-1550.2 3587.3,-1552.71 3596.91,-1557.17 3597.6,-1550.2"/>
+</g>
+<!-- k_869b8de5->k_8e9f39bf -->
+<g id="edge618" class="edge"><title>k_869b8de5:m_1b1ed846:e->k_8e9f39bf</title>
+<path fill="none" stroke="black" d="M3866.13,-1637C3898.57,-1637 3884.75,-1678.23 3914.13,-1692 3992.07,-1728.53 5392.37,-1678.98 5463.13,-1728 5571.41,-1803.01 5547.01,-1874.5 5571.13,-2004 5586.58,-2086.96 5566.35,-2132.74 5495.13,-2178 5218.19,-2354 5102.51,-2300.84 4780.13,-2362 4716.11,-2374.14 4543,-2361.34 4489.13,-2398 4433.06,-2436.16 4458.57,-2479.1 4416.13,-2532 4399.53,-2552.69 4377.74,-2572.44 4358.56,-2588.05"/>
+<polygon fill="black" stroke="black" points="4356.15,-2585.5 4350.53,-2594.48 4360.52,-2590.97 4356.15,-2585.5"/>
+</g>
+<!-- k_4425af11->k_414f39df -->
+<g id="edge630" class="edge"><title>k_4425af11:m_f42f63ac:e->k_414f39df</title>
+<path fill="none" stroke="black" d="M4113.13,-1637C4119.15,-1637 4115.66,-1628.37 4112.13,-1623.5 4084.77,-1585.73 4035.58,-1566.3 3994.38,-1556.35"/>
+<polygon fill="black" stroke="black" points="3994.9,-1552.87 3984.37,-1554.07 3993.35,-1559.7 3994.9,-1552.87"/>
+</g>
+<!-- k_4425af11->k_832e9dc1 -->
+<g id="edge634" class="edge"><title>k_4425af11:m_f42f63ac:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M4113.13,-1637C4125.33,-1637 4108.93,-1618.02 4118.13,-1610 4184.39,-1552.28 4835.97,-1624.14 4908.13,-1574 4955.72,-1540.93 4959.13,-1511.95 4959.13,-1454 4959.13,-1454 4959.13,-1454 4959.13,-1362 4959.13,-1308 4947.52,-1286.49 4978.13,-1242 5089.18,-1080.59 5254.04,-1186.71 5360.13,-1022 5467.96,-854.579 5393.56,-774.911 5403.13,-576 5406.29,-510.298 5414.87,-492.722 5403.13,-428 5401.06,-416.586 5397.07,-404.556 5392.93,-394.046"/>
+<polygon fill="black" stroke="black" points="5396.04,-392.4 5388.97,-384.504 5389.57,-395.082 5396.04,-392.4"/>
+</g>
+<!-- k_dbf9f0bf -->
+<g id="node178" class="node"><title>k_dbf9f0bf</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4677.13,-1566.5 4489.13,-1566.5 4489.13,-1525.5 4677.13,-1525.5 4677.13,-1566.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4490.13,-1526 4490.13,-1565 4677.13,-1565 4677.13,-1526 4490.13,-1526"/>
+<text text-anchor="start" x="4495.13" y="-1552.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=DataApiRegistry)</text>
+<text text-anchor="start" x="4495.13" y="-1537.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">OperationServiceRegistry</text>
+</g>
+<!-- k_4425af11->k_dbf9f0bf -->
+<g id="edge624" class="edge"><title>k_4425af11:m_f42f63ac:e->k_dbf9f0bf</title>
+<path fill="none" stroke="black" d="M4113.13,-1637C4126.65,-1637 4115.95,-1617.6 4127.13,-1610 4192.34,-1565.67 4402.6,-1588.39 4480.13,-1574 4487.9,-1572.56 4495.94,-1570.82 4503.95,-1568.92"/>
+<polygon fill="black" stroke="black" points="4504.8,-1572.32 4513.68,-1566.54 4503.13,-1565.52 4504.8,-1572.32"/>
+</g>
+<!-- k_806c10de -->
+<!-- k_4425af11->k_806c10de -->
+<g id="edge628" class="edge"><title>k_4425af11:m_f42f63ac:e->k_806c10de</title>
+<path fill="none" stroke="black" d="M4113.13,-1637C4139.17,-1637 4139.95,-1616.64 4165.13,-1610 4376.5,-1554.28 4940.58,-1642.58 5148.13,-1574 5216.72,-1551.34 5232.06,-1534.07 5282.13,-1482 5384.6,-1375.44 5417.13,-1325.83 5417.13,-1178 5417.13,-1178 5417.13,-1178 5417.13,-994 5417.13,-932.031 5393.01,-914.531 5346.13,-874 5322.95,-853.961 5292.65,-839.61 5264.93,-829.646"/>
+<polygon fill="black" stroke="black" points="5265.84,-826.258 5255.24,-826.302 5263.55,-832.874 5265.84,-826.258"/>
+</g>
+<!-- k_7623cdd2 -->
+<g id="node181" class="node"><title>k_7623cdd2</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4899.13,-1564 4771.13,-1564 4771.13,-1528 4899.13,-1528 4899.13,-1564"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4772.13,-1533 4772.13,-1558 4898.13,-1558 4898.13,-1533 4772.13,-1533"/>
+<text text-anchor="start" x="4777.13" y="-1542.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">WaveletProvider</text>
+</g>
+<!-- k_4425af11->k_7623cdd2 -->
+<g id="edge626" class="edge"><title>k_4425af11:m_f42f63ac:e->k_7623cdd2</title>
+<path fill="none" stroke="black" d="M4113.13,-1637C4126.65,-1637 4115.81,-1617.39 4127.13,-1610 4179.25,-1575.98 4624.38,-1581.76 4686.13,-1574 4710.58,-1570.93 4737.08,-1566.36 4760.85,-1561.8"/>
+<polygon fill="black" stroke="black" points="4761.71,-1565.19 4770.86,-1559.85 4760.37,-1558.32 4761.71,-1565.19"/>
+</g>
+<!-- k_2ef40082 -->
+<g id="node182" class="node"><title>k_2ef40082</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4471.13,-1564 4253.13,-1564 4253.13,-1528 4471.13,-1528 4471.13,-1564"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4254.13,-1533 4254.13,-1558 4470.13,-1558 4470.13,-1533 4254.13,-1533"/>
+<text text-anchor="start" x="4259.13" y="-1542.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">EventDataConverterManager</text>
+</g>
+<!-- k_4425af11->k_2ef40082 -->
+<g id="edge622" class="edge"><title>k_4425af11:m_f42f63ac:e->k_2ef40082</title>
+<path fill="none" stroke="black" d="M4113.13,-1637C4126.65,-1637 4116.61,-1618.49 4127.13,-1610 4147.61,-1593.47 4203.73,-1577.88 4256,-1566.23"/>
+<polygon fill="black" stroke="black" points="4257.02,-1569.59 4266.04,-1564.03 4255.52,-1562.75 4257.02,-1569.59"/>
+</g>
+<!-- k_beb9c197 -->
+<g id="node184" class="node"><title>k_beb9c197</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5139.13,-1564 5023.13,-1564 5023.13,-1528 5139.13,-1528 5139.13,-1564"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5024.13,-1533 5024.13,-1558 5138.13,-1558 5138.13,-1533 5024.13,-1533"/>
+<text text-anchor="start" x="5029.13" y="-1542.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">WaveRenderer</text>
+</g>
+<!-- k_4425af11->k_beb9c197 -->
+<g id="edge632" class="edge"><title>k_4425af11:m_f42f63ac:e->k_beb9c197</title>
+<path fill="none" stroke="black" d="M4113.13,-1637C4126.65,-1637 4115.73,-1617.27 4127.13,-1610 4206.47,-1559.43 4880.07,-1587.88 4973.13,-1574 4986.18,-1572.05 4999.94,-1569.16 5013.1,-1565.96"/>
+<polygon fill="black" stroke="black" points="5014.18,-1569.3 5023.02,-1563.46 5012.47,-1562.51 5014.18,-1569.3"/>
+</g>
+<!-- k_79e18302->k_1a7eca26 -->
+<g id="edge636" class="edge"><title>k_79e18302:m_a2bece9f:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M4426.13,-1440C4432.15,-1440 4429.43,-1430.71 4425.13,-1426.5 4397.95,-1399.87 3779.09,-1392.6 3741.13,-1390 3649.47,-1383.71 3543.82,-1374.53 3476.3,-1368.41"/>
+<polygon fill="black" stroke="black" points="3476.49,-1364.92 3466.22,-1367.5 3475.86,-1371.89 3476.49,-1364.92"/>
+</g>
+<!-- k_59cf8930->k_2f704481 -->
+<g id="edge642" class="edge"><title>k_59cf8930:m_96bb30a1:e->k_2f704481</title>
+<path fill="none" stroke="black" d="M4842.13,-1834C4848.15,-1834 4845.52,-1824.62 4841.13,-1820.5 4770.84,-1754.53 1465.69,-1802.73 1371.13,-1784 1363.63,-1782.51 1355.91,-1780.25 1348.46,-1777.64"/>
+<polygon fill="black" stroke="black" points="1349.45,-1774.27 1338.86,-1774.04 1347,-1780.83 1349.45,-1774.27"/>
+</g>
+<!-- k_59cf8930->k_1f909b4 -->
+<g id="edge640" class="edge"><title>k_59cf8930:m_96bb30a1:e->k_1f909b4</title>
+<path fill="none" stroke="black" d="M4842.13,-1834C4848.15,-1834 4845.47,-1824.66 4841.13,-1820.5 4794.21,-1775.55 3737.02,-1787.38 3672.13,-1784 3557.51,-1778.02 3423.85,-1767.42 3348.59,-1761.12"/>
+<polygon fill="black" stroke="black" points="3348.62,-1757.61 3338.36,-1760.26 3348.03,-1764.59 3348.62,-1757.61"/>
+</g>
+<!-- k_59cf8930->k_5425561b -->
+<g id="edge638" class="edge"><title>k_59cf8930:m_96bb30a1:e->k_5425561b</title>
+<path fill="none" stroke="black" d="M4842.13,-1834C4848.15,-1834 4845.45,-1824.69 4841.13,-1820.5 4774.64,-1755.99 4097.54,-1808.26 4008.13,-1784 4003.11,-1782.64 3998.03,-1780.74 3993.11,-1778.57"/>
+<polygon fill="black" stroke="black" points="3994.41,-1775.31 3983.89,-1774.13 3991.37,-1781.62 3994.41,-1775.31"/>
+</g>
+<!-- k_8e9f39bf->k_9d43c1d5 -->
+<g id="edge644" class="edge"><title>k_8e9f39bf:m_c72f445d:e->k_9d43c1d5</title>
+<path fill="none" stroke="black" d="M4395.13,-2608C4419.46,-2608 4401.08,-2433.06 4392.71,-2362.75"/>
+<polygon fill="black" stroke="black" points="4396.13,-2361.91 4391.46,-2352.4 4389.18,-2362.75 4396.13,-2361.91"/>
+</g>
+<!-- k_8e9f39bf->k_6990a9aa -->
+<g id="edge646" class="edge"><title>k_8e9f39bf:m_c72f445d:e->k_6990a9aa</title>
+<path fill="none" stroke="black" d="M4395.13,-2608C4511.17,-2608 4538.12,-2583.4 4653.13,-2568 4794.55,-2549.07 4838.64,-2582.38 4972.13,-2532 4992.37,-2524.36 5012.38,-2511.49 5028.84,-2499.06"/>
+<polygon fill="black" stroke="black" points="5031.37,-2501.53 5037.11,-2492.63 5027.07,-2496.01 5031.37,-2501.53"/>
+</g>
+<!-- k_cb025297->k_e65a2cb5 -->
+<g id="edge652" class="edge"><title>k_cb025297:m_87014a14:e->k_e65a2cb5</title>
+<path fill="none" stroke="black" d="M4107.13,-1834C4115.93,-1834 4113.09,-1823.57 4121.13,-1820 4264.28,-1756.38 4672.57,-1819.55 4825.13,-1784 4831.72,-1782.46 4838.49,-1780.29 4845.05,-1777.83"/>
+<polygon fill="black" stroke="black" points="4846.49,-1781.02 4854.46,-1774.05 4843.88,-1774.53 4846.49,-1781.02"/>
+</g>
+<!-- k_cb025297->k_a162095c -->
+<g id="edge654" class="edge"><title>k_cb025297:m_87014a14:e->k_a162095c</title>
+<path fill="none" stroke="black" d="M4107.13,-1834C4118.11,-1834 4126.27,-1806.52 4131.09,-1784.19"/>
+<polygon fill="black" stroke="black" points="4134.58,-1784.59 4133.13,-1774.09 4127.72,-1783.2 4134.58,-1784.59"/>
+</g>
+<!-- k_cb025297->k_9fad21d -->
+<g id="edge650" class="edge"><title>k_cb025297:m_87014a14:e->k_9fad21d</title>
+<path fill="none" stroke="black" d="M4107.13,-1834C4113.15,-1834 4110.16,-1824.97 4106.13,-1820.5 4075.29,-1786.3 3947.45,-1792.2 3902.13,-1784 3877.83,-1779.6 3851.37,-1774.78 3827.4,-1770.38"/>
+<polygon fill="black" stroke="black" points="3827.75,-1766.89 3817.29,-1768.53 3826.49,-1773.78 3827.75,-1766.89"/>
+</g>
+<!-- k_cb025297->k_e77113ec -->
+<g id="edge648" class="edge"><title>k_cb025297:m_87014a14:e->k_e77113ec</title>
+<path fill="none" stroke="black" d="M4107.13,-1834C4115.93,-1834 4113.11,-1823.63 4121.13,-1820 4232.9,-1769.37 4551.23,-1804.97 4672.13,-1784 4685.88,-1781.61 4700.46,-1778.04 4714.05,-1774.24"/>
+<polygon fill="black" stroke="black" points="4715.1,-1777.58 4723.74,-1771.44 4713.17,-1770.85 4715.1,-1777.58"/>
+</g>
+<!-- k_cb025297->k_35322ade -->
+<g id="edge656" class="edge"><title>k_cb025297:m_87014a14:e->k_35322ade</title>
+<path fill="none" stroke="black" d="M4107.13,-1834C4128.93,-1834 4132.64,-1823.63 4154.13,-1820 4505.52,-1760.69 4603.66,-1842.8 4955.13,-1784 4967.19,-1781.98 4979.87,-1778.93 4991.91,-1775.56"/>
+<polygon fill="black" stroke="black" points="4993.21,-1778.83 5001.84,-1772.68 4991.26,-1772.11 4993.21,-1778.83"/>
+</g>
+<!-- k_cb025297->k_1a7eca26 -->
+<g id="edge658" class="edge"><title>k_cb025297:m_87014a14:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M4107.13,-1834C4115.93,-1834 4113.46,-1824.31 4121.13,-1820 4173.67,-1790.49 4603.99,-1733.02 4648.13,-1692 4706.11,-1638.12 4739.62,-1576.35 4686.13,-1518 4623.72,-1449.93 4351.78,-1528.74 4272.13,-1482 4246.19,-1466.78 4260.18,-1441.04 4234.13,-1426 4139.01,-1371.06 3850.64,-1398.59 3741.13,-1390 3649.53,-1382.82 3543.87,-1373.84 3476.33,-1368.02"/>
+<polygon fill="black" stroke="black" points="3476.5,-1364.52 3466.24,-1367.15 3475.9,-1371.5 3476.5,-1364.52"/>
+</g>
+<!-- i_bf7a7634 -->
+<!-- k_bf7a7634->i_bf7a7634 -->
+<g id="edge660" class="edge"><title>k_bf7a7634->i_bf7a7634</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6872.13,-3008.91C6872.13,-2978.15 6872.13,-2914.9 6872.13,-2872.71"/>
+<polygon fill="none" stroke="black" points="6875.63,-2862.58 6872.13,-2852.58 6868.63,-2862.58 6875.63,-2862.58"/>
+<polygon fill="none" stroke="black" points="6875.63,-2872.58 6872.13,-2862.58 6868.63,-2872.58 6875.63,-2872.58"/>
+</g>
+<!-- k_ccf09ec3->k_658873e3 -->
+<g id="edge662" class="edge"><title>k_ccf09ec3:m_535448fb:e->k_658873e3</title>
+<path fill="none" stroke="black" d="M4296.13,-1164C5198.48,-1164 2620.35,-1099.71 2137.55,-1087.86"/>
+<polygon fill="black" stroke="black" points="2137.29,-1084.36 2127.21,-1087.61 2137.12,-1091.36 2137.29,-1084.36"/>
+</g>
+<!-- k_40ce8a32->k_9d43c1d5 -->
+<g id="edge666" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_9d43c1d5</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3157.61,-2451 3144.77,-2411.66 3173.13,-2398 3199.37,-2385.36 4082.21,-2347.03 4326.84,-2336.63"/>
+<polygon fill="black" stroke="black" points="4327.14,-2340.12 4336.98,-2336.2 4326.84,-2333.12 4327.14,-2340.12"/>
+</g>
+<!-- k_40ce8a32->k_cd819caf -->
+<g id="edge668" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_cd819caf</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3190.13,-2451 2933.79,-2325.61 2902.13,-2270 2843.29,-2166.65 2933.31,-2106.57 2873.13,-2004 2863.31,-1987.26 2847.17,-1973.75 2831.26,-1963.53"/>
+<polygon fill="black" stroke="black" points="2832.85,-1960.4 2822.48,-1958.19 2829.21,-1966.38 2832.85,-1960.4"/>
+</g>
+<!-- k_40ce8a32->k_fe8ab28b -->
+<g id="edge678" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_fe8ab28b</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3132.15,-2451 3129.44,-2441.7 3125.13,-2437.5 3061.9,-2375.92 1626.17,-2368.31 1538.13,-2362 1464.3,-2356.71 1380.18,-2348.4 1321.26,-2342.21"/>
+<polygon fill="black" stroke="black" points="1321.6,-2338.72 1311.29,-2341.15 1320.87,-2345.68 1321.6,-2338.72"/>
+</g>
+<!-- k_40ce8a32->k_429c8161 -->
+<g id="edge670" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_429c8161</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3132.15,-2451 3127.13,-2443.17 3125.13,-2437.5 3111.6,-2399.07 3089.01,-2399.52 3073.13,-2362 3051.94,-2311.91 3049.13,-2296.39 3049.13,-2242 3049.13,-2242 3049.13,-2242 3049.13,-2150 3049.13,-1990.72 2906.31,-1839.34 2844.3,-1781.12"/>
+<polygon fill="black" stroke="black" points="2846.52,-1778.4 2836.81,-1774.17 2841.76,-1783.54 2846.52,-1778.4"/>
+</g>
+<!-- k_40ce8a32->k_9d34b335 -->
+<g id="edge674" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_9d34b335</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3157.61,-2451 3146.46,-2414.73 3173.13,-2398 3477.89,-2206.81 3607.39,-2280.88 3952.13,-2178 3959.55,-2175.79 3967.3,-2173.42 3975.01,-2171.04"/>
+<polygon fill="black" stroke="black" points="3976.2,-2174.34 3984.71,-2168.03 3974.12,-2167.65 3976.2,-2174.34"/>
+</g>
+<!-- k_40ce8a32->k_bebd50c7 -->
+<g id="edge672" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_bebd50c7</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3128.67,-2451 3146.67,-2364.5 3147.13,-2362 3156.88,-2309.08 3163.13,-2295.81 3163.13,-2242 3163.13,-2242 3163.13,-2242 3163.13,-2045 3163.13,-1808.66 2972.96,-1722.1 3092.13,-1518 3093.44,-1515.76 3252.66,-1426.8 3255.13,-1426 3342.82,-1397.74 3598.42,-1377.37 3739.61,-1367.92"/>
+<polygon fill="black" stroke="black" points="3740.25,-1371.38 3749.99,-1367.23 3739.78,-1364.4 3740.25,-1371.38"/>
+</g>
+<!-- k_40ce8a32->k_6d495d8 -->
+<g id="edge676" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_6d495d8</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3149.35,-2451 3125.13,-2265.22 3125.13,-2242 3125.13,-2242 3125.13,-2242 3125.13,-2150 3125.13,-1909.98 2963.18,-1793.31 3118.13,-1610 3136.05,-1588.8 3290.77,-1568.12 3396.9,-1556.24"/>
+<polygon fill="black" stroke="black" points="3397.46,-1559.7 3407.01,-1555.12 3396.69,-1552.75 3397.46,-1559.7"/>
+</g>
+<!-- k_40ce8a32->k_869b8de5 -->
+<g id="edge680" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_869b8de5</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3150.49,-2451 3127.84,-2419.04 3140.13,-2398 3151.7,-2378.19 3167.31,-2382.74 3177.13,-2362 3237.62,-2234.19 3132.39,-1829.21 3231.13,-1728 3282.18,-1675.67 3485.93,-1703.46 3558.13,-1692 3582.39,-1688.15 3608.18,-1683.32 3632.84,-1678.34"/>
+<polygon fill="black" stroke="black" points="3633.86,-1681.71 3642.96,-1676.28 3632.46,-1674.85 3633.86,-1681.71"/>
+</g>
+<!-- k_40ce8a32->k_1fa76df9 -->
+<g id="edge664" class="edge"><title>k_40ce8a32:m_1b090b84:e->k_1fa76df9</title>
+<path fill="none" stroke="black" d="M3126.13,-2451C3149.75,-2451 3087.13,-2265.62 3087.13,-2242 3087.13,-2242 3087.13,-2242 3087.13,-2150 3087.13,-1909.78 2928.24,-1808.09 3064.13,-1610 3109.09,-1544.45 3191.11,-1503.35 3254.45,-1479.9"/>
+<polygon fill="black" stroke="black" points="3255.84,-1483.12 3264.05,-1476.42 3253.46,-1476.53 3255.84,-1483.12"/>
+</g>
+<!-- i_832e9dc1 -->
+<!-- k_832e9dc1->i_832e9dc1 -->
+<g id="edge682" class="edge"><title>k_832e9dc1->i_832e9dc1</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5379.13,-343.182C5379.13,-333.161 5379.13,-320.927 5379.13,-309.776"/>
+<polygon fill="none" stroke="black" points="5382.63,-309.525 5379.13,-299.525 5375.63,-309.525 5382.63,-309.525"/>
+</g>
+<!-- k_1fa76df9->k_1a7eca26 -->
+<g id="edge684" class="edge"><title>k_1fa76df9:m_94b0e6a0:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M3420.13,-1440C3441.27,-1440 3432.27,-1411.77 3421.75,-1389.28"/>
+<polygon fill="black" stroke="black" points="3424.78,-1387.52 3417.22,-1380.09 3418.5,-1390.61 3424.78,-1387.52"/>
+</g>
+<!-- k_8aea4644 -->
+<!-- k_6d89dff1->k_8aea4644 -->
+<g id="edge686" class="edge"><title>k_6d89dff1->k_8aea4644</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4787.46,-883.96C4781.22,-880.406 4774.55,-876.888 4768.13,-874 4740.39,-861.527 4709.48,-850.257 4680.58,-840.774"/>
+<polygon fill="none" stroke="black" points="4681.46,-837.38 4670.87,-837.628 4679.3,-844.039 4681.46,-837.38"/>
+</g>
+<!-- k_1cbad9c8 -->
+<!-- k_f9384575->k_1cbad9c8 -->
+<g id="edge688" class="edge"><title>k_f9384575->k_1cbad9c8</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5404.14,-2026.71C5407.1,-2013.18 5411.24,-1994.29 5414.9,-1977.59"/>
+<polygon fill="none" stroke="black" points="5418.38,-1978.06 5417.1,-1967.54 5411.54,-1976.56 5418.38,-1978.06"/>
+</g>
+<!-- k_b545a68a->k_1a7eca26 -->
+<g id="edge690" class="edge"><title>k_b545a68a:m_14070d2b:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M5390.13,-1532C5396.15,-1532 5393.4,-1522.74 5389.13,-1518.5 5345.01,-1474.76 4889.81,-1502.43 4831.13,-1482 4789.8,-1467.61 4791.67,-1439.78 4750.13,-1426 4643.65,-1390.68 3853.11,-1396.69 3741.13,-1390 3649.42,-1384.52 3543.78,-1375.15 3476.28,-1368.77"/>
+<polygon fill="black" stroke="black" points="3476.48,-1365.27 3466.19,-1367.81 3475.82,-1372.24 3476.48,-1365.27"/>
+</g>
+<!-- k_b0057a76->k_bffd6740 -->
+<g id="edge692" class="edge"><title>k_b0057a76:m_f7fa287d:e->k_bffd6740</title>
+<path fill="none" stroke="black" d="M3944.13,-2136C3951.3,-2136 3948.14,-2127.95 3952.13,-2122 3961.42,-2108.14 3972.44,-2093.56 3982.48,-2080.85"/>
+<polygon fill="black" stroke="black" points="3985.4,-2082.8 3988.91,-2072.8 3979.93,-2078.43 3985.4,-2082.8"/>
+</g>
+<!-- k_64ea3d13 -->
+<!-- k_b0057a76->k_64ea3d13 -->
+<g id="edge694" class="edge"><title>k_b0057a76:m_f7fa287d:e->k_64ea3d13</title>
+<path fill="none" stroke="black" d="M3944.13,-2136C3950.15,-2136 3947.28,-2126.85 3943.13,-2122.5 3896.77,-2073.91 3708.88,-2099.67 3643.13,-2086 3628.91,-2083.05 3614.04,-2079.32 3599.55,-2075.33"/>
+<polygon fill="black" stroke="black" points="3600.16,-2071.86 3589.58,-2072.52 3598.26,-2078.6 3600.16,-2071.86"/>
+</g>
+<!-- k_c29d2db0->k_832e9dc1 -->
+<g id="edge698" class="edge"><title>k_c29d2db0:m_145a2d5b:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M5329.13,-2136C5332.14,-2136 5329.52,-2124.87 5300.13,-2004 5285.48,-1943.75 5221.95,-1777.62 5259.13,-1728 5293.28,-1682.42 5334,-1722.46 5382.13,-1692 5604.71,-1551.16 5677.13,-1441.4 5677.13,-1178 5677.13,-1178 5677.13,-1178 5677.13,-548 5677.13,-456.374 5573.87,-408.862 5488.92,-385.277"/>
+<polygon fill="black" stroke="black" points="5489.75,-381.877 5479.19,-382.656 5487.93,-388.636 5489.75,-381.877"/>
+</g>
+<!-- k_c29d2db0->k_f9384575 -->
+<g id="edge696" class="edge"><title>k_c29d2db0:m_145a2d5b:e->k_f9384575</title>
+<path fill="none" stroke="black" d="M5329.13,-2136C5361.47,-2136 5381.25,-2099.84 5391.46,-2073.1"/>
+<polygon fill="black" stroke="black" points="5394.85,-2074.01 5394.9,-2063.42 5388.25,-2071.66 5394.85,-2074.01"/>
+</g>
+<!-- k_f94a810 -->
+<g id="node188" class="node"><title>k_f94a810</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5291.13,-2065.5 5097.13,-2065.5 5097.13,-2024.5 5291.13,-2024.5 5291.13,-2065.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5098.13,-2025 5098.13,-2064 5290.13,-2064 5290.13,-2025 5098.13,-2025"/>
+<text text-anchor="start" x="5103.13" y="-2051.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=disable_registration)</text>
+<text text-anchor="start" x="5103.13" y="-2036.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Boolean</text>
+</g>
+<!-- k_c29d2db0->k_f94a810 -->
+<g id="edge700" class="edge"><title>k_c29d2db0:m_145a2d5b:e->k_f94a810</title>
+<path fill="none" stroke="black" d="M5329.13,-2136C5376.52,-2136 5303.93,-2096.97 5248.19,-2070.03"/>
+<polygon fill="black" stroke="black" points="5249.59,-2066.82 5239.06,-2065.65 5246.56,-2073.13 5249.59,-2066.82"/>
+</g>
+<!-- k_9ea4242b->k_1a7eca26 -->
+<g id="edge702" class="edge"><title>k_9ea4242b:m_de674d3e:e->k_1a7eca26</title>
+<path fill="none" stroke="black" d="M5481.13,-3125C5521.96,-3125 5814.02,-3095.57 5844.13,-3068 5924.2,-2994.7 5903.13,-2939.55 5903.13,-2831 5903.13,-2831 5903.13,-2831 5903.13,-2622 5903.13,-2364.88 5861.13,-2302.12 5861.13,-2045 5861.13,-2045 5861.13,-2045 5861.13,-1940 5861.13,-1884.8 5859.14,-1866.33 5829.13,-1820 5713.36,-1641.26 5654.83,-1597.16 5457.13,-1518 5270.87,-1443.42 5203.47,-1523.29 5007.13,-1482 4932.99,-1466.41 4920.62,-1439.84 4846.13,-1426 4604.58,-1381.13 3986.4,-1404.27 3741.13,-1390 3649.41,-1384.66 3543.77,-1375.26 3476.28,-1368.83"/>
+<polygon fill="black" stroke="black" points="3476.48,-1365.34 3466.19,-1367.87 3475.81,-1372.31 3476.48,-1365.34"/>
+</g>
+<!-- k_7ad9e7f3->k_832e9dc1 -->
+<g id="edge704" class="edge"><title>k_7ad9e7f3:m_ab1e54db:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M6066.13,-3125C6070.88,-3125 6069.05,-3108.63 6070.13,-3104 6073.91,-3087.83 6076.49,-3084.2 6080.13,-3068 6103.58,-2963.7 6121.13,-2937.9 6121.13,-2831 6121.13,-2831 6121.13,-2831 6121.13,-548 6121.13,-419.44 5696.2,-380.084 5489.48,-368.544"/>
+<polygon fill="black" stroke="black" points="5489.37,-365.034 5479.2,-367.984 5488.99,-372.023 5489.37,-365.034"/>
+</g>
+<!-- k_7ad9e7f3->k_5ed380ef -->
+<g id="edge706" class="edge"><title>k_7ad9e7f3:m_ab1e54db:e->k_5ed380ef</title>
+<path fill="none" stroke="black" d="M6066.13,-3125C6121.17,-3125 6173.76,-3083.82 6203.95,-3054.85"/>
+<polygon fill="black" stroke="black" points="6206.46,-3057.29 6211.14,-3047.78 6201.55,-3052.3 6206.46,-3057.29"/>
+</g>
+<!-- k_7ad9e7f3->k_a0e8f908 -->
+<g id="edge708" class="edge"><title>k_7ad9e7f3:m_ab1e54db:e->k_a0e8f908</title>
+<path fill="none" stroke="black" d="M6066.13,-3125C6099.56,-3125 6063.55,-3081.87 6035.52,-3052.84"/>
+<polygon fill="black" stroke="black" points="6037.76,-3050.12 6028.25,-3045.43 6032.76,-3055.02 6037.76,-3050.12"/>
+</g>
+<!-- i_5ed380ef -->
+<!-- k_5ed380ef->i_5ed380ef -->
+<g id="edge710" class="edge"><title>k_5ed380ef->i_5ed380ef</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6230.13,-3006.4C6230.13,-2972.11 6230.13,-2903.13 6230.13,-2862.64"/>
+<polygon fill="none" stroke="black" points="6233.63,-2862.52 6230.13,-2852.52 6226.63,-2862.52 6233.63,-2862.52"/>
+</g>
+<!-- k_6c65cbd2 -->
+<!-- k_a0e8f908->k_6c65cbd2 -->
+<g id="edge712" class="edge"><title>k_a0e8f908->k_6c65cbd2</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6009.13,-3008.91C6009.13,-2977.2 6009.13,-2910.94 6009.13,-2868.84"/>
+<polygon fill="none" stroke="black" points="6012.63,-2868.69 6009.13,-2858.69 6005.63,-2868.69 6012.63,-2868.69"/>
+</g>
+<!-- i_dbf9f0bf -->
+<!-- k_dbf9f0bf->i_dbf9f0bf -->
+<g id="edge714" class="edge"><title>k_dbf9f0bf->i_dbf9f0bf</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4585.17,-1525.12C4586.03,-1516.37 4587.06,-1505.87 4588.05,-1495.66"/>
+<polygon fill="none" stroke="black" points="4592.51,-1486.05 4590,-1475.75 4585.54,-1485.37 4592.51,-1486.05"/>
+<polygon fill="none" stroke="black" points="4591.54,-1496 4589.03,-1485.71 4584.57,-1495.32 4591.54,-1496"/>
+</g>
+<!-- k_5f08355f -->
+<!-- i_dbf9f0bf->k_5f08355f -->
+<g id="edge716" class="edge"><title>i_dbf9f0bf:header:e->k_5f08355f</title>
+<path fill="none" stroke="black" d="M4741.13,-1453C4776.74,-1453 4735.03,-1421.04 4695.13,-1395"/>
+<polygon fill="black" stroke="black" points="4696.97,-1392.03 4686.67,-1389.55 4693.18,-1397.91 4696.97,-1392.03"/>
+</g>
+<!-- k_b4e7e4bb -->
+<g id="node193" class="node"><title>k_b4e7e4bb</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5304.13,-743 5206.13,-743 5206.13,-707 5304.13,-707 5304.13,-743"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5207.13,-712 5207.13,-737 5303.13,-737 5303.13,-712 5207.13,-712"/>
+<text text-anchor="start" x="5212.13" y="-721.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">IdGenerator</text>
+</g>
+<!-- k_806c10de->k_b4e7e4bb -->
+<g id="edge718" class="edge"><title>k_806c10de:m_cb039b61:e->k_b4e7e4bb</title>
+<path fill="none" stroke="black" d="M5256.13,-796C5274.16,-796 5271.26,-772.817 5265.46,-752.945"/>
+<polygon fill="black" stroke="black" points="5268.75,-751.736 5262.36,-743.284 5262.08,-753.876 5268.75,-751.736"/>
+</g>
+<!-- k_a47076e4 -->
+<!-- k_7623cdd2->k_a47076e4 -->
+<g id="edge720" class="edge"><title>k_7623cdd2->k_a47076e4</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4823.93,-1527.97C4805.1,-1495.86 4769.13,-1426.14 4769.13,-1362 4769.13,-1362 4769.13,-1362 4769.13,-1270 4769.13,-1188.59 4858,-1137.38 4925.49,-1110.23"/>
+<polygon fill="none" stroke="black" points="4926.83,-1113.47 4934.86,-1106.56 4924.27,-1106.95 4926.83,-1113.47"/>
+</g>
+<!-- i_2ef40082 -->
+<!-- k_2ef40082->i_2ef40082 -->
+<g id="edge722" class="edge"><title>k_2ef40082->i_2ef40082</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4306.56,-1527.93C4266.06,-1514.77 4210.46,-1496.69 4164.37,-1481.71"/>
+<polygon fill="none" stroke="black" points="4155.86,-1475.26 4145.27,-1475.5 4153.7,-1481.92 4155.86,-1475.26"/>
+<polygon fill="none" stroke="black" points="4165.37,-1478.36 4154.78,-1478.59 4163.21,-1485.01 4165.37,-1478.36"/>
+</g>
+<!-- k_4bde6204 -->
+<!-- k_beb9c197->k_4bde6204 -->
+<g id="edge724" class="edge"><title>k_beb9c197->k_4bde6204</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5095.55,-1527.82C5104.22,-1516.9 5115.56,-1502.61 5125.94,-1489.52"/>
+<polygon fill="none" stroke="black" points="5128.78,-1491.58 5132.26,-1481.57 5123.3,-1487.23 5128.78,-1491.58"/>
+</g>
+<!-- k_3438204 -->
+<g id="node197" class="node"><title>k_3438204</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4783.13,-743 4639.13,-743 4639.13,-707 4783.13,-707 4783.13,-743"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4640.13,-712 4640.13,-737 4783.13,-737 4783.13,-712 4640.13,-712"/>
+<text text-anchor="start" x="4645.13" y="-721.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">CertificateManager</text>
+</g>
+<!-- k_8aea4644->k_3438204 -->
+<g id="edge726" class="edge"><title>k_8aea4644:m_72bb3f17:e->k_3438204</title>
+<path fill="none" stroke="black" d="M4686.13,-796C4705.07,-796 4710.58,-773.238 4711.79,-753.49"/>
+<polygon fill="black" stroke="black" points="4715.3,-753.38 4712.08,-743.284 4708.3,-753.18 4715.3,-753.38"/>
+</g>
+<!-- k_d03afe90 -->
+<g id="node198" class="node"><title>k_d03afe90</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4621.13,-745.5 4361.13,-745.5 4361.13,-704.5 4621.13,-704.5 4621.13,-745.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4362.13,-705 4362.13,-744 4620.13,-744 4620.13,-705 4362.13,-705"/>
+<text text-anchor="start" x="4367.13" y="-731.167" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@FederationHostBridge</text>
+<text text-anchor="start" x="4367.13" y="-716.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">WaveletFederationListener$Factory</text>
+</g>
+<!-- k_8aea4644->k_d03afe90 -->
+<g id="edge728" class="edge"><title>k_8aea4644:m_72bb3f17:e->k_d03afe90</title>
+<path fill="none" stroke="black" d="M4686.13,-796C4743.02,-796 4655.53,-768.985 4580.13,-748.283"/>
+<polygon fill="black" stroke="black" points="4580.64,-744.792 4570.07,-745.536 4578.79,-751.545 4580.64,-744.792"/>
+</g>
+<!-- k_182d39be -->
+<g id="node199" class="node"><title>k_182d39be</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5491.13,-1868.5 5277.13,-1868.5 5277.13,-1827.5 5491.13,-1827.5 5491.13,-1868.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5278.13,-1828 5278.13,-1867 5491.13,-1867 5491.13,-1828 5278.13,-1828"/>
+<text text-anchor="start" x="5283.13" y="-1854.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=account_store_directory)</text>
+<text text-anchor="start" x="5283.13" y="-1839.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">String</text>
+</g>
+<!-- k_1cbad9c8->k_182d39be -->
+<g id="edge730" class="edge"><title>k_1cbad9c8:m_2bca331e:e->k_182d39be</title>
+<path fill="none" stroke="black" d="M5489.13,-1926C5525.06,-1926 5476.45,-1896.2 5434.09,-1873.43"/>
+<polygon fill="black" stroke="black" points="5435.65,-1870.3 5425.18,-1868.7 5432.36,-1876.48 5435.65,-1870.3"/>
+</g>
+<!-- k_775d88ca -->
+<!-- k_64ea3d13->k_775d88ca -->
+<g id="edge732" class="edge"><title>k_64ea3d13:m_40754071:e->k_775d88ca</title>
+<path fill="none" stroke="black" d="M3591.13,-2031C3627.71,-2031 3540.58,-1936.12 3488.93,-1883"/>
+<polygon fill="black" stroke="black" points="3491.39,-1880.5 3481.9,-1875.79 3486.38,-1885.39 3491.39,-1880.5"/>
+</g>
+<!-- i_f94a810 -->
+<!-- k_f94a810->i_f94a810 -->
+<g id="edge734" class="edge"><title>k_f94a810->i_f94a810</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5195.12,-2024.26C5195.83,-2009.31 5196.8,-1988.86 5197.61,-1971.85"/>
+<polygon fill="none" stroke="black" points="5201.11,-1971.94 5198.09,-1961.79 5194.12,-1971.61 5201.11,-1971.94"/>
+</g>
+<!-- k_6c65cbd2->k_f9384575 -->
+<g id="edge736" class="edge"><title>k_6c65cbd2:m_bc6356d8:e->k_f9384575</title>
+<path fill="none" stroke="black" d="M6088.13,-2817C6094.15,-2817 6089.63,-2808.97 6087.13,-2803.5 6053.88,-2730.76 6014.04,-2735.08 5960.13,-2676 5815.73,-2517.73 5794.14,-2465.53 5651.13,-2306 5571.43,-2217.09 5471.83,-2116.45 5425.73,-2070.42"/>
+<polygon fill="black" stroke="black" points="5428.1,-2067.83 5418.54,-2063.25 5423.15,-2072.79 5428.1,-2067.83"/>
+</g>
+<!-- k_ca5f0518 -->
+<g id="node202" class="node"><title>k_ca5f0518</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6093.13,-2640 5969.13,-2640 5969.13,-2604 6093.13,-2604 6093.13,-2640"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5970.13,-2609 5970.13,-2634 6093.13,-2634 6093.13,-2609 5970.13,-2609"/>
+<text text-anchor="start" x="5975.13" y="-2618.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">SessionManager</text>
+</g>
+<!-- k_6c65cbd2->k_ca5f0518 -->
+<g id="edge738" class="edge"><title>k_6c65cbd2:m_bc6356d8:e->k_ca5f0518</title>
+<path fill="none" stroke="black" d="M6088.13,-2817C6122.65,-2817 6071.05,-2702.99 6044.85,-2649.32"/>
+<polygon fill="black" stroke="black" points="6047.99,-2647.77 6040.43,-2640.35 6041.71,-2650.86 6047.99,-2647.77"/>
+</g>
+<!-- k_bfef5978 -->
+<g id="node203" class="node"><title>k_bfef5978</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4727.13,-1288 4609.13,-1288 4609.13,-1252 4727.13,-1252 4727.13,-1288"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4610.13,-1257 4610.13,-1282 4727.13,-1282 4727.13,-1257 4610.13,-1257"/>
+<text text-anchor="start" x="4615.13" y="-1266.23" font-family="Times Roman,serif" font-size="14.00" fill="#000000">SearchProvider</text>
+</g>
+<!-- k_5f08355f->k_bfef5978 -->
+<g id="edge740" class="edge"><title>k_5f08355f:m_22b30b9b:e->k_bfef5978</title>
+<path fill="none" stroke="black" d="M4698.13,-1348C4720.77,-1348 4704.66,-1319.01 4688.63,-1296.38"/>
+<polygon fill="black" stroke="black" points="4691.3,-1294.1 4682.57,-1288.09 4685.64,-1298.23 4691.3,-1294.1"/>
+</g>
+<!-- i_b4e7e4bb -->
+<!-- k_b4e7e4bb->i_b4e7e4bb -->
+<g id="edge742" class="edge"><title>k_b4e7e4bb->i_b4e7e4bb</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5255.13,-706.974C5255.13,-699.621 5255.13,-690.786 5255.13,-681.981"/>
+<polygon fill="none" stroke="black" points="5258.63,-671.614 5255.13,-661.614 5251.63,-671.614 5258.63,-671.614"/>
+<polygon fill="none" stroke="black" points="5258.63,-681.614 5255.13,-671.614 5251.63,-681.614 5258.63,-681.614"/>
+</g>
+<!-- i_b4e7e4bb->k_832e9dc1 -->
+<g id="edge744" class="edge"><title>i_b4e7e4bb:header:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M5384.13,-639C5408.32,-639 5391.09,-466.762 5382.85,-394.905"/>
+<polygon fill="black" stroke="black" points="5386.29,-394.198 5381.66,-384.67 5379.34,-395.007 5386.29,-394.198"/>
+</g>
+<!-- k_aaedcc69 -->
+<g id="node204" class="node"><title>k_aaedcc69</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6333.13,-566 6163.13,-566 6163.13,-530 6333.13,-530 6333.13,-566"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6164.13,-535 6164.13,-560 6332.13,-560 6332.13,-535 6164.13,-535"/>
+<text text-anchor="start" x="6169.13" y="-544.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">IdGeneratorImpl$Seed</text>
+</g>
+<!-- i_b4e7e4bb->k_aaedcc69 -->
+<g id="edge746" class="edge"><title>i_b4e7e4bb:header:e->k_aaedcc69</title>
+<path fill="none" stroke="black" d="M5384.13,-639C5664.73,-639 5993.79,-590.941 6152.69,-564.674"/>
+<polygon fill="black" stroke="black" points="6153.62,-568.068 6162.91,-562.976 6152.47,-561.163 6153.62,-568.068"/>
+</g>
+<!-- k_a47076e4->k_3438204 -->
+<g id="edge750" class="edge"><title>k_a47076e4:m_3065e839:e->k_3438204</title>
+<path fill="none" stroke="black" d="M5065.13,-1072C5071.15,-1072 5067.91,-1063.18 5064.13,-1058.5 5028.04,-1013.8 4984.39,-1058.63 4940.13,-1022 4883.16,-974.856 4908.08,-933.463 4864.13,-874 4827.86,-824.936 4775,-777.384 4741.87,-749.672"/>
+<polygon fill="black" stroke="black" points="4743.82,-746.748 4733.89,-743.066 4739.36,-752.14 4743.82,-746.748"/>
+</g>
+<!-- k_74266868 -->
+<g id="node206" class="node"><title>k_74266868</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5151.13,-1014.5 4949.13,-1014.5 4949.13,-973.5 5151.13,-973.5 5151.13,-1014.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4950.13,-974 4950.13,-1013 5150.13,-1013 5150.13,-974 4950.13,-974"/>
+<text text-anchor="start" x="4955.13" y="-1000.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@FederationRemoteBridge</text>
+<text text-anchor="start" x="4955.13" y="-985.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">WaveletFederationProvider</text>
+</g>
+<!-- k_a47076e4->k_74266868 -->
+<g id="edge752" class="edge"><title>k_a47076e4:m_3065e839:e->k_74266868</title>
+<path fill="none" stroke="black" d="M5065.13,-1072C5085.52,-1072 5077.35,-1045.97 5066.81,-1023.99"/>
+<polygon fill="black" stroke="black" points="5069.85,-1022.25 5062.22,-1014.9 5063.6,-1025.41 5069.85,-1022.25"/>
+</g>
+<!-- k_438f81fa -->
+<!-- k_a47076e4->k_438f81fa -->
+<g id="edge754" class="edge"><title>k_a47076e4:m_3065e839:e->k_438f81fa</title>
+<path fill="none" stroke="black" d="M5065.13,-1072C5289.51,-1072 4707.3,-1015.68 4527.24,-998.755"/>
+<polygon fill="black" stroke="black" points="4527.5,-995.265 4517.22,-997.815 4526.85,-1002.23 4527.5,-995.265"/>
+</g>
+<!-- k_9f16b2fc -->
+<g id="node208" class="node"><title>k_9f16b2fc</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5351.13,-1014.5 5169.13,-1014.5 5169.13,-973.5 5351.13,-973.5 5351.13,-1014.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5170.13,-974 5170.13,-1013 5350.13,-1013 5350.13,-974 5170.13,-974"/>
+<text text-anchor="start" x="5175.13" y="-1000.17" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=listener_executor)</text>
+<text text-anchor="start" x="5175.13" y="-985.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Executor</text>
+</g>
+<!-- k_a47076e4->k_9f16b2fc -->
+<g id="edge748" class="edge"><title>k_a47076e4:m_3065e839:e->k_9f16b2fc</title>
+<path fill="none" stroke="black" d="M5065.13,-1072C5122.35,-1072 5182.69,-1042.69 5220.82,-1020.01"/>
+<polygon fill="black" stroke="black" points="5222.83,-1022.88 5229.55,-1014.7 5219.19,-1016.9 5222.83,-1022.88"/>
+</g>
+<!-- k_4bde6204->k_832e9dc1 -->
+<g id="edge760" class="edge"><title>k_4bde6204:m_b9a42285:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M5246.13,-1440C5252.15,-1440 5248.8,-1431.27 5245.13,-1426.5 5215.03,-1387.32 5168.76,-1430.26 5140.13,-1390 5125.71,-1369.72 5123.79,-1352.78 5140.13,-1334 5216.13,-1246.66 5304.78,-1366.49 5398.13,-1298 5445.73,-1263.07 5455.13,-1237.04 5455.13,-1178 5455.13,-1178 5455.13,-1178 5455.13,-548 5455.13,-493.61 5454.29,-477.212 5431.13,-428 5425.11,-415.2 5415.99,-402.746 5407.06,-392.279"/>
+<polygon fill="black" stroke="black" points="5409.57,-389.844 5400.32,-384.688 5404.34,-394.49 5409.57,-389.844"/>
+</g>
+<!-- k_1317af22 -->
+<!-- k_4bde6204->k_1317af22 -->
+<g id="edge758" class="edge"><title>k_4bde6204:m_b9a42285:e->k_1317af22</title>
+<path fill="none" stroke="black" d="M5246.13,-1440C5265.64,-1440 5256.38,-1418.48 5243.18,-1398.04"/>
+<polygon fill="black" stroke="black" points="5246.06,-1396.06 5237.57,-1389.72 5240.26,-1399.97 5246.06,-1396.06"/>
+</g>
+<!-- k_b62ee2fb -->
+<!-- k_4bde6204->k_b62ee2fb -->
+<g id="edge756" class="edge"><title>k_4bde6204:m_b9a42285:e->k_b62ee2fb</title>
+<path fill="none" stroke="black" d="M5246.13,-1440C5252.15,-1440 5248.97,-1431.13 5245.13,-1426.5 5204.6,-1377.69 5167.21,-1410.39 5107.13,-1390 5102.18,-1388.32 5097.08,-1386.45 5092.01,-1384.5"/>
+<polygon fill="black" stroke="black" points="5092.91,-1381.09 5082.33,-1380.66 5090.33,-1387.6 5092.91,-1381.09"/>
+</g>
+<!-- k_3b47287a -->
+<!-- k_3438204->k_3b47287a -->
+<g id="edge762" class="edge"><title>k_3438204->k_3b47287a</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4703.49,-706.974C4699.8,-698.243 4695.21,-687.422 4690.82,-677.043"/>
+<polygon fill="none" stroke="black" points="4693.99,-675.55 4686.86,-667.707 4687.54,-678.28 4693.99,-675.55"/>
+</g>
+<!-- k_507c66a8 -->
+<!-- k_d03afe90->k_507c66a8 -->
+<g id="edge764" class="edge"><title>k_d03afe90->k_507c66a8</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4490.89,-704.424C4490.79,-696.428 4490.68,-687.005 4490.58,-677.872"/>
+<polygon fill="none" stroke="black" points="4494.07,-677.731 4490.46,-667.773 4487.07,-677.814 4494.07,-677.731"/>
+</g>
+<!-- i_182d39be -->
+<!-- k_182d39be->i_182d39be -->
+<g id="edge766" class="edge"><title>k_182d39be->i_182d39be</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5378.91,-1827.12C5376,-1815.49 5372.32,-1800.77 5369.07,-1787.75"/>
+<polygon fill="none" stroke="black" points="5372.39,-1786.61 5366.57,-1777.75 5365.6,-1788.3 5372.39,-1786.61"/>
+</g>
+<!-- k_775d88ca->k_1fa76df9 -->
+<g id="edge768" class="edge"><title>k_775d88ca:m_30d2c19e:e->k_1fa76df9</title>
+<path fill="none" stroke="black" d="M3554.13,-1834C3579.02,-1834 3573.68,-1629.44 3558.13,-1610 3512.6,-1553.08 3454.91,-1619.7 3398.13,-1574 3372.56,-1553.42 3358.1,-1518.47 3350.3,-1491.59"/>
+<polygon fill="black" stroke="black" points="3353.62,-1490.46 3347.63,-1481.72 3346.86,-1492.29 3353.62,-1490.46"/>
+</g>
+<!-- k_6b009835 -->
+<!-- k_ca5f0518->k_6b009835 -->
+<g id="edge770" class="edge"><title>k_ca5f0518->k_6b009835</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6028.95,-2603.99C6025.97,-2579.35 6020.55,-2534.54 6016.66,-2502.46"/>
+<polygon fill="none" stroke="black" points="6020.14,-2502.04 6015.46,-2492.53 6013.19,-2502.88 6020.14,-2502.04"/>
+</g>
+<!-- k_eae9eb08 -->
+<!-- k_bfef5978->k_eae9eb08 -->
+<g id="edge772" class="edge"><title>k_bfef5978->k_eae9eb08</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4665.17,-1251.82C4663.49,-1241.51 4661.32,-1228.22 4659.29,-1215.76"/>
+<polygon fill="none" stroke="black" points="4662.69,-1214.87 4657.62,-1205.57 4655.78,-1216 4662.69,-1214.87"/>
+</g>
+<!-- i_aaedcc69 -->
+<!-- k_aaedcc69->i_aaedcc69 -->
+<g id="edge774" class="edge"><title>k_aaedcc69->i_aaedcc69</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6250.9,-529.824C6252.3,-520.58 6254.07,-508.936 6255.79,-497.644"/>
+<polygon fill="none" stroke="black" points="6260.78,-488.112 6258.83,-477.699 6253.86,-487.059 6260.78,-488.112"/>
+<polygon fill="none" stroke="black" points="6259.28,-497.998 6257.32,-487.585 6252.36,-496.945 6259.28,-497.998"/>
+</g>
+<!-- k_373c233a -->
+<g id="node216" class="node"><title>k_373c233a</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="6432.13,-382 6316.13,-382 6316.13,-346 6432.13,-346 6432.13,-382"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="6317.13,-351 6317.13,-376 6432.13,-376 6432.13,-351 6317.13,-351"/>
+<text text-anchor="start" x="6322.13" y="-360.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">SecureRandom</text>
+</g>
+<!-- i_aaedcc69->k_373c233a -->
+<g id="edge776" class="edge"><title>i_aaedcc69:header:e->k_373c233a</title>
+<path fill="none" stroke="black" d="M6375.13,-455C6400.63,-455 6393.58,-418.836 6384.89,-392.104"/>
+<polygon fill="black" stroke="black" points="6388.11,-390.724 6381.54,-382.415 6381.5,-393.01 6388.11,-390.724"/>
+</g>
+<!-- k_23c10342 -->
+<!-- k_74266868->k_23c10342 -->
+<g id="edge778" class="edge"><title>k_74266868->k_23c10342</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5050.13,-973.124C5050.13,-963.301 5050.13,-951.274 5050.13,-939.923"/>
+<polygon fill="none" stroke="black" points="5053.63,-939.773 5050.13,-929.773 5046.63,-939.773 5053.63,-939.773"/>
+</g>
+<!-- k_438f81fa->k_832e9dc1 -->
+<g id="edge790" class="edge"><title>k_438f81fa:m_a29919e6:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M4518.13,-980C4524.15,-980 4520.87,-971.211 4517.13,-966.5 4483.25,-923.844 4434.3,-972.424 4400.13,-930 4358.71,-878.573 4414.62,-842.035 4387.13,-782 4377.84,-761.711 4362.32,-765.852 4352.13,-746 4330.27,-703.422 4333.13,-687.862 4333.13,-640 4333.13,-640 4333.13,-640 4333.13,-548 4333.13,-494.002 4312.06,-464.194 4352.13,-428 4405.73,-379.591 4929.06,-396.668 5001.13,-392 5091.31,-386.159 5193.52,-378.527 5268.9,-372.706"/>
+<polygon fill="black" stroke="black" points="5269.19,-376.195 5278.89,-371.934 5268.65,-369.216 5269.19,-376.195"/>
+</g>
+<!-- k_438f81fa->k_6d89dff1 -->
+<g id="edge784" class="edge"><title>k_438f81fa:m_a29919e6:e->k_6d89dff1</title>
+<path fill="none" stroke="black" d="M4518.13,-980C4631.44,-980 4662.19,-970.207 4768.13,-930 4772.04,-928.517 4776,-926.735 4779.88,-924.796"/>
+<polygon fill="black" stroke="black" points="4781.57,-927.862 4788.73,-920.058 4778.26,-921.69 4781.57,-927.862"/>
+</g>
+<!-- k_d3e53b91 -->
+<g id="node219" class="node"><title>k_d3e53b91</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4009.13,-920 3759.13,-920 3759.13,-884 4009.13,-884 4009.13,-920"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3760.13,-889 3760.13,-914 4009.13,-914 4009.13,-889 3760.13,-889"/>
+<text text-anchor="start" x="3765.13" y="-898.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">RemoteWaveletContainer$Factory</text>
+</g>
+<!-- k_438f81fa->k_d3e53b91 -->
+<g id="edge788" class="edge"><title>k_438f81fa:m_a29919e6:e->k_d3e53b91</title>
+<path fill="none" stroke="black" d="M4518.13,-980C4524.15,-980 4521.36,-970.778 4517.13,-966.5 4483.57,-932.564 4136.57,-935.259 4089.13,-930 4066.25,-927.463 4041.97,-924.442 4018.44,-921.337"/>
+<polygon fill="black" stroke="black" points="4018.78,-917.851 4008.4,-920.002 4017.85,-924.79 4018.78,-917.851"/>
+</g>
+<!-- k_49b09b89 -->
+<g id="node221" class="node"><title>k_49b09b89</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4629.13,-920 4409.13,-920 4409.13,-884 4629.13,-884 4629.13,-920"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4410.13,-889 4410.13,-914 4629.13,-914 4629.13,-889 4410.13,-889"/>
+<text text-anchor="start" x="4415.13" y="-898.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">WaveletNotificationSubscriber</text>
+</g>
+<!-- k_438f81fa->k_49b09b89 -->
+<g id="edge782" class="edge"><title>k_438f81fa:m_a29919e6:e->k_49b09b89</title>
+<path fill="none" stroke="black" d="M4518.13,-980C4538.8,-980 4535.18,-952.275 4528.88,-929.884"/>
+<polygon fill="black" stroke="black" points="4532.16,-928.626 4525.88,-920.091 4525.47,-930.678 4532.16,-928.626"/>
+</g>
+<!-- k_c6883653 -->
+<g id="node222" class="node"><title>k_c6883653</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4330.13,-920 4098.13,-920 4098.13,-884 4330.13,-884 4330.13,-920"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4099.13,-889 4099.13,-914 4330.13,-914 4330.13,-889 4099.13,-889"/>
+<text text-anchor="start" x="4104.13" y="-898.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">LocalWaveletContainer$Factory</text>
+</g>
+<!-- k_438f81fa->k_c6883653 -->
+<g id="edge786" class="edge"><title>k_438f81fa:m_a29919e6:e->k_c6883653</title>
+<path fill="none" stroke="black" d="M4518.13,-980C4611.47,-980 4443.76,-945.072 4322.58,-921.962"/>
+<polygon fill="black" stroke="black" points="4322.95,-918.47 4312.47,-920.042 4321.64,-925.347 4322.95,-918.47"/>
+</g>
+<!-- k_8359c4ca -->
+<!-- k_438f81fa->k_8359c4ca -->
+<g id="edge792" class="edge"><title>k_438f81fa:m_a29919e6:e->k_8359c4ca</title>
+<path fill="none" stroke="black" d="M4518.13,-980C4567.29,-980 4618.44,-956.322 4654.46,-935.058"/>
+<polygon fill="black" stroke="black" points="4656.54,-937.891 4663.28,-929.72 4652.92,-931.902 4656.54,-937.891"/>
+</g>
+<!-- k_ea115295 -->
+<g id="node225" class="node"><title>k_ea115295</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="3598.13,-920 3418.13,-920 3418.13,-884 3598.13,-884 3598.13,-920"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3419.13,-889 3419.13,-914 3597.13,-914 3597.13,-889 3419.13,-889"/>
+<text text-anchor="start" x="3424.13" y="-898.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">DeltaAndSnapshotStore</text>
+</g>
+<!-- k_438f81fa->k_ea115295 -->
+<g id="edge780" class="edge"><title>k_438f81fa:m_a29919e6:e->k_ea115295</title>
+<path fill="none" stroke="black" d="M4518.13,-980C4524.15,-980 4521.44,-970.698 4517.13,-966.5 4486.57,-936.736 3792.65,-933.467 3750.13,-930 3703.4,-926.189 3651.75,-920.427 3608.22,-915.12"/>
+<polygon fill="black" stroke="black" points="3608.55,-911.634 3598.2,-913.889 3607.7,-918.582 3608.55,-911.634"/>
+</g>
+<!-- i_9f16b2fc -->
+<!-- k_9f16b2fc->i_9f16b2fc -->
+<g id="edge794" class="edge"><title>k_9f16b2fc->i_9f16b2fc</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5260.13,-973.124C5260.13,-961.61 5260.13,-947.066 5260.13,-934.135"/>
+<polygon fill="none" stroke="black" points="5263.63,-933.754 5260.13,-923.754 5256.63,-933.754 5263.63,-933.754"/>
+</g>
+<!-- k_1317af22->k_beb9c197 -->
+<g id="edge798" class="edge"><title>k_1317af22:m_946dead5:e->k_beb9c197</title>
+<path fill="none" stroke="black" d="M5283.13,-1348C5313.6,-1348 5275.25,-1460.04 5254.13,-1482 5221.09,-1516.34 5197.92,-1501.73 5153.13,-1518 5147.52,-1520.04 5141.66,-1522.18 5135.82,-1524.32"/>
+<polygon fill="black" stroke="black" points="5134.23,-1521.18 5126.05,-1527.92 5136.64,-1527.75 5134.23,-1521.18"/>
+</g>
+<!-- k_b8901683 -->
+<!-- k_1317af22->k_b8901683 -->
+<g id="edge796" class="edge"><title>k_1317af22:m_946dead5:e->k_b8901683</title>
+<path fill="none" stroke="black" d="M5284.13,-1348C5363.68,-1348 5451.39,-1322.15 5511.5,-1300.22"/>
+<polygon fill="black" stroke="black" points="5512.74,-1303.49 5520.91,-1296.73 5510.31,-1296.92 5512.74,-1303.49"/>
+</g>
+<!-- k_4d67716d -->
+<!-- k_b62ee2fb->k_4d67716d -->
+<g id="edge800" class="edge"><title>k_b62ee2fb:m_c73d3a59:e->k_4d67716d</title>
+<path fill="none" stroke="black" d="M5083.13,-1348C5107.9,-1348 5085.67,-1323.91 5061.04,-1302.5"/>
+<polygon fill="black" stroke="black" points="5063.25,-1299.79 5053.37,-1295.97 5058.72,-1305.12 5063.25,-1299.79"/>
+</g>
+<!-- k_4809f459 -->
+<g id="node228" class="node"><title>k_4809f459</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4473.13,-474 4361.13,-474 4361.13,-438 4473.13,-438 4473.13,-474"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4362.13,-443 4362.13,-468 4473.13,-468 4473.13,-443 4362.13,-443"/>
+<text text-anchor="start" x="4367.13" y="-452.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">CertPathStore</text>
+</g>
+<!-- k_3b47287a->k_4809f459 -->
+<g id="edge808" class="edge"><title>k_3b47287a:m_7dc25cb3:e->k_4809f459</title>
+<path fill="none" stroke="black" d="M4763.13,-626C4769.15,-626 4766.3,-616.833 4762.13,-612.5 4660.99,-507.49 4541.54,-676.719 4436.13,-576 4411.76,-552.716 4410.41,-511.747 4412.84,-484.242"/>
+<polygon fill="black" stroke="black" points="4416.34,-484.396 4413.96,-474.073 4409.38,-483.629 4416.34,-484.396"/>
+</g>
+<!-- k_d6a04e4b -->
+<g id="node229" class="node"><title>k_d6a04e4b</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4886.13,-568.5 4636.13,-568.5 4636.13,-527.5 4886.13,-527.5 4886.13,-568.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4637.13,-528 4637.13,-567 4885.13,-567 4885.13,-528 4637.13,-528"/>
+<text text-anchor="start" x="4642.13" y="-554.167" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=waveserver_disable_verification)</text>
+<text text-anchor="start" x="4642.13" y="-539.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Boolean</text>
+</g>
+<!-- k_3b47287a->k_d6a04e4b -->
+<g id="edge802" class="edge"><title>k_3b47287a:m_7dc25cb3:e->k_d6a04e4b</title>
+<path fill="none" stroke="black" d="M4763.13,-626C4782.98,-626 4779.45,-600.437 4772.8,-578.579"/>
+<polygon fill="black" stroke="black" points="4776.06,-577.297 4769.6,-568.903 4769.42,-579.496 4776.06,-577.297"/>
+</g>
+<!-- k_3306c74d -->
+<g id="node231" class="node"><title>k_3306c74d</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5088.13,-566 4954.13,-566 4954.13,-530 5088.13,-530 5088.13,-566"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4955.13,-535 4955.13,-560 5088.13,-560 5088.13,-535 4955.13,-535"/>
+<text text-anchor="start" x="4960.13" y="-544.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">SignatureHandler</text>
+</g>
+<!-- k_3b47287a->k_3306c74d -->
+<g id="edge804" class="edge"><title>k_3b47287a:m_7dc25cb3:e->k_3306c74d</title>
+<path fill="none" stroke="black" d="M4763.13,-626C4840.5,-626 4925.55,-593.462 4976.09,-570.417"/>
+<polygon fill="black" stroke="black" points="4977.82,-573.473 4985.42,-566.091 4974.87,-567.122 4977.82,-573.473"/>
+</g>
+<!-- k_b5968e11 -->
+<!-- k_3b47287a->k_b5968e11 -->
+<g id="edge806" class="edge"><title>k_3b47287a:m_7dc25cb3:e->k_b5968e11</title>
+<path fill="none" stroke="black" d="M4763.13,-626C4769.15,-626 4765.96,-617.139 4762.13,-612.5 4722.55,-564.577 4686.97,-592.814 4627.13,-576 4627.03,-575.971 4626.93,-575.943 4626.82,-575.914"/>
+<polygon fill="black" stroke="black" points="4627.77,-572.545 4617.2,-573.193 4625.87,-579.281 4627.77,-572.545"/>
+</g>
+<!-- k_eae9eb08->k_832e9dc1 -->
+<g id="edge812" class="edge"><title>k_eae9eb08:m_5b65d1b7:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M4741.13,-1164C4772.56,-1164 4771.35,-1138.42 4791.13,-1114 4958.55,-907.256 4927.35,-798.43 5117.13,-612 5193.75,-536.726 5250.66,-564.182 5322.13,-484 5345.43,-457.857 5361.15,-420.509 5370.07,-394.446"/>
+<polygon fill="black" stroke="black" points="5373.47,-395.309 5373.27,-384.716 5366.82,-393.123 5373.47,-395.309"/>
+</g>
+<!-- k_eae9eb08->k_6d89dff1 -->
+<g id="edge810" class="edge"><title>k_eae9eb08:m_5b65d1b7:e->k_6d89dff1</title>
+<path fill="none" stroke="black" d="M4741.13,-1164C4765.27,-1164 4798.58,-997.494 4811.11,-929.957"/>
+<polygon fill="black" stroke="black" points="4814.57,-930.476 4812.93,-920.008 4807.68,-929.212 4814.57,-930.476"/>
+</g>
+<!-- k_eae9eb08->k_438f81fa -->
+<g id="edge816" class="edge"><title>k_eae9eb08:m_5b65d1b7:e->k_438f81fa</title>
+<path fill="none" stroke="black" d="M4741.13,-1164C4747.15,-1164 4744.23,-1154.9 4740.13,-1150.5 4663.92,-1068.63 4569.38,-1193.92 4491.13,-1114 4470.32,-1092.74 4467.95,-1058.26 4469.98,-1031.7"/>
+<polygon fill="black" stroke="black" points="4473.48,-1031.89 4470.99,-1021.59 4466.52,-1031.19 4473.48,-1031.89"/>
+</g>
+<!-- k_eae9eb08->k_8359c4ca -->
+<g id="edge814" class="edge"><title>k_eae9eb08:m_5b65d1b7:e->k_8359c4ca</title>
+<path fill="none" stroke="black" d="M4741.13,-1164C4763.53,-1164 4729.79,-1012.12 4712.41,-939.634"/>
+<polygon fill="black" stroke="black" points="4715.73,-938.443 4709.98,-929.543 4708.92,-940.086 4715.73,-938.443"/>
+</g>
+<!-- k_31e6def -->
+<!-- k_eae9eb08->k_31e6def -->
+<g id="edge818" class="edge"><title>k_eae9eb08:m_5b65d1b7:e->k_31e6def</title>
+<path fill="none" stroke="black" d="M4741.13,-1164C4747.15,-1164 4743.51,-1155.48 4740.13,-1150.5 4731.38,-1137.61 4719.3,-1127.21 4705.96,-1118.84"/>
+<polygon fill="black" stroke="black" points="4707.44,-1115.65 4697.04,-1113.63 4703.91,-1121.69 4707.44,-1115.65"/>
+</g>
+<!-- i_373c233a -->
+<!-- k_373c233a->i_373c233a -->
+<g id="edge820" class="edge"><title>k_373c233a->i_373c233a</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M6374.13,-345.762C6374.13,-338.162 6374.13,-328.998 6374.13,-319.899"/>
+<polygon fill="none" stroke="black" points="6377.63,-309.556 6374.13,-299.556 6370.63,-309.556 6377.63,-309.556"/>
+<polygon fill="none" stroke="black" points="6377.63,-319.556 6374.13,-309.556 6370.63,-319.556 6377.63,-319.556"/>
+</g>
+<!-- i_d3e53b91 -->
+<!-- k_d3e53b91->i_d3e53b91 -->
+<g id="edge822" class="edge"><title>k_d3e53b91->i_d3e53b91</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3865.56,-883.824C3854.44,-872.942 3839.92,-858.733 3826.6,-845.69"/>
+<polygon fill="none" stroke="black" points="3821.9,-836.192 3812.3,-831.699 3817,-841.195 3821.9,-836.192"/>
+<polygon fill="none" stroke="black" points="3829.04,-843.187 3819.45,-838.694 3824.15,-848.19 3829.04,-843.187"/>
+</g>
+<!-- k_7b6da251 -->
+<g id="node234" class="node"><title>k_7b6da251</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4029.13,-743 3941.13,-743 3941.13,-707 4029.13,-707 4029.13,-743"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3942.13,-712 3942.13,-737 4029.13,-737 4029.13,-712 3942.13,-712"/>
+<text text-anchor="start" x="3947.13" y="-721.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">DeltaStore</text>
+</g>
+<!-- i_d3e53b91->k_7b6da251 -->
+<g id="edge824" class="edge"><title>i_d3e53b91:header:e->k_7b6da251</title>
+<path fill="none" stroke="black" d="M3986.13,-809C3997.55,-809 3994.62,-777.557 3990.63,-753.146"/>
+<polygon fill="black" stroke="black" points="3994.06,-752.472 3988.89,-743.227 3987.17,-753.681 3994.06,-752.472"/>
+</g>
+<!-- k_49b09b89->k_8aea4644 -->
+<g id="edge826" class="edge"><title>k_49b09b89->k_8aea4644</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4529.8,-883.824C4536.09,-873.102 4544.28,-859.149 4551.84,-846.265"/>
+<polygon fill="none" stroke="black" points="4554.9,-847.964 4556.95,-837.568 4548.87,-844.42 4554.9,-847.964"/>
+</g>
+<!-- i_c6883653 -->
+<!-- k_c6883653->i_c6883653 -->
+<g id="edge828" class="edge"><title>k_c6883653->i_c6883653</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4209.59,-883.824C4207.25,-874.463 4204.29,-862.641 4201.43,-851.216"/>
+<polygon fill="none" stroke="black" points="4202.38,-840.551 4196.55,-831.699 4195.58,-842.249 4202.38,-840.551"/>
+<polygon fill="none" stroke="black" points="4204.8,-850.253 4198.98,-841.4 4198.01,-851.951 4204.8,-850.253"/>
+</g>
+<!-- i_c6883653->k_7b6da251 -->
+<g id="edge830" class="edge"><title>i_c6883653:header:e->k_7b6da251</title>
+<path fill="none" stroke="black" d="M4379.13,-809C4388.25,-809 4384.21,-795.299 4378.13,-788.5 4355.8,-763.534 4141.96,-739.969 4039.44,-729.997"/>
+<polygon fill="black" stroke="black" points="4039.57,-726.494 4029.28,-729.018 4038.9,-733.462 4039.57,-726.494"/>
+</g>
+<!-- k_8359c4ca->k_806c10de -->
+<g id="edge832" class="edge"><title>k_8359c4ca:m_3d5a1b27:e->k_806c10de</title>
+<path fill="none" stroke="black" d="M4760.13,-888C4767.3,-888 4762.22,-878.053 4768.13,-874 4823.06,-836.333 5008.93,-820.008 5114.76,-813.625"/>
+<polygon fill="black" stroke="black" points="5115.28,-817.101 5125.06,-813.021 5114.87,-810.113 5115.28,-817.101"/>
+</g>
+<!-- k_5b1ec499 -->
+<!-- k_ea115295->k_5b1ec499 -->
+<g id="edge834" class="edge"><title>k_ea115295->k_5b1ec499</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3498.45,-883.824C3492.79,-873.205 3485.45,-859.417 3478.64,-846.637"/>
+<polygon fill="none" stroke="black" points="3481.6,-844.749 3473.81,-837.568 3475.42,-848.039 3481.6,-844.749"/>
+</g>
+<!-- k_b8901683->k_fd02c51c -->
+<g id="edge836" class="edge"><title>k_b8901683:m_4e215f96:e->k_fd02c51c</title>
+<path fill="none" stroke="black" d="M5650.13,-1256C5736.04,-1256 5831.5,-1223.05 5887.82,-1199.99"/>
+<polygon fill="black" stroke="black" points="5889.3,-1203.16 5897.19,-1196.09 5886.61,-1196.7 5889.3,-1203.16"/>
+</g>
+<!-- k_bca5b9ba -->
+<!-- k_4809f459->k_bca5b9ba -->
+<g id="edge838" class="edge"><title>k_4809f459->k_bca5b9ba</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4373.53,-437.934C4344.45,-425.88 4305.42,-409.707 4271.29,-395.562"/>
+<polygon fill="none" stroke="black" points="4272.38,-392.226 4261.81,-391.631 4269.7,-398.693 4272.38,-392.226"/>
+</g>
+<!-- i_d6a04e4b -->
+<!-- k_d6a04e4b->i_d6a04e4b -->
+<g id="edge840" class="edge"><title>k_d6a04e4b->i_d6a04e4b</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4758.41,-527.124C4756.89,-515.494 4754.97,-500.775 4753.27,-487.747"/>
+<polygon fill="none" stroke="black" points="4756.73,-487.217 4751.97,-477.754 4749.79,-488.122 4756.73,-487.217"/>
+</g>
+<!-- k_f11c455b -->
+<!-- k_3306c74d->k_f11c455b -->
+<g id="edge842" class="edge"><title>k_3306c74d->k_f11c455b</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5031.21,-529.824C5035.78,-521.576 5041.41,-511.417 5047.02,-501.303"/>
+<polygon fill="none" stroke="black" points="5055.06,-494.011 5056.85,-483.568 5048.94,-490.617 5055.06,-494.011"/>
+<polygon fill="none" stroke="black" points="5050.21,-502.757 5052,-492.314 5044.09,-499.363 5050.21,-502.757"/>
+</g>
+<!-- k_b5968e11->k_4809f459 -->
+<g id="edge846" class="edge"><title>k_b5968e11:m_a87b4d2a:e->k_4809f459</title>
+<path fill="none" stroke="black" d="M4617.13,-534C4623.15,-534 4619.96,-525.142 4616.13,-520.5 4576.87,-472.871 4540.4,-504.372 4482.13,-484 4476.91,-482.175 4471.52,-480.127 4466.17,-477.99"/>
+<polygon fill="black" stroke="black" points="4467.23,-474.642 4456.65,-474.076 4464.57,-481.116 4467.23,-474.642"/>
+</g>
+<!-- k_2b038944 -->
+<g id="node238" class="node"><title>k_2b038944</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4667.13,-474 4491.13,-474 4491.13,-438 4667.13,-438 4667.13,-474"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4492.13,-443 4492.13,-468 4666.13,-468 4666.13,-443 4492.13,-443"/>
+<text text-anchor="start" x="4497.13" y="-452.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">WaveCertPathValidator</text>
+</g>
+<!-- k_b5968e11->k_2b038944 -->
+<g id="edge844" class="edge"><title>k_b5968e11:m_a87b4d2a:e->k_2b038944</title>
+<path fill="none" stroke="black" d="M4617.13,-534C4628.83,-534 4612.33,-505.267 4597.55,-482.68"/>
+<polygon fill="black" stroke="black" points="4600.29,-480.471 4591.83,-474.091 4594.46,-484.353 4600.29,-480.471"/>
+</g>
+<!-- k_31e6def->k_438f81fa -->
+<g id="edge848" class="edge"><title>k_31e6def:m_bf9bd871:e->k_438f81fa</title>
+<path fill="none" stroke="black" d="M4715.13,-1072C4721.15,-1072 4717.96,-1063.14 4714.13,-1058.5 4690.54,-1029.92 4590.02,-1010.5 4527.4,-1000.92"/>
+<polygon fill="black" stroke="black" points="4527.73,-997.428 4517.32,-999.41 4526.69,-1004.35 4527.73,-997.428"/>
+</g>
+<!-- k_81307a7 -->
+<!-- k_7b6da251->k_81307a7 -->
+<g id="edge850" class="edge"><title>k_7b6da251->k_81307a7</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M3985.13,-706.974C3985.13,-698.51 3985.13,-688.083 3985.13,-677.997"/>
+<polygon fill="none" stroke="black" points="3988.63,-677.707 3985.13,-667.707 3981.63,-677.707 3988.63,-677.707"/>
+</g>
+<!-- k_5b1ec499->k_7b6da251 -->
+<g id="edge852" class="edge"><title>k_5b1ec499:m_f7ad7a10:e->k_7b6da251</title>
+<path fill="none" stroke="black" d="M3576.13,-796C3583.53,-796 3578.9,-785.995 3585.13,-782 3641.31,-745.952 3835.03,-731.999 3930.74,-727.212"/>
+<polygon fill="black" stroke="black" points="3930.98,-730.705 3940.8,-726.725 3930.64,-723.713 3930.98,-730.705"/>
+</g>
+<!-- k_be15848 -->
+<g id="node241" class="node"><title>k_be15848</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4382.13,-298.5 4154.13,-298.5 4154.13,-257.5 4382.13,-257.5 4382.13,-298.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4155.13,-258 4155.13,-297 4382.13,-297 4382.13,-258 4155.13,-258"/>
+<text text-anchor="start" x="4160.13" y="-284.167" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=signer_info_store_directory)</text>
+<text text-anchor="start" x="4160.13" y="-269.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">String</text>
+</g>
+<!-- k_bca5b9ba->k_be15848 -->
+<g id="edge854" class="edge"><title>k_bca5b9ba:m_d805501f:e->k_be15848</title>
+<path fill="none" stroke="black" d="M4269.13,-350C4277.91,-350 4276.75,-328.31 4273.92,-308.74"/>
+<polygon fill="black" stroke="black" points="4277.37,-308.145 4272.33,-298.825 4270.46,-309.254 4277.37,-308.145"/>
+</g>
+<!-- k_f11c455b->k_832e9dc1 -->
+<g id="edge856" class="edge"><title>k_f11c455b:m_6c0a518:e->k_832e9dc1</title>
+<path fill="none" stroke="black" d="M5314.13,-442C5315.79,-442 5337.97,-415.036 5355.96,-392.816"/>
+<polygon fill="black" stroke="black" points="5358.79,-394.88 5362.36,-384.903 5353.35,-390.48 5358.79,-394.88"/>
+</g>
+<!-- i_2b038944 -->
+<!-- k_2b038944->i_2b038944 -->
+<g id="edge858" class="edge"><title>k_2b038944->i_2b038944</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4590.98,-437.824C4597.55,-427.761 4605.96,-414.853 4613.92,-402.653"/>
+<polygon fill="none" stroke="black" points="4622.45,-395.987 4624.98,-385.699 4616.58,-392.163 4622.45,-395.987"/>
+<polygon fill="none" stroke="black" points="4616.98,-404.363 4619.52,-394.075 4611.12,-400.539 4616.98,-404.363"/>
+</g>
+<!-- k_c144b24a -->
+<g id="node243" class="node"><title>k_c144b24a</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4945.13,-298.5 4661.13,-298.5 4661.13,-257.5 4945.13,-257.5 4945.13,-298.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4662.13,-258 4662.13,-297 4944.13,-297 4944.13,-258 4662.13,-258"/>
+<text text-anchor="start" x="4667.13" y="-284.167" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=waveserver_disable_signer_verification)</text>
+<text text-anchor="start" x="4667.13" y="-269.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">Boolean</text>
+</g>
+<!-- i_2b038944->k_c144b24a -->
+<g id="edge860" class="edge"><title>i_2b038944:header:e->k_c144b24a</title>
+<path fill="none" stroke="black" d="M4992.13,-363C5001.25,-363 4996.61,-349.792 4991.13,-342.5 4979.42,-326.925 4941.46,-312.539 4902.69,-301.325"/>
+<polygon fill="black" stroke="black" points="4903.4,-297.89 4892.82,-298.544 4901.5,-304.627 4903.4,-297.89"/>
+</g>
+<!-- k_73ddde3c -->
+<g id="node245" class="node"><title>k_73ddde3c</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5139.13,-296 4963.13,-296 4963.13,-260 5139.13,-260 5139.13,-296"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4964.13,-265 4964.13,-290 5139.13,-290 5139.13,-265 4964.13,-265"/>
+<text text-anchor="start" x="4969.13" y="-274.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">VerifiedCertChainCache</text>
+</g>
+<!-- i_2b038944->k_73ddde3c -->
+<g id="edge864" class="edge"><title>i_2b038944:header:e->k_73ddde3c</title>
+<path fill="none" stroke="black" d="M4992.13,-363C5020.55,-363 5036.37,-330.538 5044.32,-305.737"/>
+<polygon fill="black" stroke="black" points="5047.71,-306.607 5047.17,-296.026 5040.99,-304.637 5047.71,-306.607"/>
+</g>
+<!-- k_628f41ae -->
+<g id="node246" class="node"><title>k_628f41ae</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="5195.13,-128 5101.13,-128 5101.13,-92 5195.13,-92 5195.13,-128"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="5102.13,-97 5102.13,-122 5194.13,-122 5194.13,-97 5102.13,-97"/>
+<text text-anchor="start" x="5107.13" y="-106.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">TimeSource</text>
+</g>
+<!-- i_2b038944->k_628f41ae -->
+<g id="edge862" class="edge"><title>i_2b038944:header:e->k_628f41ae</title>
+<path fill="none" stroke="black" d="M4992.13,-363C5066.9,-363 5106.31,-361.987 5148.13,-300 5181.15,-251.051 5167.99,-177.659 5157.09,-137.94"/>
+<polygon fill="black" stroke="black" points="5160.4,-136.774 5154.26,-128.14 5153.67,-138.718 5160.4,-136.774"/>
+</g>
+<!-- k_27e9999 -->
+<g id="node247" class="node"><title>k_27e9999</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4643.13,-296 4499.13,-296 4499.13,-260 4643.13,-260 4643.13,-296"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="4500.13,-265 4500.13,-290 4642.13,-290 4642.13,-265 4500.13,-265"/>
+<text text-anchor="start" x="4505.13" y="-274.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">TrustRootsProvider</text>
+</g>
+<!-- i_2b038944->k_27e9999 -->
+<g id="edge866" class="edge"><title>i_2b038944:header:e->k_27e9999</title>
+<path fill="none" stroke="black" d="M4992.13,-363C5001.25,-363 4997.33,-349.191 4991.13,-342.5 4939.52,-286.814 4726.61,-314.709 4652.13,-300 4649.47,-299.476 4646.78,-298.911 4644.06,-298.316"/>
+<polygon fill="black" stroke="black" points="4644.69,-294.87 4634.16,-296.039 4643.12,-301.692 4644.69,-294.87"/>
+</g>
+<!-- k_d6dbed53 -->
+<g id="node248" class="node"><title>k_d6dbed53</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="4141.13,-568.5 3941.13,-568.5 3941.13,-527.5 4141.13,-527.5 4141.13,-568.5"/>
+<polygon fill="#ffffff" stroke="#ffffff" points="3942.13,-528 3942.13,-567 4141.13,-567 4141.13,-528 3942.13,-528"/>
+<text text-anchor="start" x="3947.13" y="-554.167" font-family="Times Roman,serif" font-size="10.00" fill="#000000">@Named(value=delta_store_directory)</text>
+<text text-anchor="start" x="3947.13" y="-539.233" font-family="Times Roman,serif" font-size="14.00" fill="#000000">String</text>
+</g>
+<!-- k_81307a7->k_d6dbed53 -->
+<g id="edge868" class="edge"><title>k_81307a7:m_408652f3:e->k_d6dbed53</title>
+<path fill="none" stroke="black" d="M4042.13,-626C4061.98,-626 4058.77,-600.437 4052.4,-578.579"/>
+<polygon fill="black" stroke="black" points="4055.69,-577.372 4049.33,-568.903 4049.02,-579.493 4055.69,-577.372"/>
+</g>
+<!-- i_be15848 -->
+<!-- k_be15848->i_be15848 -->
+<g id="edge870" class="edge"><title>k_be15848->i_be15848</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4268.13,-257.182C4268.13,-247.161 4268.13,-234.927 4268.13,-223.776"/>
+<polygon fill="none" stroke="black" points="4271.63,-223.525 4268.13,-213.525 4264.63,-223.525 4271.63,-223.525"/>
+</g>
+<!-- i_c144b24a -->
+<!-- k_c144b24a->i_c144b24a -->
+<g id="edge872" class="edge"><title>k_c144b24a->i_c144b24a</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4803.13,-257.182C4803.13,-247.161 4803.13,-234.927 4803.13,-223.776"/>
+<polygon fill="none" stroke="black" points="4806.63,-223.525 4803.13,-213.525 4799.63,-223.525 4806.63,-223.525"/>
+</g>
+<!-- k_8a5fcfd2 -->
+<!-- k_73ddde3c->k_8a5fcfd2 -->
+<g id="edge874" class="edge"><title>k_73ddde3c->k_8a5fcfd2</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5053.25,-259.762C5054.27,-251.035 5055.52,-240.243 5056.73,-229.858"/>
+<polygon fill="none" stroke="black" points="5060.23,-230.037 5057.91,-219.699 5053.28,-229.228 5060.23,-230.037"/>
+</g>
+<!-- k_d749c4a9 -->
+<!-- k_628f41ae->k_d749c4a9 -->
+<g id="edge876" class="edge"><title>k_628f41ae->k_d749c4a9</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M5148.13,-91.8015C5148.13,-84.0539 5148.13,-74.7135 5148.13,-65.5988"/>
+<polygon fill="none" stroke="black" points="5151.63,-65.5008 5148.13,-55.5008 5144.63,-65.5009 5151.63,-65.5008"/>
+</g>
+<!-- k_5e508810 -->
+<!-- k_27e9999->k_5e508810 -->
+<g id="edge878" class="edge"><title>k_27e9999->k_5e508810</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4571.13,-259.762C4571.13,-251.035 4571.13,-240.243 4571.13,-229.858"/>
+<polygon fill="none" stroke="black" points="4574.63,-229.699 4571.13,-219.699 4567.63,-229.699 4574.63,-229.699"/>
+</g>
+<!-- i_d6dbed53 -->
+<!-- k_d6dbed53->i_d6dbed53 -->
+<g id="edge880" class="edge"><title>k_d6dbed53->i_d6dbed53</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M4041.13,-527.124C4041.13,-515.61 4041.13,-501.066 4041.13,-488.135"/>
+<polygon fill="none" stroke="black" points="4044.63,-487.754 4041.13,-477.754 4037.63,-487.754 4044.63,-487.754"/>
+</g>
+<!-- k_8a5fcfd2->k_628f41ae -->
+<g id="edge882" class="edge"><title>k_8a5fcfd2:m_5a8716ec:e->k_628f41ae</title>
+<path fill="none" stroke="black" d="M5130.13,-178C5147.46,-178 5151.11,-157.097 5150.92,-138.47"/>
+<polygon fill="black" stroke="black" points="5154.4,-138.056 5150.46,-128.223 5147.41,-138.37 5154.4,-138.056"/>
+</g>
+</g>
+</svg>
Added: trunk/docs/wave-guice-graph.dot
===================================================================
--- trunk/docs/wave-guice-graph.dot (rev 0)
+++ trunk/docs/wave-guice-graph.dot 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,254 @@
+digraph injector {
+graph [rankdir=TB];
+k_5206913e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+k_d7413b29 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_4e3cfd49 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TimeSource<br align="left"/></font></td></tr></table>>, shape=box]
+k_7c3a84a [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SignatureHandler<br align="left"/></font></td></tr></table>>, shape=box]
+k_28873eb1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveSignatureVerifier<br align="left"/></font></td></tr><tr><td align="left" port="m_a87b4d2a"><init></td></tr></table>>, shape=box]
+k_2845e07 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">VerifiedCertChainCache<br align="left"/></font></td></tr></table>>, shape=box]
+k_d073cdd5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultCacheImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_5a8716ec"><init></td></tr></table>>, shape=box]
+k_a32471fe [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveBus<br align="left"/></font></td></tr></table>>, shape=box]
+k_ab27ace4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletNotificationSubscriber<br align="left"/></font></td></tr></table>>, shape=box]
+k_6bad9e01 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TrustRootsProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_f7d047b9 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertificateManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_2050c643 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaAndSnapshotStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_74c3c0d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SearchProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_66a99b94 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveletProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_6e4268e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">HashedVersionFactory<br align="left"/></font></td></tr></table>>, shape=box]
+i_6e4268e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:105<br align="left"/></font><font color="#ffffff">HashedVersionFactoryImpl<br align="left"/></font></td></tr></table>>, shape=box]
+k_ca34da5f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=listener_executor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
+i_ca34da5f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:106<br align="left"/></font><font color="#ffffff">ThreadPoolExecutor<br align="left"/></font></td></tr></table>>, shape=box]
+k_7b747c12 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">LocalWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+i_7b747c12 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideLocalWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
+k_218c2334 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RemoteWaveletContainer$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+i_218c2334 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideRemoteWaveletContainerFactory(DeltaStore)<br align="left"/></font></td></tr></table>>, shape=box]
+k_e19e23b5 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">WaveCertPathValidator<br align="left"/></font></td></tr></table>>, shape=box]
+i_e19e23b5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">WaveServerModule.java:56<br align="left"/></font><font color="#ffffff">#provideWaveCertPathValidator(boolean, TimeSource, VerifiedCertChainCache, TrustRootsProvider)<br align="left"/></font></td></tr></table>>, shape=box]
+k_fe215264 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=certs)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
+i_fe215264 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:86<br align="left"/></font><font color="#ffffff">[]<br align="left"/></font></td></tr></table>>, shape=box]
+k_b4448035 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">Configuration<br align="left"/></font></td></tr></table>>, shape=box]
+i_b4448035 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:90<br align="left"/></font><font color="#ffffff">ConfigFile<br align="left"/></font></td></tr></table>>, shape=box]
+k_f1928bf8 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_3e09faf2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SessionManager<br align="left"/></font></td></tr></table>>, shape=box]
+k_c0398744 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotRegistrar<br align="left"/></font></td></tr></table>>, shape=box]
+k_140c93ab [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGenerator<br align="left"/></font></td></tr></table>>, shape=box]
+i_140c93ab [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:106<br align="left"/></font><font color="#ffffff">#provideIdGenerator(String, Seed)<br align="left"/></font></td></tr></table>>, shape=box]
+k_c3234f04 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">SecureRandom<br align="left"/></font></td></tr></table>>, shape=box]
+i_c3234f04 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:112<br align="left"/></font><font color="#ffffff">#provideSecureRandom()<br align="left"/></font></td></tr></table>>, shape=box]
+k_c089fc31 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">TokenGenerator<br align="left"/></font></td></tr></table>>, shape=box]
+i_c089fc31 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:119<br align="left"/></font><font color="#ffffff">#provideTokenGenerator(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
+k_33570740 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">IdGeneratorImpl$Seed<br align="left"/></font></td></tr></table>>, shape=box]
+i_33570740 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">ServerModule.java:126<br align="left"/></font><font color="#ffffff">#provideSeed(SecureRandom)<br align="left"/></font></td></tr></table>>, shape=box]
+k_7034c7d2 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">EventDataConverterManager<br align="left"/></font></td></tr></table>>, shape=box]
+i_7034c7d2 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">EventDataConverterModule.java:43<br align="left"/></font><font color="#ffffff">#provideEventDataConverterManager()<br align="left"/></font></td></tr></table>>, shape=box]
+k_b62d731b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotSerializer<br align="left"/></font></td></tr></table>>, shape=box]
+i_b62d731b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotSerializerModule.java:46<br align="left"/></font><font color="#ffffff">#provideRobotSerializer()<br align="left"/></font></td></tr></table>>, shape=box]
+k_e8fb7071 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=authorize_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_e8fb7071 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:68<br align="left"/></font><font color="#ffffff">"/OAuthAuthorizeToken"<br align="left"/></font></td></tr></table>>, shape=box]
+k_f0bb7df7 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=request_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_f0bb7df7 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:70<br align="left"/></font><font color="#ffffff">"/OAuthGetRequestToken"<br align="left"/></font></td></tr></table>>, shape=box]
+k_6af4580c [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=access_token_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_6af4580c [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:72<br align="left"/></font><font color="#ffffff">"/OAuthGetAccessToken"<br align="left"/></font></td></tr></table>>, shape=box]
+k_f907821 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotConnector<br align="left"/></font></td></tr></table>>, shape=box]
+i_f907821 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:81<br align="left"/></font><font color="#ffffff">#provideRobotConnector(RobotConnection, RobotSerializer)<br align="left"/></font></td></tr></table>>, shape=box]
+k_7279ac52 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">RobotConnection<br align="left"/></font></td></tr></table>>, shape=box]
+i_7279ac52 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:87<br align="left"/></font><font color="#ffffff">#provideRobotConnection()<br align="left"/></font></td></tr></table>>, shape=box]
+k_85eb8186 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=GatewayExecutor)<br align="left"/></font><font color="#000000">Executor<br align="left"/></font></td></tr></table>>, shape=box]
+i_85eb8186 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:99<br align="left"/></font><font color="#ffffff">#provideGatewayExecutor()<br align="left"/></font></td></tr></table>>, shape=box]
+k_45c331f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ActiveApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
+i_45c331f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:109<br align="left"/></font><font color="#ffffff">#provideActiveApiRegistry(NotifyOperationService)<br align="left"/></font></td></tr></table>>, shape=box]
+k_5ecb29e3 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=DataApiRegistry)<br align="left"/></font><font color="#000000">OperationServiceRegistry<br align="left"/></font></td></tr></table>>, shape=box]
+i_5ecb29e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:117<br align="left"/></font><font color="#ffffff">#provideDataApiRegistry(SearchService)<br align="left"/></font></td></tr></table>>, shape=box]
+k_410c2a1b [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">OAuthValidator<br align="left"/></font></td></tr></table>>, shape=box]
+i_410c2a1b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:125<br align="left"/></font><font color="#ffffff">#provideOAuthValidator()<br align="left"/></font></td></tr></table>>, shape=box]
+k_e773e20e [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">OAuthServiceProvider<br align="left"/></font></td></tr></table>>, shape=box]
+i_e773e20e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">RobotApiModule.java:135<br align="left"/></font><font color="#ffffff">#provideOAuthServiceProvider(String)<br align="left"/></font></td></tr></table>>, shape=box]
+k_9831ace4 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationRemoteBridge<br align="left"/></font><font color="#000000">WaveletFederationProvider<br align="left"/></font></td></tr></table>>, shape=box]
+k_91161f83 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@FederationHostBridge<br align="left"/></font><font color="#000000">WaveletFederationListener$Factory<br align="left"/></font></td></tr></table>>, shape=box]
+k_e2a7bed0 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">FederationTransport<br align="left"/></font></td></tr></table>>, shape=box]
+k_52a8a871 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">CertPathStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_fe671237 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AttachmentStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_107a33fb [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">AccountStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_556cc59f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000">DeltaStore<br align="left"/></font></td></tr></table>>, shape=box]
+k_2721f26b [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveletNotificationDispatcher<br align="left"/></font></td></tr><tr><td align="left" port="m_72bb3f17"><init></td></tr></table>>, shape=box]
+k_73658105 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveMap<br align="left"/></font></td></tr><tr><td align="left" port="m_a29919e6"><init></td></tr></table>>, shape=box]
+k_53cbb880 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ProtoSerializer<br align="left"/></font></td></tr><tr><td align="left" port="m_a1715b3c"><init></td></tr></table>>, shape=box]
+k_8b5bb722 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ServerRpcProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_e92070d5"><init></td></tr></table>>, shape=box]
+k_744f2334 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveServerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_3065e839"><init></td></tr></table>>, shape=box]
+k_fbd16a34 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTimeSource<br align="left"/></font></td></tr><tr><td align="left" port="m_24dcbc5e"><init></td></tr></table>>, shape=box]
+k_70d75d3e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NonSigningSignatureHandler$NonSigningSignatureHandlerProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_6c0a518"><init></td></tr></table>>, shape=box]
+k_2288b0a9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DefaultTrustRootsProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_518d5280"><init></td></tr></table>>, shape=box]
+k_dbdd067e [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">CertificateManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_7dc25cb3"><init></td></tr></table>>, shape=box]
+k_a7dbb996 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">DeltaStoreBasedSnapshotStore<br align="left"/></font></td></tr><tr><td align="left" port="m_f7ad7a10"><init></td></tr></table>>, shape=box]
+k_5293dba6 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">MemorySearchProvider<br align="left"/></font></td></tr><tr><td align="left" port="m_5b65d1b7"><init></td></tr></table>>, shape=box]
+k_ae676420 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_signer_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_ae676420 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_81bf39cf [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SessionManagerImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_bc6356d8"><init></td></tr></table>>, shape=box]
+k_a0ee12e3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">HashSessionManager<br align="left"/></font></td></tr><tr><td align="left" port="m_54776227"><init></td></tr></table>>, shape=box]
+k_b3ed662 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">RobotRegistrarImpl<br align="left"/></font></td></tr><tr><td align="left" port="m_6c669f5e"><init></td></tr></table>>, shape=box]
+k_bbcefa18 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=wave_server_domain)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_bbcefa18 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost"<br align="left"/></font></td></tr></table>>, shape=box]
+k_532d3e82 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NotifyOperationService<br align="left"/></font></td></tr><tr><td align="left" port="m_23e9a4c9"><init></td></tr></table>>, shape=box]
+k_f801e1f1 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">SearchService<br align="left"/></font></td></tr><tr><td align="left" port="m_22b30b9b"><init></td></tr></table>>, shape=box]
+k_9d976cde [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=http_frontend_public_address)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_9d976cde [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"localhost:8888"<br align="left"/></font></td></tr></table>>, shape=box]
+k_c5aa0274 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationRemote<br align="left"/></font></td></tr><tr><td align="left" port="m_8c82dc4e"><init></td></tr></table>>, shape=box]
+k_c9a11a3 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationHost<br align="left"/></font></td></tr><tr><td align="left" port="m_dba23bb0"><init></td></tr></table>>, shape=box]
+k_49848daa [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">NoOpFederationTransport<br align="left"/></font></td></tr><tr><td align="left" port="m_62d43621"><init></td></tr></table>>, shape=box]
+k_928bb0fd [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileSignerInfoStore<br align="left"/></font></td></tr><tr><td align="left" port="m_d805501f"><init></td></tr></table>>, shape=box]
+k_ed47c2a9 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAttachmentStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2188bcd4"><init></td></tr></table>>, shape=box]
+k_6b87e61f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileAccountStore<br align="left"/></font></td></tr><tr><td align="left" port="m_2bca331e"><init></td></tr></table>>, shape=box]
+k_8823a3e5 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">FileDeltaStore<br align="left"/></font></td></tr><tr><td align="left" port="m_408652f3"><init></td></tr></table>>, shape=box]
+k_6d08d305 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">WaveDigester<br align="left"/></font></td></tr><tr><td align="left" port="m_3d5a1b27"><init></td></tr></table>>, shape=box]
+k_31620886 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=enable_ssl)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_31620886 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">false<br align="left"/></font></td></tr></table>>, shape=box]
+k_51dec085 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=sessions_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_51dec085 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_sessions"<br align="left"/></font></td></tr></table>>, shape=box]
+k_5ee5c667 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=http_frontend_addresses)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
+i_5ee5c667 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:188<br align="left"/></font><font color="#ffffff">[localhost:8888]<br align="left"/></font></td></tr></table>>, shape=box]
+k_1275d402 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=resource_bases)<br align="left"/></font><font color="#000000">List<String><br align="left"/></font></td></tr></table>>, shape=box]
+i_1275d402 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:188<br align="left"/></font><font color="#ffffff">[target/kune-0.1.0-SNAPSHOT/, src/main/webapp/]<br align="left"/></font></td></tr></table>>, shape=box]
+k_dcaff08d [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ssl_keystore_password)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_dcaff08d [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"fafafa"<br align="left"/></font></td></tr></table>>, shape=box]
+k_77c98103 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=ssl_keystore_path)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_77c98103 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"src/main/resources/wiab.ks"<br align="left"/></font></td></tr></table>>, shape=box]
+k_feb78535 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=flashsocket_policy_port)<br align="left"/></font><font color="#000000">Integer<br align="left"/></font></td></tr></table>>, shape=box]
+i_feb78535 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:171<br align="left"/></font><font color="#ffffff">843<br align="left"/></font></td></tr></table>>, shape=box]
+k_c3c30021 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=waveserver_disable_verification)<br align="left"/></font><font color="#000000">Boolean<br align="left"/></font></td></tr></table>>, shape=box]
+i_c3c30021 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:178<br align="left"/></font><font color="#ffffff">true<br align="left"/></font></td></tr></table>>, shape=box]
+k_4ff24fca [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">PerUserWaveViewSubscriber<br align="left"/></font></td></tr><tr><td align="left" port="m_bf9bd871"><init></td></tr></table>>, shape=box]
+k_4481b49f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=signer_info_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_4481b49f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_certificates"<br align="left"/></font></td></tr></table>>, shape=box]
+k_b1d0731f [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=attachment_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_b1d0731f [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_attachments"<br align="left"/></font></td></tr></table>>, shape=box]
+k_50cd9615 [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=account_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_50cd9615 [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_accounts"<br align="left"/></font></td></tr></table>>, shape=box]
+k_f7c49aa [style=dashed, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="0" border="0"><tr><td align="left" port="header" bgcolor="#ffffff"><font color="#000000" point-size="10">@Named(value=delta_store_directory)<br align="left"/></font><font color="#000000">String<br align="left"/></font></td></tr></table>>, shape=box]
+i_f7c49aa [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#aaaaaa"><font color="#ffffff" point-size="10">SettingsBinder.java:181<br align="left"/></font><font color="#ffffff">"/var/lib/kune/_deltas"<br align="left"/></font></td></tr></table>>, shape=box]
+k_c5f43fe [style=invis, margin=0.02,0, label=<<table cellspacing="0" cellpadding="5" cellborder="1" border="0"><tr><td align="left" port="header" bgcolor="#000000"><font color="#ffffff">ConversationUtil<br align="left"/></font></td></tr><tr><td align="left" port="m_cb039b61"><init></td></tr></table>>, shape=box]
+k_5206913e -> k_744f2334 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d7413b29 -> k_744f2334 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4e3cfd49 -> k_fbd16a34 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7c3a84a -> k_70d75d3e [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_28873eb1:m_a87b4d2a:e -> k_e19e23b5 [style=solid, arrowtail=none, arrowhead=normal]
+k_28873eb1:m_a87b4d2a:e -> k_52a8a871 [style=solid, arrowtail=none, arrowhead=normal]
+k_2845e07 -> k_d073cdd5 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_d073cdd5:m_5a8716ec:e -> k_4e3cfd49 [style=solid, arrowtail=none, arrowhead=normal]
+k_a32471fe -> k_2721f26b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ab27ace4 -> k_2721f26b [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6bad9e01 -> k_2288b0a9 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f7d047b9 -> k_dbdd067e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2050c643 -> k_a7dbb996 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_74c3c0d2 -> k_5293dba6 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_66a99b94 -> k_744f2334 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6e4268e -> i_6e4268e [style=dashed, arrowtail=none, arrowhead=onormal]
+k_ca34da5f -> i_ca34da5f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_7b747c12 -> i_7b747c12 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_7b747c12:header:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
+k_218c2334 -> i_218c2334 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_218c2334:header:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
+k_e19e23b5 -> i_e19e23b5 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_e19e23b5:header:e -> k_ae676420 [style=solid, arrowtail=none, arrowhead=normal]
+i_e19e23b5:header:e -> k_4e3cfd49 [style=solid, arrowtail=none, arrowhead=normal]
+i_e19e23b5:header:e -> k_2845e07 [style=solid, arrowtail=none, arrowhead=normal]
+i_e19e23b5:header:e -> k_6bad9e01 [style=solid, arrowtail=none, arrowhead=normal]
+k_fe215264 -> i_fe215264 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b4448035 -> i_b4448035 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f1928bf8 -> k_81bf39cf [style=dashed, arrowtail=none, arrowhead=onormal]
+k_3e09faf2 -> k_a0ee12e3 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c0398744 -> k_b3ed662 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_140c93ab -> i_140c93ab [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_140c93ab:header:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+i_140c93ab:header:e -> k_33570740 [style=solid, arrowtail=none, arrowhead=normal]
+k_c3234f04 -> i_c3234f04 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_c089fc31 -> i_c089fc31 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_c089fc31:header:e -> k_c3234f04 [style=solid, arrowtail=none, arrowhead=normal]
+k_33570740 -> i_33570740 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_33570740:header:e -> k_c3234f04 [style=solid, arrowtail=none, arrowhead=normal]
+k_7034c7d2 -> i_7034c7d2 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_b62d731b -> i_b62d731b [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_e8fb7071 -> i_e8fb7071 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f0bb7df7 -> i_f0bb7df7 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_6af4580c -> i_6af4580c [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f907821 -> i_f907821 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_f907821:header:e -> k_7279ac52 [style=solid, arrowtail=none, arrowhead=normal]
+i_f907821:header:e -> k_b62d731b [style=solid, arrowtail=none, arrowhead=normal]
+k_7279ac52 -> i_7279ac52 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_85eb8186 -> i_85eb8186 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_45c331f -> i_45c331f [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_45c331f:header:e -> k_532d3e82 [style=solid, arrowtail=none, arrowhead=normal]
+k_5ecb29e3 -> i_5ecb29e3 [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_5ecb29e3:header:e -> k_f801e1f1 [style=solid, arrowtail=none, arrowhead=normal]
+k_410c2a1b -> i_410c2a1b [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+k_e773e20e -> i_e773e20e [style=dashed, arrowtail=none, arrowhead=onormalonormal]
+i_e773e20e:header:e -> k_9d976cde [style=solid, arrowtail=none, arrowhead=normal]
+k_9831ace4 -> k_c5aa0274 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_91161f83 -> k_c9a11a3 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_e2a7bed0 -> k_49848daa [style=dashed, arrowtail=none, arrowhead=onormal]
+k_52a8a871 -> k_928bb0fd [style=dashed, arrowtail=none, arrowhead=onormal]
+k_fe671237 -> k_ed47c2a9 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_107a33fb -> k_6b87e61f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_556cc59f -> k_8823a3e5 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_2721f26b:m_72bb3f17:e -> k_f7d047b9 [style=solid, arrowtail=none, arrowhead=normal]
+k_2721f26b:m_72bb3f17:e -> k_91161f83 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_2050c643 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_ab27ace4 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_7b747c12 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_218c2334 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_73658105:m_a29919e6:e -> k_6d08d305 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_5ee5c667 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_feb78535 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_1275d402 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_f1928bf8 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_3e09faf2 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_51dec085 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_31620886 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_77c98103 [style=solid, arrowtail=none, arrowhead=normal]
+k_8b5bb722:m_e92070d5:e -> k_dcaff08d [style=solid, arrowtail=none, arrowhead=normal]
+k_744f2334:m_3065e839:e -> k_ca34da5f [style=solid, arrowtail=none, arrowhead=normal]
+k_744f2334:m_3065e839:e -> k_f7d047b9 [style=solid, arrowtail=none, arrowhead=normal]
+k_744f2334:m_3065e839:e -> k_9831ace4 [style=solid, arrowtail=none, arrowhead=normal]
+k_744f2334:m_3065e839:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
+k_70d75d3e:m_6c0a518:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_dbdd067e:m_7dc25cb3:e -> k_c3c30021 [style=solid, arrowtail=none, arrowhead=normal]
+k_dbdd067e:m_7dc25cb3:e -> k_7c3a84a [style=solid, arrowtail=none, arrowhead=normal]
+k_dbdd067e:m_7dc25cb3:e -> k_28873eb1 [style=solid, arrowtail=none, arrowhead=normal]
+k_dbdd067e:m_7dc25cb3:e -> k_52a8a871 [style=solid, arrowtail=none, arrowhead=normal]
+k_a7dbb996:m_f7ad7a10:e -> k_556cc59f [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_a32471fe [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_bbcefa18 [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_6d08d305 [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
+k_5293dba6:m_5b65d1b7:e -> k_4ff24fca [style=solid, arrowtail=none, arrowhead=normal]
+k_ae676420 -> i_ae676420 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_81bf39cf:m_bc6356d8:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
+k_81bf39cf:m_bc6356d8:e -> k_3e09faf2 [style=solid, arrowtail=none, arrowhead=normal]
+k_b3ed662:m_6c669f5e:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
+k_b3ed662:m_6c669f5e:e -> k_c089fc31 [style=solid, arrowtail=none, arrowhead=normal]
+k_bbcefa18 -> i_bbcefa18 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_532d3e82:m_23e9a4c9:e -> k_107a33fb [style=solid, arrowtail=none, arrowhead=normal]
+k_532d3e82:m_23e9a4c9:e -> k_f907821 [style=solid, arrowtail=none, arrowhead=normal]
+k_f801e1f1:m_22b30b9b:e -> k_74c3c0d2 [style=solid, arrowtail=none, arrowhead=normal]
+k_9d976cde -> i_9d976cde [style=dashed, arrowtail=none, arrowhead=onormal]
+k_928bb0fd:m_d805501f:e -> k_4481b49f [style=solid, arrowtail=none, arrowhead=normal]
+k_ed47c2a9:m_2188bcd4:e -> k_b1d0731f [style=solid, arrowtail=none, arrowhead=normal]
+k_6b87e61f:m_2bca331e:e -> k_50cd9615 [style=solid, arrowtail=none, arrowhead=normal]
+k_8823a3e5:m_408652f3:e -> k_f7c49aa [style=solid, arrowtail=none, arrowhead=normal]
+k_6d08d305:m_3d5a1b27:e -> k_c5f43fe [style=solid, arrowtail=none, arrowhead=normal]
+k_31620886 -> i_31620886 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_51dec085 -> i_51dec085 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_5ee5c667 -> i_5ee5c667 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_1275d402 -> i_1275d402 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_dcaff08d -> i_dcaff08d [style=dashed, arrowtail=none, arrowhead=onormal]
+k_77c98103 -> i_77c98103 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_feb78535 -> i_feb78535 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c3c30021 -> i_c3c30021 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_4ff24fca:m_bf9bd871:e -> k_73658105 [style=solid, arrowtail=none, arrowhead=normal]
+k_4481b49f -> i_4481b49f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_b1d0731f -> i_b1d0731f [style=dashed, arrowtail=none, arrowhead=onormal]
+k_50cd9615 -> i_50cd9615 [style=dashed, arrowtail=none, arrowhead=onormal]
+k_f7c49aa -> i_f7c49aa [style=dashed, arrowtail=none, arrowhead=onormal]
+k_c5f43fe:m_cb039b61:e -> k_140c93ab [style=solid, arrowtail=none, arrowhead=normal]
+}
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/pom.xml 2012-03-06 21:17:53 UTC (rev 1742)
@@ -6,9 +6,12 @@
<packaging>jar</packaging>
<version>0.1.0-SNAPSHOT</version>
<name>kune</name>
- <description> kune free/open/libre collaboration platform
- </description>
+ <description>kune free/open/libre collaboration platform</description>
<url>http://kune.ourproject.org</url>
+ <ciManagement>
+ <url>http://ci.comunes.org/job/kune/</url>
+ <system>Hudson</system>
+ </ciManagement>
<properties>
<!-- Available versions: http://repo1.maven.org/maven2/com/google/gwt/gwt-dev/ -->
<gwt.version>2.1.1</gwt.version>
@@ -80,11 +83,11 @@
<!-- <url>http://maven.dyndns.org/2</url> -->
<!-- </repository> -->
<!-- seems that these are not working/neccesary now: -->
- <!-- <repository> <id>google-maven-snapshot-repository</id> <name>Google
- Maven Snapshot Repository</name> <url>https://oss.sonatype.org/content/repositories/google-snapshots/
- </url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository>
- <id>gwtplatform.snapshot.repo</id> <name>Gwtplatform snapshot repository</name>
- <url>https://oss.sonatype.org/content/repositories/snapshots/ </url> <layout>default</layout>
+ <!-- <repository> <id>google-maven-snapshot-repository</id> <name>Google
+ Maven Snapshot Repository</name> <url>https://oss.sonatype.org/content/repositories/google-snapshots/
+ </url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository>
+ <id>gwtplatform.snapshot.repo</id> <name>Gwtplatform snapshot repository</name>
+ <url>https://oss.sonatype.org/content/repositories/snapshots/ </url> <layout>default</layout>
</repository> -->
<repository>
<id>openqa.org</id>
@@ -182,7 +185,7 @@
<!-- <version>2.1-SNAPSHOT-r1160</version> -->
<version>3.0</version>
</dependency>
- <!-- <dependency> <groupId>com.googlecode.gwt.inject</groupId> <artifactId>gin</artifactId>
+ <!-- <dependency> <groupId>com.googlecode.gwt.inject</groupId> <artifactId>gin</artifactId>
<version>gin-1.1-SNAPSHOT</version> </dependency> -->
<dependency>
<groupId>com.google.inject.extensions</groupId>
@@ -195,6 +198,11 @@
<version>3.0</version>
</dependency>
<dependency>
+ <groupId>com.google.inject.extensions</groupId>
+ <artifactId>guice-grapher</artifactId>
+ <version>3.0</version>
+ </dependency>
+ <dependency>
<groupId>com.extjs</groupId>
<artifactId>gxt</artifactId>
<version>2.2.1</version>
@@ -242,8 +250,8 @@
<artifactId>gwt-fx</artifactId>
<version>r464</version>
</dependency>
- <!-- <dependency> <groupId>com.jhickman.web.gwt</groupId> <artifactId>gwt-customuibinder</artifactId>
- <version>0.1</version> </dependency> <dependency> <groupId>com.jhickman.web.gwt</groupId>
+ <!-- <dependency> <groupId>com.jhickman.web.gwt</groupId> <artifactId>gwt-customuibinder</artifactId>
+ <version>0.1</version> </dependency> <dependency> <groupId>com.jhickman.web.gwt</groupId>
<artifactId>gxt-uibinder</artifactId> <version>0.6</version> </dependency> -->
<!-- cc -->
<dependency>
@@ -492,7 +500,7 @@
<version>3.3.5</version>
<!-- <scope>test</scope> -->
</dependency>
- <!-- If you want to start a selenium server, you will need the following
+ <!-- If you want to start a selenium server, you will need the following
dependency: -->
<!-- <dependency> -->
<!-- <groupId>org.seleniumhq.selenium</groupId> -->
@@ -723,31 +731,30 @@
<!-- <artifactId>hibernate</artifactId> -->
<!-- </exclusion> -->
<!-- <exclusion> -->
-<!-- <groupId>org.slf4j</groupId> -->
-<!-- <artifactId>spi</artifactId> -->
+<!-- <groupId>org.slf4j</groupId> -->
+<!-- <artifactId>spi</artifactId> -->
<!-- </exclusion> -->
<!-- <exclusion> -->
-<!-- <groupId>org.slf4j</groupId> -->
-<!-- <artifactId>slf4j-api</artifactId> -->
+<!-- <groupId>org.slf4j</groupId> -->
+<!-- <artifactId>slf4j-api</artifactId> -->
<!-- </exclusion> -->
<!-- <exclusion> -->
-<!-- <groupId>org.slf4j</groupId> -->
-<!-- <artifactId>jcl-over-slf4j</artifactId> -->
+<!-- <groupId>org.slf4j</groupId> -->
+<!-- <artifactId>jcl-over-slf4j</artifactId> -->
<!-- </exclusion> -->
<!-- <exclusion> -->
-<!-- <groupId>org.slf4j</groupId> -->
-<!-- <artifactId>jcl-over-slf4j</artifactId> -->
+<!-- <groupId>org.slf4j</groupId> -->
+<!-- <artifactId>jcl-over-slf4j</artifactId> -->
<!-- </exclusion> -->
<!-- <exclusion> -->
-<!-- <groupId>org.apache</groupId> -->
-<!-- <artifactId>commons</artifactId> -->
+<!-- <groupId>org.apache</groupId> -->
+<!-- <artifactId>commons</artifactId> -->
<!-- </exclusion> -->
<!-- <exclusion> -->
-<!-- <groupId>org.apache.commons</groupId> -->
-<!-- <artifactId>logging</artifactId> -->
+<!-- <groupId>org.apache.commons</groupId> -->
+<!-- <artifactId>logging</artifactId> -->
<!-- </exclusion> -->
<!-- </exclusions> -->
-
<!-- </dependency> -->
</dependencies>
<!-- <dependency> -->
@@ -861,8 +868,8 @@
</systemProperty>
<!-- <systemProperty> -->
<!-- <key>kune.db.persistence.name</key> -->
- <!-- Persistence name, choose between: production, development,
- test_db (testing environment using mysql db), test (testing environment using
+ <!-- Persistence name, choose between: production, development,
+ test_db (testing environment using mysql db), test (testing environment using
h2 db). See persistence.xml -->
<!-- <value>development</value> -->
<!-- </systemProperty> -->
@@ -905,7 +912,7 @@
<configuration>
<source>1.6</source>
<target>1.6</target>
- <!-- Uncomment and run mvn with -X -e if we have same compile problems
+ <!-- Uncomment and run mvn with -X -e if we have same compile problems
<compilerArgument>-verbose</compilerArgument> <fork>true</fork> <verbose>true</verbose> -->
</configuration>
</plugin>
@@ -939,7 +946,7 @@
<name>junit</name>
<value>true</value>
</property>
- <!-- Skip the normal tests, we'll run them in the integration-test
+ <!-- Skip the normal tests, we'll run them in the integration-test
phase -->
<skipTests>${skipTests}</skipTests>
</configuration>
@@ -1064,11 +1071,11 @@
<!-- gwtp & GenEvent need this plugin -->
<!-- maybe test: http://mojo.codehaus.org/apt-maven-plugin/index.html -->
<!-- instead of this: https://code.google.com/p/maven-annotation-plugin/ -->
- <!-- <plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId>
- <version>1.3.7</version> <executions> <execution> <id>process</id> <goals>
- <goal>process</goal> </goals> <phase>generate-sources</phase> </execution>
- </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>apt-maven-plugin</artifactId>
- <version>1.0-alpha-4</version> <executions> <execution> <goals> <goal>process</goal>
+ <!-- <plugin> <groupId>org.bsc.maven</groupId> <artifactId>maven-processor-plugin</artifactId>
+ <version>1.3.7</version> <executions> <execution> <id>process</id> <goals>
+ <goal>process</goal> </goals> <phase>generate-sources</phase> </execution>
+ </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>apt-maven-plugin</artifactId>
+ <version>1.0-alpha-4</version> <executions> <execution> <goals> <goal>process</goal>
<goal>test-process</goal> </goals> </execution> </executions> </plugin> -->
<!-- BETTER user: http://code.google.com/p/acris/wiki/AnnotationProcessing -->
<plugin>
@@ -1089,7 +1096,7 @@
</modules>
<copyWebapp>true</copyWebapp>
<compileReport>false</compileReport>
- <localWorkers>1</localWorkers><!-- Using all workers can temporarily
+ <localWorkers>1</localWorkers><!-- Using all workers can temporarily
hang the mouse and isn't much faster -->
<extraJvmArgs>-Xmx1024m</extraJvmArgs>
</configuration>
@@ -1137,7 +1144,7 @@
<password>db4kune</password>
<verbose>true</verbose>
</configuration>
- <!-- <configuration> <verbose>true</verbose> <propertiesFile>
+ <!-- <configuration> <verbose>true</verbose> <propertiesFile>
src/main/resources/db/liquibase.properties </propertiesFile> </configuration> -->
<goals>
<goal>update</goal>
@@ -1156,7 +1163,7 @@
<mainClass>cc.kune.wave.server.WaveMain</mainClass>
<!-- <classpathPrefix>~/.m2/repository/</classpathPrefix> -->
<!-- <classpathLayoutType>repository</classpathLayoutType> -->
- <!-- NOTE: Deprecated in version 2.4. Use 'classpathLayoutType'
+ <!-- NOTE: Deprecated in version 2.4. Use 'classpathLayoutType'
instead. -->
<classpathMavenRepositoryLayout>true
</classpathMavenRepositoryLayout>
Modified: trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/CustomPersistFilter.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -87,6 +87,7 @@
@Override
public void destroy() {
+ // Commented in kune
// persistService.stop();
}
@@ -104,6 +105,7 @@
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
+ // Commented in kune
// persistService.start();
}
}
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/core/server/DataSourceKune.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceKune.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceKune.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,17 @@
+package cc.kune.core.server;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.google.inject.BindingAnnotation;
+
+(a)Retention(RetentionPolicy.RUNTIME)
+@Target({ FIELD, PARAMETER, METHOD })
+@BindingAnnotation
+public @interface DataSourceKune {
+}
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceKunePersistModule.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,124 @@
+package cc.kune.core.server;
+
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
+
+import org.apache.commons.configuration.SystemConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.Session;
+
+import cc.kune.core.server.properties.KuneProperties;
+import cc.kune.core.server.properties.KunePropertiesDefault;
+import cc.kune.domain.finders.ContainerFinder;
+import cc.kune.domain.finders.ContentFinder;
+import cc.kune.domain.finders.ExtMediaDescripFinder;
+import cc.kune.domain.finders.GroupFinder;
+import cc.kune.domain.finders.I18nCountryFinder;
+import cc.kune.domain.finders.I18nLanguageFinder;
+import cc.kune.domain.finders.I18nTranslationFinder;
+import cc.kune.domain.finders.LicenseFinder;
+import cc.kune.domain.finders.RateFinder;
+import cc.kune.domain.finders.TagFinder;
+import cc.kune.domain.finders.TagUserContentFinder;
+import cc.kune.domain.finders.UserFinder;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Key;
+import com.google.inject.Provider;
+import com.google.inject.persist.jpa.JpaPersistModule;
+
+public class DataSourceKunePersistModule extends AbstractModule {
+ public static final Log LOG = LogFactory.getLog(DataSourceKunePersistModule.class);
+ public static final Key<CustomPersistFilter> MY_DATA_SOURCE_ONE_FILTER_KEY = Key.get(
+ CustomPersistFilter.class, DataSourceKune.class);
+ private String settedJpaUnit = null;
+ private String settedProperties = null;
+
+ public DataSourceKunePersistModule() {
+ }
+
+ /**
+ * Instantiates this module during tests
+ *
+ * @param settedProperties
+ * the setted properties
+ * @param settedJpaUnit
+ * the setted jpa unit
+ */
+ public DataSourceKunePersistModule(final String settedProperties, final String settedJpaUnit) {
+ this.settedProperties = settedProperties;
+ this.settedJpaUnit = settedJpaUnit;
+ }
+
+ @Override
+ public void configure() {
+ final SystemConfiguration sysConf = new SystemConfiguration();
+ final String kuneConfig = settedProperties != null ? settedProperties
+ : sysConf.getString("kune.server.config");
+
+ final KunePropertiesDefault kuneProperties = new KunePropertiesDefault(kuneConfig);
+ bind(KuneProperties.class).toInstance(kuneProperties);
+ // expose(KuneProperties.class);
+
+ // precedence method param > properties
+ final String configuredJpaUnit = kuneProperties.get(KuneProperties.SITE_DB_PERSISTENCE_NAME);
+ final String jpaUnit = settedJpaUnit != null ? settedJpaUnit
+ : configuredJpaUnit != null ? configuredJpaUnit : "development";
+ LOG.info(String.format("Using persistence unit '%s' and properties '%s'", jpaUnit, kuneConfig));
+
+ final JpaPersistModule jpm = new JpaPersistModule(jpaUnit);
+
+ if (!jpaUnit.equals("test")) {
+ // In tests (and development) we don't override this db info)
+ final Properties dbProperties = new Properties();
+ dbProperties.setProperty("hibernate.connection.url",
+ kuneProperties.get(KuneProperties.SITE_DB_URL));
+ dbProperties.setProperty("hibernate.connection.username",
+ kuneProperties.get(KuneProperties.SITE_DB_USER));
+ dbProperties.setProperty("hibernate.connection.password",
+ kuneProperties.get(KuneProperties.SITE_DB_PASSWORD));
+ jpm.properties(dbProperties);
+ }
+
+ jpm.addFinder(ContainerFinder.class);
+ jpm.addFinder(ContentFinder.class);
+ jpm.addFinder(ExtMediaDescripFinder.class);
+ jpm.addFinder(GroupFinder.class);
+ jpm.addFinder(I18nCountryFinder.class);
+ jpm.addFinder(I18nLanguageFinder.class);
+ jpm.addFinder(I18nTranslationFinder.class);
+ jpm.addFinder(LicenseFinder.class);
+ jpm.addFinder(RateFinder.class);
+ jpm.addFinder(TagFinder.class);
+ jpm.addFinder(TagUserContentFinder.class);
+ jpm.addFinder(UserFinder.class);
+ install(jpm);
+ // expose(ContainerFinder.class);
+ // expose(ContentFinder.class);
+ // expose(ExtMediaDescripFinder.class);
+ // expose(GroupFinder.class);
+ // expose(I18nCountryFinder.class);
+ // expose(I18nLanguageFinder.class);
+ // expose(I18nTranslationFinder.class);
+ // expose(LicenseFinder.class);
+ // expose(RateFinder.class);
+ // expose(TagFinder.class);
+ // expose(TagUserContentFinder.class);
+ // expose(UserFinder.class);
+
+ bind(Session.class).annotatedWith(DataSourceKune.class).toProvider(
+ DataSourceKuneSessionProvider.class);
+ // expose(Session.class).annotatedWith(MyDataSourceOne.class);
+
+ final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class);
+ bind(EntityManager.class).annotatedWith(DataSourceKune.class).toProvider(entityManagerProvider);
+ // expose(EntityManager.class).annotatedWith(MyDataSourceOne.class);
+
+ bind(MY_DATA_SOURCE_ONE_FILTER_KEY).to(CustomPersistFilter.class);
+ // expose(MY_DATA_SOURCE_ONE_FILTER_KEY);
+
+ bind(GenericPersistenceInitializer.class).asEagerSingleton();
+ }
+}
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceKuneSessionProvider.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,26 @@
+package cc.kune.core.server;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.Session;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class DataSourceKuneSessionProvider implements Provider<Session> {
+ /** The entity manger to retrieve the session from. */
+ @Inject
+ @DataSourceKune
+ private Provider<EntityManager> entityManagerProvider;
+
+ /**
+ * @return the Hibernate session, being the delegate of the entity manager
+ * provided by the injected entity manager provider.
+ */
+ @Override
+ public Session get() {
+ final Session session = (Session) entityManagerProvider.get().getDelegate();
+ // configure session i.e. flush mode or filtering
+ return session;
+ }
+};
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfire.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,17 @@
+package cc.kune.core.server;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.google.inject.BindingAnnotation;
+
+(a)Retention(RetentionPolicy.RUNTIME)
+@Target({ FIELD, PARAMETER, METHOD })
+@BindingAnnotation
+public @interface DataSourceOpenfire {
+}
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfirePersistModule.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,60 @@
+package cc.kune.core.server;
+
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.Session;
+
+import cc.kune.core.server.xmpp.OpenfireXmppRosterFinder;
+import cc.kune.core.server.xmpp.OpenfireXmppRosterProvider;
+import cc.kune.core.server.xmpp.XmppRosterProvider;
+
+import com.google.inject.Key;
+import com.google.inject.PrivateModule;
+import com.google.inject.Provider;
+import com.google.inject.Singleton;
+import com.google.inject.persist.jpa.JpaPersistModule;
+
+public class DataSourceOpenfirePersistModule extends PrivateModule {
+ public static final Key<CustomPersistFilter> MY_DATA_SOURCE_TWO_FILTER_KEY = Key.get(
+ CustomPersistFilter.class, DataSourceOpenfire.class);
+
+ @Override
+ public void configure() {
+ final JpaPersistModule jpm = new JpaPersistModule("openfire");
+ // jpm.properties(new Properties());
+
+ final Properties dbProperties = new Properties();
+ dbProperties.setProperty(
+ "hibernate.connection.url",
+ "jdbc:mysql://localhost/openfire4?createDatabaseIfNotExist=false&useUnicode=true&characterEncoding=UTF-8");
+ // kuneProperties.get(KuneProperties.SITE_DB_URL));
+ dbProperties.setProperty("hibernate.connection.username", "openfire");
+ // kuneProperties.get(KuneProperties.SITE_DB_USER));
+ dbProperties.setProperty("hibernate.connection.password", "easyeasy");
+ dbProperties.setProperty("exclude-unlisted-classes", "true");
+
+ // kuneProperties.get(KuneProperties.SITE_DB_PASSWORD));
+
+ jpm.properties(dbProperties);
+ install(jpm.addFinder(OpenfireXmppRosterFinder.class));
+ expose(OpenfireXmppRosterFinder.class);
+
+ bind(XmppRosterProvider.class).to(OpenfireXmppRosterProvider.class).in(Singleton.class);
+ expose(XmppRosterProvider.class);
+
+ bind(Session.class).annotatedWith(DataSourceOpenfire.class).toProvider(
+ DataSourceOpenfireSessionProvider.class);
+ expose(Session.class).annotatedWith(DataSourceOpenfire.class);
+
+ final Provider<EntityManager> entityManagerProvider = binder().getProvider(EntityManager.class);
+ bind(EntityManager.class).annotatedWith(DataSourceOpenfire.class).toProvider(entityManagerProvider);
+ expose(EntityManager.class).annotatedWith(DataSourceOpenfire.class);
+
+ bind(MY_DATA_SOURCE_TWO_FILTER_KEY).to(CustomPersistFilter.class);
+ expose(MY_DATA_SOURCE_TWO_FILTER_KEY);
+
+ // bind(KunePersistenceInitializer.class).asEagerSingleton();
+ }
+}
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/DataSourceOpenfireSessionProvider.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,26 @@
+package cc.kune.core.server;
+
+import javax.persistence.EntityManager;
+
+import org.hibernate.Session;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class DataSourceOpenfireSessionProvider implements Provider<Session> {
+ /** The entity manger to retrieve the session from. */
+ @Inject
+ @DataSourceOpenfire
+ private Provider<EntityManager> entityManagerProvider;
+
+ /**
+ * @return the Hibernate session, being the delegate of the entity manager
+ * provided by the injected entity manager provider.
+ */
+ @Override
+ public Session get() {
+ final Session session = (Session) entityManagerProvider.get().getDelegate();
+ // configure session i.e. flush mode or filtering
+ return session;
+ }
+};
\ No newline at end of file
Added: trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/GenericPersistenceInitializer.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,12 @@
+package cc.kune.core.server;
+
+import com.google.inject.Inject;
+import com.google.inject.persist.PersistService;
+
+public class GenericPersistenceInitializer {
+ @Inject
+ GenericPersistenceInitializer(final PersistService service) {
+ service.start();
+ // At this point JPA is started and ready.
+ }
+}
\ No newline at end of file
Modified: trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/KunePersistenceService.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -24,18 +24,14 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import com.google.inject.persist.PersistService;
@Singleton
public class KunePersistenceService {
@Inject
DatabaseInitializer databaseInitializer;
- @Inject
- PersistService persistenceService;
public void start() {
try {
- persistenceService.start();
databaseInitializer.initConditional();
} catch (final Exception e) {
throw new ServerException("Error starting persistence service", e);
Modified: trunk/src/main/java/cc/kune/core/server/KuneRackModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/KuneRackModule.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -19,9 +19,6 @@
*/
package cc.kune.core.server;
-import java.util.Properties;
-
-import org.apache.commons.configuration.SystemConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -34,7 +31,6 @@
import cc.kune.core.client.rpcservices.SiteService;
import cc.kune.core.client.rpcservices.SocialNetService;
import cc.kune.core.client.rpcservices.UserService;
-import cc.kune.core.server.init.FinderRegistry;
import cc.kune.core.server.manager.file.EntityBackgroundDownloadManager;
import cc.kune.core.server.manager.file.EntityBackgroundUploadManager;
import cc.kune.core.server.manager.file.EntityLogoDownloadManager;
@@ -44,8 +40,6 @@
import cc.kune.core.server.manager.file.FileUploadManager;
import cc.kune.core.server.manager.file.UserLogoDownloadManager;
import cc.kune.core.server.manager.impl.GroupServerUtils;
-import cc.kune.core.server.properties.KuneProperties;
-import cc.kune.core.server.properties.KunePropertiesDefault;
import cc.kune.core.server.rack.RackBuilder;
import cc.kune.core.server.rack.RackModule;
import cc.kune.core.server.rack.filters.ForwardFilter;
@@ -74,56 +68,31 @@
import com.google.inject.Module;
import com.google.inject.Scope;
import com.google.inject.matcher.Matchers;
-import com.google.inject.persist.jpa.JpaPersistModule;
import com.google.inject.servlet.GuiceFilter;
import com.google.inject.servlet.ServletModule;
import com.google.inject.servlet.SessionScoped;
public class KuneRackModule implements RackModule {
+
public static final Log LOG = LogFactory.getLog(KuneRackModule.class);
private final Module configModule;
private final String suffix;
- final SystemConfiguration sysConf = new SystemConfiguration();
public KuneRackModule() {
this(null, "/ws", null);
}
- public KuneRackModule(final String settedJpaUnit, final String suffix, final Scope sessionScope) {
+ private KuneRackModule(final String settedJpaUnit, final String suffix, final Scope sessionScope) {
this.suffix = suffix;
- final String kuneConfig = sysConf.getString("kune.server.config");
+
configModule = new AbstractModule() {
@Override
public void configure() {
- final KunePropertiesDefault kuneProperties = new KunePropertiesDefault(kuneConfig);
- bind(KuneProperties.class).toInstance(kuneProperties);
- final String configuredJpaUnit = kuneProperties.get(KuneProperties.SITE_DB_PERSISTENCE_NAME);
-
- // precedence method param > properties
- final String jpaUnit = settedJpaUnit != null ? settedJpaUnit
- : configuredJpaUnit != null ? configuredJpaUnit : "development";
- LOG.info("Using persistence unit: " + jpaUnit);
-
- final JpaPersistModule jpaPersistModule = new JpaPersistModule(jpaUnit);
-
- if (!jpaUnit.equals("test")) {
- final Properties dbProperties = new Properties();
- dbProperties.setProperty("hibernate.connection.url",
- kuneProperties.get(KuneProperties.SITE_DB_URL));
- dbProperties.setProperty("hibernate.connection.username",
- kuneProperties.get(KuneProperties.SITE_DB_USER));
- dbProperties.setProperty("hibernate.connection.password",
- kuneProperties.get(KuneProperties.SITE_DB_PASSWORD));
- jpaPersistModule.properties(dbProperties);
- }
-
- install(FinderRegistry.init(jpaPersistModule));
bindInterceptor(Matchers.annotatedWith(LogThis.class), new NotInObject(),
new LoggerMethodInterceptor());
if (sessionScope != null) {
bindScope(SessionScoped.class, sessionScope);
}
-
// This can be used also in Gin:
// http://code.google.com/p/google-gin/issues/detail?id=60
requestStaticInjection(KuneWaveServerUtils.class);
@@ -198,7 +167,14 @@
builder.use(new ServletModule() {
@Override
protected void configureServlets() {
- filter("/*").through(CustomPersistFilter.class);
+ install(new DataSourceKunePersistModule());
+ // install(new MyDataSourceTwoPersistModule());
+
+ // more bindings
+
+ filter("/*").through(DataSourceKunePersistModule.MY_DATA_SOURCE_ONE_FILTER_KEY);
+ // filter("/*").through(MyDataSourceTwoPersistModule.MY_DATA_SOURCE_TWO_FILTER_KEY);
+
super.configureServlets();
}
});
Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -30,6 +30,7 @@
import cc.kune.core.client.errors.DefaultException;
import cc.kune.core.client.errors.MoveOnSameContainerException;
import cc.kune.core.client.errors.NameInUseException;
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.SearchResult;
import cc.kune.core.server.manager.file.FileUtils;
import cc.kune.core.server.manager.impl.DefaultManager;
@@ -53,8 +54,8 @@
private final ContentFinder contentFinder;
@Inject
- public ContainerManagerDefault(final ContentFinder contentFinder,
- final ContainerFinder containerFinder, final Provider<EntityManager> provider) {
+ public ContainerManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final ContentFinder contentFinder, final ContainerFinder containerFinder) {
super(provider, Container.class);
this.contentFinder = contentFinder;
this.containerFinder = containerFinder;
Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -46,6 +46,7 @@
import cc.kune.core.client.errors.MoveOnSameContainerException;
import cc.kune.core.client.errors.NameInUseException;
import cc.kune.core.client.errors.UserNotFoundException;
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.access.FinderService;
import cc.kune.core.server.manager.SearchResult;
import cc.kune.core.server.manager.TagUserContentManager;
@@ -94,11 +95,12 @@
private final UserFinder userFinder;
@Inject
- public ContentManagerDefault(final ContentFinder contentFinder, final ContainerFinder containerFinder,
- final Provider<EntityManager> provider, final FinderService finder, final UserFinder userFinder,
- final I18nLanguageFinder languageFinder, final TagUserContentManager tagManager,
- final KuneWaveService kuneWaveManager, final ParticipantUtils participantUtils,
- final ServerToolRegistry tools, final XMLActionReader xmlActionReader) {
+ public ContentManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final ContentFinder contentFinder, final ContainerFinder containerFinder,
+ final FinderService finder, final UserFinder userFinder, final I18nLanguageFinder languageFinder,
+ final TagUserContentManager tagManager, final KuneWaveService kuneWaveManager,
+ final ParticipantUtils participantUtils, final ServerToolRegistry tools,
+ final XMLActionReader xmlActionReader) {
super(provider, Content.class);
this.contentFinder = contentFinder;
this.containerFinder = containerFinder;
Modified: trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/init/DatabaseInitializer.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -68,7 +68,10 @@
final GroupManager groupManager, final LicenseManager licenseManager,
final I18nLanguageManager languageManager, final I18nCountryManager countryManager,
final I18nTranslationManager translationManager, final ContentManager contentManager,
- final I18nTranslationServiceDefault translationService) {
+ final I18nTranslationServiceDefault translationService
+
+ // , final XmppRosterProvider borrar) {
+ ) {
this.properties = properties;
this.userManager = userManager;
this.groupManager = groupManager;
@@ -78,8 +81,11 @@
this.translationManager = translationManager;
this.translationService = translationService;
this.contentManager = contentManager;
+ // assert borrar != null;
+ // LOG.info("Roster items: " + borrar.count());
}
+ @Transactional
private void createDefUsersGroup() throws Exception, UserMustBeLoggedException {
final String adminName = properties.getAdminUserName();
final String adminShortName = properties.getAdminShortName();
@@ -112,9 +118,9 @@
userManager.reIndex();
groupManager.reIndex();
-
}
+ @Transactional
private void createLicenses() {
// FIXME: Add CC RDF info (seems CC is working on new forms to add
// license metadata)
@@ -161,6 +167,7 @@
licenseManager.persist(license);
}
+ @Transactional
public void createOthers() {
final I18nLanguage english = new I18nLanguage(Long.valueOf(1819), "en", "ltr", "English", "", "",
"en", "eng", "eng", false, "", "", "", "c == 1 ? 1 : 2", null, "L", "MMM d\\, yyyy");
@@ -184,8 +191,10 @@
@Transactional
public void initDatabase() throws Exception {
+ createLicenses();
createOthers();
- createLicenses();
+ LOG.warn("langs: " + languageManager.getAll().size());
+ // createLicenses();
createDefUsersGroup();
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/ExtMediaDescripManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -23,7 +23,7 @@
import javax.persistence.EntityManager;
-
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.ExtMediaDescripManager;
import cc.kune.domain.ExtMediaDescrip;
import cc.kune.domain.finders.ExtMediaDescripFinder;
@@ -34,19 +34,19 @@
@Singleton
public class ExtMediaDescripManagerDefault extends DefaultManager<ExtMediaDescrip, Long> implements
- ExtMediaDescripManager {
+ ExtMediaDescripManager {
- private final ExtMediaDescripFinder extMediaFinder;
+ private final ExtMediaDescripFinder extMediaFinder;
- @Inject
- public ExtMediaDescripManagerDefault(final Provider<EntityManager> provider,
- final ExtMediaDescripFinder extMediaFinder) {
- super(provider, ExtMediaDescrip.class);
- this.extMediaFinder = extMediaFinder;
- }
+ @Inject
+ public ExtMediaDescripManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final ExtMediaDescripFinder extMediaFinder) {
+ super(provider, ExtMediaDescrip.class);
+ this.extMediaFinder = extMediaFinder;
+ }
- @Override
- public List<ExtMediaDescrip> getAll() {
- return extMediaFinder.getAll();
- }
+ @Override
+ public List<ExtMediaDescrip> getAll() {
+ return extMediaFinder.getAll();
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/GroupManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -39,6 +39,7 @@
import cc.kune.core.client.errors.GroupLongNameInUseException;
import cc.kune.core.client.errors.GroupShortNameInUseException;
import cc.kune.core.client.errors.UserMustBeLoggedException;
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.FileManager;
import cc.kune.core.server.manager.GroupManager;
import cc.kune.core.server.manager.LicenseManager;
@@ -84,8 +85,8 @@
private final UserFinder userFinder;
@Inject
- public GroupManagerDefault(final Provider<EntityManager> provider, final GroupFinder finder,
- final UserFinder userFinder, final KuneProperties kuneProperties,
+ public GroupManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final GroupFinder finder, final UserFinder userFinder, final KuneProperties kuneProperties,
final KuneBasicProperties properties, final ServerToolRegistry registry,
final LicenseManager licenseManager, final LicenseFinder licenseFinder,
final FileManager fileManager, final ServerToolRegistry serverToolRegistry,
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nCountryManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -23,7 +23,7 @@
import javax.persistence.EntityManager;
-
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.I18nCountryManager;
import cc.kune.domain.I18nCountry;
import cc.kune.domain.finders.I18nCountryFinder;
@@ -33,23 +33,25 @@
import com.google.inject.Singleton;
@Singleton
-public class I18nCountryManagerDefault extends DefaultManager<I18nCountry, Long> implements I18nCountryManager {
+public class I18nCountryManagerDefault extends DefaultManager<I18nCountry, Long> implements
+ I18nCountryManager {
- private final I18nCountryFinder finder;
+ private final I18nCountryFinder finder;
- @Inject
- public I18nCountryManagerDefault(final Provider<EntityManager> provider, final I18nCountryFinder finder) {
- super(provider, I18nCountry.class);
- this.finder = finder;
- }
+ @Inject
+ public I18nCountryManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final I18nCountryFinder finder) {
+ super(provider, I18nCountry.class);
+ this.finder = finder;
+ }
- @Override
- public I18nCountry findByCode(final String country) {
- return finder.findByCode(country);
- }
+ @Override
+ public I18nCountry findByCode(final String country) {
+ return finder.findByCode(country);
+ }
- @Override
- public List<I18nCountry> getAll() {
- return finder.getAll();
- }
+ @Override
+ public List<I18nCountry> getAll() {
+ return finder.getAll();
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nLanguageManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -23,7 +23,7 @@
import javax.persistence.EntityManager;
-
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.I18nLanguageManager;
import cc.kune.domain.I18nLanguage;
import cc.kune.domain.finders.I18nLanguageFinder;
@@ -33,23 +33,25 @@
import com.google.inject.Singleton;
@Singleton
-public class I18nLanguageManagerDefault extends DefaultManager<I18nLanguage, Long> implements I18nLanguageManager {
+public class I18nLanguageManagerDefault extends DefaultManager<I18nLanguage, Long> implements
+ I18nLanguageManager {
- private final I18nLanguageFinder finder;
+ private final I18nLanguageFinder finder;
- @Inject
- public I18nLanguageManagerDefault(final Provider<EntityManager> provider, final I18nLanguageFinder finder) {
- super(provider, I18nLanguage.class);
- this.finder = finder;
- }
+ @Inject
+ public I18nLanguageManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final I18nLanguageFinder finder) {
+ super(provider, I18nLanguage.class);
+ this.finder = finder;
+ }
- @Override
- public I18nLanguage findByCode(final String language) {
- return finder.findByCode(language);
- }
+ @Override
+ public I18nLanguage findByCode(final String language) {
+ return finder.findByCode(language);
+ }
- @Override
- public List<I18nLanguage> getAll() {
- return finder.getAll();
- }
+ @Override
+ public List<I18nLanguage> getAll() {
+ return finder.getAll();
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/I18nTranslationManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -27,6 +27,7 @@
import cc.kune.common.shared.utils.TextUtils;
import cc.kune.core.client.errors.DefaultException;
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.I18nLanguageManager;
import cc.kune.core.server.manager.I18nTranslationManager;
import cc.kune.core.shared.dto.I18nTranslationDTO;
@@ -48,7 +49,7 @@
private final I18nLanguageManager languageManager;
@Inject
- public I18nTranslationManagerDefault(final Provider<EntityManager> provider,
+ public I18nTranslationManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
final I18nTranslationFinder finder, final I18nLanguageManager languageManager) {
super(provider, I18nTranslation.class);
this.finder = finder;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/LicenseManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -23,7 +23,7 @@
import javax.persistence.EntityManager;
-
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.LicenseManager;
import cc.kune.core.server.properties.KuneBasicProperties;
import cc.kune.domain.License;
@@ -35,51 +35,51 @@
@Singleton
public class LicenseManagerDefault extends DefaultManager<License, Long> implements LicenseManager {
- private LicenseFinder licenseFinder;
- private final KuneBasicProperties properties;
+ private LicenseFinder licenseFinder;
+ private final KuneBasicProperties properties;
- @Inject
- public LicenseManagerDefault(final Provider<EntityManager> provider, final KuneBasicProperties properties,
- final LicenseFinder licenseFinder) {
- super(provider, License.class);
- this.properties = properties;
- this.licenseFinder = licenseFinder;
- }
+ @Inject
+ public LicenseManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final KuneBasicProperties properties, final LicenseFinder licenseFinder) {
+ super(provider, License.class);
+ this.properties = properties;
+ this.licenseFinder = licenseFinder;
+ }
- @Override
- public License findByShortName(final String shortName) {
- return licenseFinder.findByShortName(shortName);
- }
+ @Override
+ public License findByShortName(final String shortName) {
+ return licenseFinder.findByShortName(shortName);
+ }
- @Override
- public List<License> getAll() {
- return licenseFinder.getAll();
- }
+ @Override
+ public List<License> getAll() {
+ return licenseFinder.getAll();
+ }
- @Override
- public List<License> getCC() {
- return licenseFinder.getCC();
- }
+ @Override
+ public List<License> getCC() {
+ return licenseFinder.getCC();
+ }
- @Override
- public License getDefLicense() {
- final String licenseDefId = properties.getDefaultLicense();
- return licenseFinder.findByShortName(licenseDefId);
- }
+ @Override
+ public License getDefLicense() {
+ final String licenseDefId = properties.getDefaultLicense();
+ return licenseFinder.findByShortName(licenseDefId);
+ }
- @Override
- public List<License> getNotCC() {
- return licenseFinder.getNotCC();
- }
+ @Override
+ public List<License> getNotCC() {
+ return licenseFinder.getNotCC();
+ }
- @Override
- public License persist(final License license) {
- return super.persist(license);
- }
+ @Override
+ public License persist(final License license) {
+ return super.persist(license);
+ }
- @Override
- @Inject
- public void setLicenseFinder(final LicenseFinder licenseFinder) {
- this.licenseFinder = licenseFinder;
- }
+ @Override
+ @Inject
+ public void setLicenseFinder(final LicenseFinder licenseFinder) {
+ this.licenseFinder = licenseFinder;
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/RateManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -22,7 +22,7 @@
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
-
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.RateManager;
import cc.kune.domain.Content;
import cc.kune.domain.Rate;
@@ -36,31 +36,32 @@
@Singleton
public class RateManagerDefault extends DefaultManager<Rate, Long> implements RateManager {
- private final RateFinder finder;
+ private final RateFinder finder;
- @Inject
- public RateManagerDefault(final Provider<EntityManager> provider, final RateFinder finder) {
- super(provider, Rate.class);
- this.finder = finder;
- }
+ @Inject
+ public RateManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final RateFinder finder) {
+ super(provider, Rate.class);
+ this.finder = finder;
+ }
- @Override
- public Rate find(final User user, final Content content) {
- try {
- return finder.find(user, content);
- } catch (final NoResultException e) {
- return null;
- }
+ @Override
+ public Rate find(final User user, final Content content) {
+ try {
+ return finder.find(user, content);
+ } catch (final NoResultException e) {
+ return null;
}
+ }
- @Override
- public Double getRateAvg(final Content content) {
- return finder.calculateRate(content);
- }
+ @Override
+ public Double getRateAvg(final Content content) {
+ return finder.calculateRate(content);
+ }
- @Override
- public Long getRateByUsers(final Content content) {
- return finder.calculateRateNumberOfUsers(content);
- }
+ @Override
+ public Long getRateByUsers(final Content content) {
+ return finder.calculateRateNumberOfUsers(content);
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -30,6 +30,7 @@
import cc.kune.core.client.errors.InvalidSNOperationException;
import cc.kune.core.client.errors.LastAdminInGroupException;
import cc.kune.core.client.errors.UserMustBeLoggedException;
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.access.AccessRightsService;
import cc.kune.core.server.error.ServerException;
import cc.kune.core.server.manager.SocialNetworkManager;
@@ -62,8 +63,9 @@
private final UserManager userManager;
@Inject
- public SocialNetworkManagerDefault(final Provider<EntityManager> provider, final GroupFinder finder,
- final AccessRightsService accessRightsService, final UserManager userManager) {
+ public SocialNetworkManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final GroupFinder finder, final AccessRightsService accessRightsService,
+ final UserManager userManager) {
super(provider, SocialNetwork.class);
this.finder = finder;
this.accessRightsService = accessRightsService;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/TagManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -21,7 +21,7 @@
import javax.persistence.EntityManager;
-
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.TagManager;
import cc.kune.domain.Tag;
import cc.kune.domain.finders.TagFinder;
@@ -33,16 +33,17 @@
@Singleton
public class TagManagerDefault extends DefaultManager<Tag, Long> implements TagManager {
- private final TagFinder tagFinder;
+ private final TagFinder tagFinder;
- @Inject
- public TagManagerDefault(final Provider<EntityManager> provider, final TagFinder tagFinder) {
- super(provider, Tag.class);
- this.tagFinder = tagFinder;
- }
+ @Inject
+ public TagManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final TagFinder tagFinder) {
+ super(provider, Tag.class);
+ this.tagFinder = tagFinder;
+ }
- @Override
- public Tag findByTagName(final String tag) {
- return tagFinder.findByTagName(tag);
- }
+ @Override
+ public Tag findByTagName(final String tag) {
+ return tagFinder.findByTagName(tag);
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/TagUserContentManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -26,6 +26,7 @@
import javax.persistence.NoResultException;
import cc.kune.common.shared.utils.TextUtils;
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.TagManager;
import cc.kune.core.server.manager.TagUserContentManager;
import cc.kune.core.shared.domain.TagCloudResult;
@@ -49,7 +50,7 @@
private final TagManager tagManager;
@Inject
- public TagUserContentManagerDefault(final Provider<EntityManager> provider,
+ public TagUserContentManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
final TagManager tagManager, final TagUserContentFinder finder) {
super(provider, TagUserContent.class);
this.provider = provider;
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/ToolConfigurationManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -21,7 +21,7 @@
import javax.persistence.EntityManager;
-
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.manager.ToolConfigurationManager;
import cc.kune.domain.ToolConfiguration;
@@ -31,11 +31,11 @@
@Singleton
public class ToolConfigurationManagerDefault extends DefaultManager<ToolConfiguration, Long> implements
- ToolConfigurationManager {
+ ToolConfigurationManager {
- @Inject
- public ToolConfigurationManagerDefault(final Provider<EntityManager> provider) {
- super(provider, ToolConfiguration.class);
- }
+ @Inject
+ public ToolConfigurationManagerDefault(@DataSourceKune final Provider<EntityManager> provider) {
+ super(provider, ToolConfiguration.class);
+ }
}
Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/UserManagerDefault.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -58,6 +58,7 @@
import cc.kune.core.client.errors.WrongCurrentPasswordException;
import cc.kune.core.client.state.SiteTokens;
import cc.kune.core.client.state.TokenUtils;
+import cc.kune.core.server.DataSourceKune;
import cc.kune.core.server.i18n.I18nTranslationServiceMultiLang;
import cc.kune.core.server.manager.GroupManager;
import cc.kune.core.server.manager.I18nCountryManager;
@@ -105,13 +106,14 @@
private final XmppManager xmppManager;
@Inject
- public UserManagerDefault(final Provider<EntityManager> provider, final UserFinder finder,
- final I18nLanguageManager languageManager, final I18nCountryManager countryManager,
- final XmppManager xmppManager, final ChatProperties chatProperties,
- final I18nTranslationServiceMultiLang i18n, final CustomUserRegistrationServlet waveUserRegister,
- final AccountStore waveAccountStore, final KuneWaveService kuneWaveManager,
- final ParticipantUtils participantUtils, final KuneBasicProperties properties,
- final GroupManager groupManager, final NotificationService notifyService) {
+ public UserManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
+ final UserFinder finder, final I18nLanguageManager languageManager,
+ final I18nCountryManager countryManager, final XmppManager xmppManager,
+ final ChatProperties chatProperties, final I18nTranslationServiceMultiLang i18n,
+ final CustomUserRegistrationServlet waveUserRegister, final AccountStore waveAccountStore,
+ final KuneWaveService kuneWaveManager, final ParticipantUtils participantUtils,
+ final KuneBasicProperties properties, final GroupManager groupManager,
+ final NotificationService notifyService) {
super(provider, User.class);
this.userFinder = finder;
this.languageManager = languageManager;
Modified: trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/java/cc/kune/core/server/rack/RackServletFilter.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -19,7 +19,9 @@
*/
package cc.kune.core.server.rack;
+import java.io.File;
import java.io.IOException;
+import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
@@ -40,7 +42,13 @@
import cc.kune.core.server.rack.utils.RackHelper;
import cc.kune.core.server.scheduler.CustomJobFactory;
+import com.google.inject.Guice;
import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.grapher.GrapherModule;
+import com.google.inject.grapher.InjectorGrapher;
+import com.google.inject.grapher.graphviz.GraphvizModule;
+import com.google.inject.grapher.graphviz.GraphvizRenderer;
public class RackServletFilter implements Filter {
public static class DockChain implements FilterChain {
@@ -132,6 +140,20 @@
return moduleName;
}
+ @SuppressWarnings("unused")
+ private void graph(final String filename, final Injector kuneInjector) {
+ try {
+ final PrintWriter out = new PrintWriter(new File(filename), "UTF-8");
+
+ final Injector injector = Guice.createInjector(new GrapherModule(), new GraphvizModule());
+ final GraphvizRenderer renderer = injector.getInstance(GraphvizRenderer.class);
+ renderer.setOut(out).setRankdir("TB");
+ injector.getInstance(InjectorGrapher.class).of(kuneInjector).graph();
+ } catch (final IOException e) {
+ LOG.debug("Exception creation guice graph", e);
+ }
+ }
+
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
LOG.debug("INITIALIZING RackServletFilter...");
@@ -140,6 +162,9 @@
module.configure(builder);
rack = builder.getRack();
injector = (Injector) filterConfig.getServletContext().getAttribute(INJECTOR_PARENT_ATTRIBUTE);
+ // final Injector oInjector = injector.createChildInjector(new
+ // OpenfireModule());
+
final Injector kuneChildInjector = installInjector(filterConfig, rack, injector);
final CustomJobFactory jobFactory = kuneChildInjector.getInstance(CustomJobFactory.class);
jobFactory.setInjector(kuneChildInjector);
@@ -148,6 +173,10 @@
excludes = rack.getExcludes();
initFilters(filterConfig);
LOG.debug("INITIALIZATION DONE!");
+
+ // Uncomment to generate the graph
+ graph("docs/wave-guice-graph.dot", injector);
+ graph("docs/kune-guice-graph.dot", kuneChildInjector);
}
private void initFilters(final FilterConfig filterConfig) throws ServletException {
@@ -158,8 +187,9 @@
private Injector installInjector(final FilterConfig filterConfig, final Rack rack,
final Injector waveChildInjector) {
- // final Injector injector = Guice.createInjector();
- final Injector childInjector = waveChildInjector.createChildInjector(rack.getGuiceModules());
+ final List<Module> guiceModules = rack.getGuiceModules();
+
+ final Injector childInjector = waveChildInjector.createChildInjector(guiceModules);
filterConfig.getServletContext().setAttribute(INJECTOR_ATTRIBUTE, childInjector);
return childInjector;
}
Added: trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterFinder.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterFinder.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterFinder.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,10 @@
+package cc.kune.core.server.xmpp;
+
+import com.google.inject.persist.finder.Finder;
+
+public interface OpenfireXmppRosterFinder {
+
+ @Finder(query = "SELECT count(*) FROM Roster r")
+ public Long count();
+
+}
Added: trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/xmpp/OpenfireXmppRosterProvider.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,31 @@
+package cc.kune.core.server.xmpp;
+
+import javax.persistence.EntityManager;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import cc.kune.core.server.DataSourceOpenfire;
+import cc.kune.core.server.manager.impl.DefaultManager;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class OpenfireXmppRosterProvider extends DefaultManager<Roster, Long> implements
+ XmppRosterProvider {
+ private static final Log LOG = LogFactory.getLog(OpenfireXmppRosterProvider.class);
+ private final OpenfireXmppRosterFinder finder;
+
+ @Inject
+ public OpenfireXmppRosterProvider(@DataSourceOpenfire final Provider<EntityManager> em,
+ final OpenfireXmppRosterFinder finder) {
+ super(em, Roster.class);
+ this.finder = finder;
+ }
+
+ @Override
+ public Long count() {
+ return finder.count();
+ }
+
+}
Added: trunk/src/main/java/cc/kune/core/server/xmpp/Roster.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/xmpp/Roster.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/xmpp/Roster.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,63 @@
+package cc.kune.core.server.xmpp;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "ofRoster")
+public class Roster {
+
+ @Id
+ @GeneratedValue
+ @Column(name = "rosterID")
+ private Long id;
+
+ private String jid;
+ private String nick;
+ private String username;
+
+ public Long getId() {
+ return id;
+ }
+
+ public String getJid() {
+ return jid;
+ }
+
+ public String getNick() {
+ return nick;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setId(final Long id) {
+ this.id = id;
+ }
+
+ public void setJid(final String jid) {
+ this.jid = jid;
+ }
+
+ public void setNick(final String nick) {
+ this.nick = nick;
+ }
+
+ public void setUsername(final String username) {
+ this.username = username;
+ }
+
+ // protected RecvType recvStatus;
+ //
+ // protected Set<String> sharedGroups = new HashSet<String>();
+ //
+ // protected Set<String> invisibleSharedGroups = new HashSet<String>();
+ //
+ // protected SubType subStatus;
+ //
+ // protected AskType askStatus;
+}
Added: trunk/src/main/java/cc/kune/core/server/xmpp/XmppRosterProvider.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/xmpp/XmppRosterProvider.java (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/xmpp/XmppRosterProvider.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -0,0 +1,16 @@
+package cc.kune.core.server.xmpp;
+
+/**
+ * The Interface XmppRosterProvider should allow to get users's roster
+ * information from different providers (initially openfire)
+ */
+public interface XmppRosterProvider {
+
+ /**
+ * Count.
+ *
+ * @return the total number of items (only for test)
+ */
+ Long count();
+
+}
Modified: trunk/src/main/resources/META-INF/persistence.xml
===================================================================
--- trunk/src/main/resources/META-INF/persistence.xml 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/resources/META-INF/persistence.xml 2012-03-06 21:17:53 UTC (rev 1742)
@@ -4,10 +4,12 @@
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
+ <!-- PRODUCTION ========================================================================= -->
+
<persistence-unit name="production" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- JPA entities must be registered here -->
- <!-- src/main/java/cc/kune/domain$ ls -1 *.java | sed 's/.java/<\/class>/g'
+ <!-- src/main/java/cc/kune/domain$ ls -1 *.java | sed 's/.java/<\/class>/g'
| sed 's/^/<class>cc.kune.domain./g' -->
<class>cc.kune.domain.AccessLists</class>
<class>cc.kune.domain.BasicMimeType</class>
@@ -31,23 +33,23 @@
<class>cc.kune.domain.ToolConfiguration</class>
<class>cc.kune.domain.User</class>
<properties>
- <property name="hibernate.archive.autodetection" value="class, hbm"/>
- <!-- In order to debug sql enable this -->
+ <property name="hibernate.archive.autodetection" value=""/>
+ <!-- In order to debug sql enable this -->
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
<property name="use_sql_comments" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost/kune_prod?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.username" value="kune"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.password" value="db4kune"/>
- <!-- http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-auto-update-in-…
+ <!-- http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-auto-update-in-…
(NO!, use liquibase, for instance) -->
<!-- http://stackoverflow.com/questions/438146/hibernate-question-hbm2ddl-auto-p… -->
<property name="hibernate.hbm2ddl.auto" value="validate"/>
@@ -66,11 +68,50 @@
value="/var/lib/kune/lucene/kune_dev/indexes"/>
</properties>
</persistence-unit>
+
+ <!-- OPENFIRE =========================================================================== -->
+
+ <persistence-unit name="openfire" transaction-type="RESOURCE_LOCAL">
+ <!-- <exclude-unlisted-classes>true</exclude-unlisted-classes> -->
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <!-- JPA entities must be registered here -->
+ <class>cc.kune.core.server.xmpp.Roster</class>
+ <properties>
+ <property name="hibernate.archive.autodetection" value=""/>
+ <!-- In order to debug sql enable this -->
+ <property name="hibernate.show_sql" value="false"/>
+ <property name="hibernate.format_sql" value="false"/>
+ <property name="use_sql_comments" value="true"/>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
+ <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
+
+ <!-- Configured and overrided by kune.properties -->
+ <property name="hibernate.connection.url"
+ value="jdbc:mysql://localhost/kune_openfire?createDatabaseIfNotExist=false&useUnicode=true&characterEncoding=UTF-8"/>
+ <!-- Configured and overrided by kune.properties -->
+ <property name="hibernate.connection.username" value="kune"/>
+ <!-- Configured and overrided by kune.properties -->
+ <property name="hibernate.connection.password" value="db4kune"/>
+ <property name="hibernate.hbm2ddl.auto" value="validate"/>
+ <!-- https://www.hibernate.org/214.html -->
+ <property name="hibernate.connection.provider_class"
+ value="org.hibernate.connection.C3P0ConnectionProvider"/>
+ <property name="hibernate.c3p0.min_size" value="5"/>
+ <property name="hibernate.c3p0.max_size" value="50"/>
+ <property name="hibernate.c3p0.timeout" value="100"/>
+ <property name="hibernate.c3p0.max_statements" value="0"/>
+ <property name="hibernate.c3p0.idle_test_period" value="3000"/>
+ <property name="c3p0.preferredTestQuery" value="SELECT 1"/>
+ </properties>
+ </persistence-unit>
+
+ <!-- DEVELOPMENT ======================================================================== -->
+
<persistence-unit name="development"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- JPA entities must be registered here -->
- <!-- src/main/java/cc/kune/domain$ ls -1 *.java | sed 's/.java/<\/class>/g'
+ <!-- src/main/java/cc/kune/domain$ ls -1 *.java | sed 's/.java/<\/class>/g'
| sed 's/^/<class>cc.kune.domain./g' -->
<class>cc.kune.domain.AccessLists</class>
<class>cc.kune.domain.BasicMimeType</class>
@@ -94,22 +135,21 @@
<class>cc.kune.domain.ToolConfiguration</class>
<class>cc.kune.domain.User</class>
<properties>
- <property name="hibernate.archive.autodetection" value="class, hbm"/>
- <!-- In order to debug sql enable this -->
+ <property name="hibernate.archive.autodetection" value=""/>
+ <!-- In order to debug sql enable this -->
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
<property name="use_sql_comments" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost/kune_dev?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.username" value="kune"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.password" value="db4kune"/>
-
- <!-- http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-auto-update-in-…
+ <!-- http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-auto-update-in-…
(NO!, use liquibase, for instance) -->
<!-- http://stackoverflow.com/questions/438146/hibernate-question-hbm2ddl-auto-p… -->
<property name="hibernate.hbm2ddl.auto" value="update"/>
@@ -129,6 +169,8 @@
</properties>
</persistence-unit>
+ <!-- TEST (MYSQL) ======================================================================= -->
+
<persistence-unit name="test_db" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- JPA entities must be registered here -->
@@ -154,19 +196,19 @@
<class>cc.kune.domain.ToolConfiguration</class>
<class>cc.kune.domain.User</class>
<properties>
- <property name="hibernate.archive.autodetection" value="class, hbm"/>
- <!-- In order to debug sql enable this -->
+ <property name="hibernate.archive.autodetection" value=""/>
+ <!-- In order to debug sql enable this -->
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
<property name="use_sql_comments" value="false"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost/kune_test?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.username" value="kune"/>
- <!-- Configured and overrided by kune.properties -->
+ <!-- Configured and overrided by kune.properties -->
<property name="hibernate.connection.password" value="db4kune"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<!-- <property name="hibernate.hbm2ddl.auto" value="create" /> -->
@@ -185,6 +227,8 @@
</properties>
</persistence-unit>
+ <!-- TEST (H2 - MEMORY) ================================================================= -->
+
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- JPA entities must be registered here -->
@@ -210,7 +254,7 @@
<class>cc.kune.domain.ToolConfiguration</class>
<class>cc.kune.domain.User</class>
<properties>
- <!-- In order to debug sql enable this -->
+ <!-- In order to debug sql enable this -->
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
<property name="use_sql_comments" value="false"/>
@@ -227,5 +271,4 @@
</properties>
</persistence-unit>
-
</persistence>
Modified: trunk/src/main/resources/log4j.properties
===================================================================
--- trunk/src/main/resources/log4j.properties 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/main/resources/log4j.properties 2012-03-06 21:17:53 UTC (rev 1742)
@@ -26,7 +26,7 @@
log4j.logger.org.ourproject=ERROR;
log4j.logger.cc.kune=ERROR;
log4j.logger.org.waveprotocol=ERROR;
-log4j.logger.org.google=ERROR
+log4j.logger.org.google=ERROR;
#------------------------------------------------------------------------------
#
Modified: trunk/src/test/java/cc/kune/core/server/PersistenceTest.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/PersistenceTest.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/test/java/cc/kune/core/server/PersistenceTest.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -27,67 +27,69 @@
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
import com.google.inject.persist.Transactional;
public abstract class PersistenceTest {
- private final String persistenceUnit;
- private final String propetiesFileName;
- @Inject
- Provider<EntityManager> provider;
+ private final String persistenceUnit;
+ private final String propetiesFileName;
+ @Inject
+ @DataSourceKune
+ Provider<EntityManager> provider;
- public PersistenceTest() {
- // test: use memory
- // test_db: use mysql
- // Also configurable ein TestHelper
- this(TestConstants.PERSISTENCE_UNIT, "kune.properties");
- }
+ public PersistenceTest() {
+ // test: use memory
+ // test_db: use mysql
+ // Also configurable ein TestHelper
+ this(TestConstants.PERSISTENCE_MYSQL_UNIT, "kune.properties");
+ }
- public PersistenceTest(final String persistenceUnit, final String propetiesFileName) {
- this.persistenceUnit = persistenceUnit;
- this.propetiesFileName = propetiesFileName;
- }
+ public PersistenceTest(final String persistenceUnit, final String propetiesFileName) {
+ this.persistenceUnit = persistenceUnit;
+ this.propetiesFileName = propetiesFileName;
+ }
- public void closeTransaction() {
- getManager().getTransaction().commit();
- }
+ public void closeTransaction() {
+ getManager().getTransaction().commit();
+ }
- protected EntityManager getManager() {
- return provider.get();
- }
+ protected EntityManager getManager() {
+ return provider.get();
+ }
- public EntityTransaction getTransaction() {
- return getManager().getTransaction();
- }
+ public EntityTransaction getTransaction() {
+ return getManager().getTransaction();
+ }
- public EntityManager openTransaction() {
- final EntityManager manager = getManager();
- final EntityTransaction transaction = manager.getTransaction();
- transaction.begin();
- return manager;
- }
+ public EntityManager openTransaction() {
+ final EntityManager manager = getManager();
+ final EntityTransaction transaction = manager.getTransaction();
+ transaction.begin();
+ return manager;
+ }
- public void persist(final Object... entities) {
- for (final Object entity : entities) {
- getManager().persist(entity);
- }
+ public void persist(final Object... entities) {
+ for (final Object entity : entities) {
+ getManager().persist(entity);
}
+ }
- @Transactional
- @Before
- public void prepare() {
- final Injector injector = TestHelper.create(new PlatformServerModule(), persistenceUnit, propetiesFileName);
- final PersistService persistence = injector.getInstance(PersistService.class);
- // To Debug insert breakpoint here
- persistence.start();
- injector.injectMembers(this);
- }
+ @Transactional
+ @Before
+ public void prepare() {
+ final Injector injector = TestHelper.create(new PlatformServerModule(), persistenceUnit,
+ propetiesFileName);
+ // final PersistService persistence =
+ // injector.getInstance(PersistService.class);
+ // To Debug insert breakpoint here
+ // persistence.start();
+ injector.injectMembers(this);
+ }
- public void rollbackTransaction() {
- final EntityTransaction transaction = getManager().getTransaction();
- if (transaction.isActive()) {
- transaction.rollback();
- }
+ public void rollbackTransaction() {
+ final EntityTransaction transaction = getManager().getTransaction();
+ if (transaction.isActive()) {
+ transaction.rollback();
}
+ }
}
Modified: trunk/src/test/java/cc/kune/core/server/TestConstants.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/TestConstants.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/test/java/cc/kune/core/server/TestConstants.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -20,6 +20,7 @@
package cc.kune.core.server;
public final class TestConstants {
+ public static final String PERSISTENCE_MYSQL_UNIT = "test_db";
// test: use memory
// test_db: use mysql
// public static final String PERSISTENCE_UNIT = "test_db";
Modified: trunk/src/test/java/cc/kune/core/server/TestHelper.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/TestHelper.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/test/java/cc/kune/core/server/TestHelper.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -33,10 +33,7 @@
import org.waveprotocol.box.server.waveserver.WaveServerImpl;
import org.waveprotocol.wave.federation.noop.NoOpFederationModule;
-import cc.kune.core.server.init.FinderRegistry;
import cc.kune.core.server.integration.HttpServletRequestMocked;
-import cc.kune.core.server.properties.KuneProperties;
-import cc.kune.core.server.properties.KunePropertiesDefault;
import cc.kune.wave.server.CustomSettingsBinder;
import com.google.inject.Binder;
@@ -46,7 +43,6 @@
import com.google.inject.Module;
import com.google.inject.Scopes;
import com.google.inject.name.Names;
-import com.google.inject.persist.jpa.JpaPersistModule;
import com.google.inject.servlet.RequestScoped;
import com.google.inject.servlet.SessionScoped;
@@ -59,16 +55,17 @@
final PersistenceModule wavePersistModule = injector.getInstance(PersistenceModule.class);
final NoOpFederationModule federationModule = injector.getInstance(NoOpFederationModule.class);
final Injector childInjector = injector.createChildInjector(wavePersistModule, new ServerModule(
- false, 1, 2, 2), new RobotApiModule(), federationModule,
- FinderRegistry.init(new JpaPersistModule(persistenceUnit)), module, new Module() {
- @Override
- public void configure(final Binder binder) {
- binder.bindScope(SessionScoped.class, Scopes.SINGLETON);
- binder.bindScope(RequestScoped.class, Scopes.SINGLETON);
- binder.bind(KuneProperties.class).toInstance(new KunePropertiesDefault(propetiesFileName));
- binder.bind(HttpServletRequest.class).to(HttpServletRequestMocked.class);
- }
- });
+ false, 1, 2, 2), new RobotApiModule(), federationModule, new DataSourceKunePersistModule(
+ "kune.properties", TestConstants.PERSISTENCE_UNIT), module, new Module() {
+ @Override
+ public void configure(final Binder binder) {
+ binder.bindScope(SessionScoped.class, Scopes.SINGLETON);
+ binder.bindScope(RequestScoped.class, Scopes.SINGLETON);
+ // binder.bind(KuneProperties.class).toInstance(new
+ // KunePropertiesDefault(propetiesFileName));
+ binder.bind(HttpServletRequest.class).to(HttpServletRequestMocked.class);
+ }
+ });
try {
childInjector.getInstance(WaveServerImpl.class).initialize();
} catch (final WaveServerException e) {
Modified: trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java
===================================================================
--- trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java 2012-03-06 14:15:12 UTC (rev 1741)
+++ trunk/src/test/java/cc/kune/core/server/integration/IntegrationTestHelper.java 2012-03-06 21:17:53 UTC (rev 1742)
@@ -33,11 +33,9 @@
import cc.kune.barters.server.BarterServerModule;
import cc.kune.chat.server.ChatServerModule;
import cc.kune.core.server.KunePersistenceService;
+import cc.kune.core.server.DataSourceKunePersistModule;
import cc.kune.core.server.PlatformServerModule;
import cc.kune.core.server.TestConstants;
-import cc.kune.core.server.init.FinderRegistry;
-import cc.kune.core.server.properties.KuneProperties;
-import cc.kune.core.server.properties.KunePropertiesDefault;
import cc.kune.docs.server.DocumentServerModule;
import cc.kune.events.server.EventsServerModule;
import cc.kune.lists.server.ListsServerModule;
@@ -49,7 +47,6 @@
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Scopes;
-import com.google.inject.persist.jpa.JpaPersistModule;
import com.google.inject.servlet.RequestScoped;
import com.google.inject.servlet.SessionScoped;
@@ -62,20 +59,25 @@
TestConstants.WAVE_TEST_PROPFILE, CoreSettings.class));
final PersistenceModule wavePersistModule = injector.getInstance(PersistenceModule.class);
final NoOpFederationModule federationModule = injector.getInstance(NoOpFederationModule.class);
- final Injector childInjector = injector.createChildInjector(wavePersistModule,
- FinderRegistry.init(new JpaPersistModule(TestConstants.PERSISTENCE_UNIT)),
- new ListsServerModule(), new RobotApiModule(), new PlatformServerModule(),
- new DocumentServerModule(), new ChatServerModule(), new ServerModule(false, 1, 2, 2),
- federationModule, new WikiServerModule(), new TaskServerModule(), new BarterServerModule(),
- new EventsServerModule(), new AbstractModule() {
+ final Injector childInjector = injector.createChildInjector(
+ wavePersistModule,
+ new AbstractModule() {
@Override
protected void configure() {
bindScope(SessionScoped.class, Scopes.SINGLETON);
bindScope(RequestScoped.class, Scopes.SINGLETON);
- bind(KuneProperties.class).toInstance(new KunePropertiesDefault("kune.properties"));
+
bind(HttpServletRequest.class).to(HttpServletRequestMocked.class);
}
- });
+ },
+
+ new DataSourceKunePersistModule("kune.properties", TestConstants.PERSISTENCE_UNIT),
+ // new MyDataSourceTwoPersistModule(),
+
+ new ListsServerModule(), new RobotApiModule(), new PlatformServerModule(),
+ new DocumentServerModule(), new ChatServerModule(), new ServerModule(false, 1, 2, 2),
+ federationModule, new WikiServerModule(), new TaskServerModule(), new BarterServerModule(),
+ new EventsServerModule());
try {
childInjector.getInstance(WaveServerImpl.class).initialize();
} catch (final WaveServerException e) {
1
0
Author: vjrj_
Date: 2012-03-06 15:15:12 +0100 (Tue, 06 Mar 2012)
New Revision: 1741
Modified:
trunk/DEV-GUIDE
trunk/INSTALL
Log:
More doc
Modified: trunk/DEV-GUIDE
===================================================================
--- trunk/DEV-GUIDE 2012-03-06 13:25:45 UTC (rev 1740)
+++ trunk/DEV-GUIDE 2012-03-06 14:15:12 UTC (rev 1741)
@@ -53,8 +53,15 @@
Of course, you can use other IDEs (and please help us to improve this doc in this case).
-===Optional maven-eclipse integration ===
+====Some mandatory plugins for Eclipse====
+From the Eclipse Marketplace (Help > Eclipse Marketplace) install:
+
+* Google Plugin for Eclipse https://code.google.com/intl/en/eclipse/docs/getting_started.html
+* Subversive or Subclipse
+
+====Optional maven-eclipse integration ====
+
Check:
http://google-web-toolkit.googlecode.com/svn/trunk/samples/expenses/README-…
@@ -72,7 +79,7 @@
(*) Note: We actually use script/mvn-eclipse.sh instead of a simple 'mvn eclipse:eclipse' to hack a little bit the .classpath, because "mvn eclipse:eclipse" removes the GWT_CONTAINER line a the end of the .classpath. You can fix it from eclipse (anytime that we change the dependencies and you have to do a 'mvn eclipse:eclipse'), but we prefer to do it that way from the command line.
-====Configure Google GWT Plugin===
+====Configure Google GWT Plugin====
For now we are using GWT 2.1.1 (not necessary match the one from the eclipse GWT plugin) so probably you have to download the SDK from:
http://code.google.com/p/google-web-toolkit/downloads/list
@@ -84,18 +91,19 @@
Also in Kune project properties > Google > Web Toolkit > Check that you are using the 2.1.1 SDK.
-===UTF 8===
+====Configure the Firefox GWT Plugin====
-The charset used in Kune is UTF8. In Eclipse, check the text-file enconding in Package Explorer > Preferences > Resource > Text file encoding.
+For that check this from Firefox:
+http://gwt.google.com/missing-plugin/MissingPlugin.html
+some times GWT plugin is not available for newers FF, so you have to search in the GWT dev forums for a nightly extension.
-Please don't send patchs in other charsets.
+====UTF 8====
-====Some mandatory plugins for Eclipse====
+The charset used in Kune is UTF8. In Eclipse, check the text-file enconding in Package Explorer > Preferences > Resource > Text file encoding.
-From the Eclipse Marketplace (Help > Eclipse Marketplace) install:
+You can change this globally in General > Workspace.
-* Google Plugin for Eclipse https://code.google.com/intl/en/eclipse/docs/getting_started.html
-* Subversive or Subclipse
+Note: Please don't send patchs in other charsets.
====Some other recomended & suggested plugins for Eclipse====
@@ -120,12 +128,12 @@
===Install Kune===
-Only after making sure the previous steps have been finished, you can proceed to the installation of Kune. For doing so, you need to follow the instructions of the document INSTALL, available in kune/trunk/INSTALL. Afterwards you will be able to run Kune for the first time. This will initialize the database, and configure the XMPP server, among other things.
+Only after making sure the previous steps have been finished, you can proceed to the installation of the rest of Kune. For doing so, you need to follow the instructions of the document INSTALL, available in kune/trunk/INSTALL. Afterwards you will be able to run Kune for the first time.
===GWT's Hosted Mode===
Before run hosted mode for the first time compile once with:
- mvn compile && mvn gwt:compile
+ mvn compile -Dliquibase.should.run=false && mvn gwt:compile
and deploy with:
script/deploy_gwt.sh
Modified: trunk/INSTALL
===================================================================
--- trunk/INSTALL 2012-03-06 13:25:45 UTC (rev 1740)
+++ trunk/INSTALL 2012-03-06 14:15:12 UTC (rev 1741)
@@ -146,13 +146,14 @@
mysql -p -u kune < script/kune_initialize.sql
-(Windows users can use Mysql Browser to execute this SQL).
+(Windows users can use Mysql Browser to execute this SQL: File > Open Script > Select "script\kune_initialize.sql" > Execute).
And if all goes ok, migrate the database:
script/liquibase-migrate.sh
-Windows users should do this by hand or adapt this (simple) script to Windows.
+Windows developer users should do this by hand or adapt this (simple) script to Windows or simple:
+mvn compile -Dliquibase.should.run=true (or mvn compile)
===Run the server===
1
0
Author: vjrj_
Date: 2012-03-06 14:25:45 +0100 (Tue, 06 Mar 2012)
New Revision: 1740
Modified:
trunk/DEV-GUIDE
trunk/INSTALL
Log:
More doc
Modified: trunk/DEV-GUIDE
===================================================================
--- trunk/DEV-GUIDE 2012-03-05 21:11:54 UTC (rev 1739)
+++ trunk/DEV-GUIDE 2012-03-06 13:25:45 UTC (rev 1740)
@@ -72,6 +72,18 @@
(*) Note: We actually use script/mvn-eclipse.sh instead of a simple 'mvn eclipse:eclipse' to hack a little bit the .classpath, because "mvn eclipse:eclipse" removes the GWT_CONTAINER line a the end of the .classpath. You can fix it from eclipse (anytime that we change the dependencies and you have to do a 'mvn eclipse:eclipse'), but we prefer to do it that way from the command line.
+====Configure Google GWT Plugin===
+
+For now we are using GWT 2.1.1 (not necessary match the one from the eclipse GWT plugin) so probably you have to download the SDK from:
+http://code.google.com/p/google-web-toolkit/downloads/list
+unzip, and add that SDK in Eclipse (Windows > Preferences > Google > Web Toolkit > Add).
+
+Don't use other upper GWT SDK versions because our code (and dependencies) are not compatible with upper versions and we should do a coordinated migration.
+
+After that, right click Kune project in the PackageExplorer > Google > WebApplication > WAR directory: set to src/main/webapp and Uncheck the "Launch and deploy from this directory".
+
+Also in Kune project properties > Google > Web Toolkit > Check that you are using the 2.1.1 SDK.
+
===UTF 8===
The charset used in Kune is UTF8. In Eclipse, check the text-file enconding in Package Explorer > Preferences > Resource > Text file encoding.
@@ -124,13 +136,10 @@
In /script directory exist two (mainly) launch configurations:
- kune server via mvn.launch
- kune client -no-server.launch
-these configurations are eclipse run configurations that are normally imported by eclipse when you import the project (in GNU/Linux at least). See the Run and the Run External icon in the Eclipse toolbar to find these launchs. If is not there, try to import it:
-http://help.eclipse.org/helios/topic/org.eclipse.jdt.doc.user/reference/wizards/ref-import_launch_configs.htm
+these configurations are eclipse run configurations that are normally imported by eclipse when you import the project (in GNU/Linux at least). See the Run and the Run External icon and menu options in the Eclipse toolbar to find these launchs. If is not there, try to import it (in Eclipse: File > Import > Launch Configurations > select the launchs from script directory). Also try to fix the path for the mvn command (especially Windows users). Other option is to create a new one launch to run a external "mvn exec:java" because the previous launch were created in GNU/Linux systems.
-Lauch the first to start the kune server (the first time that starts, will initialize the database). After that, launch the second to start kune in hosted mode and connect to the previous server, so you can make code modifications, and refresh the browser to see the changes.
+Run it! Launch the first (it's equivalent to mvn exec:java) to start the kune server. After that, launch the second to start kune in hosted mode and connect to the previous server, so you can make code modifications, and refresh the browser to see the changes.
-Window users should create a kune server run external configuration to run "mvn exec:java" because the previous launch runs in GNU/Linux systems.
-
==== Optionally ====
You can run the server via script/server.sh (also you can run server in debug mode, see TROUBLESHOOT or -h for help). This is quite useful to put breakpoints in the server code.
Modified: trunk/INSTALL
===================================================================
--- trunk/INSTALL 2012-03-05 21:11:54 UTC (rev 1739)
+++ trunk/INSTALL 2012-03-06 13:25:45 UTC (rev 1740)
@@ -93,7 +93,7 @@
You can use other location (see kune.properties).
-Configurate hibernate-search (GNU/Linux instructions, look persistence.xml if you want to change indexes destination):
+Configurate hibernate/lucene indexes directories (these are GNU/Linux instructions, Windows developers: look and tune "hibernate.search.default.indexBase" variables in persistence.xml if you want to change indexes destination to other place):
# yourUser is the user you are using to develop/run the application
sudo mkdir -p /var/lib/kune/lucene/kune_dev/indexes
sudo mkdir -p /var/lib/kune/lucene/kune_test/indexes
1
0
Author: vjrj_
Date: 2012-03-05 22:11:54 +0100 (Mon, 05 Mar 2012)
New Revision: 1739
Modified:
trunk/INSTALL
Log:
updated INSTALL
Modified: trunk/INSTALL
===================================================================
--- trunk/INSTALL 2012-03-05 21:10:38 UTC (rev 1738)
+++ trunk/INSTALL 2012-03-05 21:11:54 UTC (rev 1739)
@@ -144,8 +144,10 @@
===Initialize the kune database===
-mysql -p -u kune < script/kune_initialize.sql
+mysql -p -u kune < script/kune_initialize.sql
+(Windows users can use Mysql Browser to execute this SQL).
+
And if all goes ok, migrate the database:
script/liquibase-migrate.sh
1
0