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
September 2008
- 2 participants
- 54 discussions
Author: danigb
Date: 2008-09-22 13:28:17 +0200 (Mon, 22 Sep 2008)
New Revision: 877
Added:
trunk/scripts/
trunk/scripts/copy_deploy.sh
trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/
trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/ServletServiceFilter.java
Modified:
trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
trunk/src/main/java/org/ourproject/kune/app/public/css/richtext.css
trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java
trunk/src/main/java/org/ourproject/kune/rack/RackBuilder.java
trunk/src/main/java/org/ourproject/kune/rack/filters/InjectedFilter.java
trunk/src/main/resources/kune.properties
trunk/src/main/webapp/WEB-INF/web.xml
Log:
ServletRack implementation
Added: trunk/scripts/copy_deploy.sh
===================================================================
--- trunk/scripts/copy_deploy.sh 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/scripts/copy_deploy.sh 2008-09-22 11:28:17 UTC (rev 877)
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+#scripts/css-compact-and-tidy.css
+
+
+rm src/main/webapp/gwt/org.ourproject.kune.app.Kune/ -R
+mkdir src/main/webapp/gwt/org.ourproject.kune.app.Kune/
+cp target/org.ourproject.kune-0.0.1/org.ourproject.kune.app.Kune/std/ src/main/webapp/gwt/org.ourproject.kune.app.Kune/ -R
Property changes on: trunk/scripts/copy_deploy.sh
___________________________________________________________________
Name: svn:executable
+ *
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2008-09-22 11:28:17 UTC (rev 877)
@@ -3,2124 +3,25 @@
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.3.1
-*/
-body{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input, textarea, select{font-family:inherit;font-size:inherit;font-weight:inherit;}
-
-/*
+*/body{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.3.1
-*/
-body {font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:99%;}
-
-
-/*
- * Ext JS Library 2.0.2
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing(a)extjs.com
- *
- * http://extjs.com/license
- */
-
-html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}
-img,body,html{border:0;}
-address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
-ol,ul{list-style:none;}
-caption,th{text-align:left;}
-h1,h2,h3,h4,h5,h6{font-size:100%;}
-q:before,q:after{content:'';}
-
-.ext-el-mask{z-index:20000;position:absolute;top:0;left:0;-moz-opacity:0.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;width:100%;height:100%;zoom:1;}
-.ext-el-mask-msg{z-index:20001;position:absolute;top:0;left:0;border:1px solid #6593cf;background:#c3daf9 url(../js/ext/resources/images/default/box/tb-blue.gif) repeat-x 0 -16px;padding:2px;}
-.ext-el-mask-msg div{padding:5px 10px 5px 10px;background:#eee;border:1px solid #a3bad9;color:#222;font:normal 100% arial,sans;cursor:wait;}
-.ext-shim{position:absolute;visibility:hidden;left:0;top:0;overflow:hidden;}
-.ext-ie .ext-shim{filter:alpha(opacity=0);}
-.ext-ie6 .ext-shim{margin-left:5px;margin-top:3px;}
-.x-mask-loading div{padding:5px 10px 5px 25px;background:#fbfbfb url( '../js/ext/resources/images/default/grid/loading.gif' ) no-repeat 5px 5px;line-height:16px;}
-.x-hidden,.x-hide-offsets{position:absolute;left:-10000px;top:-10000px;visibility:hidden;}
-.x-hide-display{display:none!important;}
-.x-hide-visibility{visibility:hidden!important;}
-.x-masked{overflow:hidden!important;}
-.x-masked select,.x-masked object,.x-masked embed{visibility:hidden;}
-.x-layer{visibility:hidden;}
-.x-unselectable,.x-unselectable *{-moz-user-select:none;-khtml-user-select:none;}
-.x-repaint{zoom:1;background-color:transparent;-moz-outline:none;}
-.x-item-disabled{color:gray;cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}
-.x-item-disabled *{color:gray!important;cursor:default!important;}
-.x-splitbar-proxy{position:absolute;visibility:hidden;z-index:20001;background:#aaa;zoom:1;line-height:1px;font-size:1px;overflow:hidden;}
-.x-splitbar-h,.x-splitbar-proxy-h{cursor:e-resize;cursor:col-resize;}
-.x-splitbar-v,.x-splitbar-proxy-v{cursor:s-resize;cursor:row-resize;}
-.x-color-palette{width:150px;height:92px;cursor:pointer;}
-.x-color-palette a{border:1px solid #fff;float:left;padding:2px;text-decoration:none;-moz-outline:0 none;outline:0 none;cursor:pointer;}
-.x-color-palette a:hover,.x-color-palette a.x-color-palette-sel{border:1px solid #8BB8F3;background:#deecfd;}
-.x-color-palette em{display:block;border:1px solid #ACA899;}
-.x-color-palette em span{cursor:pointer;display:block;height:10px;line-height:10px;width:10px;}
-.x-ie-shadow{display:none;position:absolute;overflow:hidden;left:0;top:0;background:#777;zoom:1;}
-.x-shadow{display:none;position:absolute;overflow:hidden;left:0;top:0;}
-.x-shadow *{overflow:hidden;}
-.x-shadow *{padding:0;border:0;margin:0;clear:none;zoom:1;}
-.x-shadow .xstc,.x-shadow .xsbc{height:6px;float:left;}
-.x-shadow .xstl,.x-shadow .xstr,.x-shadow .xsbl,.x-shadow .xsbr{width:6px;height:6px;float:left;}
-.x-shadow .xsc{width:100%;}
-.x-shadow .xsml,.x-shadow .xsmr{width:6px;float:left;height:100%;}
-.x-shadow .xsmc{float:left;height:100%;background:transparent url( ../js/ext/resources/images/default/shadow-c.png );}
-.x-shadow .xst,.x-shadow .xsb{height:6px;overflow:hidden;width:100%;}
-.x-shadow .xsml{background:transparent url( ../js/ext/resources/images/default/shadow-lr.png ) repeat-y 0 0;}
-.x-shadow .xsmr{background:transparent url( ../js/ext/resources/images/default/shadow-lr.png ) repeat-y -6px 0;}
-.x-shadow .xstl{background:transparent url( ../js/ext/resources/images/default/shadow.png ) no-repeat 0 0;}
-.x-shadow .xstc{background:transparent url( ../js/ext/resources/images/default/shadow.png ) repeat-x 0 -30px;}
-.x-shadow .xstr{background:transparent url( ../js/ext/resources/images/default/shadow.png ) repeat-x 0 -18px;}
-.x-shadow .xsbl{background:transparent url( ../js/ext/resources/images/default/shadow.png ) no-repeat 0 -12px;}
-.x-shadow .xsbc{background:transparent url( ../js/ext/resources/images/default/shadow.png ) repeat-x 0 -36px;}
-.x-shadow .xsbr{background:transparent url( ../js/ext/resources/images/default/shadow.png ) repeat-x 0 -6px;}
-.loading-indicator{font-size:100%;background-image:url(../js/ext/resources/images/default/grid/loading.gif);background-repeat:no-repeat;background-position:left;padding-left:20px;line-height:16px;margin:3px;}
-.x-text-resize{position:absolute;left:-1000px;top:-1000px;visibility:hidden;zoom:1;}
-.x-drag-overlay{width:100%;height:100%;display:none;position:absolute;left:0;top:0;background-image:url(../js/ext/resources/images/default/s.gif);z-index:20000;}
-.x-clear{clear:both;height:0;overflow:hidden;line-height:0;font-size:0;}
-.x-spotlight{z-index:8999;position:absolute;top:0;left:0;-moz-opacity:0.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;width:0;height:0;zoom:1;}
-
-.x-tab-panel{overflow:hidden;}
-.x-tab-panel-header,.x-tab-panel-footer{background:#deecfd;border:1px solid #8db2e3;overflow:hidden;zoom:1;}
-.x-tab-panel-header{border:1px solid #8db2e3;padding-bottom:2px;}
-.x-tab-panel-footer{border:1px solid #8db2e3;padding-top:2px;}
-.x-tab-strip-wrap{width:100%;overflow:hidden;position:relative;zoom:1;}
-ul.x-tab-strip{display:block;width:5000px;zoom:1;}
-ul.x-tab-strip-top{padding-top:1px;background:url(../js/ext/resources/images/default/tabs/tab-strip-bg.gif) #cedff5 repeat-x bottom;border-bottom:1px solid #8db2e3;}
-ul.x-tab-strip-bottom{padding-bottom:1px;background:url(../js/ext/resources/images/default/tabs/tab-strip-btm-bg.gif) #cedff5 repeat-x top;border-top:1px solid #8db2e3;border-bottom:0 none;}
-.x-tab-panel-header-plain .x-tab-strip-top{background:transparent!important;padding-top:0!important;}
-.x-tab-panel-header-plain{background:transparent!important;border-width:0!important;padding-bottom:0!important;}
-.x-tab-panel-header-plain .x-tab-strip-spacer{border:1px solid #8db2e3;border-top:0 none;height:2px;background:#deecfd;font-size:1px;line-height:1px;}
-.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer{height:3px;}
-ul.x-tab-strip li{float:left;margin-left:2px;}
-ul.x-tab-strip li.x-tab-edge{float:left;margin:0!important;padding:0!important;border:0 none!important;font-size:1px!important;line-height:1px!important;overflow:hidden;zoom:1;background:transparent!important;width:1px;}
-.x-tab-strip a,.x-tab-strip span,.x-tab-strip em{display:block;}
-.x-tab-strip a{text-decoration:none!important;-moz-outline:none;outline:none;cursor:pointer;}
-.x-tab-strip-inner{overflow:hidden;text-overflow:ellipsis;}
-.x-tab-strip span.x-tab-strip-text{font:normal 100% arial,sans;color:#416aa3;white-space:nowrap;cursor:pointer;padding:4px 0;}
-.x-tab-strip .x-tab-with-icon .x-tab-right{padding-left:6px;}
-.x-tab-strip .x-tab-with-icon span.x-tab-strip-text{padding-left:20px;background-position:0 3px;background-repeat:no-repeat;}
-.x-tab-strip-over span.x-tab-strip-text{color:#15428b;}
-.x-tab-strip-active{cursor:default;}
-.x-tab-strip-active span.x-tab-strip-text{cursor:default;color:#15428b;font-weight:bold;}
-.x-tab-strip-disabled .x-tabs-text{cursor:default;color:#aaa;}
-.x-tab-panel-body{overflow:hidden;}
-.x-tab-panel-bwrap{overflow:hidden;}
-.ext-ie .x-tab-strip .x-tab-right{position:relative;}
-.x-tab-strip-top .x-tab-strip-active .x-tab-right{margin-bottom:-1px;}
-.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text{padding-bottom:5px;}
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{margin-top:-1px;}
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-right span.x-tab-strip-text{padding-top:5px;}
-.x-tab-strip-top .x-tab-right{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) no-repeat 0 -51px;padding-left:10px;}
-.x-tab-strip-top .x-tab-left{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) no-repeat right -351px;padding-right:10px;}
-.x-tab-strip-top .x-tab-strip-inner{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) repeat-x 0 -201px;}
-.x-tab-strip-top .x-tab-strip-over .x-tab-right{background-position:0 -101px;}
-.x-tab-strip-top .x-tab-strip-over .x-tab-left{background-position:right -401px;}
-.x-tab-strip-top .x-tab-strip-over .x-tab-strip-inner{background-position:0 -251px;}
-.x-tab-strip-top .x-tab-strip-active .x-tab-right{background-position:0 0;}
-.x-tab-strip-top .x-tab-strip-active .x-tab-left{background-position:right -301px;}
-.x-tab-strip-top .x-tab-strip-active .x-tab-strip-inner{background-position:0 -151px;}
-.x-tab-strip-bottom .x-tab-right{background:url(../js/ext/resources/images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;}
-.x-tab-strip-bottom .x-tab-left{background:url(../js/ext/resources/images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;}
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background:url(../js/ext/resources/images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;}
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background:url(../js/ext/resources/images/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;}
-.x-tab-strip-bottom .x-tab-left{padding:0 10px;}
-.x-tab-strip-bottom .x-tab-right{padding:0;}
-.x-tab-strip .x-tab-strip-close{display:none;}
-.x-tab-strip-closable{position:relative;}
-.x-tab-strip-closable .x-tab-left{padding-right:19px;}
-.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close{background-image:url(../js/ext/resources/images/default/tabs/tab-close.gif);opacity:.6;-moz-opacity:.6;background-repeat:no-repeat;display:block;width:11px;height:11px;position:absolute;top:3px;right:3px;cursor:pointer;z-index:2;}
-.x-tab-strip .x-tab-strip-active a.x-tab-strip-close{opacity:.8;-moz-opacity:.8;}
-.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{background-image:url(../js/ext/resources/images/default/tabs/tab-close.gif);opacity:1;-moz-opacity:1;}
-.x-tab-panel-body{border:1px solid #8db2e3;background:#fff;}
-.x-tab-panel-body-top{border-top:0 none;}
-.x-tab-panel-body-bottom{border-bottom:0 none;}
-.x-tab-scroller-left{background:transparent url(../js/ext/resources/images/default/tabs/scroll-left.gif) no-repeat -18px 0;border-bottom:1px solid #8db2e3;width:18px;position:absolute;left:0;top:0;z-index:10;cursor:pointer;}
-.x-tab-scroller-left-over{background-position:0 0;}
-.x-tab-scroller-left-disabled{background-position:-18px 0;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);cursor:default;}
-.x-tab-scroller-right{background:transparent url(../js/ext/resources/images/default/tabs/scroll-right.gif) no-repeat 0 0;border-bottom:1px solid #8db2e3;width:18px;position:absolute;right:0;top:0;z-index:10;cursor:pointer;}
-.x-tab-scroller-right-over{background-position:-18px 0;}
-.x-tab-scroller-right-disabled{background-position:0 0;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);cursor:default;}
-.x-tab-scrolling .x-tab-strip-wrap{margin-left:18px;margin-right:18px;}
-.x-tab-scrolling{position:relative;}
-.x-tab-panel-bbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}
-.x-tab-panel-tbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}
-.x-border-layout-ct .x-tab-panel{background:white;}
-
- .x-form-field{margin:0;font:normal 100% arial,sans;}
-.x-form-text,textarea.x-form-field{padding:1px 3px;background:#fff url(../js/ext/resources/images/default/form/text-bg.gif) repeat-x 0 0;border:1px solid #B5B8C8;}
-textarea.x-form-field{padding:2px 3px;}
-.x-form-text{height:22px;line-height:18px;vertical-align:middle;}
-.ext-ie .x-form-text{margin:-1px 0;height:22px;line-height:18px;}
-.ext-ie textarea.x-form-field{margin:-1px 0;}
-.ext-strict .x-form-text{height:18px;}
-.ext-safari .x-form-text{height:20px;padding:0 3px;}
-.ext-safari.ext-mac textarea.x-form-field{margin-bottom:-2px;}
-.ext-gecko .x-form-text{padding-top:2px;padding-bottom:0;}
-textarea{resize:none;}
-.x-form-select-one{height:20px;line-height:18px;vertical-align:middle;background-color:#fff;border:1px solid #B5B8C8;}
-.x-form-field-wrap{position:relative;zoom:1;white-space:nowrap;}
-.x-editor .x-form-check-wrap{background:#fff;}
-.x-form-field-wrap .x-form-trigger{width:17px;height:21px;border:0;background:transparent url(../js/ext/resources/images/default/form/trigger.gif) no-repeat 0 0;cursor:pointer;border-bottom:1px solid #B5B8C8;position:absolute;top:0;}
-.ext-safari .x-form-field-wrap .x-form-trigger{height:21px;}
-.x-form-field-wrap .x-form-date-trigger{background-image:url(../js/ext/resources/images/default/form/date-trigger.gif);cursor:pointer;}
-.x-form-field-wrap .x-form-clear-trigger{background-image:url(../js/ext/resources/images/default/form/clear-trigger.gif);cursor:pointer;}
-.x-form-field-wrap .x-form-search-trigger{background-image:url(../js/ext/resources/images/default/form/search-trigger.gif);cursor:pointer;}
-.ext-safari .x-form-field-wrap .x-form-trigger{right:0;}
-.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{position:static;top:auto;vertical-align:top;}
-.x-form-field-wrap .x-form-trigger-over{background-position:-17px 0;}
-.x-form-field-wrap .x-form-trigger-click{background-position:-34px 0;}
-.x-trigger-wrap-focus .x-form-trigger{background-position:-51px 0;}
-.x-trigger-wrap-focus .x-form-trigger-over{background-position:-68px 0;}
-.x-trigger-wrap-focus .x-form-trigger-click{background-position:-85px 0;}
-.x-trigger-wrap-focus .x-form-trigger{border-bottom:1px solid #7eadd9;}
-.x-item-disabled .x-form-trigger-over{background-position:0 0!important;border-bottom:1px solid #B5B8C8;}
-.x-item-disabled .x-form-trigger-click{background-position:0 0!important;border-bottom:1px solid #B5B8C8;}
-.x-form-focus,textarea.x-form-focus{border:1px solid #7eadd9;}
-.x-form-invalid,textarea.x-form-invalid{background:#fff url(../js/ext/resources/images/default/grid/invalid_line.gif) repeat-x bottom;border:1px solid #dd7870;}
-.ext-safari .x-form-invalid{background-color:#fee;border:1px solid #ff7870;}
-.x-editor{visibility:hidden;padding:0;margin:0;}
-.x-form-check-wrap{line-height:18px;}
-.ext-ie .x-form-check-wrap input{width:15px;height:15px;}
-.x-editor .x-form-check-wrap{padding:3px;}
-.x-editor .x-form-checkbox{height:13px;}
-.x-form-grow-sizer{font:normal 100% arial,sans;left:-10000px;padding:8px 3px;position:absolute;visibility:hidden;top:-10000px;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;zoom:1;}
-.x-form-grow-sizer p{margin:0!important;border:0 none!important;padding:0!important;}
-.x-form-item{font:normal 100% arial,sans;display:block;margin-bottom:4px;}
-.x-form-item label{display:block;float:left;width:100px;padding:3px;padding-left:0;clear:left;z-index:2;position:relative;}
-.x-form-element{padding-left:105px;position:relative;}
-.x-form-invalid-msg{color:#e00;padding:2px;padding-left:18px;font:normal 100% arial,sans;background:transparent url(../js/ext/resources/images/default/shared/warning.gif) no-repeat 0 2px;line-height:16px;width:200px;}
-.x-form-label-right label{text-align:right;}
-.x-form-label-top .x-form-item label{width:auto;float:none;clear:none;display:inline;margin-bottom:4px;position:static;}
-.x-form-label-top .x-form-element{padding-left:0;padding-top:4px;}
-.x-form-label-top .x-form-item{padding-bottom:4px;}
-.x-form-empty-field{color:gray;}
-.x-small-editor .x-form-field{font:normal 100% arial,sans;}
-.x-small-editor .x-form-text{height:20px;line-height:16px;vertical-align:middle;}
-.ext-ie .x-small-editor .x-form-text{margin-top:-1px!important;margin-bottom:-1px!important;height:20px!important;line-height:16px!important;}
-.ext-strict .x-small-editor .x-form-text{height:16px!important;}
-.ext-safari .x-small-editor .x-form-field{font:normal 100% arial,sans;}
-.ext-ie .x-small-editor .x-form-text{height:20px;line-height:16px;}
-.ext-border-box .x-small-editor .x-form-text{height:20px;}
-.x-small-editor .x-form-select-one{height:20px;line-height:16px;vertical-align:middle;}
-.x-small-editor .x-form-num-field{text-align:right;}
-.x-small-editor .x-form-field-wrap .x-form-trigger{height:19px;}
-.x-form-clear{clear:both;height:0;overflow:hidden;line-height:0;font-size:0;}
-.x-form-clear-left{clear:left;height:0;overflow:hidden;line-height:0;font-size:0;}
-.x-form-cb-label{width:'auto'!important;float:none!important;clear:none!important;display:inline!important;margin-left:4px;}
-.x-form-column{float:left;padding:0;margin:0;width:48%;overflow:hidden;zoom:1;}
-.x-form .x-form-btns-ct .x-btn{float:right;clear:none;}
-.x-form .x-form-btns-ct .x-form-btns td{border:0;padding:0;}
-.x-form .x-form-btns-ct .x-form-btns-right table{float:right;clear:none;}
-.x-form .x-form-btns-ct .x-form-btns-left table{float:left;clear:none;}
-.x-form .x-form-btns-ct .x-form-btns-center{text-align:center;}
-.x-form .x-form-btns-ct .x-form-btns-center table{margin:0 auto;}
-.x-form .x-form-btns-ct table td.x-form-btn-td{padding:3px;}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{background-position:0 -147px;}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{background-position:0 -168px;}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{background-position:0 -189px;}
-.x-form .x-form-btns-ct .x-btn-click .x-btn-center{background-position:0 -126px;}
-.x-form .x-form-btns-ct .x-btn-click .x-btn-right{background-position:0 -84px;}
-.x-form .x-form-btns-ct .x-btn-click .x-btn-left{background-position:0 -63px;}
-.x-form-invalid-icon{width:16px;height:18px;visibility:hidden;position:absolute;left:0;top:0;display:block;background:transparent url(../js/ext/resources/images/default/form/exclamation.gif) no-repeat 0 2px;}
-.x-fieldset{border:1px solid #B5B8C8;padding:10px;margin-bottom:10px;}
-.x-fieldset legend{font:bold 100% arial,sans;color:#15428b;}
-.ext-ie .x-fieldset legend{margin-bottom:10px;}
-.ext-ie .x-fieldset{padding-top:0;padding-bottom:10px;}
-.x-fieldset legend .x-tool-toggle{margin-right:3px;margin-left:0;float:left!important;}
-.x-fieldset legend input{margin-right:3px;float:left!important;height:13px;width:13px;}
-fieldset.x-panel-collapsed{padding-bottom:0!important;border-width:1px 0 0 0!important;}
-fieldset.x-panel-collapsed .x-fieldset-bwrap{visibility:hidden;position:absolute;left:-1000px;top:-1000px;}
-.ext-ie .x-fieldset-bwrap{zoom:1;}
-.ext-ie td .x-form-text{position:relative;top:-1px;}
-.x-fieldset-noborder{border:0 none transparent;}
-.x-fieldset-noborder legend{margin-left:-3px;}
-.ext-ie .x-fieldset-noborder legend{position:relative;margin-bottom:23px;}
-.ext-ie .x-fieldset-noborder legend span{position:absolute;left:-5px;}
-.ext-gecko .x-window-body .x-form-item{-moz-outline:none;overflow:auto;}
-.ext-gecko .x-form-item{-moz-outline:none;}
-.x-hide-label label.x-form-item-label{display:none;}
-.x-hide-label .x-form-element{padding-left:0!important;}
-.x-fieldset{overflow:hidden;}
-.x-fieldset-bwrap{overflow:hidden;zoom:1;}
-.x-fieldset-body{overflow:hidden;}
-
-.x-btn{font:normal 100% arial,sans;cursor:pointer;white-space:nowrap;}
-.x-btn button{border:0 none;background:transparent;padding-left:3px;padding-right:3px;cursor:pointer;margin:0;overflow:visible;width:auto;-moz-outline:0 none;outline:0 none;}
-* html .ext-ie .x-btn button{width:1px;}
-.ext-gecko .x-btn button{padding-left:0;padding-right:0;}
-.ext-ie .x-btn button{padding-top:2px;}
-.x-btn-icon .x-btn-center .x-btn-text{background-position:center;background-repeat:no-repeat;height:16px;width:16px;cursor:pointer;white-space:nowrap;padding:0;}
-.x-btn-icon .x-btn-center{padding:1px;}
-.x-btn em{font-style:normal;font-weight:normal;}
-.x-btn-text-icon .x-btn-center .x-btn-text{background-position:0 2px;background-repeat:no-repeat;padding-left:18px;padding-top:3px;padding-bottom:2px;padding-right:0;}
-.x-btn-left,.x-btn-right{font-size:1px;line-height:1px;}
-.x-btn-left{width:3px;height:21px;background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 0;}
-.x-btn-right{width:3px;height:21px;background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -21px;}
-.x-btn-left i,.x-btn-right i{display:block;width:3px;overflow:hidden;font-size:1px;line-height:1px;}
-.x-btn-center{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) repeat-x 0 -42px;vertical-align:middle;text-align:center;padding:0 5px;cursor:pointer;white-space:nowrap;}
-.x-btn-over .x-btn-left{background-position:0 -63px;}
-.x-btn-over .x-btn-right{background-position:0 -84px;}
-.x-btn-over .x-btn-center{background-position:0 -105px;}
-.x-btn-click .x-btn-center,.x-btn-menu-active .x-btn-center{background-position:0 -126px;}
-.x-btn-disabled *{color:gray!important;cursor:default!important;}
-.x-btn-menu-text-wrap .x-btn-center{padding:0 3px;}
-.ext-gecko .x-btn-menu-text-wrap .x-btn-center{padding:0 1px;}
-.x-btn-menu-arrow-wrap .x-btn-center{padding:0;}
-.x-btn-menu-arrow-wrap .x-btn-center button{width:12px!important;height:21px;padding:0!important;display:block;background:transparent url(../js/ext/resources/images/default/button/btn-arrow.gif) no-repeat left 3px;}
-.x-btn-with-menu .x-btn-center{padding-right:2px!important;}
-.x-btn-with-menu .x-btn-center em{display:block;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat right 0;padding-right:10px;}
-.x-btn-text-icon .x-btn-with-menu .x-btn-center em{display:block;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat right 3px;padding-right:10px;}
-.x-btn-pressed .x-btn-left{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -63px;}
-.x-btn-pressed .x-btn-right{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -84px;}
-.x-btn-pressed .x-btn-center{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) repeat-x 0 -126px;}
-
-.x-toolbar{border-color:#a9bfd3;border-style:solid;border-width:0 0 1px 0;display:block;padding:2px;background:#d0def0 url(../js/ext/resources/images/default/toolbar/bg.gif) repeat-x top left;position:relative;zoom:1;}
-.x-toolbar .x-item-disabled .x-btn-icon{opacity:.35;-moz-opacity:.35;filter:alpha(opacity=35);}
-.x-toolbar td{vertical-align:middle;}
-.mso .x-toolbar,.x-grid-mso .x-toolbar{border:0 none;background:url(../js/ext/resources/images/default/grid/mso-hd.gif);}
-.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial,sans;}
-.x-toolbar .x-item-disabled{color:gray;cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}
-.x-toolbar .x-item-disabled *{color:gray;cursor:default;}
-.x-toolbar .x-btn-left{background:none;}
-.x-toolbar .x-btn-right{background:none;}
-.x-toolbar .x-btn-center{background:none;padding:0;}
-.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{padding-right:2px;}
-.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{padding-right:0;}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{padding:0 2px;}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{width:12px;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;}
-.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button{width:12px;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;}
-.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button{background-position:0 -47px;}
-.x-toolbar .x-btn-over .x-btn-left{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;}
-.x-toolbar .x-btn-over .x-btn-right{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;}
-.x-toolbar .x-btn-over .x-btn-center{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;}
-.x-toolbar .x-btn-click .x-btn-left,.x-toolbar .x-btn-pressed .x-btn-left,.x-toolbar .x-btn-menu-active .x-btn-left{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;}
-.x-toolbar .x-btn-click .x-btn-right,.x-toolbar .x-btn-pressed .x-btn-right,.x-toolbar .x-btn-menu-active .x-btn-right{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;}
-.x-toolbar .x-btn-click .x-btn-center,.x-toolbar .x-btn-pressed .x-btn-center,.x-toolbar .x-btn-menu-active .x-btn-center{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;}
-.x-toolbar .x-btn-with-menu .x-btn-center em{padding-right:8px;}
-.x-toolbar .ytb-text{padding:2px;}
-.x-toolbar .ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-blue-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px 0;border:0;}
-.x-toolbar .ytb-spacer{width:2px;}
-.x-tbar-page-number{width:24px;height:14px;}
-.x-tbar-page-first{background-image:url(../js/ext/resources/images/default/grid/page-first.gif)!important;}
-.x-tbar-loading{background-image:url(../js/ext/resources/images/default/grid/done.gif)!important;}
-.x-tbar-page-last{background-image:url(../js/ext/resources/images/default/grid/page-last.gif)!important;}
-.x-tbar-page-next{background-image:url(../js/ext/resources/images/default/grid/page-next.gif)!important;}
-.x-tbar-page-prev{background-image:url(../js/ext/resources/images/default/grid/page-prev.gif)!important;}
-.x-item-disabled .x-tbar-loading{background-image:url(../js/ext/resources/images/default/grid/loading.gif)!important;}
-.x-item-disabled .x-tbar-page-first{background-image:url(../js/ext/resources/images/default/grid/page-first-disabled.gif)!important;}
-.x-item-disabled .x-tbar-page-last{background-image:url(../js/ext/resources/images/default/grid/page-last-disabled.gif)!important;}
-.x-item-disabled .x-tbar-page-next{background-image:url(../js/ext/resources/images/default/grid/page-next-disabled.gif)!important;}
-.x-item-disabled .x-tbar-page-prev{background-image:url(../js/ext/resources/images/default/grid/page-prev-disabled.gif)!important;}
-.x-paging-info{position:absolute;top:5px;right:8px;color:#444;}
-
-.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;background:white;filter:alpha(opacity=0);opacity:0;zoom:1;}
-.x-resizable-handle-east{width:6px;cursor:e-resize;right:0;top:0;height:100%;}
-.ext-ie .x-resizable-handle-east{margin-right:-1px;}
-.x-resizable-handle-south{width:100%;cursor:s-resize;left:0;bottom:0;height:6px;}
-.ext-ie .x-resizable-handle-south{margin-bottom:-1px;}
-.x-resizable-handle-west{width:6px;cursor:w-resize;left:0;top:0;height:100%;}
-.x-resizable-handle-north{width:100%;cursor:n-resize;left:0;top:0;height:6px;}
-.x-resizable-handle-southeast{width:6px;cursor:se-resize;right:0;bottom:0;height:6px;z-index:101;}
-.x-resizable-handle-northwest{width:6px;cursor:nw-resize;left:0;top:0;height:6px;z-index:101;}
-.x-resizable-handle-northeast{width:6px;cursor:ne-resize;right:0;top:0;height:6px;z-index:101;}
-.x-resizable-handle-southwest{width:6px;cursor:sw-resize;left:0;bottom:0;height:6px;z-index:101;}
-.x-resizable-over .x-resizable-handle,.x-resizable-pinned .x-resizable-handle{filter:alpha(opacity=100);opacity:1;}
-.x-resizable-over .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-east{background:url(../js/ext/resources/images/default/sizer/e-handle.gif);background-position:left;}
-.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-west{background:url(../js/ext/resources/images/default/sizer/e-handle.gif);background-position:left;}
-.x-resizable-over .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-south{background:url(../js/ext/resources/images/default/sizer/s-handle.gif);background-position:top;}
-.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-north{background:url(../js/ext/resources/images/default/sizer/s-handle.gif);background-position:top;}
-.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background:url(../js/ext/resources/images/default/sizer/se-handle.gif);background-position:top left;}
-.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background:url(../js/ext/resources/images/default/sizer/nw-handle.gif);background-position:bottom right;}
-.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background:url(../js/ext/resources/images/default/sizer/ne-handle.gif);background-position:bottom left;}
-.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background:url(../js/ext/resources/images/default/sizer/sw-handle.gif);background-position:top right;}
-.x-resizable-proxy{border:1px dashed #3b5a82;position:absolute;overflow:hidden;display:none;left:0;top:0;z-index:50000;}
-.x-resizable-overlay{width:100%;height:100%;display:none;position:absolute;left:0;top:0;background:white;z-index:200000;-moz-opacity:0;opacity:0;filter:alpha(opacity=0);}
-
- .x-grid3{position:relative;overflow:hidden;background-color:#fff;}
-.x-grid-panel .x-panel-body{overflow:hidden!important;}
-.x-grid-panel .x-panel-mc .x-panel-body{border:1px solid #99bbe8;}
-.ext-ie .x-grid3 table,.ext-safari .x-grid3 table{table-layout:fixed;}
-.x-grid3-viewport{overflow:hidden;}
-.x-grid3-hd-row td,.x-grid3-row td,.x-grid3-summary-row td{font:normal 100% arial,sans;-moz-outline:none;-moz-user-focus:normal;}
-.x-grid3-row td,.x-grid3-summary-row td{line-height:13px;vertical-align:top;padding-left:1px;padding-right:1px;-moz-user-select:none;}
-.x-grid3-hd-row td{line-height:15px;vertical-align:middle;border-left:1px solid #eee;border-right:1px solid #d0d0d0;}
-.x-grid3-hd-row .x-grid3-marker-hd{padding:3px;}
-.x-grid3-row .x-grid3-marker{padding:3px;}
-.x-grid3-cell-inner,.x-grid3-hd-inner{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding:3px 3px 3px 5px;white-space:nowrap;}
-.x-grid3-hd-inner{position:relative;cursor:inherit;padding:4px 3px 4px 5px;}
-.x-grid3-row-body{white-space:normal;}
-.x-grid3-body-cell{-moz-outline:0 none;outline:0 none;}
-.ext-ie .x-grid3-cell-inner,.ext-ie .x-grid3-hd-inner{width:100%;}
-.ext-strict .x-grid3-cell-inner,.ext-strict .x-grid3-hd-inner{width:auto;}
-.x-grid-row-loading{background:#fff url(../js/ext/resources/images/default/shared/loading-balls.gif) no-repeat center center;}
-.x-grid-page{overflow:hidden;}
-.x-grid3-row{cursor:default;border:1px solid #ededed;border-top-color:#fff;width:100%;}
-.x-grid3-row-alt{background-color:#fafafa;}
-.x-grid3-row-over{border:1px solid #ddd;background:#efefef url(../js/ext/resources/images/default/grid/row-over.gif) repeat-x left top;}
-.x-grid3-resize-proxy{width:1px;left:0;background-color:#777;cursor:e-resize;cursor:col-resize;position:absolute;top:0;height:100px;overflow:hidden;visibility:hidden;border:0 none;z-index:7;}
-.x-grid3-resize-marker{width:1px;left:0;background-color:#777;position:absolute;top:0;height:100px;overflow:hidden;visibility:hidden;border:0 none;z-index:7;}
-.x-grid3-focus{position:absolute;top:0;-moz-outline:0 none;outline:0 none;-moz-user-select:normal;-khtml-user-select:normal;}
-.x-grid3-header{background:#f9f9f9 url(../js/ext/resources/images/default/grid/grid3-hrow.gif) repeat-x 0 bottom;cursor:default;zoom:1;padding:1px 0 0 0;}
-.x-grid3-header-pop{border-left:1px solid #d0d0d0;float:right;clear:none;}
-.x-grid3-header-pop-inner{border-left:1px solid #eee;width:14px;height:19px;background:transparent url(../js/ext/resources/images/default/grid/hd-pop.gif) no-repeat center center;}
-.ext-ie .x-grid3-header-pop-inner{width:15px;}
-.ext-strict .x-grid3-header-pop-inner{width:14px;}
-.x-grid3-header-inner{overflow:hidden;zoom:1;float:left;}
-.x-grid3-header-offset{padding-left:1px;width:10000px;}
-td.x-grid3-hd-over,td.sort-desc,td.sort-asc,td.x-grid3-hd-menu-open{border-left:1px solid #aaccf6;border-right:1px solid #aaccf6;}
-td.x-grid3-hd-over .x-grid3-hd-inner,td.sort-desc .x-grid3-hd-inner,td.sort-asc .x-grid3-hd-inner,td.x-grid3-hd-menu-open .x-grid3-hd-inner{background:#ebf3fd url(../js/ext/resources/images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;}
-.x-grid3-sort-icon{background-repeat:no-repeat;display:none;height:4px;width:13px;margin-left:3px;vertical-align:middle;}
-.sort-asc .x-grid3-sort-icon{background-image:url(../js/ext/resources/images/default/grid/sort_asc.gif);display:inline;}
-.sort-desc .x-grid3-sort-icon{background-image:url(../js/ext/resources/images/default/grid/sort_desc.gif);display:inline;}
-.ext-strict .ext-ie .x-grid3-header-inner{position:relative;}
-.ext-strict .ext-ie6 .x-grid3-hd{position:relative;}
-.ext-strict .ext-ie6 .x-grid3-hd-inner{position:static;}
-.x-grid3-body{zoom:1;}
-.x-grid3-scroller{overflow:auto;zoom:1;position:relative;}
-.x-grid3-cell-text,.x-grid3-hd-text{display:block;padding:3px 5px 3px 5px;-moz-user-select:none;-khtml-user-select:none;color:black;}
-.x-grid3-split{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);background-position:center;background-repeat:no-repeat;cursor:e-resize;cursor:col-resize;display:block;font-size:1px;height:16px;overflow:hidden;position:absolute;top:2px;width:6px;z-index:3;}
-.x-grid3-hd-text{color:#15428b;}
-.x-dd-drag-proxy .x-grid3-hd-inner{background:#ebf3fd url(../js/ext/resources/images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;width:120px;padding:3px;border:1px solid #aaccf6;overflow:hidden;}
-.col-move-top,.col-move-bottom{width:9px;height:9px;position:absolute;top:0;line-height:1px;font-size:1px;overflow:hidden;visibility:hidden;z-index:20000;}
-.col-move-top{background:transparent url(../js/ext/resources/images/default/grid/col-move-top.gif) no-repeat left top;}
-.col-move-bottom{background:transparent url(../js/ext/resources/images/default/grid/col-move-bottom.gif) no-repeat left top;}
-.x-grid3-row-selected{background:#DFE8F6!important;border:1px dotted #a3bae9;}
-.x-grid3-cell-selected{background-color:#B8CFEE!important;color:black;}
-.x-grid3-cell-selected span{color:black!important;}
-.x-grid3-cell-selected .x-grid3-cell-text{color:black;}
-.x-grid3-locked td.x-grid3-row-marker,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{background:#ebeadb url(../js/ext/resources/images/default/grid/grid-hrow.gif) repeat-x 0 bottom!important;vertical-align:middle!important;color:black;padding:0;border-top:1px solid white;border-bottom:none!important;border-right:1px solid #6fa0df!important;text-align:center;}
-.x-grid3-locked td.x-grid3-row-marker div,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{padding:0 4px;color:#15428b!important;text-align:center;}
-.x-grid3-dirty-cell{background:transparent url(../js/ext/resources/images/default/grid/dirty.gif) no-repeat 0 0;}
-.x-grid3-topbar,.x-grid3-bottombar{font:normal 100% arial,sans;overflow:hidden;display:none;zoom:1;position:relative;}
-.x-grid3-topbar .x-toolbar{border-right:0 none;}
-.x-grid3-bottombar .x-toolbar{border-right:0 none;border-bottom:0 none;border-top:1px solid #a9bfd3;}
-.x-props-grid .x-grid3-cell{padding:1px;}
-.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y -16px!important;padding-left:12px;color:black!important;}
-.x-props-grid .x-grid3-body .x-grid3-td-name{padding:1px;padding-right:0;background:white!important;border:0 none;border-right:1px solid #eee;}
-.xg-hmenu-sort-asc .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-asc.gif);}
-.xg-hmenu-sort-desc .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-desc.gif);}
-.xg-hmenu-lock .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-lock.gif);}
-.xg-hmenu-unlock .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-unlock.gif);}
-.x-grid3-col-dd{border:0 none;padding:0;background:transparent;}
-.x-dd-drag-ghost .x-grid3-dd-wrap{padding:1px 3px 3px 1px;}
-.x-grid3-hd{-moz-user-select:none;}
-.x-grid3-hd-btn{display:none;position:absolute;width:14px;background:#c3daf9 url(../js/ext/resources/images/default/grid/grid3-hd-btn.gif) no-repeat left center;right:0;top:0;z-index:2;cursor:pointer;}
-.x-grid3-hd-over .x-grid3-hd-btn,.x-grid3-hd-menu-open .x-grid3-hd-btn{display:block;}
-a.x-grid3-hd-btn:hover{background-position:-14px center;}
-.x-grid3-body .x-grid3-td-expander{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y right;}
-.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner{padding:0!important;height:100%;}
-.x-grid3-row-expander{width:100%;height:18px;background-position:4px 2px;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/grid/row-expand-sprite.gif);}
-.x-grid3-row-collapsed .x-grid3-row-expander{background-position:4px 2px;}
-.x-grid3-row-expanded .x-grid3-row-expander{background-position:-21px 2px;}
-.x-grid3-row-collapsed .x-grid3-row-body{display:none!important;}
-.x-grid3-row-expanded .x-grid3-row-body{display:block!important;}
-.x-grid3-body .x-grid3-td-checker{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y right;}
-.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner,.x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner{padding:0!important;height:100%;}
-.x-grid3-row-checker,.x-grid3-hd-checker{width:100%;height:18px;background-position:2px 2px;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/grid/row-check-sprite.gif);}
-.x-grid3-row .x-grid3-row-checker{background-position:2px 2px;}
-.x-grid3-row-selected .x-grid3-row-checker,.x-grid3-hd-checker-on .x-grid3-hd-checker{background-position:-23px 2px;}
-.x-grid3-hd-checker{background-position:2px 3px;}
-.x-grid3-hd-checker-on .x-grid3-hd-checker{background-position:-23px 3px;}
-.x-grid3-body .x-grid3-td-numberer{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y right;}
-.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner{padding:3px 5px 0 0!important;text-align:right;color:#444;}
-.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer,.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker,.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-sel-bg.gif) repeat-y right;}
-.x-grid3-body .x-grid3-check-col-td .x-grid3-cell-inner{padding:1px 0 0 0!important;}
-.x-grid3-check-col{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/menu/unchecked.gif);}
-.x-grid3-check-col-on{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/menu/checked.gif);}
-.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1;}
-.x-grid-group-hd{border-bottom:2px solid #99bbe8;cursor:pointer;padding-top:6px;}
-.x-grid-group-hd div{background:transparent url(../js/ext/resources/images/default/grid/group-expand-sprite.gif) no-repeat 3px -47px;padding:4px 4px 4px 17px;color:#3764a0;font:bold 100% arial,sans;}
-.x-grid-group-collapsed .x-grid-group-hd div{background-position:3px 3px;}
-.x-grid-group-collapsed .x-grid-group-body{display:none;}
-.x-group-by-icon{background-image:url(../js/ext/resources/images/default/grid/group-by.gif);}
-.x-cols-icon{background-image:url(../js/ext/resources/images/default/grid/columns.gif);}
-.x-show-groups-icon{background-image:url(../js/ext/resources/images/default/grid/group-by.gif);}
-.ext-ie .x-grid3 .x-editor .x-form-text{position:relative;top:-1px;}
-.ext-ie .x-props-grid .x-editor .x-form-text{position:static;top:0;}
-.x-grid-empty{padding:10px;color:gray;font:normal 100% arial,sans;}
-.ext-ie7 .x-grid-panel .x-panel-bbar{position:relative;}
-
-.x-dd-drag-proxy{position:absolute;left:0;top:0;visibility:hidden;z-index:15000;}
-.x-dd-drag-ghost{color:black;font:normal 100% arial,helvetica,sans-serif;-moz-opacity:0.85;opacity:.85;filter:alpha(opacity=85);border-top:1px solid #ddd;border-left:1px solid #ddd;border-right:1px solid #bbb;border-bottom:1px solid #bbb;padding:3px;padding-left:20px;background-color:white;white-space:nowrap;}
-.x-dd-drag-repair .x-dd-drag-ghost{-moz-opacity:0.4;opacity:.4;filter:alpha(opacity=40);border:0 none;padding:0;background-color:transparent;}
-.x-dd-drag-repair .x-dd-drop-icon{visibility:hidden;}
-.x-dd-drop-icon{position:absolute;top:3px;left:3px;display:block;width:16px;height:16px;background-color:transparent;background-position:center;background-repeat:no-repeat;z-index:1;}
-.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-no.gif);}
-.x-dd-drop-ok .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-yes.gif);}
-.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-add.gif);}
-.x-view-selector{position:absolute;left:0;top:0;width:0;background:#c3daf9;border:1px dotted #39b;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);zoom:1;}
-
-.x-tree .x-panel-body{background-color:#fff;}
-.ext-strict .ext-ie .x-tree .x-panel-bwrap{position:relative;overflow:hidden;}
-.x-tree-icon,.x-tree-ec-icon,.x-tree-elbow-line,.x-tree-elbow,.x-tree-elbow-end,.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-repeat:no-repeat;}
-.x-tree-node-collapsed .x-tree-node-icon,.x-tree-node-expanded .x-tree-node-icon,.x-tree-node-leaf .x-tree-node-icon{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-position:center;background-repeat:no-repeat;}
-.ext-ie .x-tree-node-indent img,.ext-ie .x-tree-node-icon,.ext-ie .x-tree-ec-icon{vertical-align:middle!important;}
-.x-tree-node-expanded .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/folder-open.gif);}
-.x-tree-node-leaf .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/leaf.gif);}
-.x-tree-node-collapsed .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/folder.gif);}
-.ext-ie input.x-tree-node-cb{width:15px;height:15px;}
-input.x-tree-node-cb{margin-left:1px;}
-.ext-ie input.x-tree-node-cb{margin-left:0;}
-.x-tree-noicon .x-tree-node-icon{width:0;height:0;}
-.x-tree-node-loading .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/loading.gif)!important;}
-.x-tree-node-loading a span{font-style:italic;color:#444;}
-.ext-ie .x-tree-node-el input{width:15px;height:15px;}
-.x-tree-lines .x-tree-elbow{background-image:url(../js/ext/resources/images/default/tree/elbow.gif);}
-.x-tree-lines .x-tree-elbow-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-plus.gif);}
-.x-tree-lines .x-tree-elbow-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-minus.gif);}
-.x-tree-lines .x-tree-elbow-end{background-image:url(../js/ext/resources/images/default/tree/elbow-end.gif);}
-.x-tree-lines .x-tree-elbow-end-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-plus.gif);}
-.x-tree-lines .x-tree-elbow-end-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-minus.gif);}
-.x-tree-lines .x-tree-elbow-line{background-image:url(../js/ext/resources/images/default/tree/elbow-line.gif);}
-.x-tree-no-lines .x-tree-elbow{background:transparent;}
-.x-tree-no-lines .x-tree-elbow-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-plus-nl.gif);}
-.x-tree-no-lines .x-tree-elbow-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-minus-nl.gif);}
-.x-tree-no-lines .x-tree-elbow-end{background:transparent;}
-.x-tree-no-lines .x-tree-elbow-end-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-plus-nl.gif);}
-.x-tree-no-lines .x-tree-elbow-end-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-minus-nl.gif);}
-.x-tree-no-lines .x-tree-elbow-line{background:transparent;}
-.x-tree-arrows .x-tree-elbow{background:transparent;}
-.x-tree-arrows .x-tree-elbow-plus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat 0 0;}
-.x-tree-arrows .x-tree-elbow-minus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat -16px 0;}
-.x-tree-arrows .x-tree-elbow-end{background:transparent;}
-.x-tree-arrows .x-tree-elbow-end-plus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat 0 0;}
-.x-tree-arrows .x-tree-elbow-end-minus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat -16px 0;}
-.x-tree-arrows .x-tree-elbow-line{background:transparent;}
-.x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus{background-position:-32px 0;}
-.x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus{background-position:-48px 0;}
-.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{background-position:-32px 0;}
-.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{background-position:-48px 0;}
-.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{cursor:pointer;}
-.ext-ie ul.x-tree-node-ct{font-size:0;line-height:0;zoom:1;}
-.x-tree-node{color:black;font:normal 100% arial,sans;white-space:nowrap;}
-.x-tree-node-el{line-height:18px;cursor:pointer;}
-.x-tree-node a,.x-dd-drag-ghost a{text-decoration:none;color:black;-khtml-user-select:none;-moz-user-select:none;-kthml-user-focus:normal;-moz-user-focus:normal;-moz-outline:0 none;outline:0 none;}
-.x-tree-node a span,.x-dd-drag-ghost a span{text-decoration:none;color:black;padding:1px 3px 1px 2px;}
-.x-tree-node .x-tree-node-disabled a span{color:gray!important;}
-.x-tree-node .x-tree-node-disabled .x-tree-node-icon{-moz-opacity:0.5;opacity:.5;filter:alpha(opacity=50);}
-.x-tree-node .x-tree-node-inline-icon{background:transparent;}
-.x-tree-node a:hover,.x-dd-drag-ghost a:hover{text-decoration:none;}
-.x-tree-node div.x-tree-drag-insert-below{border-bottom:1px dotted #36c;}
-.x-tree-node div.x-tree-drag-insert-above{border-top:1px dotted #36c;}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{border-bottom:0 none;}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{border-top:0 none;}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{border-bottom:2px solid #36c;}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{border-top:2px solid #36c;}
-.x-tree-node .x-tree-drag-append a span{background:#ddd;border:1px dotted gray;}
-.x-tree-node .x-tree-node-over{background-color:#eee;}
-.x-tree-node .x-tree-selected{background-color:#d9e8fb;}
-.x-dd-drag-ghost .x-tree-node-indent,.x-dd-drag-ghost .x-tree-ec-icon{display:none!important;}
-.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-add.gif);}
-.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-over.gif);}
-.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-under.gif);}
-.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-between.gif);}
-
-.x-date-picker{border:1px solid #1b376c;border-top:0 none;background:#fff;position:relative;}
-.x-date-picker a{-moz-outline:0 none;outline:0 none;}
-.x-date-inner,.x-date-inner td,.x-date-inner th{border-collapse:separate;}
-.x-date-middle,.x-date-left,.x-date-right{background:url(../js/ext/resources/images/default/shared/hd-sprite.gif) repeat-x 0 -83px;color:#FFF;font:bold 100% arial,sans;overflow:hidden;}
-.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{background:transparent!important;vertical-align:middle;}
-.x-date-middle .x-btn .x-btn-text{color:#fff;}
-.x-date-middle .x-btn-with-menu .x-btn-center em{background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow-light.gif) no-repeat right 0;}
-.x-date-right,.x-date-left{width:18px;}
-.x-date-right{text-align:right;}
-.x-date-middle{padding-top:2px;padding-bottom:2px;}
-.x-date-right a,.x-date-left a{display:block;width:16px;height:16px;background-position:center;background-repeat:no-repeat;cursor:pointer;-moz-opacity:0.6;opacity:.6;filter:alpha(opacity=60);}
-.x-date-right a:hover,.x-date-left a:hover{-moz-opacity:1;opacity:1;filter:alpha(opacity=100);}
-.x-date-right a{background-image:url(../js/ext/resources/images/default/shared/right-btn.gif);margin-right:2px;text-decoration:none!important;}
-.x-date-left a{background-image:url(../js/ext/resources/images/default/shared/left-btn.gif);margin-left:2px;text-decoration:none!important;}
-table.x-date-inner{width:100%;table-layout:fixed;}
-.x-date-inner th{width:25px;}
-.x-date-inner th{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;text-align:right!important;border-bottom:1px solid #a3bad9;font:normal 100% arial,sans;color:#233d6d;cursor:default;padding:0;border-collapse:separate;}
-.x-date-inner th span{display:block;padding:2px;padding-right:7px;}
-.x-date-inner td{border:1px solid #fff;text-align:right;padding:0;}
-.x-date-inner a{padding:2px 5px;display:block;font:normal 100% arial,sans;text-decoration:none;color:black;text-align:right;zoom:1;}
-.x-date-inner .x-date-active{cursor:pointer;color:black;}
-.x-date-inner .x-date-selected a{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;padding:1px 4px;}
-.x-date-inner .x-date-today a{border:1px solid darkred;padding:1px 4px;}
-.x-date-inner .x-date-selected span{font-weight:bold;}
-.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a{color:#aaa;text-decoration:none!important;}
-.x-date-bottom{padding:4px;border-top:1px solid #a3bad9;background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;}
-.x-date-inner a:hover,.x-date-inner .x-date-disabled a:hover{text-decoration:none!important;color:black;background:#ddecfe;}
-.x-date-inner .x-date-disabled a{cursor:default;background:#eee;color:#bbb;}
-.x-date-mmenu{background:#eee!important;}
-.x-date-mmenu .x-menu-item{font-size:10px;padding:1px 24px 1px 4px;white-space:nowrap;color:#000;}
-.x-date-mmenu .x-menu-item .x-menu-item-icon{width:10px;height:10px;margin-right:5px;background-position:center -4px!important;}
-.x-date-mp{position:absolute;left:0;top:0;background:white;display:none;}
-.x-date-mp td{padding:2px;font:normal 100% arial,sans;}
-td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn{border:0 none;text-align:center;vertical-align:middle;width:25%;}
-.x-date-mp-ok{margin-right:3px;}
-.x-date-mp-btns button{text-decoration:none;text-align:center;text-decoration:none!important;background:#083772;color:white;border:1px solid;border-color:#36c #005 #005 #36c;padding:1px 3px 1px;font:normal 100% arial,sans;cursor:pointer;}
-.x-date-mp-btns{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;}
-.x-date-mp-btns td{border-top:1px solid #c5d2df;text-align:center;}
-td.x-date-mp-month a,td.x-date-mp-year a{display:block;padding:2px 4px;text-decoration:none;text-align:center;color:#15428b;}
-td.x-date-mp-month a:hover,td.x-date-mp-year a:hover{color:#15428b;text-decoration:none;cursor:pointer;background:#ddecfe;}
-td.x-date-mp-sel a{padding:1px 3px;background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;}
-.x-date-mp-ybtn a{overflow:hidden;width:15px;height:15px;cursor:pointer;background:transparent url(../js/ext/resources/images/default/panel/tool-sprites.gif) no-repeat;display:block;margin:0 auto;}
-.x-date-mp-ybtn a.x-date-mp-next{background-position:0 -120px;}
-.x-date-mp-ybtn a.x-date-mp-next:hover{background-position:-15px -120px;}
-.x-date-mp-ybtn a.x-date-mp-prev{background-position:0 -105px;}
-.x-date-mp-ybtn a.x-date-mp-prev:hover{background-position:-15px -105px;}
-.x-date-mp-ybtn{text-align:center;}
-td.x-date-mp-sep{border-right:1px solid #c5d2df;}
-
-.x-tip{position:absolute;top:0;left:0;visibility:hidden;z-index:20000;border:0 none;}
-.x-tip .x-tip-close{background-image:url(../js/ext/resources/images/default/qtip/close.gif);height:15px;float:right;width:15px;margin:0 0 2px 2px;cursor:pointer;display:none;}
-.x-tip .x-tip-tc{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -62px;padding-top:3px;overflow:hidden;zoom:1;}
-.x-tip .x-tip-tl{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 0;padding-left:6px;overflow:hidden;zoom:1;}
-.x-tip .x-tip-tr{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right 0;padding-right:6px;overflow:hidden;zoom:1;}
-.x-tip .x-tip-bc{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -121px;height:3px;overflow:hidden;}
-.x-tip .x-tip-bl{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -59px;padding-left:6px;zoom:1;}
-.x-tip .x-tip-br{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right -59px;padding-right:6px;zoom:1;}
-.x-tip .x-tip-mc{border:0 none;font:normal 100% arial,sans;}
-.x-tip .x-tip-ml{background:#fff url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -124px;padding-left:6px;zoom:1;}
-.x-tip .x-tip-mr{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right -124px;padding-right:6px;zoom:1;}
-.ext-ie .x-tip .x-tip-header,.ext-ie .x-tip .x-tip-tc{font-size:0;line-height:0;}
-.x-tip .x-tip-header-text{font:bold 100% arial,sans;padding:0;margin:0 0 2px 0;color:#444;}
-.x-tip .x-tip-body{font:normal 100% arial,sans;margin:0!important;line-height:14px;color:#444;padding:0;}
-.x-tip .x-tip-body .loading-indicator{margin:0;}
-.x-tip-draggable .x-tip-header,.x-tip-draggable .x-tip-header-text{cursor:move;}
-.x-form-invalid-tip .x-tip-tc{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) repeat-x 0 -12px;padding-top:6px;}
-.x-form-invalid-tip .x-tip-tl{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}
-.x-form-invalid-tip .x-tip-tr{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}
-.x-form-invalid-tip .x-tip-bc{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) repeat-x 0 -18px;height:6px;}
-.x-form-invalid-tip .x-tip-bl{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) no-repeat 0 -6px;}
-.x-form-invalid-tip .x-tip-br{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) no-repeat right -6px;}
-.x-form-invalid-tip .x-tip-ml{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}
-.x-form-invalid-tip .x-tip-mr{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}
-.x-form-invalid-tip .x-tip-body{padding:2px;}
-.x-form-invalid-tip .x-tip-body{padding-left:24px;background:transparent url(../js/ext/resources/images/default/form/exclamation.gif) no-repeat 2px 2px;}
-
-.x-menu{border:1px solid #718bb7;z-index:15000;zoom:1;background:#f0f0f0 url(../js/ext/resources/images/default/menu/menu.gif) repeat-y;padding:2px;}
-.x-menu a{text-decoration:none!important;}
-.ext-ie .x-menu{zoom:1;overflow:hidden;}
-.x-menu-list{background:transparent;border:0 none;}
-.x-menu li{line-height:100%;}
-.x-menu li.x-menu-sep-li{font-size:1px;line-height:1px;}
-.x-menu-list-item{font:normal 100% arial,sans;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;display:block;padding:1px;}
-.x-menu-item-arrow{background:transparent url(../js/ext/resources/images/default/menu/menu-parent.gif) no-repeat right;}
-.x-menu-sep{display:block;font-size:1px;line-height:1px;margin:2px 3px;background-color:#e0e0e0;border-bottom:1px solid #fff;overflow:hidden;}
-.x-menu-focus{position:absolute;left:0;top:-5px;width:0;height:0;line-height:1px;}
-.x-menu a.x-menu-item{display:block;line-height:16px;padding:3px 21px 3px 3px;white-space:nowrap;text-decoration:none;color:#222;-moz-outline:0 none;outline:0 none;cursor:pointer;}
-.x-menu-item-active{background:#ebf3fd url(../js/ext/resources/images/default/menu/item-over.gif) repeat-x left bottom;border:1px solid #aaccf6;padding:0;}
-.x-menu-item-active a.x-menu-item{color:#233d6d;}
-.x-menu-item-icon{border:0 none;height:16px;padding:0;vertical-align:top;width:16px;margin:0 8px 0 0;background-position:center;}
-.x-menu-check-item .x-menu-item-icon{background:transparent url(../js/ext/resources/images/default/menu/unchecked.gif) no-repeat center;}
-.x-menu-item-checked .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/menu/checked.gif);}
-.x-menu-group-item .x-menu-item-icon{background:transparent;}
-.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{background:transparent url(../js/ext/resources/images/default/menu/group-checked.gif) no-repeat center;}
-.x-menu-plain{background:#fff!important;}
-.x-menu-date-item{padding:0;}
-.x-menu .x-color-palette,.x-menu .x-date-picker{margin-left:26px;margin-right:4px;}
-.x-menu .x-date-picker{border:1px solid #a3bad9;margin-top:2px;margin-bottom:2px;}
-.x-menu-plain .x-color-palette,.x-menu-plain .x-date-picker{margin:0;border:0 none;}
-.x-date-menu{padding:0!important;}
-.x-cycle-menu .x-menu-item-checked{border:1px dotted #a3bae9!important;background:#DFE8F6;padding:0;}
-
- .x-box-tl{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat 0 0;zoom:1;}
-.x-box-tc{height:8px;background:transparent url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 0;overflow:hidden;}
-.x-box-tr{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat right -8px;}
-.x-box-ml{background:transparent url(../js/ext/resources/images/default/box/l.gif) repeat-y 0;padding-left:4px;overflow:hidden;zoom:1;}
-.x-box-mc{background:#eee url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 -16px;padding:4px 10px;font-family:"Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;color:#393939;font-size:100%;}
-.x-box-mc h3{font-size:14px;font-weight:bold;margin:0 0 4px 0;zoom:1;}
-.x-box-mr{background:transparent url(../js/ext/resources/images/default/box/r.gif) repeat-y right;padding-right:4px;overflow:hidden;}
-.x-box-bl{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat 0 -16px;zoom:1;}
-.x-box-bc{background:transparent url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 -8px;height:8px;overflow:hidden;}
-.x-box-br{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat right -24px;}
-.x-box-tl,.x-box-bl{padding-left:8px;overflow:hidden;}
-.x-box-tr,.x-box-br{padding-right:8px;overflow:hidden;}
-.x-box-blue .x-box-bl,.x-box-blue .x-box-br,.x-box-blue .x-box-tl,.x-box-blue .x-box-tr{background-image:url(../js/ext/resources/images/default/box/corners-blue.gif);}
-.x-box-blue .x-box-bc,.x-box-blue .x-box-mc,.x-box-blue .x-box-tc{background-image:url(../js/ext/resources/images/default/box/tb-blue.gif);}
-.x-box-blue .x-box-mc{background-color:#c3daf9;}
-.x-box-blue .x-box-mc h3{color:#17385b;}
-.x-box-blue .x-box-ml{background-image:url(../js/ext/resources/images/default/box/l-blue.gif);}
-.x-box-blue .x-box-mr{background-image:url(../js/ext/resources/images/default/box/r-blue.gif);}
-
-#x-debug-browser .x-tree .x-tree-node a span{color:#222297;font-size:100%;padding-top:2px;font-family:"monotype","courier new",sans-serif;line-height:18px;}
-#x-debug-browser .x-tree a i{color:#FF4545;font-style:normal;}
-#x-debug-browser .x-tree a em{color:#999;}
-#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{background:#c3daf9;}
-#x-debug-browser .x-tool-toggle{background-position:0 -75px;}
-#x-debug-browser .x-tool-toggle-over{background-position:-15px -75px;}
-#x-debug-browser.x-panel-collapsed .x-tool-toggle{background-position:0 -60px;}
-#x-debug-browser.x-panel-collapsed .x-tool-toggle-over{background-position:-15px -60px;}
-
-.x-combo-list{border:1px solid #98c0f4;background:#ddecfe;zoom:1;overflow:hidden;}
-.x-combo-list-inner{overflow:auto;background:white;position:relative;zoom:1;overflow-x:hidden;}
-.x-combo-list-hd{font:bold 100% arial,sans;color:#15428b;background-image:url(../js/ext/resources/images/default/layout/panel-title-light-bg.gif);border-bottom:1px solid #98c0f4;padding:3px;}
-.x-resizable-pinned .x-combo-list-inner{border-bottom:1px solid #98c0f4;}
-.x-combo-list-item{font:normal 100% arial,sans;padding:2px;border:1px solid #fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
-.x-combo-list .x-combo-selected{border:1px dotted #a3bae9!important;background:#DFE8F6;cursor:pointer;}
-.x-combo-noedit{cursor:pointer;}
-.x-combo-list .x-toolbar{border-top:1px solid #98c0f4;border-bottom:0 none;}
-.x-combo-list-small .x-combo-list-item{font:normal 100% arial,sans;}
-
-.x-panel{border-style:solid;border-color:#99bbe8;border-width:0;}
-.x-panel-header{overflow:hidden;zoom:1;color:#15428b;font:bold 100% arial,sans;padding:5px 3px 4px 5px;border:1px solid #99bbe8;line-height:15px;background:transparent url(../js/ext/resources/images/default/panel/white-top-bottom.gif) repeat-x 0 -1px;}
-.x-panel-body{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;background:white;position:relative;}
-.x-panel-bbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}
-.x-panel-tbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}
-.x-panel-tbar-noheader .x-toolbar,.x-panel-mc .x-panel-tbar .x-toolbar{border-top:1px solid #99bbe8;border-bottom:0 none;}
-.x-panel-body-noheader,.x-panel-mc .x-panel-body{border-top:1px solid #99bbe8;}
-.x-panel-header{overflow:hidden;zoom:1;}
-.x-panel-tl .x-panel-header{color:#15428b;font:bold 100% arial,sans;padding:5px 0 4px 0;border:0 none;background:transparent;}
-.x-panel-tl .x-panel-icon,.x-window-tl .x-panel-icon{padding-left:20px!important;background-repeat:no-repeat;background-position:0 4px;zoom:1;}
-.x-panel-inline-icon{width:16px;height:16px;background-repeat:no-repeat;background-position:0 0;vertical-align:middle;margin-right:4px;margin-top:-1px;margin-bottom:-1px;}
-.x-panel-tc{background:transparent url(../js/ext/resources/images/default/panel/top-bottom.gif) repeat-x 0 0;overflow:hidden;}
-.ext-strict .ext-ie7 .x-panel-tc{overflow:visible;}
-.x-panel-tl{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat 0 0;padding-left:6px;zoom:1;border-bottom:1px solid #99bbe8;}
-.x-panel-tr{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat right 0;zoom:1;padding-right:6px;}
-.x-panel-bc{background:transparent url(../js/ext/resources/images/default/panel/top-bottom.gif) repeat-x 0 bottom;zoom:1;}
-.x-panel-bc .x-panel-footer{zoom:1;}
-.x-panel-bl{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat 0 bottom;padding-left:6px;zoom:1;}
-.x-panel-br{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat right bottom;padding-right:6px;zoom:1;}
-.x-panel-mc{border:0 none;padding:0;margin:0;font:normal 100% arial,sans;padding-top:6px;background:#dfe8f6;}
-.x-panel-mc .x-panel-body{background:transparent;border:0 none;}
-.x-panel-ml{background:#fff url(../js/ext/resources/images/default/panel/left-right.gif) repeat-y 0 0;padding-left:6px;zoom:1;}
-.x-panel-mr{background:transparent url(../js/ext/resources/images/default/panel/left-right.gif) repeat-y right 0;padding-right:6px;zoom:1;}
-.x-panel-bc .x-panel-footer{padding-bottom:6px;}
-.x-panel-nofooter .x-panel-bc{height:6px;font-size:0;line-height:0;}
-.x-panel-bwrap{overflow:hidden;zoom:1;}
-.x-panel-body{overflow:hidden;zoom:1;}
-.x-panel-collapsed .x-resizable-handle{display:none;}
-.ext-gecko .x-panel-animated div{overflow:hidden!important;}
-.x-plain-body{overflow:hidden;}
-.x-plain-bbar .x-toolbar{overflow:hidden;padding:2px;}
-.x-plain-tbar .x-toolbar{overflow:hidden;padding:2px;}
-.x-plain-bwrap{overflow:hidden;zoom:1;}
-.x-plain{overflow:hidden;}
-.x-tool{overflow:hidden;width:15px;height:15px;float:right;cursor:pointer;background:transparent url(../js/ext/resources/images/default/panel/tool-sprites.gif) no-repeat;margin-left:2px;}
-.x-tool-toggle{background-position:0 -60px;}
-.x-tool-toggle-over{background-position:-15px -60px;}
-.x-panel-collapsed .x-tool-toggle{background-position:0 -75px;}
-.x-panel-collapsed .x-tool-toggle-over{background-position:-15px -75px;}
-.x-tool-close{background-position:0 -0;}
-.x-tool-close-over{background-position:-15px 0;}
-.x-tool-minimize{background-position:0 -15px;}
-.x-tool-minimize-over{background-position:-15px -15px;}
-.x-tool-maximize{background-position:0 -30px;}
-.x-tool-maximize-over{background-position:-15px -30px;}
-.x-tool-restore{background-position:0 -45px;}
-.x-tool-restore-over{background-position:-15px -45px;}
-.x-tool-gear{background-position:0 -90px;}
-.x-tool-gear-over{background-position:-15px -90px;}
-.x-tool-pin{background-position:0 -135px;}
-.x-tool-pin-over{background-position:-15px -135px;}
-.x-tool-unpin{background-position:0 -150px;}
-.x-tool-unpin-over{background-position:-15px -150px;}
-.x-tool-right{background-position:0 -165px;}
-.x-tool-right-over{background-position:-15px -165px;}
-.x-tool-left{background-position:0 -180px;}
-.x-tool-left-over{background-position:-15px -180px;}
-.x-tool-up{background-position:0 -210px;}
-.x-tool-up-over{background-position:-15px -210px;}
-.x-tool-down{background-position:0 -195px;}
-.x-tool-down-over{background-position:-15px -195px;}
-.x-tool-refresh{background-position:0 -225px;}
-.x-tool-refresh-over{background-position:-15px -225px;}
-.x-tool-minus{background-position:0 -255px;}
-.x-tool-minus-over{background-position:-15px -255px;}
-.x-tool-plus{background-position:0 -240px;}
-.x-tool-plus-over{background-position:-15px -240px;}
-.x-tool-search{background-position:0 -270px;}
-.x-tool-search-over{background-position:-15px -270px;}
-.x-tool-save{background-position:0 -285px;}
-.x-tool-save-over{background-position:-15px -285px;}
-.x-tool-help{background-position:0 -300px;}
-.x-tool-help-over{background-position:-15px -300px;}
-.x-tool-print{background-position:0 -315px;}
-.x-tool-print-over{background-position:-15px -315px;}
-.x-panel-ghost{background:#cbddf3;z-index:12000;overflow:hidden;position:absolute;left:0;top:0;opacity:.65;-moz-opacity:.65;filter:alpha(opacity=65);}
-.x-panel-ghost ul{margin:0;padding:0;overflow:hidden;font-size:0;line-height:0;border:1px solid #99bbe8;border-top:0 none;display:block;}
-.x-panel-ghost *{cursor:move!important;}
-.x-panel-dd-spacer{border:2px dashed #99bbe8;}
-.x-panel-btns-ct{padding:5px;}
-.x-panel-btns-ct .x-btn{float:right;clear:none;}
-.x-panel-btns-ct .x-panel-btns td{border:0;padding:0;}
-.x-panel-btns-ct .x-panel-btns-right table{float:right;clear:none;}
-.x-panel-btns-ct .x-panel-btns-left table{float:left;clear:none;}
-.x-panel-btns-ct .x-panel-btns-center{text-align:center;}
-.x-panel-btns-ct .x-panel-btns-center table{margin:0 auto;}
-.x-panel-btns-ct table td.x-panel-btn-td{padding:3px;}
-.x-panel-btns-ct .x-btn-focus .x-btn-left{background-position:0 -147px;}
-.x-panel-btns-ct .x-btn-focus .x-btn-right{background-position:0 -168px;}
-.x-panel-btns-ct .x-btn-focus .x-btn-center{background-position:0 -189px;}
-.x-panel-btns-ct .x-btn-over .x-btn-left{background-position:0 -63px;}
-.x-panel-btns-ct .x-btn-over .x-btn-right{background-position:0 -84px;}
-.x-panel-btns-ct .x-btn-over .x-btn-center{background-position:0 -105px;}
-.x-panel-btns-ct .x-btn-click .x-btn-center{background-position:0 -126px;}
-.x-panel-btns-ct .x-btn-click .x-btn-right{background-position:0 -84px;}
-.x-panel-btns-ct .x-btn-click .x-btn-left{background-position:0 -63px;}
-
-.x-window{zoom:1;}
-.x-window .x-resizable-handle{opacity:0;-moz-opacity:0;filter:alpha(opacity=0);}
-.x-window-proxy{background:#C7DFFC;border:1px solid #99bbe8;z-index:12000;overflow:hidden;position:absolute;left:0;top:0;display:none;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);}
-.x-window-header{overflow:hidden;zoom:1;}
-.x-window-bwrap{z-index:1;position:relative;zoom:1;}
-.x-window-tl .x-window-header{color:#15428b;font:bold 100% arial,sans;padding:5px 0 4px 0;}
-.x-window-header-text{cursor:pointer;}
-.x-window-tc{background:transparent url(../js/ext/resources/images/default/window/top-bottom.png) repeat-x 0 0;overflow:hidden;zoom:1;}
-.x-window-tl{background:transparent url(../js/ext/resources/images/default/window/left-corners.png) no-repeat 0 0;padding-left:6px;zoom:1;z-index:1;position:relative;}
-.x-window-tr{background:transparent url(../js/ext/resources/images/default/window/right-corners.png) no-repeat right 0;padding-right:6px;}
-.x-window-bc{background:transparent url(../js/ext/resources/images/default/window/top-bottom.png) repeat-x 0 bottom;zoom:1;}
-.x-window-bc .x-window-footer{padding-bottom:6px;zoom:1;font-size:0;line-height:0;}
-.x-window-bl{background:transparent url(../js/ext/resources/images/default/window/left-corners.png) no-repeat 0 bottom;padding-left:6px;zoom:1;}
-.x-window-br{background:transparent url(../js/ext/resources/images/default/window/right-corners.png) no-repeat right bottom;padding-right:6px;zoom:1;}
-.x-window-mc{border:1px solid #99bbe8;padding:0;margin:0;font:normal 100% arial,sans;background:#dfe8f6;}
-.x-window-ml{background:transparent url(../js/ext/resources/images/default/window/left-right.png) repeat-y 0 0;padding-left:6px;zoom:1;}
-.x-window-mr{background:transparent url(../js/ext/resources/images/default/window/left-right.png) repeat-y right 0;padding-right:6px;zoom:1;}
-.x-panel-nofooter .x-window-bc{height:6px;}
-.x-window-body{overflow:hidden;}
-.x-window-bwrap{overflow:hidden;}
-.x-window-maximized .x-window-bl,.x-window-maximized .x-window-br,.x-window-maximized .x-window-ml,.x-window-maximized .x-window-mr,.x-window-maximized .x-window-tl,.x-window-maximized .x-window-tr{padding:0;}
-.x-window-maximized .x-window-footer{padding-bottom:0;}
-.x-window-maximized .x-window-tc{padding-left:3px;padding-right:3px;background-color:white;}
-.x-window-maximized .x-window-mc{border-left:0 none;border-right:0 none;}
-.x-window-tbar .x-toolbar,.x-window-bbar .x-toolbar{border-left:0 none;border-right:0 none;}
-.x-window-bbar .x-toolbar{border-top:1px solid #99bbe8;border-bottom:0 none;}
-.x-window-draggable,.x-window-draggable .x-window-header-text{cursor:move;}
-.x-window-maximized .x-window-draggable,.x-window-maximized .x-window-draggable .x-window-header-text{cursor:default;}
-.x-window-body{background:transparent;}
-.x-panel-ghost .x-window-tl{border-bottom:1px solid #99bbe8;}
-.x-panel-collapsed .x-window-tl{border-bottom:1px solid #84a0c4;}
-.x-window-maximized-ct{overflow:hidden;}
-.x-window-maximized .x-resizable-handle{display:none;}
-.x-window-sizing-ghost ul{border:0 none!important;}
-.x-dlg-focus{-moz-outline:0 none;outline:0 none;width:0;height:0;overflow:hidden;position:absolute;top:0;left:0;}
-.x-dlg-mask{z-index:10000;display:none;position:absolute;top:0;left:0;-moz-opacity:0.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;}
-body.ext-ie6.x-body-masked select{visibility:hidden;}
-body.ext-ie6.x-body-masked .x-window select{visibility:visible;}
-.x-window-plain .x-window-mc{background:#CAD9EC;border-right:1px solid #DFE8F6;border-bottom:1px solid #DFE8F6;border-top:1px solid #a3bae9;border-left:1px solid #a3bae9;}
-.x-window-plain .x-window-body{border-left:1px solid #DFE8F6;border-top:1px solid #DFE8F6;border-bottom:1px solid #a3bae9;border-right:1px solid #a3bae9;background:transparent!important;}
-body.x-body-masked .x-window-plain .x-window-mc{background:#C7D6E9;}
-
-.x-html-editor-wrap{border:1px solid #a9bfd3;background:white;}
-.x-html-editor-tb .x-btn-text{background:transparent url(../js/ext/resources/images/default/editor/tb-sprite.gif) no-repeat;}
-.x-html-editor-tb .x-edit-bold .x-btn-text{background-position:0 0;}
-.x-html-editor-tb .x-edit-italic .x-btn-text{background-position:-16px 0;}
-.x-html-editor-tb .x-edit-underline .x-btn-text{background-position:-32px 0;}
-.x-html-editor-tb .x-edit-forecolor .x-btn-text{background-position:-160px 0;}
-.x-html-editor-tb .x-edit-backcolor .x-btn-text{background-position:-176px 0;}
-.x-html-editor-tb .x-edit-justifyleft .x-btn-text{background-position:-112px 0;}
-.x-html-editor-tb .x-edit-justifycenter .x-btn-text{background-position:-128px 0;}
-.x-html-editor-tb .x-edit-justifyright .x-btn-text{background-position:-144px 0;}
-.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text{background-position:-80px 0;}
-.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text{background-position:-96px 0;}
-.x-html-editor-tb .x-edit-increasefontsize .x-btn-text{background-position:-48px 0;}
-.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text{background-position:-64px 0;}
-.x-html-editor-tb .x-edit-sourceedit .x-btn-text{background-position:-192px 0;}
-.x-html-editor-tb .x-edit-createlink .x-btn-text{background-position:-208px 0;}
-.x-html-editor-tip .x-tip-bd .x-tip-bd-inner{padding:5px;padding-bottom:1px;}
-.x-html-editor-tb .x-toolbar{position:static!important;}
-
-.x-panel-noborder .x-panel-body-noborder{border-width:0;}
-.x-panel-noborder .x-panel-header-noborder{border-width:0;border-bottom:1px solid #99bbe8;}
-.x-panel-noborder .x-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #99bbe8;}
-.x-panel-noborder .x-panel-bbar-noborder .x-toolbar{border-width:0;border-top:1px solid #99bbe8;}
-.x-window-noborder .x-window-mc{border-width:0;}
-.x-window-plain .x-window-body-noborder{border-width:0;}
-.x-tab-panel-noborder .x-tab-panel-body-noborder{border-width:0;}
-.x-tab-panel-noborder .x-tab-panel-header-noborder{border-top-width:0;border-left-width:0;border-right-width:0;}
-.x-tab-panel-noborder .x-tab-panel-footer-noborder{border-bottom-width:0;border-left-width:0;border-right-width:0;}
-.x-tab-panel-bbar-noborder .x-toolbar{border-width:0;border-top:1px solid #99bbe8;}
-.x-tab-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #99bbe8;}
-
-.x-border-layout-ct{background:#dfe8f6;}
-.x-border-panel{position:absolute;left:0;top:0;}
-.x-tool-collapse-south{background-position:0 -195px;}
-.x-tool-collapse-south-over{background-position:-15px -195px;}
-.x-tool-collapse-north{background-position:0 -210px;}
-.x-tool-collapse-north-over{background-position:-15px -210px;}
-.x-tool-collapse-west{background-position:0 -180px;}
-.x-tool-collapse-west-over{background-position:-15px -180px;}
-.x-tool-collapse-east{background-position:0 -165px;}
-.x-tool-collapse-east-over{background-position:-15px -165px;}
-.x-tool-expand-south{background-position:0 -210px;}
-.x-tool-expand-south-over{background-position:-15px -210px;}
-.x-tool-expand-north{background-position:0 -195px;}
-.x-tool-expand-north-over{background-position:-15px -195px;}
-.x-tool-expand-west{background-position:0 -165px;}
-.x-tool-expand-west-over{background-position:-15px -165px;}
-.x-tool-expand-east{background-position:0 -180px;}
-.x-tool-expand-east-over{background-position:-15px -180px;}
-.x-tool-expand-north,.x-tool-expand-south{float:right;margin:3px;}
-.x-tool-expand-east,.x-tool-expand-west{float:none;margin:3px auto;}
-.x-accordion-hd .x-tool-toggle{background-position:0 -255px;}
-.x-accordion-hd .x-tool-toggle-over{background-position:-15px -255px;}
-.x-panel-collapsed .x-accordion-hd .x-tool-toggle{background-position:0 -240px;}
-.x-panel-collapsed .x-accordion-hd .x-tool-toggle-over{background-position:-15px -240px;}
-.x-accordion-hd{color:#222;padding-top:4px;padding-bottom:3px;border-top:0 none;font-weight:normal;background:transparent url(../js/ext/resources/images/default/panel/light-hd.gif) repeat-x 0 -9px;}
-.x-layout-collapsed{position:absolute;left:-10000px;top:-10000px;visibility:hidden;background-color:#d2e0f2;width:20px;height:20px;overflow:hidden;border:1px solid #98c0f4;z-index:20;}
-.ext-border-box .x-layout-collapsed{width:22px;height:22px;}
-.x-layout-collapsed-over{cursor:pointer;background-color:#d9e8fb;}
-.x-layout-collapsed-west .x-layout-collapsed-tools,.x-layout-collapsed-east .x-layout-collapsed-tools{position:absolute;top:0;left:0;width:20px;height:20px;}
-.x-layout-split{position:absolute;height:5px;width:5px;line-height:1px;font-size:1px;z-index:3;background-color:transparent;}
-.x-layout-split-h{background-image:url(../js/ext/resources/images/default/s.gif);background-position:left;}
-.x-layout-split-v{background-image:url(../js/ext/resources/images/default/s.gif);background-position:top;}
-.x-column-layout-ct{overflow:hidden;zoom:1;}
-.x-column{float:left;padding:0;margin:0;overflow:hidden;zoom:1;}
-.x-layout-mini{position:absolute;top:0;left:0;display:block;width:5px;height:35px;cursor:pointer;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);}
-.x-layout-mini-over,.x-layout-collapsed-over .x-layout-mini{opacity:1;-moz-opacity:1;filter:none;}
-.x-layout-split-west .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-left.gif);}
-.x-layout-split-east .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-right.gif);}
-.x-layout-split-north .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-top.gif);}
-.x-layout-split-south .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-bottom.gif);}
-.x-layout-cmini-west .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-right.gif);}
-.x-layout-cmini-east .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-left.gif);}
-.x-layout-cmini-north .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-bottom.gif);}
-.x-layout-cmini-south .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-top.gif);}
-.x-layout-cmini-west,.x-layout-cmini-east{border:0 none;width:5px!important;padding:0;background:transparent;}
-.x-layout-cmini-north,.x-layout-cmini-south{border:0 none;height:5px!important;padding:0;background:transparent;}
-.x-viewport,.x-viewport body{margin:0;padding:0;border:0 none;overflow:hidden;height:100%;}
-.x-abs-layout-item{position:absolute;left:0;top:0;}
-.ext-ie input.x-abs-layout-item,.ext-ie textarea.x-abs-layout-item{margin:0;}
-
-.x-progress-wrap{border:1px solid #6593cf;overflow:hidden;}
-.x-progress-inner{height:18px;background:#e0e8f3 url(../js/ext/resources/images/default/qtip/bg.gif) repeat-x;position:relative;}
-.x-progress-bar{height:18px;float:left;width:0;background:#9CBFEE url( ../js/ext/resources/images/default/progress/progress-bg.gif ) repeat-x left center;border-top:1px solid #D1E4FD;border-bottom:1px solid #7FA9E4;border-right:1px solid #7FA9E4;}
-.x-progress-text{font-size:100%;font-weight:bold;color:#fff;padding:1px 5px;overflow:hidden;position:absolute;left:0;text-align:center;}
-.x-progress-text-back{color:#396095;line-height:16px;}
-.ext-ie .x-progress-text-back{line-height:15px;}
-
-.x-window-dlg .x-window-body{border:0 none!important;padding:5px 10px;overflow:hidden!important;}
-.x-window-dlg .x-window-mc{border:0 none!important;}
-.x-window-dlg .ext-mb-text,.x-window-dlg .x-window-header-text{font-size:100%;}
-.x-window-dlg .ext-mb-input{margin-top:4px;width:95%;}
-.x-window-dlg .ext-mb-textarea{margin-top:4px;font:normal 100% arial,sans;}
-.x-window-dlg .x-progress-wrap{margin-top:4px;}
-.ext-ie .x-window-dlg .x-progress-wrap{margin-top:6px;}
-.x-window-dlg .x-msg-box-wait{background:transparent url(../js/ext/resources/images/default/grid/loading.gif) no-repeat left;display:block;width:300px;padding-left:18px;line-height:18px;}
-.x-window-dlg .ext-mb-icon{float:left;width:47px;height:32px;}
-.ext-ie .x-window-dlg .ext-mb-icon{width:44px;}
-.x-window-dlg .ext-mb-info{background:transparent url(../js/ext/resources/images/default/window/icon-info.gif) no-repeat top left;}
-.x-window-dlg .ext-mb-warning{background:transparent url(../js/ext/resources/images/default/window/icon-warning.gif) no-repeat top left;}
-.x-window-dlg .ext-mb-question{background:transparent url(../js/ext/resources/images/default/window/icon-question.gif) no-repeat top left;}
-.x-window-dlg .ext-mb-error{background:transparent url(../js/ext/resources/images/default/window/icon-error.gif) no-repeat top left;}
-
-
-
-/*
- * Ext JS Library 2.0.2
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing(a)extjs.com
- *
- * http://extjs.com/license
- */
-
-.x-panel {
- border-style: solid;
- border-color: #d0d0d0;
-}
-.x-panel-header {
- color:#333;
- border:1px solid #d0d0d0;
- background-image:url(../js/ext/resources/images/gray/panel/white-top-bottom.gif);
-}
-
-.x-panel-body {
- border-color:#d0d0d0;
-}
-
-.x-panel-bbar .x-toolbar {
- border-color:#d0d0d0;
-}
-
-.x-panel-tbar .x-toolbar {
- border-color:#d0d0d0;
-}
-
-.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar {
- border-color:#d0d0d0;
-}
-.x-panel-body-noheader, .x-panel-mc .x-panel-body {
- border-color:#d0d0d0;
-}
-.x-panel-tl .x-panel-header {
- color:#333;
-}
-.x-panel-tc {
- background-image:url(../js/ext/resources/images/gray/panel/top-bottom.gif);
-}
-.x-panel-tl {
- background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);
- border-color:#d0d0d0;
-}
-.x-panel-tr {
- background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);
-}
-.x-panel-bc {
- background-image:url(../js/ext/resources/images/gray/panel/top-bottom.gif);
-}
-.x-panel-bl {
- background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);
-}
-.x-panel-br {
- background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);
-}
-.x-panel-mc {
- background:#f1f1f1;
-}
-.x-panel-mc .x-panel-body {
- background:transparent;
- border: 0 none;
-}
-.x-panel-ml {
- background-image:url(../js/ext/resources/images/gray/panel/left-right.gif);
-}
-.x-panel-mr {
- background-image:url(../js/ext/resources/images/gray/panel/left-right.gif);
-}
-
-/* Tools */
-.x-tool {
- background-image:url(../js/ext/resources/images/gray/panel/tool-sprites.gif);
-}
-
-/* Ghosting */
-.x-panel-ghost {
- background:#e0e0e0;
-}
-
-.x-panel-ghost ul {
- border-color:#b0b0b0;
-}
-
-.x-grid-panel .x-panel-mc .x-panel-body {
- border:1px solid #d0d0d0;
-}
-
-/* Buttons */
-
-.x-btn-left{
- background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);
-}
-.x-btn-right{
- background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);
-}
-.x-btn-center{
- background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);
-}
-
-/* Layout classes */
-
-.x-border-layout-ct {
- background:#f0f0f0;
-}
-
-.x-accordion-hd {
- background-image:url(../js/ext/resources/images/gray/panel/light-hd.gif);
-}
-
-.x-layout-collapsed{
- background-color:#eee;
- border-color:#e0e0e0;
-}
-.x-layout-collapsed-over{
- background-color:#fbfbfb;
-}
-
-
-/* qtips */
-.x-tip .x-tip-top {
- background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-left {
- background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-right {
- background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft {
- background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-left {
- background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-right {
- background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-left {
- background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-right {
- background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
-}
-
-/* Toolbars */
-
-.x-toolbar{
- border-color:#d0d0d0;
- background:#f0f4f5 url(../js/ext/resources/images/gray/toolbar/bg.gif) repeat-x top left;
-}
-.x-toolbar button {
- color:#444;
-}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button {
- background-image:url(../js/ext/resources/images/gray/toolbar/btn-arrow.gif);
-}
-.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
- background-image:url(../js/ext/resources/images/gray/toolbar/btn-arrow.gif);
-}
-.x-toolbar .x-btn-over .x-btn-left{
- background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
-}
-.x-toolbar .x-btn-over .x-btn-right{
- background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
-}
-.x-toolbar .x-btn-over .x-btn-center{
- background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
-}
-.x-toolbar .x-btn-over button {
- color:#111;
-}
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
- background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
- background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
-}
-
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
- background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
-}
-.x-toolbar .ytb-sep {
- background-image: url(../js/ext/resources/images/default/grid/grid-split.gif);
-}
-
-/* Tabs */
-
-.x-tab-panel-header, .x-tab-panel-footer {
- background: #EAEAEA;
- border-color:#d0d0d0;
-}
-
-
-.x-tab-panel-header {
- border-color:#d0d0d0;
-}
-
-.x-tab-panel-footer {
- border-color:#d0d0d0;
-}
-
-ul.x-tab-strip-top{
- background:#dbdbdb url(../js/ext/resources/images/gray/tabs/tab-strip-bg.gif) repeat-x left top;
- border-color:#d0d0d0;
- padding-top: 2px;
-}
-
-ul.x-tab-strip-bottom{
- background-image:url(../js/ext/resources/images/gray/tabs/tab-strip-btm-bg.gif);
- border-color:#d0d0d0;
-}
-
-.x-tab-strip span.x-tab-strip-text {
- color:#333;
-}
-.x-tab-strip-over span.x-tab-strip-text {
- color:#111;
-}
-
-.x-tab-strip-active span.x-tab-strip-text {
- color:#333;
-}
-
-.x-tab-strip-disabled .x-tabs-text {
- color:#aaaaaa;
-}
-
-.x-tab-strip-top .x-tab-right {
- background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);
-}
-
-.x-tab-strip-top .x-tab-left {
- background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);
-}
-.x-tab-strip-top .x-tab-strip-inner {
- background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);
-}
-
-.x-tab-strip-bottom .x-tab-right {
- background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-inactive-right-bg.gif);
-}
-
-.x-tab-strip-bottom .x-tab-left {
- background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-inactive-left-bg.gif);
-}
-
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-right {
- background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-right-bg.gif);
-}
-
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-left {
- background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-left-bg.gif);
-}
-
-.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close {
- background-image:url(../js/ext/resources/images/gray/tabs/tab-close.gif);
-}
-.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{
- background-image:url(../js/ext/resources/images/gray/tabs/tab-close.gif);
-}
-
-.x-tab-panel-body {
- border-color:#d0d0d0;
- background:#fff;
-}
-.x-tab-panel-bbar .x-toolbar {
- border-color: #d0d0d0;
-}
-
-.x-tab-panel-tbar .x-toolbar {
- border-color: #d0d0d0;
-}
-
-.x-tab-panel-header-plain .x-tab-strip-spacer {
- border-color:#d0d0d0;
- background: #eaeaea;
-}
-
-.x-tab-scroller-left {
- background-image: url(../js/ext/resources/images/gray/tabs/scroll-left.gif);
- border-color:#aeaeae;
-}
-.x-tab-scroller-right {
- background-image: url(../js/ext/resources/images/gray/tabs/scroll-right.gif);
- border-color:#aeaeae;
-}
-
-/* Window */
-
-.x-window-proxy {
- background:#e0e0e0;
- border-color:#b0b0b0;
-}
-
-.x-window-tl .x-window-header {
- color:#555;
-}
-.x-window-tc {
- background-image:url(../js/ext/resources/images/gray/window/top-bottom.png);
-}
-.x-window-tl {
- background-image:url(../js/ext/resources/images/gray/window/left-corners.png);
-}
-.x-window-tr {
- background-image:url(../js/ext/resources/images/gray/window/right-corners.png);
-}
-.x-window-bc {
- background-image:url(../js/ext/resources/images/gray/window/top-bottom.png);
-}
-.x-window-bl {
- background-image:url(../js/ext/resources/images/gray/window/left-corners.png);
-}
-.x-window-br {
- background-image:url(../js/ext/resources/images/gray/window/right-corners.png);
-}
-.x-window-mc {
- border:1px solid #d0d0d0;
- background:#e8e8e8;
-}
-
-.x-window-ml {
- background-image:url(../js/ext/resources/images/gray/window/left-right.png);
-}
-.x-window-mr {
- background-image:url(../js/ext/resources/images/gray/window/left-right.png);
-}
-.x-panel-ghost .x-window-tl {
- border-color:#d0d0d0;
-}
-.x-panel-collapsed .x-window-tl {
- border-color:#d0d0d0;
-}
-
-.x-window-plain .x-window-mc {
- background: #e8e8e8;
- border-right:1px solid #eee;
- border-bottom:1px solid #eee;
- border-top:1px solid #d0d0d0;
- border-left:1px solid #d0d0d0;
-}
-
-.x-window-plain .x-window-body {
- border-left:1px solid #eee;
- border-top:1px solid #eee;
- border-bottom:1px solid #d0d0d0;
- border-right:1px solid #d0d0d0;
- background:transparent !important;
-}
-
-body.x-body-masked .x-window-mc, body.x-body-masked .x-window-plain .x-window-mc {
- background-color: #e4e4e4;
-}
-
-
-/* misc */
-.x-html-editor-wrap {
- border-color:#d0d0d0;
-}
-
-/* Borders go last for specificity */
-.x-panel-noborder .x-panel-body-noborder {
- border-width:0;
-}
-
-.x-panel-noborder .x-panel-header-noborder {
- border-width:0;
- border-bottom:1px solid #d0d0d0;
-}
-
-.x-panel-noborder .x-panel-tbar-noborder .x-toolbar {
- border-width:0;
- border-bottom:1px solid #d0d0d0;
-}
-
-.x-panel-noborder .x-panel-bbar-noborder .x-toolbar {
- border-width:0;
- border-top:1px solid #d0d0d0;
-}
-
-.x-window-noborder .x-window-mc {
- border-width:0;
-}
-.x-window-plain .x-window-body-noborder {
- border-width:0;
-}
-
-.x-tab-panel-noborder .x-tab-panel-body-noborder {
- border-width:0;
-}
-
-.x-tab-panel-noborder .x-tab-panel-header-noborder {
- border-top-width:0;
- border-left-width:0;
- border-right-width:0;
-}
-
-.x-tab-panel-noborder .x-tab-panel-footer-noborder {
- border-bottom-width:0;
- border-left-width:0;
- border-right-width:0;
-}
-
-
-.x-tab-panel-bbar-noborder .x-toolbar {
- border-width:0;
- border-top:1px solid #d0d0d0;
-}
-
-.x-tab-panel-tbar-noborder .x-toolbar {
- border-width:0;
- border-bottom:1px solid #d0d0d0;
-}
-
-.kunebody {
- background-color: #FFF;
- color: #000;
- font-family: arial, sans;
- margin: 5px 5px 5px 5px;
-}
-
-#kuneinitialcurtain {
- position: absolute;
- left: 0px;
- top: 0px;
- width: 100%;
- height: 100%;
- background-color: #FFF;
- z-index: 9999;
-}
-
-/* Global styles */
-
-.gwt-HorizontalSplitPanel .hsplitter {
- cursor: e-resize;
- width: 6px;
-}
-
-.gwt-DialogBox {
- border: 8px solid #C3D9FF;
- border: 2px outset;
- background-color: white;
-}
-
-.gwt-DialogBox .Caption {
- background-color: #C3D9FF;
- font-size: 85%;
- font-weight: 700;
- padding: 3px;
- margin: 2px;
- cursor: default;
-}
-
-.gwt-MenuBar {
- background-color: #F2F2F2;
- border: 1px solid #999;
- vertical-align: middle;
- padding: 5px 0;
-}
-
-.gwt-MenuBar .gwt-MenuItem {
- cursor: pointer;
- padding: 1px 10px;
- white-space: nowrap;
-}
-
-.gwt-MenuBar .gwt-MenuItem img {
- vertical-align: middle;
- margin-right: 3px;
-}
-
-.gwt-MenuBar .gwt-MenuItem {
- background-color: #F2F2F2;
-}
-
-.gwt-MenuBar .gwt-MenuItem-selected {
- background-color: #FFB958;
-}
-
-.kune-MenuBar .gwt-MenuItem {
- background: transparent url(img/button-bg-hard.gif) repeat-x 0 0;
- border-left: 1px solid #AAA;
- border-right: 1px solid #AAA;
- color: #999;
- cursor: pointer;
- cursor: hand;
- white-space: nowrap;
- padding: 0 10px;
-}
-
-.kune-MenuBar .gwt-MenuItem-selected {
- background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
- color: #996633;
-}
-
-.kune-expandHoriz {
- width: 100%;
-}
-
-.kune-expandVert {
- height: 100%;
-}
-
-.kune-floatleft {
- float: left;
-}
-
-.kune-floatright {
- float: right;
-}
-
-/* Deprecated */
-.kune-Default-Form {
- margin: 10px;
-}
-
-.kune-valignmiddle {
- vertical-align: middle;
-}
-
-fieldset {
- border:1px solid #B5B8C8;
- /* margin-bottom:10px; */
- padding:10px 10px 5px;
-}
-
-legend {
- color:#15428B;
- font-size: 85%;
- font-size-adjust:none;
- font-style:normal;
- font-variant:normal;
- font-weight:bold;
- line-height:normal;
-}
-
-.gwt-RadioButton input {
- margin: 0 3px;
- vertical-align:middle;
-}
-
-.gwt-RadioButton label {
- margin: 0 3px;
- vertical-align:middle;
-}
-
-.kune-pointer {
- cursor: pointer;
-}
-
-.kuneLabelPre {
- white-space: pre !important;
-}
-
-/* Buttons */
-
-.kune-CustomPushButton-space {
- margin-top: 3px;
- margin-bottom: 3px;
-}
-
-.kune-CustomPushButton {
- background: transparent url(img/button-bg-hard.gif) repeat-x 0 0;
- border-left: 1px solid #AAA;
- border-right: 1px solid #AAA;
- color: #999;
- cursor: pointer;
- white-space: nowrap;
- padding: 0px 12px;
-}
-
-.kune-CustomPushButton-up {
- color: #161616;
-}
-
-.kune-CustomPushButton-down {
- color: black;
-}
-
-.kune-CustomPushButton-up-hovering {
- color: #161616;
- background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
-}
-
-.kune-CustomPushButton-down-hovering {
- color: black;
-}
-
-.kune-CustomPushButton-up-disabled {
- background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
- color: #E0E0E0;
- cursor: default;
-}
-
-.kune-CustomPushButton-down-disabled {
- background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
- color: #E0E0E0;
- cursor: default;
-}
-
-.kune-Button-Large-lrSpace {
- margin-left: 12px;
- margin-right: 12px;
-}
-
-.kune-Button-Large-rSpace {
- margin-right: 12px;
-}
-
-.kune-Button-Large-lSpace {
- margin-left: 12px;
-}
-
-.kune-Button-Large-tbSpace {
- margin-top: 12px;
- margin-bottom: 12px;
-}
-
-.kune-Button-Small-lrSpace {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-.kune-Button-Small-rSpace {
- margin-right: 10px;
-}
-
-.kune-Button-Small-lSpace {
- margin-left: 10px;
-}
-
-.kune-Button-Small-tbSpace {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-
-.kune-Button-Mini-lSpace {
- margin-left: 8px;
-}
-
-.kune-Button-Mini-lrSpace {
- margin-left: 8px;
- margin-right: 8px;
-}
-
-.kune-Button-Mini-rSpace {
- margin-right: 8px;
-}
-
-.kune-Button-Mini-tbSpace {
- margin-top: 8px;
- margin-bottom: 8px;
-}
-
-.kune-IconHyperlink {
-}
-
-.kune-IconHyperlink a:link {
- /* text-decoration: underline; */
- color: green;
-}
-
-.kune-IconHyperlink a:hover {
- text-decoration: underline;
-}
-
-.kune-IconHyperlink a:visited {
- color: #808000;
-}
-
-.kune-IconHyperlink img {
- margin-right: 4px;
- vertical-align: middle;
-}
-
-.kune-IconLabel {
-
-}
-
-.kune-IconLabel img {
- margin-right: 4px;
- vertical-align: middle;
-}
-
-.kune-link {
- text-decoration: underline;
- color: green;
- cursor: pointer;
-}
-
-/* DropDowns */
-
-.kune-DropDownOuter {
- background-color: green;
-}
-
-.kune-DropDownInner {
- margin: 0 3px 1px 3px;
- background: green;
- background-color: #FFF;
- padding: 3px;
-}
-
-.kune-DropDownLabel {
- color: #FFF;
- cursor: pointer;
-}
-
-.kune-DropDownLabel .gwt-Label {
- margin: 0 5px 0 0;
- width: 100%;
-}
-
-.kune-DropDownLabel img {
- margin: 0 3px 0 1px;
-}
-
-.kune-IconLabel {
- color: green;
-}
-
-.kune-IconLabel img {
- margin-right: 4px;
- vertical-align: middle;
-}
-
-/* Used in multi chat panel status change */
-.x-menu-item img {
- margin-right: 4px;
- vertical-align: middle;
-}
-
-/* Margins */
-
-.kune-Margin-40-trbl {
- margin: 40px;
-}
-
-.kune-Margin-40-lr {
- margin-left: 40px;
- margin-right: 40px;
-}
-
-.kune-Margin-40-tl {
- margin-top: 40px;
- margin-left: 40px;
-}
-
-.kune-Margin-40-tb {
- margin-top: 40px;
- margin-bottom: 40px;
-}
-
-.kune-Margin-40-t {
- margin-top: 40px;
-}
-
-.kune-Margin-40-r {
- margin-right: 40px;
-}
-
-.kune-Margin-40-l {
- margin-left: 40px;
-}
-
-.kune-Margin-20-trbl {
- margin: 20px;
-}
-
-.kune-Margin-20-lr {
- margin-left: 20px;
- margin-right: 20px;
-}
-
-.kune-Margin-20-tl {
- margin-top: 20px;
- margin-left: 20px;
-}
-
-.kune-Margin-20-tb {
- margin-top: 20px;
- margin-bottom: 20px;
-}
-
-.kune-Margin-20-t {
- margin-top: 20px;
-}
-
-.kune-Margin-20-r {
- margin-right: 20px;
-}
-
-.kune-Margin-20-l {
- margin-left: 20px;
-}
-
-.kune-Margin-Large-trbl {
- margin: 10px;
-}
-
-.kune-Margin-Large-lr {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-.kune-Margin-Large-tl {
- margin-top: 10px;
- margin-left: 10px;
-}
-
-.kune-Margin-Large-tb {
- margin-top: 10px;
- margin-bottom: 10px;
-}
-
-.kune-Margin-Large-t {
- margin-top: 10px;
-}
-
-.kune-Margin-Large-r {
- margin-right: 10px;
-}
-
-.kune-Margin-Large-l {
- margin-left: 10px;
-}
-
-.kune-Margin-Medium-trbl {
- margin: 5px;
-}
-
-.kune-Margin-Medium-lr {
- margin-left: 5px;
- margin-right: 5px;
-}
-
-.kune-Margin-Medium-tl {
- margin-top: 5px;
- margin-left: 5px;
-}
-
-.kune-Margin-Medium-tb {
- margin-top: 5px;
- margin-bottom: 5px;
-}
-
-.kune-Margin-Medium-t {
- margin-top: 5px;
-}
-
-.kune-Margin-Medium-r {
- margin-right: 5px;
-}
-
-.kune-Margin-Medium-b {
- margin-bottom: 5px;
-}
-
-.kune-Margin-Medium-l {
- margin-left: 5px;
-}
-
-.kune-Margin-Small-trbl {
- margin: 3px;
-}
-
-.kune-Margin-Small-lr {
- margin-left: 3px;
- margin-right: 3px;
-}
-
-.kune-Margin-Small-tl {
- margin-top: 3px;
- margin-left: 3px;
-}
-
-.kune-Margin-Small-tb {
- margin-top: 3px;
- margin-bottom: 3px;
-}
-
-.kune-Margin-Small-t {
- margin-top: 3px;
-}
-
-.kune-Margin-Small-l {
- margin-left: 3px;
-}
-
-.kune-Margin-Small-r {
- margin-right: 3px;
-}
-
-.kune-Margin-Small-b {
- margin-bottom: 3px;
-}
-
-.kune-Margin-Mini-trbl {
- margin: 1px;
-}
-
-.kune-Margin-Mini-lr {
- margin-left: 1px;
- margin-right: 1px;
-}
-
-.kune-Margin-Mini-tl {
- margin-top: 1px;
- margin-left: 1px;
-}
-
-.kune-Margin-Mini-tb {
- margin-top: 1px;
- margin-bottom: 1px;
-}
-
-.kune-Margin-Mini-t {
- margin-top: 1px;
-}
-
-.kune-Margin-Mini-r {
- margin-right: 1px;
-}
-
-.kune-Margin-Mini-b {
- margin-bottom: 1px;
-}
-
-.kune-Margin-Mini-l {
- margin-left: 1px;
-}
-
-/* Fonts
-see: http://developer.yahoo.com/yui/fonts/ */
-
-.kune-ft10px {
- font-size: 77%
-}
-
-.kune-ft11px {
- font-size: 85%
-}
-
-.kune-ft12px {
- font-size: 93%
-}
-
-.kune-ft13px {
- font-size: 100%
-}
-
-.kune-ft14px {
- font-size: 108%
-}
-
-.kune-ft15px {
- font-size: 116%
-}
-
-.kune-ft16px {
- font-size: 123.1%
-}
-
-.kune-ft17px {
- font-size: 131%
-}
-
-.kune-ft18px {
- font-size: 138.5%
-}
-
-.kune-ft19px {
- font-size: 146.5%
-}
-
-.kune-ft20px {
- font-size: 153.9%
-}
-
-.kune-ft21px {
- font-size: 161.6%
-}
-
-.kune-ft22px {
- font-size: 167%
-}
-
-.kune-ft23px {
- font-size: 174%
-}
-
-.kune-ft24px {
- font-size: 182%
-}
-
-.kune-ft25px {
- font-size: 189%
-}
-
-.kune-ft26px {
- font-size: 197%
-}
-
-
-/* Sitebar */
-
-.kune-SiteBarPanel .kune-IconHyperlink {
- white-space: nowrap;
-}
-
-.kune-SiteBarPanel .kune-IconHyperlink a:link {
- cursor: pointer;
- text-decoration: underline;
- color: #B3B3B3;
-}
-
-.kune-SiteBarPanel .kune-IconHyperlink a:hover {
- text-decoration: underline;
-}
-
-.kune-SiteBarPanel .kune-IconHyperlink a:visited {
- color: #B3B3B3;
-}
-
-.kune-SiteBarPanel {
- margin-right: 10px;
- height: 16px;
-}
-
-.kune-SiteBarPanel .gwt-TextBox {
- border: 1px solid #E4A374;
- margin: 0 15px 0 3px;
- padding-left: 3px;
- color: #B3B3B3;
-}
-
-.kune-SiteBarPanel .gwt-Hyperlink a {
- white-space: nowrap;
- color: #B3B3B3;
- text-decoration: underline;
- cursor: pointer;
-}
-
-.kune-SiteBarPanel .gwt-PushButton {
- cursor: pointer;
-}
-
-.kune-SiteBarPanel-Separator {
- color: #E4A374;
- margin: 0 5px;
-}
-
-.kune-SiteBarPanel-SpaceSeparator {
- width: 10px;
-}
-
-.kune-SiteMessagePanel {
- color: #250;
- position: absolute;
- z-index: 10000;
- vertical-align: middle;
-}
-
-.kune-SiteMessagePanel .gwt-HTML {
- margin: 15px 5px 15px 2px;
-}
-
-.kune-SiteMessagePanel .gwt-Image {
- margin: 5px;
-}
-
-.kune-SiteMessagePanel-error {
- background-color: #FFB380;
- border: 1px solid #FF0066;
-}
-
-.kune-SiteMessagePanel-veryimp {
- background-color: #FFD4AA;
- border: 1px solid #FF5599;
-}
-
-.kune-SiteMessagePanel-imp {
- background-color: #FFE6D5;
- border: 1px solid #DE87AA;
-}
-
-.kune-SiteMessagePanel-info {
- background-color: #E5FF80;
- border: 1px solid #87DE87;
-}
-
-/* Workspace styles */
-.kune-WorkspacePanel {
- width: 100%;
- background-color: #FFF;
-}
-
-.kune-WokspacePanel .Tab {
-
-}
-
-.kune-WorkspacePanel .GeneralHP {
-
-}
-
-.kune-WorkspacePanel .ContextPanel {
- width: 100%;
- border-right: 3px solid #DD8A3D;
-}
-
-.kune-GroupSummaryPanel {
- margin: 5px 0 0 5px;
- width: 100%;
-}
-
-.kune-GroupToolsBar {
- width: 150px;
-}
-
-.kune-GroupToolsBar-itemSelected {
- margin-bottom: 5px;
-}
-
-.kune-GroupToolsBar-itemSelected .gwt-Hyperlink a {
- color: #FFF;
- padding: 0 9px;
- text-decoration: none;
-}
-
-.kune-GroupToolsBar-itemSelected .gwt-Hyperlink a:hover {
- text-decoration: none;
-}
-
-.kune-GroupToolsBar-itemNotSelected {
- margin-bottom: 5px;
-}
-
-.kune-GroupToolsBar-itemNotSelected .gwt-Hyperlink a {
- color: green;
- padding: 0 9px;
- text-decoration: none;
-}
-
-.kune-GroupToolsBar-itemNotSelected .gwt-Hyperlink a:hover {
- text-decoration: none;
-}
-
-/* Content titles */
-
-.kune-ContentToolBarPanel {
- background-color: #F2F2F2;
- padding: 2px;
- height: 24px;
- vertical-align: middle;
-}
-
-.kune-ContentBottomBar {
- vertical-align: middle;
- height: 24px;
-}
-
-.kune-ContentBottomBar .gwt-Image {
- margin-left: 5px;
- cursor: pointer;
- float: left;
-}
-
-.kune-ContentBottomBar .gwt-Label a {
-
-}
-
-/* Main Content & Context */
-.kune-WorkspacePanel-Content {
- background-color: #FCFCFC;
- width: 100%;
- height: 100%;
-}
-
-.kune-WorkspacePanel-Content .main-content {
- margin: 7px 5px 5px 10px;
-}
-
-.kune-WorkspacePanel-Context {
- background-color: #CFA;
- width: 100%;
- height: 100%;
-}
-
-.kune-NavigationBar {
- width: 100%;
-}
-
-.kune-NavigationBar .topBar {
- background-color: #ececec;
- background: #ececec;
- border-bottom: 1px solid #e3dbdb;
- vertical-align: middle;
-}
-
-.kune-NavigationBar .topBar .gwt-PushButton {
- margin: 1px 3px 1px 0;
-}
-
-.kune-NavigationBar .topBar .gwt-Label {
- vertical-align: middle;
-}
-
-.kune-NavigationBar .kune-topBar-iconBar {
- margin: 2px 0 2px 5px;
-}
-
-.kune-NavigationBar .kune-ContextItemsPanel-LabelLink {
- /* text-decoration: underline; */
- color: green;
- cursor: pointer;
- margin-left: 3px;
-}
-
-/*
+*/body{font:13px/1.22 arial,helvetica,clean,sans-serif;font-size:small;font:x-small;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;font-size:108%;line-height:99%;}/*
+ * Ext JS Library 2.0.2
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing(a)extjs.com
+ *
+ * http://extjs.com/license
+ */html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.ext-el-mask{z-index:20000;position:absolute;top:0;left:0;-moz-opacity:.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;width:100%;height:100%;zoom:1;}.ext-el-mask-msg{z-index:20001;position:absolute;top:0;left:0;border:1px solid #6593cf;background:#c3daf9 url(../js/ext/resources/images/default/box/tb-blue.gif) repeat-x 0 -16px;padding:2px;}.ext-el-mask-msg div{padding:5px 10px;background:#eee;border:1px solid #a3bad9;color:#222;font:normal 100% arial,sans;cursor:wait;}.ext-shim{position:absolute;visibility:hidden;left:0;top:0;overflow:hidden;}.ext-ie .ext-shim{filter:alpha(opacity=0);}.ext-ie6 .ext-shim{margin-left:5px;margin-top:3px;}.x-mask-loading div{padding:5px 10px 5px 25px;background:#fbfbfb url(../js/ext/resources/images/default/grid/loading.gif) no-repeat 5px 5px;line-height:16px;}.x-hidden,.x-hide-offsets{position:absolute;left:-10000px;top:-10000px;visibility:hidden;}.x-hide-display{display:none!important;}.x-hide-visibility{visibility:hidden!important;}.x-masked{overflow:hidden!important;}.x-masked select,.x-masked object,.x-masked embed{visibility:hidden;}.x-layer{visibility:hidden;}.x-unselectable,.x-unselectable *{-moz-user-select:none;-khtml-user-select:none;}.x-repaint{zoom:1;background-color:transparent;-moz-outline:none;}.x-item-disabled{color:gray;cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}.x-item-disabled *{color:gray!important;cursor:default!important;}.x-splitbar-proxy{position:absolute;visibility:hidden;z-index:20001;background:#aaa;zoom:1;line-height:1px;font-size:1px;overflow:hidden;}.x-splitbar-h,.x-splitbar-proxy-h{cursor:e-resize;cursor:col-resize;}.x-splitbar-v,.x-splitbar-proxy-v{cursor:s-resize;cursor:row-resize;}.x-color-palette{width:150px;height:92px;cursor:pointer;}.x-color-palette a{border:1px solid #fff;float:left;padding:2px;text-decoration:none;-moz-outline:0 none;outline:0 none;cursor:pointer;}.x-color-palette a:hover,.x-color-palette a.x-color-palette-sel{border:1px solid #8BB8F3;background:#deecfd;}.x-color-palette em{display:block;border:1px solid #ACA899;}.x-color-palette em span{cursor:pointer;display:block;height:10px;line-height:10px;width:10px;}.x-ie-shadow{display:none;position:absolute;overflow:hidden;left:0;top:0;background:#777;zoom:1;}.x-shadow{display:none;position:absolute;overflow:hidden;left:0;top:0;}.x-shadow *{overflow:hidden;}.x-shadow *{padding:0;border:0;margin:0;clear:none;zoom:1;}.x-shadow .xstc,.x-shadow .xsbc{height:6px;float:left;}.x-shadow .xstl,.x-shadow .xstr,.x-shadow .xsbl,.x-shadow .xsbr{width:6px;height:6px;float:left;}.x-shadow .xsc{width:100%;}.x-shadow .xsml,.x-shadow .xsmr{width:6px;float:left;height:100%;}.x-shadow .xsmc{float:left;height:100%;background:transparent url(../js/ext/resources/images/default/shadow-c.png);}.x-shadow .xst,.x-shadow .xsb{height:6px;overflow:hidden;width:100%;}.x-shadow .xsml{background:transparent url(../js/ext/resources/images/default/shadow-lr.png) repeat-y 0 0;}.x-shadow .xsmr{background:transparent url(../js/ext/resources/images/default/shadow-lr.png) repeat-y -6px 0;}.x-shadow .xstl{background:transparent url(../js/ext/resources/images/default/shadow.png) no-repeat 0 0;}.x-shadow .xstc{background:transparent url(../js/ext/resources/images/default/shadow.png) repeat-x 0 -30px;}.x-shadow .xstr{background:transparent url(../js/ext/resources/images/default/shadow.png) repeat-x 0 -18px;}.x-shadow .xsbl{background:transparent url(../js/ext/resources/images/default/shadow.png) no-repeat 0 -12px;}.x-shadow .xsbc{background:transparent url(../js/ext/resources/images/default/shadow.png) repeat-x 0 -36px;}.x-shadow .xsbr{background:transparent url(../js/ext/resources/images/default/shadow.png) repeat-x 0 -6px;}.loading-indicator{font-size:100%;background-image:url(../js/ext/resources/images/default/grid/loading.gif);background-repeat:no-repeat;background-position:left;padding-left:20px;line-height:16px;margin:3px;}.x-text-resize{position:absolute;left:-1000px;top:-1000px;visibility:hidden;zoom:1;}.x-drag-overlay{width:100%;height:100%;display:none;position:absolute;left:0;top:0;background-image:url(../js/ext/resources/images/default/s.gif);z-index:20000;}.x-clear{clear:both;height:0;overflow:hidden;line-height:0;font-size:0;}.x-spotlight{z-index:8999;position:absolute;top:0;left:0;-moz-opacity:.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;width:0;height:0;zoom:1;}.x-tab-panel{overflow:hidden;}.x-tab-panel-header,.x-tab-panel-footer{background:#deecfd;border:1px solid #8db2e3;overflow:hidden;zoom:1;}.x-tab-panel-header{border:1px solid #8db2e3;padding-bottom:2px;}.x-tab-panel-footer{border:1px solid #8db2e3;padding-top:2px;}.x-tab-strip-wrap{width:100%;overflow:hidden;position:relative;zoom:1;}ul.x-tab-strip{display:block;width:5000px;zoom:1;}ul.x-tab-strip-top{padding-top:1px;background:url(../js/ext/resources/images/default/tabs/tab-strip-bg.gif) #cedff5 repeat-x bottom;border-bottom:1px solid #8db2e3;}ul.x-tab-strip-bottom{padding-bottom:1px;background:url(../js/ext/resources/images/default/tabs/tab-strip-btm-bg.gif) #cedff5 repeat-x top;border-top:1px solid #8db2e3;border-bottom:0 none;}.x-tab-panel-header-plain .x-tab-strip-top{background:transparent!important;padding-top:0!important;}.x-tab-panel-header-plain{background:transparent!important;border-width:0!important;padding-bottom:0!important;}.x-tab-panel-header-plain .x-tab-strip-spacer{border:1px solid #8db2e3;border-top:0 none;height:2px;background:#deecfd;font-size:1px;line-height:1px;}.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer{height:3px;}ul.x-tab-strip li{float:left;margin-left:2px;}ul.x-tab-strip li.x-tab-edge{float:left;margin:0!important;padding:0!important;border:0 none!important;font-size:1px!important;line-height:1px!important;overflow:hidden;zoom:1;background:transparent!important;width:1px;}.x-tab-strip a,.x-tab-strip span,.x-tab-strip em{display:block;}.x-tab-strip a{text-decoration:none!important;-moz-outline:none;outline:none;cursor:pointer;}.x-tab-strip-inner{overflow:hidden;text-overflow:ellipsis;}.x-tab-strip span.x-tab-strip-text{font:normal 100% arial,sans;color:#416aa3;white-space:nowrap;cursor:pointer;padding:4px 0;}.x-tab-strip .x-tab-with-icon .x-tab-right{padding-left:6px;}.x-tab-strip .x-tab-with-icon span.x-tab-strip-text{padding-left:20px;background-position:0 3px;background-repeat:no-repeat;}.x-tab-strip-over span.x-tab-strip-text{color:#15428b;}.x-tab-strip-active{cursor:default;}.x-tab-strip-active span.x-tab-strip-text{cursor:default;color:#15428b;font-weight:700;}.x-tab-strip-disabled .x-tabs-text{cursor:default;color:#aaa;}.x-tab-panel-body{overflow:hidden;}.x-tab-panel-bwrap{overflow:hidden;}.ext-ie .x-tab-strip .x-tab-right{position:relative;}.x-tab-strip-top .x-tab-strip-active .x-tab-right{margin-bottom:-1px;}.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text{padding-bottom:5px;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{margin-top:-1px;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right span.x-tab-strip-text{padding-top:5px;}.x-tab-strip-top .x-tab-right{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) no-repeat 0 -51px;padding-left:10px;}.x-tab-strip-top .x-tab-left{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) no-repeat right -351px;padding-right:10px;}.x-tab-strip-top .x-tab-strip-inner{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) repeat-x 0 -201px;}.x-tab-strip-top .x-tab-strip-over .x-tab-right{background-position:0 -101px;}.x-tab-strip-top .x-tab-strip-over .x-tab-left{background-position:right -401px;}.x-tab-strip-top .x-tab-strip-over .x-tab-strip-inner{background-position:0 -251px;}.x-tab-strip-top .x-tab-strip-active .x-tab-right{background-position:0 0;}.x-tab-strip-top .x-tab-strip-active .x-tab-left{background-position:right -301px;}.x-tab-strip-top .x-tab-strip-active .x-tab-strip-inner{background-position:0 -151px;}.x-tab-strip-bottom .x-tab-right{background:url(../js/ext/resources/images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;}.x-tab-strip-bottom .x-tab-left{background:url(../js/ext/resources/images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background:url(../js/ext/resources/images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background:url(../js/ext/resources/images/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;}.x-tab-strip-bottom .x-tab-left{padding:0 10px;}.x-tab-strip-bottom .x-tab-right{padding:0;}.x-tab-strip .x-tab-strip-close{display:none;}.x-tab-strip-closable{position:relative;}.x-tab-strip-closable .x-tab-left{padding-right:19px;}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close{background-image:url(../js/ext/resources/images/default/tabs/tab-close.gif);opacity:.6;-moz-opacity:.6;background-repeat:no-repeat;display:block;width:11px;height:11px;position:absolute;top:3px;right:3px;cursor:pointer;z-index:2;}.x-tab-strip .x-tab-strip-active a.x-tab-strip-close{opacity:.8;-moz-opacity:.8;}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{background-image:url(../js/ext/resources/images/default/tabs/tab-close.gif);opacity:1;-moz-opacity:1;}.x-tab-panel-body{border:1px solid #8db2e3;background:#fff;}.x-tab-panel-body-top{border-top:0 none;}.x-tab-panel-body-bottom{border-bottom:0 none;}.x-tab-scroller-left{background:transparent url(../js/ext/resources/images/default/tabs/scroll-left.gif) no-repeat -18px 0;border-bottom:1px solid #8db2e3;width:18px;position:absolute;left:0;top:0;z-index:10;cursor:pointer;}.x-tab-scroller-left-over{background-position:0 0;}.x-tab-scroller-left-disabled{background-position:-18px 0;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);cursor:default;}.x-tab-scroller-right{background:transparent url(../js/ext/resources/images/default/tabs/scroll-right.gif) no-repeat 0 0;border-bottom:1px solid #8db2e3;width:18px;position:absolute;right:0;top:0;z-index:10;cursor:pointer;}.x-tab-scroller-right-over{background-position:-18px 0;}.x-tab-scroller-right-disabled{background-position:0 0;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);cursor:default;}.x-tab-scrolling .x-tab-strip-wrap{margin-left:18px;margin-right:18px;}.x-tab-scrolling{position:relative;}.x-tab-panel-bbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}.x-tab-panel-tbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}.x-border-layout-ct .x-tab-panel{background:#FFF;}.x-form-field{margin:0;font:normal 100% arial,sans;}.x-form-text,textarea.x-form-field{padding:1px 3px;background:#fff url(../js/ext/resources/images/default/form/text-bg.gif) repeat-x 0 0;border:1px solid #B5B8C8;}textarea.x-form-field{padding:2px 3px;}.x-form-text{height:22px;line-height:18px;vertical-align:middle;}.ext-ie .x-form-text{margin:-1px 0;height:22px;line-height:18px;}.ext-ie textarea.x-form-field{margin:-1px 0;}.ext-strict .x-form-text{height:18px;}.ext-safari .x-form-text{height:20px;padding:0 3px;}.ext-safari.ext-mac textarea.x-form-field{margin-bottom:-2px;}.ext-gecko .x-form-text{padding-top:2px;padding-bottom:0;}textarea{resize:none;}.x-form-select-one{height:20px;line-height:18px;vertical-align:middle;background-color:#fff;border:1px solid #B5B8C8;}.x-form-field-wrap{position:relative;zoom:1;white-space:nowrap;}.x-editor .x-form-check-wrap{background:#fff;}.x-form-field-wrap .x-form-trigger{width:17px;height:21px;border:0;background:transparent url(../js/ext/resources/images/default/form/trigger.gif) no-repeat 0 0;cursor:pointer;border-bottom:1px solid #B5B8C8;position:absolute;top:0;}.ext-safari .x-form-field-wrap .x-form-trigger{height:21px;}.x-form-field-wrap .x-form-date-trigger{background-image:url(../js/ext/resources/images/default/form/date-trigger.gif);cursor:pointer;}.x-form-field-wrap .x-form-clear-trigger{background-image:url(../js/ext/resources/images/default/form/clear-trigger.gif);cursor:pointer;}.x-form-field-wrap .x-form-search-trigger{background-image:url(../js/ext/resources/images/default/form/search-trigger.gif);cursor:pointer;}.ext-safari .x-form-field-wrap .x-form-trigger{right:0;}.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{position:static;top:auto;vertical-align:top;}.x-form-field-wrap .x-form-trigger-over{background-position:-17px 0;}.x-form-field-wrap .x-form-trigger-click{background-position:-34px 0;}.x-trigger-wrap-focus .x-form-trigger{background-position:-51px 0;}.x-trigger-wrap-focus .x-form-trigger-over{background-position:-68px 0;}.x-trigger-wrap-focus .x-form-trigger-click{background-position:-85px 0;}.x-trigger-wrap-focus .x-form-trigger{border-bottom:1px solid #7eadd9;}.x-item-disabled .x-form-trigger-over{background-position:0 0!important;border-bottom:1px solid #B5B8C8;}.x-item-disabled .x-form-trigger-click{background-position:0 0!important;border-bottom:1px solid #B5B8C8;}.x-form-focus,textarea.x-form-focus{border:1px solid #7eadd9;}.x-form-invalid,textarea.x-form-invalid{background:#fff url(../js/ext/resources/images/default/grid/invalid_line.gif) repeat-x bottom;border:1px solid #dd7870;}.ext-safari .x-form-invalid{background-color:#fee;border:1px solid #ff7870;}.x-editor{visibility:hidden;padding:0;margin:0;}.x-form-check-wrap{line-height:18px;}.ext-ie .x-form-check-wrap input{width:15px;height:15px;}.x-editor .x-form-check-wrap{padding:3px;}.x-editor .x-form-checkbox{height:13px;}.x-form-grow-sizer{font:normal 100% arial,sans;left:-10000px;padding:8px 3px;position:absolute;visibility:hidden;top:-10000px;white-space:pre-wrap;white-space:0;white-space:0;white-space:0;word-wrap:break-word;zoom:1;}.x-form-grow-sizer p{margin:0!important;border:0 none!important;padding:0!important;}.x-form-item{font:normal 100% arial,sans;display:block;margin-bottom:4px;}.x-form-item label{display:block;float:left;width:100px;padding:3px;padding-left:0;clear:left;z-index:2;position:relative;}.x-form-element{padding-left:105px;position:relative;}.x-form-invalid-msg{color:#e00;padding:2px;padding-left:18px;font:normal 100% arial,sans;background:transparent url(../js/ext/resources/images/default/shared/warning.gif) no-repeat 0 2px;line-height:16px;width:200px;}.x-form-label-right label{text-align:right;}.x-form-label-top .x-form-item label{width:auto;float:none;clear:none;display:inline;margin-bottom:4px;position:static;}.x-form-label-top .x-form-element{padding-left:0;padding-top:4px;}.x-form-label-top .x-form-item{padding-bottom:4px;}.x-form-empty-field{color:gray;}.x-small-editor .x-form-field{font:normal 100% arial,sans;}.x-small-editor .x-form-text{height:20px;line-height:16px;vertical-align:middle;}.ext-ie .x-small-editor .x-form-text{margin-top:-1px!important;margin-bottom:-1px!important;height:20px!important;line-height:16px!important;}.ext-strict .x-small-editor .x-form-text{height:16px!important;}.ext-safari .x-small-editor .x-form-field{font:normal 100% arial,sans;}.ext-ie .x-small-editor .x-form-text{height:20px;line-height:16px;}.ext-border-box .x-small-editor .x-form-text{height:20px;}.x-small-editor .x-form-select-one{height:20px;line-height:16px;vertical-align:middle;}.x-small-editor .x-form-num-field{text-align:right;}.x-small-editor .x-form-field-wrap .x-form-trigger{height:19px;}.x-form-clear{clear:both;height:0;overflow:hidden;line-height:0;font-size:0;}.x-form-clear-left{clear:left;height:0;overflow:hidden;line-height:0;font-size:0;}.x-form-cb-label{width:auto!important;float:none!important;clear:none!important;display:inline!important;margin-left:4px;}.x-form-column{float:left;padding:0;margin:0;width:48%;overflow:hidden;zoom:1;}.x-form .x-form-btns-ct .x-btn{float:right;clear:none;}.x-form .x-form-btns-ct .x-form-btns td{border:0;padding:0;}.x-form .x-form-btns-ct .x-form-btns-right table{float:right;clear:none;}.x-form .x-form-btns-ct .x-form-btns-left table{float:left;clear:none;}.x-form .x-form-btns-ct .x-form-btns-center{text-align:center;}.x-form .x-form-btns-ct .x-form-btns-center table{margin:0 auto;}.x-form .x-form-btns-ct table td.x-form-btn-td{padding:3px;}.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{background-position:0 -147px;}.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{background-position:0 -168px;}.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{background-position:0 -189px;}.x-form .x-form-btns-ct .x-btn-click .x-btn-center{background-position:0 -126px;}.x-form .x-form-btns-ct .x-btn-click .x-btn-right{background-position:0 -84px;}.x-form .x-form-btns-ct .x-btn-click .x-btn-left{background-position:0 -63px;}.x-form-invalid-icon{width:16px;height:18px;visibility:hidden;position:absolute;left:0;top:0;display:block;background:transparent url(../js/ext/resources/images/default/form/exclamation.gif) no-repeat 0 2px;}.x-fieldset{border:1px solid #B5B8C8;padding:10px;margin-bottom:10px;}.x-fieldset legend{font:bold 100% arial,sans;color:#15428b;}.ext-ie .x-fieldset legend{margin-bottom:10px;}.ext-ie .x-fieldset{padding-top:0;padding-bottom:10px;}.x-fieldset legend .x-tool-toggle{margin-right:3px;margin-left:0;float:left!important;}.x-fieldset legend input{margin-right:3px;float:left!important;height:13px;width:13px;}fieldset.x-panel-collapsed{padding-bottom:0!important;border-width:1px 0 0!important;}fieldset.x-panel-collapsed .x-fieldset-bwrap{visibility:hidden;position:absolute;left:-1000px;top:-1000px;}.ext-ie .x-fieldset-bwrap{zoom:1;}.ext-ie td .x-form-text{position:relative;top:-1px;}.x-fieldset-noborder{border:0 none transparent;}.x-fieldset-noborder legend{margin-left:-3px;}.ext-ie .x-fieldset-noborder legend{position:relative;margin-bottom:23px;}.ext-ie .x-fieldset-noborder legend span{position:absolute;left:-5px;}.ext-gecko .x-window-body .x-form-item{-moz-outline:none;overflow:auto;}.ext-gecko .x-form-item{-moz-outline:none;}.x-hide-label label.x-form-item-label{display:none;}.x-hide-label .x-form-element{padding-left:0!important;}.x-fieldset{overflow:hidden;}.x-fieldset-bwrap{overflow:hidden;zoom:1;}.x-fieldset-body{overflow:hidden;}.x-btn{font:normal 100% arial,sans;cursor:pointer;white-space:nowrap;}.x-btn button{border:0 none;background:transparent;padding-left:3px;padding-right:3px;cursor:pointer;margin:0;overflow:visible;width:auto;-moz-outline:0 none;outline:0 none;}* html .ext-ie .x-btn button{width:1px;}.ext-gecko .x-btn button{padding-left:0;padding-right:0;}.ext-ie .x-btn button{padding-top:2px;}.x-btn-icon .x-btn-center .x-btn-text{background-position:center;background-repeat:no-repeat;height:16px;width:16px;cursor:pointer;white-space:nowrap;padding:0;}.x-btn-icon .x-btn-center{padding:1px;}.x-btn em{font-style:normal;font-weight:400;}.x-btn-text-icon .x-btn-center .x-btn-text{background-position:0 2px;background-repeat:no-repeat;padding-left:18px;padding-top:3px;padding-bottom:2px;padding-right:0;}.x-btn-left,.x-btn-right{font-size:1px;line-height:1px;}.x-btn-left{width:3px;height:21px;background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 0;}.x-btn-right{width:3px;height:21px;background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -21px;}.x-btn-left i,.x-btn-right i{display:block;width:3px;overflow:hidden;font-size:1px;line-height:1px;}.x-btn-center{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) repeat-x 0 -42px;vertical-align:middle;text-align:center;padding:0 5px;cursor:pointer;white-space:nowrap;}.x-btn-over .x-btn-left{background-position:0 -63px;}.x-btn-over .x-btn-right{background-position:0 -84px;}.x-btn-over .x-btn-center{background-position:0 -105px;}.x-btn-click .x-btn-center,.x-btn-menu-active .x-btn-center{background-position:0 -126px;}.x-btn-disabled *{color:gray!important;cursor:default!important;}.x-btn-menu-text-wrap .x-btn-center{padding:0 3px;}.ext-gecko .x-btn-menu-text-wrap .x-btn-center{padding:0 1px;}.x-btn-menu-arrow-wrap .x-btn-center{padding:0;}.x-btn-menu-arrow-wrap .x-btn-center button{width:12px!important;height:21px;padding:0!important;display:block;background:transparent url(../js/ext/resources/images/default/button/btn-arrow.gif) no-repeat left 3px;}.x-btn-with-menu .x-btn-center{padding-right:2px!important;}.x-btn-with-menu .x-btn-center em{display:block;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat right 0;padding-right:10px;}.x-btn-text-icon .x-btn-with-menu .x-btn-center em{display:block;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat right 3px;padding-right:10px;}.x-btn-pressed .x-btn-left{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -63px;}.x-btn-pressed .x-btn-right{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -84px;}.x-btn-pressed .x-btn-center{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) repeat-x 0 -126px;}.x-toolbar{border-color:#a9bfd3;border-style:solid;border-width:0 0 1px;display:block;padding:2px;background:#d0def0 url(../js/ext/resources/images/default/toolbar/bg.gif) repeat-x top left;position:relative;zoom:1;}.x-toolbar .x-item-disabled .x-btn-icon{opacity:.35;-moz-opacity:.35;filter:alpha(opacity=35);}.x-toolbar td{vertical-align:middle;}.mso .x-toolbar,.x-grid-mso .x-toolbar{border:0 none;background:url(../js/ext/resources/images/default/grid/mso-hd.gif);}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial,sans;}.x-toolbar .x-item-disabled{color:gray;cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}.x-toolbar .x-item-disabled *{color:gray;cursor:default;}.x-toolbar .x-btn-left{background:none;}.x-toolbar .x-btn-right{background:none;}.x-toolbar .x-btn-center{background:none;padding:0;}.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{padding-right:2px;}.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{padding-right:0;}.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{padding:0 2px;}.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{width:12px;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;}.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button{width:12px;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;}.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button{background-position:0 -47px;}.x-toolbar .x-btn-over .x-btn-left{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;}.x-toolbar .x-btn-over .x-btn-right{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;}.x-toolbar .x-btn-over .x-btn-center{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;}.x-toolbar .x-btn-click .x-btn-left,.x-toolbar .x-btn-pressed .x-btn-left,.x-toolbar .x-btn-menu-active .x-btn-left{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;}.x-toolbar .x-btn-click .x-btn-right,.x-toolbar .x-btn-pressed .x-btn-right,.x-toolbar .x-btn-menu-active .x-btn-right{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;}.x-toolbar .x-btn-click .x-btn-center,.x-toolbar .x-btn-pressed .x-btn-center,.x-toolbar .x-btn-menu-active .x-btn-center{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;}.x-toolbar .x-btn-with-menu .x-btn-center em{padding-right:8px;}.x-toolbar .ytb-text{padding:2px;}.x-toolbar .ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-blue-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px;border:0;}.x-toolbar .ytb-spacer{width:2px;}.x-tbar-page-number{width:24px;height:14px;}.x-tbar-page-first{background-image:url(../js/ext/resources/images/default/grid/page-first.gif)!important;}.x-tbar-loading{background-image:url(../js/ext/resources/images/default/grid/done.gif)!important;}.x-tbar-page-last{background-image:url(../js/ext/resources/images/default/grid/page-last.gif)!important;}.x-tbar-page-next{background-image:url(../js/ext/resources/images/default/grid/page-next.gif)!important;}.x-tbar-page-prev{background-image:url(../js/ext/resources/images/default/grid/page-prev.gif)!important;}.x-item-disabled .x-tbar-loading{background-image:url(../js/ext/resources/images/default/grid/loading.gif)!important;}.x-item-disabled .x-tbar-page-first{background-image:url(../js/ext/resources/images/default/grid/page-first-disabled.gif)!important;}.x-item-disabled .x-tbar-page-last{background-image:url(../js/ext/resources/images/default/grid/page-last-disabled.gif)!important;}.x-item-disabled .x-tbar-page-next{background-image:url(../js/ext/resources/images/default/grid/page-next-disabled.gif)!important;}.x-item-disabled .x-tbar-page-prev{background-image:url(../js/ext/resources/images/default/grid/page-prev-disabled.gif)!important;}.x-paging-info{position:absolute;top:5px;right:8px;color:#444;}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;background:#FFF;filter:alpha(opacity=0);opacity:0;zoom:1;}.x-resizable-handle-east{width:6px;cursor:e-resize;right:0;top:0;height:100%;}.ext-ie .x-resizable-handle-east{margin-right:-1px;}.x-resizable-handle-south{width:100%;cursor:s-resize;left:0;bottom:0;height:6px;}.ext-ie .x-resizable-handle-south{margin-bottom:-1px;}.x-resizable-handle-west{width:6px;cursor:w-resize;left:0;top:0;height:100%;}.x-resizable-handle-north{width:100%;cursor:n-resize;left:0;top:0;height:6px;}.x-resizable-handle-southeast{width:6px;cursor:se-resize;right:0;bottom:0;height:6px;z-index:101;}.x-resizable-handle-northwest{width:6px;cursor:nw-resize;left:0;top:0;height:6px;z-index:101;}.x-resizable-handle-northeast{width:6px;cursor:ne-resize;right:0;top:0;height:6px;z-index:101;}.x-resizable-handle-southwest{width:6px;cursor:sw-resize;left:0;bottom:0;height:6px;z-index:101;}.x-resizable-over .x-resizable-handle,.x-resizable-pinned .x-resizable-handle{filter:alpha(opacity=100);opacity:1;}.x-resizable-over .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-east{background:url(../js/ext/resources/images/default/sizer/e-handle.gif);background-position:left;}.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-west{background:url(../js/ext/resources/images/default/sizer/e-handle.gif);background-position:left;}.x-resizable-over .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-south{background:url(../js/ext/resources/images/default/sizer/s-handle.gif);background-position:top;}.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-north{background:url(../js/ext/resources/images/default/sizer/s-handle.gif);background-position:top;}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background:url(../js/ext/resources/images/default/sizer/se-handle.gif);background-position:top left;}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background:url(../js/ext/resources/images/default/sizer/nw-handle.gif);background-position:bottom right;}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background:url(../js/ext/resources/images/default/sizer/ne-handle.gif);background-position:bottom left;}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background:url(../js/ext/resources/images/default/sizer/sw-handle.gif);background-position:top right;}.x-resizable-proxy{border:1px dashed #3b5a82;position:absolute;overflow:hidden;display:none;left:0;top:0;z-index:50000;}.x-resizable-overlay{width:100%;height:100%;display:none;position:absolute;left:0;top:0;background:#FFF;z-index:200000;-moz-opacity:0;opacity:0;filter:alpha(opacity=0);}.x-grid3{position:relative;overflow:hidden;background-color:#fff;}.x-grid-panel .x-panel-body{overflow:hidden!important;}.x-grid-panel .x-panel-mc .x-panel-body{border:1px solid #99bbe8;}.ext-ie .x-grid3 table,.ext-safari .x-grid3 table{table-layout:fixed;}.x-grid3-viewport{overflow:hidden;}.x-grid3-hd-row td,.x-grid3-row td,.x-grid3-summary-row td{font:normal 100% arial,sans;-moz-outline:none;-moz-user-focus:normal;}.x-grid3-row td,.x-grid3-summary-row td{line-height:13px;vertical-align:top;padding-left:1px;padding-right:1px;-moz-user-select:none;}.x-grid3-hd-row td{line-height:15px;vertical-align:middle;border-left:1px solid #eee;border-right:1px solid #d0d0d0;}.x-grid3-hd-row .x-grid3-marker-hd{padding:3px;}.x-grid3-row .x-grid3-marker{padding:3px;}.x-grid3-cell-inner,.x-grid3-hd-inner{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding:3px 3px 3px 5px;white-space:nowrap;}.x-grid3-hd-inner{position:relative;cursor:inherit;padding:4px 3px 4px 5px;}.x-grid3-row-body{white-space:normal;}.x-grid3-body-cell{-moz-outline:0 none;outline:0 none;}.ext-ie .x-grid3-cell-inner,.ext-ie .x-grid3-hd-inner{width:100%;}.ext-strict .x-grid3-cell-inner,.ext-strict .x-grid3-hd-inner{width:auto;}.x-grid-row-loading{background:#fff url(../js/ext/resources/images/default/shared/loading-balls.gif) no-repeat center center;}.x-grid-page{overflow:hidden;}.x-grid3-row{cursor:default;border:1px solid #ededed;border-top-color:#fff;width:100%;}.x-grid3-row-alt{background-color:#fafafa;}.x-grid3-row-over{border:1px solid #ddd;background:#efefef url(../js/ext/resources/images/default/grid/row-over.gif) repeat-x left top;}.x-grid3-resize-proxy{width:1px;left:0;background-color:#777;cursor:e-resize;cursor:col-resize;position:absolute;top:0;height:100px;overflow:hidden;visibility:hidden;border:0 none;z-index:7;}.x-grid3-resize-marker{width:1px;left:0;background-color:#777;position:absolute;top:0;height:100px;overflow:hidden;visibility:hidden;border:0 none;z-index:7;}.x-grid3-focus{position:absolute;top:0;-moz-outline:0 none;outline:0 none;-moz-user-select:normal;-khtml-user-select:normal;}.x-grid3-header{background:#f9f9f9 url(../js/ext/resources/images/default/grid/grid3-hrow.gif) repeat-x 0 bottom;cursor:default;zoom:1;padding:1px 0 0;}.x-grid3-header-pop{border-left:1px solid #d0d0d0;float:right;clear:none;}.x-grid3-header-pop-inner{border-left:1px solid #eee;width:14px;height:19px;background:transparent url(../js/ext/resources/images/default/grid/hd-pop.gif) no-repeat center center;}.ext-ie .x-grid3-header-pop-inner{width:15px;}.ext-strict .x-grid3-header-pop-inner{width:14px;}.x-grid3-header-inner{overflow:hidden;zoom:1;float:left;}.x-grid3-header-offset{padding-left:1px;width:10000px;}td.x-grid3-hd-over,td.sort-desc,td.sort-asc,td.x-grid3-hd-menu-open{border-left:1px solid #aaccf6;border-right:1px solid #aaccf6;}td.x-grid3-hd-over .x-grid3-hd-inner,td.sort-desc .x-grid3-hd-inner,td.sort-asc .x-grid3-hd-inner,td.x-grid3-hd-menu-open .x-grid3-hd-inner{background:#ebf3fd url(../js/ext/resources/images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;}.x-grid3-sort-icon{background-repeat:no-repeat;display:none;height:4px;width:13px;margin-left:3px;vertical-align:middle;}.sort-asc .x-grid3-sort-icon{background-image:url(../js/ext/resources/images/default/grid/sort_asc.gif);display:inline;}.sort-desc .x-grid3-sort-icon{background-image:url(../js/ext/resources/images/default/grid/sort_desc.gif);display:inline;}.ext-strict .ext-ie .x-grid3-header-inner{position:relative;}.ext-strict .ext-ie6 .x-grid3-hd{position:relative;}.ext-strict .ext-ie6 .x-grid3-hd-inner{position:static;}.x-grid3-body{zoom:1;}.x-grid3-scroller{overflow:auto;zoom:1;position:relative;}.x-grid3-cell-text,.x-grid3-hd-text{display:block;padding:3px 5px;-moz-user-select:none;-khtml-user-select:none;color:#000;}.x-grid3-split{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);background-position:center;background-repeat:no-repeat;cursor:e-resize;cursor:col-resize;display:block;font-size:1px;height:16px;overflow:hidden;position:absolute;top:2px;width:6px;z-index:3;}.x-grid3-hd-text{color:#15428b;}.x-dd-drag-proxy .x-grid3-hd-inner{background:#ebf3fd url(../js/ext/resources/images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;width:120px;padding:3px;border:1px solid #aaccf6;overflow:hidden;}.col-move-top,.col-move-bottom{width:9px;height:9px;position:absolute;top:0;line-height:1px;font-size:1px;overflow:hidden;visibility:hidden;z-index:20000;}.col-move-top{background:transparent url(../js/ext/resources/images/default/grid/col-move-top.gif) no-repeat left top;}.col-move-bottom{background:transparent url(../js/ext/resources/images/default/grid/col-move-bottom.gif) no-repeat left top;}.x-grid3-row-selected{background:#DFE8F6!important;border:1px dotted #a3bae9;}.x-grid3-cell-selected{background-color:#B8CFEE!important;color:#000;}.x-grid3-cell-selected span{color:#000!important;}.x-grid3-cell-selected .x-grid3-cell-text{color:#000;}.x-grid3-locked td.x-grid3-row-marker,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{background:#ebeadb url(../js/ext/resources/images/default/grid/grid-hrow.gif) repeat-x 0 bottom!important;vertical-align:middle!important;color:#000;padding:0;border-top:1px solid #FFF;border-bottom:none!important;border-right:1px solid #6fa0df!important;text-align:center;}.x-grid3-locked td.x-grid3-row-marker div,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{padding:0 4px;color:#15428b!important;text-align:center;}.x-grid3-dirty-cell{background:transparent url(../js/ext/resources/images/default/grid/dirty.gif) no-repeat 0 0;}.x-grid3-topbar,.x-grid3-bottombar{font:normal 100% arial,sans;overflow:hidden;display:none;zoom:1;position:relative;}.x-grid3-topbar .x-toolbar{border-right:0 none;}.x-grid3-bottombar .x-toolbar{border-right:0 none;border-bottom:0 none;border-top:1px solid #a9bfd3;}.x-props-grid .x-grid3-cell{padding:1px;}.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y -16px!important;padding-left:12px;color:#000!important;}.x-props-grid .x-grid3-body .x-grid3-td-name{padding:1px;padding-right:0;background:#FFF!important;border:0 none;border-right:1px solid #eee;}.xg-hmenu-sort-asc .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-asc.gif);}.xg-hmenu-sort-desc .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-desc.gif);}.xg-hmenu-lock .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-lock.gif);}.xg-hmenu-unlock .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-unlock.gif);}.x-grid3-col-dd{border:0 none;padding:0;background:transparent;}.x-dd-drag-ghost .x-grid3-dd-wrap{padding:1px 3px 3px 1px;}.x-grid3-hd{-moz-user-select:none;}.x-grid3-hd-btn{display:none;position:absolute;width:14px;background:#c3daf9 url(../js/ext/resources/images/default/grid/grid3-hd-btn.gif) no-repeat left center;right:0;top:0;z-index:2;cursor:pointer;}.x-grid3-hd-over .x-grid3-hd-btn,.x-grid3-hd-menu-open .x-grid3-hd-btn{display:block;}a.x-grid3-hd-btn:hover{background-position:-14px center;}.x-grid3-body .x-grid3-td-expander{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y right;}.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner{padding:0!important;height:100%;}.x-grid3-row-expander{width:100%;height:18px;background-position:4px 2px;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/grid/row-expand-sprite.gif);}.x-grid3-row-collapsed .x-grid3-row-expander{background-position:4px 2px;}.x-grid3-row-expanded .x-grid3-row-expander{background-position:-21px 2px;}.x-grid3-row-collapsed .x-grid3-row-body{display:none!important;}.x-grid3-row-expanded .x-grid3-row-body{display:block!important;}.x-grid3-body .x-grid3-td-checker{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y right;}.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner,.x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner{padding:0!important;height:100%;}.x-grid3-row-checker,.x-grid3-hd-checker{width:100%;height:18px;background-position:2px 2px;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/grid/row-check-sprite.gif);}.x-grid3-row .x-grid3-row-checker{background-position:2px 2px;}.x-grid3-row-selected .x-grid3-row-checker,.x-grid3-hd-checker-on .x-grid3-hd-checker{background-position:-23px 2px;}.x-grid3-hd-checker{background-position:2px 3px;}.x-grid3-hd-checker-on .x-grid3-hd-checker{background-position:-23px 3px;}.x-grid3-body .x-grid3-td-numberer{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y right;}.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner{padding:3px 5px 0 0!important;text-align:right;color:#444;}.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer,.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker,.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-sel-bg.gif) repeat-y right;}.x-grid3-body .x-grid3-check-col-td .x-grid3-cell-inner{padding:1px 0 0!important;}.x-grid3-check-col{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/menu/unchecked.gif);}.x-grid3-check-col-on{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/menu/checked.gif);}.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1;}.x-grid-group-hd{border-bottom:2px solid #99bbe8;cursor:pointer;padding-top:6px;}.x-grid-group-hd div{background:transparent url(../js/ext/resources/images/default/grid/group-expand-sprite.gif) no-repeat 3px -47px;padding:4px 4px 4px 17px;color:#3764a0;font:bold 100% arial,sans;}.x-grid-group-collapsed .x-grid-group-hd div{background-position:3px 3px;}.x-grid-group-collapsed .x-grid-group-body{display:none;}.x-group-by-icon{background-image:url(../js/ext/resources/images/default/grid/group-by.gif);}.x-cols-icon{background-image:url(../js/ext/resources/images/default/grid/columns.gif);}.x-show-groups-icon{background-image:url(../js/ext/resources/images/default/grid/group-by.gif);}.ext-ie .x-grid3 .x-editor .x-form-text{position:relative;top:-1px;}.ext-ie .x-props-grid .x-editor .x-form-text{position:static;top:0;}.x-grid-empty{padding:10px;color:gray;font:normal 100% arial,sans;}.ext-ie7 .x-grid-panel .x-panel-bbar{position:relative;}.x-dd-drag-proxy{position:absolute;left:0;top:0;visibility:hidden;z-index:15000;}.x-dd-drag-ghost{color:#000;font:normal 100% arial,helvetica,sans-serif;-moz-opacity:.85;opacity:.85;filter:alpha(opacity=85);border-top:1px solid #ddd;border-left:1px solid #ddd;border-right:1px solid #bbb;border-bottom:1px solid #bbb;padding:3px;padding-left:20px;background-color:#FFF;white-space:nowrap;}.x-dd-drag-repair .x-dd-drag-ghost{-moz-opacity:.4;opacity:.4;filter:alpha(opacity=40);border:0 none;padding:0;background-color:transparent;}.x-dd-drag-repair .x-dd-drop-icon{visibility:hidden;}.x-dd-drop-icon{position:absolute;top:3px;left:3px;display:block;width:16px;height:16px;background-color:transparent;background-position:center;background-repeat:no-repeat;z-index:1;}.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-no.gif);}.x-dd-drop-ok .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-yes.gif);}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-add.gif);}.x-view-selector{position:absolute;left:0;top:0;width:0;background:#c3daf9;border:1px dotted #39b;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);zoom:1;}.x-tree .x-panel-body{background-color:#fff;}.ext-strict .ext-ie .x-tree .x-panel-bwrap{position:relative;overflow:hidden;}.x-tree-icon,.x-tree-ec-icon,.x-tree-elbow-line,.x-tree-elbow,.x-tree-elbow-end,.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-repeat:no-repeat;}.x-tree-node-collapsed .x-tree-node-icon,.x-tree-node-expanded .x-tree-node-icon,.x-tree-node-leaf .x-tree-node-icon{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-position:center;background-repeat:no-repeat;}.ext-ie .x-tree-node-indent img,.ext-ie .x-tree-node-icon,.ext-ie .x-tree-ec-icon{vertical-align:middle!important;}.x-tree-node-expanded .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/folder-open.gif);}.x-tree-node-leaf .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/leaf.gif);}.x-tree-node-collapsed .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/folder.gif);}.ext-ie input.x-tree-node-cb{width:15px;height:15px;}input.x-tree-node-cb{margin-left:1px;}.ext-ie input.x-tree-node-cb{margin-left:0;}.x-tree-noicon .x-tree-node-icon{width:0;height:0;}.x-tree-node-loading .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/loading.gif)!important;}.x-tree-node-loading a span{font-style:italic;color:#444;}.ext-ie .x-tree-node-el input{width:15px;height:15px;}.x-tree-lines .x-tree-elbow{background-image:url(../js/ext/resources/images/default/tree/elbow.gif);}.x-tree-lines .x-tree-elbow-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-plus.gif);}.x-tree-lines .x-tree-elbow-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-minus.gif);}.x-tree-lines .x-tree-elbow-end{background-image:url(../js/ext/resources/images/default/tree/elbow-end.gif);}.x-tree-lines .x-tree-elbow-end-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-plus.gif);}.x-tree-lines .x-tree-elbow-end-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-minus.gif);}.x-tree-lines .x-tree-elbow-line{background-image:url(../js/ext/resources/images/default/tree/elbow-line.gif);}.x-tree-no-lines .x-tree-elbow{background:transparent;}.x-tree-no-lines .x-tree-elbow-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-plus-nl.gif);}.x-tree-no-lines .x-tree-elbow-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-minus-nl.gif);}.x-tree-no-lines .x-tree-elbow-end{background:transparent;}.x-tree-no-lines .x-tree-elbow-end-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-plus-nl.gif);}.x-tree-no-lines .x-tree-elbow-end-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-minus-nl.gif);}.x-tree-no-lines .x-tree-elbow-line{background:transparent;}.x-tree-arrows .x-tree-elbow{background:transparent;}.x-tree-arrows .x-tree-elbow-plus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat 0 0;}.x-tree-arrows .x-tree-elbow-minus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat -16px 0;}.x-tree-arrows .x-tree-elbow-end{background:transparent;}.x-tree-arrows .x-tree-elbow-end-plus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat 0 0;}.x-tree-arrows .x-tree-elbow-end-minus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat -16px 0;}.x-tree-arrows .x-tree-elbow-line{background:transparent;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus{background-position:-32px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus{background-position:-48px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{background-position:-32px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{background-position:-48px 0;}.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{cursor:pointer;}.ext-ie ul.x-tree-node-ct{font-size:0;line-height:0;zoom:1;}.x-tree-node{color:#000;font:normal 100% arial,sans;white-space:nowrap;}.x-tree-node-el{line-height:18px;cursor:pointer;}.x-tree-node a,.x-dd-drag-ghost a{text-decoration:none;color:#000;-khtml-user-select:none;-moz-user-select:none;-kthml-user-focus:normal;-moz-user-focus:normal;-moz-outline:0 none;outline:0 none;}.x-tree-node a span,.x-dd-drag-ghost a span{text-decoration:none;color:#000;padding:1px 3px 1px 2px;}.x-tree-node .x-tree-node-disabled a span{color:gray!important;}.x-tree-node .x-tree-node-disabled .x-tree-node-icon{-moz-opacity:.5;opacity:.5;filter:alpha(opacity=50);}.x-tree-node .x-tree-node-inline-icon{background:transparent;}.x-tree-node a:hover,.x-dd-drag-ghost a:hover{text-decoration:none;}.x-tree-node div.x-tree-drag-insert-below{border-bottom:1px dotted #36c;}.x-tree-node div.x-tree-drag-insert-above{border-top:1px dotted #36c;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{border-bottom:0 none;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{border-top:0 none;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{border-bottom:2px solid #36c;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{border-top:2px solid #36c;}.x-tree-node .x-tree-drag-append a span{background:#ddd;border:1px dotted gray;}.x-tree-node .x-tree-node-over{background-color:#eee;}.x-tree-node .x-tree-selected{background-color:#d9e8fb;}.x-dd-drag-ghost .x-tree-node-indent,.x-dd-drag-ghost .x-tree-ec-icon{display:none!important;}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-add.gif);}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-over.gif);}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-under.gif);}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-between.gif);}.x-date-picker{border:1px solid #1b376c;border-top:0 none;background:#fff;position:relative;}.x-date-picker a{-moz-outline:0 none;outline:0 none;}.x-date-inner,.x-date-inner td,.x-date-inner th{border-collapse:separate;}.x-date-middle,.x-date-left,.x-date-right{background:url(../js/ext/resources/images/default/shared/hd-sprite.gif) repeat-x 0 -83px;color:#FFF;font:bold 100% arial,sans;overflow:hidden;}.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{background:transparent!important;vertical-align:middle;}.x-date-middle .x-btn .x-btn-text{color:#fff;}.x-date-middle .x-btn-with-menu .x-btn-center em{background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow-light.gif) no-repeat right 0;}.x-date-right,.x-date-left{width:18px;}.x-date-right{text-align:right;}.x-date-middle{padding-top:2px;padding-bottom:2px;}.x-date-right a,.x-date-left a{display:block;width:16px;height:16px;background-position:center;background-repeat:no-repeat;cursor:pointer;-moz-opacity:.6;opacity:.6;filter:alpha(opacity=60);}.x-date-right a:hover,.x-date-left a:hover{-moz-opacity:1;opacity:1;filter:alpha(opacity=100);}.x-date-right a{background-image:url(../js/ext/resources/images/default/shared/right-btn.gif);margin-right:2px;text-decoration:none!important;}.x-date-left a{background-image:url(../js/ext/resources/images/default/shared/left-btn.gif);margin-left:2px;text-decoration:none!important;}table.x-date-inner{width:100%;table-layout:fixed;}.x-date-inner th{width:25px;}.x-date-inner th{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;text-align:right!important;border-bottom:1px solid #a3bad9;font:normal 100% arial,sans;color:#233d6d;cursor:default;padding:0;border-collapse:separate;}.x-date-inner th span{display:block;padding:2px;padding-right:7px;}.x-date-inner td{border:1px solid #fff;text-align:right;padding:0;}.x-date-inner a{padding:2px 5px;display:block;font:normal 100% arial,sans;text-decoration:none;color:#000;text-align:right;zoom:1;}.x-date-inner .x-date-active{cursor:pointer;color:#000;}.x-date-inner .x-date-selected a{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;padding:1px 4px;}.x-date-inner .x-date-today a{border:1px solid #8B0000;padding:1px 4px;}.x-date-inner .x-date-selected span{font-weight:700;}.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a{color:#aaa;text-decoration:none!important;}.x-date-bottom{padding:4px;border-top:1px solid #a3bad9;background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;}.x-date-inner a:hover,.x-date-inner .x-date-disabled a:hover{text-decoration:none!important;color:#000;background:#ddecfe;}.x-date-inner .x-date-disabled a{cursor:default;background:#eee;color:#bbb;}.x-date-mmenu{background:#eee!important;}.x-date-mmenu .x-menu-item{font-size:10px;padding:1px 24px 1px 4px;white-space:nowrap;color:#000;}.x-date-mmenu .x-menu-item .x-menu-item-icon{width:10px;height:10px;margin-right:5px;background-position:center -4px!important;}.x-date-mp{position:absolute;left:0;top:0;background:#FFF;display:none;}.x-date-mp td{padding:2px;font:normal 100% arial,sans;}td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn{border:0 none;text-align:center;vertical-align:middle;width:25%;}.x-date-mp-ok{margin-right:3px;}.x-date-mp-btns button{text-decoration:none;text-align:center;text-decoration:none!important;background:#083772;color:#FFF;border:1px solid;border-color:#36c #005 #005 #36c;padding:1px 3px;font:normal 100% arial,sans;cursor:pointer;}.x-date-mp-btns{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;}.x-date-mp-btns td{border-top:1px solid #c5d2df;text-align:center;}td.x-date-mp-month a,td.x-date-mp-year a{display:block;padding:2px 4px;text-decoration:none;text-align:center;color:#15428b;}td.x-date-mp-month a:hover,td.x-date-mp-year a:hover{color:#15428b;text-decoration:none;cursor:pointer;background:#ddecfe;}td.x-date-mp-sel a{padding:1px 3px;background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;}.x-date-mp-ybtn a{overflow:hidden;width:15px;height:15px;cursor:pointer;background:transparent url(../js/ext/resources/images/default/panel/tool-sprites.gif) no-repeat;display:block;margin:0 auto;}.x-date-mp-ybtn a.x-date-mp-next{background-position:0 -120px;}.x-date-mp-ybtn a.x-date-mp-next:hover{background-position:-15px -120px;}.x-date-mp-ybtn a.x-date-mp-prev{background-position:0 -105px;}.x-date-mp-ybtn a.x-date-mp-prev:hover{background-position:-15px -105px;}.x-date-mp-ybtn{text-align:center;}td.x-date-mp-sep{border-right:1px solid #c5d2df;}.x-tip{position:absolute;top:0;left:0;visibility:hidden;z-index:20000;border:0 none;}.x-tip .x-tip-close{background-image:url(../js/ext/resources/images/default/qtip/close.gif);height:15px;float:right;width:15px;margin:0 0 2px 2px;cursor:pointer;display:none;}.x-tip .x-tip-tc{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -62px;padding-top:3px;overflow:hidden;zoom:1;}.x-tip .x-tip-tl{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 0;padding-left:6px;overflow:hidden;zoom:1;}.x-tip .x-tip-tr{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right 0;padding-right:6px;overflow:hidden;zoom:1;}.x-tip .x-tip-bc{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -121px;height:3px;overflow:hidden;}.x-tip .x-tip-bl{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -59px;padding-left:6px;zoom:1;}.x-tip .x-tip-br{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right -59px;padding-right:6px;zoom:1;}.x-tip .x-tip-mc{border:0 none;font:normal 100% arial,sans;}.x-tip .x-tip-ml{background:#fff url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -124px;padding-left:6px;zoom:1;}.x-tip .x-tip-mr{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right -124px;padding-right:6px;zoom:1;}.ext-ie .x-tip .x-tip-header,.ext-ie .x-tip .x-tip-tc{font-size:0;line-height:0;}.x-tip .x-tip-header-text{font:bold 100% arial,sans;padding:0;margin:0 0 2px;color:#444;}.x-tip .x-tip-body{font:normal 100% arial,sans;margin:0!important;line-height:14px;color:#444;padding:0;}.x-tip .x-tip-body .loading-indicator{margin:0;}.x-tip-draggable .x-tip-header,.x-tip-draggable .x-tip-header-text{cursor:move;}.x-form-invalid-tip .x-tip-tc{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) repeat-x 0 -12px;padding-top:6px;}.x-form-invalid-tip .x-tip-tl{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-tr{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-bc{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) repeat-x 0 -18px;height:6px;}.x-form-invalid-tip .x-tip-bl{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) no-repeat 0 -6px;}.x-form-invalid-tip .x-tip-br{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) no-repeat right -6px;}.x-form-invalid-tip .x-tip-ml{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-mr{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-body{padding:2px;}.x-form-invalid-tip .x-tip-body{padding-left:24px;background:transparent url(../js/ext/resources/images/default/form/exclamation.gif) no-repeat 2px 2px;}.x-menu{border:1px solid #718bb7;z-index:15000;zoom:1;background:#f0f0f0 url(../js/ext/resources/images/default/menu/menu.gif) repeat-y;padding:2px;}.x-menu a{text-decoration:none!important;}.ext-ie .x-menu{zoom:1;overflow:hidden;}.x-menu-list{background:transparent;border:0 none;}.x-menu li{line-height:100%;}.x-menu li.x-menu-sep-li{font-size:1px;line-height:1px;}.x-menu-list-item{font:normal 100% arial,sans;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;display:block;padding:1px;}.x-menu-item-arrow{background:transparent url(../js/ext/resources/images/default/menu/menu-parent.gif) no-repeat right;}.x-menu-sep{display:block;font-size:1px;line-height:1px;margin:2px 3px;background-color:#e0e0e0;border-bottom:1px solid #fff;overflow:hidden;}.x-menu-focus{position:absolute;left:0;top:-5px;width:0;height:0;line-height:1px;}.x-menu a.x-menu-item{display:block;line-height:16px;padding:3px 21px 3px 3px;white-space:nowrap;text-decoration:none;color:#222;-moz-outline:0 none;outline:0 none;cursor:pointer;}.x-menu-item-active{background:#ebf3fd url(../js/ext/resources/images/default/menu/item-over.gif) repeat-x left bottom;border:1px solid #aaccf6;padding:0;}.x-menu-item-active a.x-menu-item{color:#233d6d;}.x-menu-item-icon{border:0 none;height:16px;padding:0;vertical-align:top;width:16px;margin:0 8px 0 0;background-position:center;}.x-menu-check-item .x-menu-item-icon{background:transparent url(../js/ext/resources/images/default/menu/unchecked.gif) no-repeat center;}.x-menu-item-checked .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/menu/checked.gif);}.x-menu-group-item .x-menu-item-icon{background:transparent;}.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{background:transparent url(../js/ext/resources/images/default/menu/group-checked.gif) no-repeat center;}.x-menu-plain{background:#fff!important;}.x-menu-date-item{padding:0;}.x-menu .x-color-palette,.x-menu .x-date-picker{margin-left:26px;margin-right:4px;}.x-menu .x-date-picker{border:1px solid #a3bad9;margin-top:2px;margin-bottom:2px;}.x-menu-plain .x-color-palette,.x-menu-plain .x-date-picker{margin:0;border:0 none;}.x-date-menu{padding:0!important;}.x-cycle-menu .x-menu-item-checked{border:1px dotted #a3bae9!important;background:#DFE8F6;padding:0;}.x-box-tl{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat 0 0;zoom:1;}.x-box-tc{height:8px;background:transparent url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 0;overflow:hidden;}.x-box-tr{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat right -8px;}.x-box-ml{background:transparent url(../js/ext/resources/images/default/box/l.gif) repeat-y 0;padding-left:4px;overflow:hidden;zoom:1;}.x-box-mc{background:#eee url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 -16px;padding:4px 10px;font-family:"Myriad Pro","Myriad Web",Tahoma,Helvetica,Arial,sans-serif;color:#393939;font-size:100%;}.x-box-mc h3{font-size:14px;font-weight:700;margin:0 0 4px;zoom:1;}.x-box-mr{background:transparent url(../js/ext/resources/images/default/box/r.gif) repeat-y right;padding-right:4px;overflow:hidden;}.x-box-bl{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat 0 -16px;zoom:1;}.x-box-bc{background:transparent url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 -8px;height:8px;overflow:hidden;}.x-box-br{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat right -24px;}.x-box-tl,.x-box-bl{padding-left:8px;overflow:hidden;}.x-box-tr,.x-box-br{padding-right:8px;overflow:hidden;}.x-box-blue .x-box-bl,.x-box-blue .x-box-br,.x-box-blue .x-box-tl,.x-box-blue .x-box-tr{background-image:url(../js/ext/resources/images/default/box/corners-blue.gif);}.x-box-blue .x-box-bc,.x-box-blue .x-box-mc,.x-box-blue .x-box-tc{background-image:url(../js/ext/resources/images/default/box/tb-blue.gif);}.x-box-blue .x-box-mc{background-color:#c3daf9;}.x-box-blue .x-box-mc h3{color:#17385b;}.x-box-blue .x-box-ml{background-image:url(../js/ext/resources/images/default/box/l-blue.gif);}.x-box-blue .x-box-mr{background-image:url(../js/ext/resources/images/default/box/r-blue.gif);}#x-debug-browser .x-tree .x-tree-node a span{color:#222297;font-size:100%;padding-top:2px;font-family:monotype,"courier new",sans-serif;line-height:18px;}#x-debug-browser .x-tree a i{color:#FF4545;font-style:normal;}#x-debug-browser .x-tree a em{color:#999;}#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{background:#c3daf9;}#x-debug-browser .x-tool-toggle{background-position:0 -75px;}#x-debug-browser .x-tool-toggle-over{background-position:-15px -75px;}#x-debug-browser.x-panel-collapsed .x-tool-toggle{background-position:0 -60px;}#x-debug-browser.x-panel-collapsed .x-tool-toggle-over{background-position:-15px -60px;}.x-combo-list{border:1px solid #98c0f4;background:#ddecfe;zoom:1;overflow:hidden;}.x-combo-list-inner{overflow:auto;background:#FFF;position:relative;zoom:1;overflow-x:hidden;}.x-combo-list-hd{font:bold 100% arial,sans;color:#15428b;background-image:url(../js/ext/resources/images/default/layout/panel-title-light-bg.gif);border-bottom:1px solid #98c0f4;padding:3px;}.x-resizable-pinned .x-combo-list-inner{border-bottom:1px solid #98c0f4;}.x-combo-list-item{font:normal 100% arial,sans;padding:2px;border:1px solid #fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.x-combo-list .x-combo-selected{border:1px dotted #a3bae9!important;background:#DFE8F6;cursor:pointer;}.x-combo-noedit{cursor:pointer;}.x-combo-list .x-toolbar{border-top:1px solid #98c0f4;border-bottom:0 none;}.x-combo-list-small .x-combo-list-item{font:normal 100% arial,sans;}.x-panel{border-style:solid;border-color:#99bbe8;border-width:0;}.x-panel-header{overflow:hidden;zoom:1;color:#15428b;font:bold 100% arial,sans;padding:5px 3px 4px 5px;border:1px solid #99bbe8;line-height:15px;background:transparent url(../js/ext/resources/images/default/panel/white-top-bottom.gif) repeat-x 0 -1px;}.x-panel-body{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;background:#FFF;position:relative;}.x-panel-bbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}.x-panel-tbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}.x-panel-tbar-noheader .x-toolbar,.x-panel-mc .x-panel-tbar .x-toolbar{border-top:1px solid #99bbe8;border-bottom:0 none;}.x-panel-body-noheader,.x-panel-mc .x-panel-body{border-top:1px solid #99bbe8;}.x-panel-header{overflow:hidden;zoom:1;}.x-panel-tl .x-panel-header{color:#15428b;font:bold 100% arial,sans;padding:5px 0 4px;border:0 none;background:transparent;}.x-panel-tl .x-panel-icon,.x-window-tl .x-panel-icon{padding-left:20px!important;background-repeat:no-repeat;background-position:0 4px;zoom:1;}.x-panel-inline-icon{width:16px;height:16px;background-repeat:no-repeat;background-position:0 0;vertical-align:middle;margin-right:4px;margin-top:-1px;margin-bottom:-1px;}.x-panel-tc{background:transparent url(../js/ext/resources/images/default/panel/top-bottom.gif) repeat-x 0 0;overflow:hidden;}.ext-strict .ext-ie7 .x-panel-tc{overflow:visible;}.x-panel-tl{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat 0 0;padding-left:6px;zoom:1;border-bottom:1px solid #99bbe8;}.x-panel-tr{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat right 0;zoom:1;padding-right:6px;}.x-panel-bc{background:transparent url(../js/ext/resources/images/default/panel/top-bottom.gif) repeat-x 0 bottom;zoom:1;}.x-panel-bc .x-panel-footer{zoom:1;}.x-panel-bl{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat 0 bottom;padding-left:6px;zoom:1;}.x-panel-br{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat right bottom;padding-right:6px;zoom:1;}.x-panel-mc{border:0 none;padding:0;margin:0;font:normal 100% arial,sans;padding-top:6px;background:#dfe8f6;}.x-panel-mc .x-panel-body{background:transparent;border:0 none;}.x-panel-ml{background:#fff url(../js/ext/resources/images/default/panel/left-right.gif) repeat-y 0 0;padding-left:6px;zoom:1;}.x-panel-mr{background:transparent url(../js/ext/resources/images/default/panel/left-right.gif) repeat-y right 0;padding-right:6px;zoom:1;}.x-panel-bc .x-panel-footer{padding-bottom:6px;}.x-panel-nofooter .x-panel-bc{height:6px;font-size:0;line-height:0;}.x-panel-bwrap{overflow:hidden;zoom:1;}.x-panel-body{overflow:hidden;zoom:1;}.x-panel-collapsed .x-resizable-handle{display:none;}.ext-gecko .x-panel-animated div{overflow:hidden!important;}.x-plain-body{overflow:hidden;}.x-plain-bbar .x-toolbar{overflow:hidden;padding:2px;}.x-plain-tbar .x-toolbar{overflow:hidden;padding:2px;}.x-plain-bwrap{overflow:hidden;zoom:1;}.x-plain{overflow:hidden;}.x-tool{overflow:hidden;width:15px;height:15px;float:right;cursor:pointer;background:transparent url(../js/ext/resources/images/default/panel/tool-sprites.gif) no-repeat;margin-left:2px;}.x-tool-toggle{background-position:0 -60px;}.x-tool-toggle-over{background-position:-15px -60px;}.x-panel-collapsed .x-tool-toggle{background-position:0 -75px;}.x-panel-collapsed .x-tool-toggle-over{background-position:-15px -75px;}.x-tool-close{background-position:0 0;}.x-tool-close-over{background-position:-15px 0;}.x-tool-minimize{background-position:0 -15px;}.x-tool-minimize-over{background-position:-15px -15px;}.x-tool-maximize{background-position:0 -30px;}.x-tool-maximize-over{background-position:-15px -30px;}.x-tool-restore{background-position:0 -45px;}.x-tool-restore-over{background-position:-15px -45px;}.x-tool-gear{background-position:0 -90px;}.x-tool-gear-over{background-position:-15px -90px;}.x-tool-pin{background-position:0 -135px;}.x-tool-pin-over{background-position:-15px -135px;}.x-tool-unpin{background-position:0 -150px;}.x-tool-unpin-over{background-position:-15px -150px;}.x-tool-right{background-position:0 -165px;}.x-tool-right-over{background-position:-15px -165px;}.x-tool-left{background-position:0 -180px;}.x-tool-left-over{background-position:-15px -180px;}.x-tool-up{background-position:0 -210px;}.x-tool-up-over{background-position:-15px -210px;}.x-tool-down{background-position:0 -195px;}.x-tool-down-over{background-position:-15px -195px;}.x-tool-refresh{background-position:0 -225px;}.x-tool-refresh-over{background-position:-15px -225px;}.x-tool-minus{background-position:0 -255px;}.x-tool-minus-over{background-position:-15px -255px;}.x-tool-plus{background-position:0 -240px;}.x-tool-plus-over{background-position:-15px -240px;}.x-tool-search{background-position:0 -270px;}.x-tool-search-over{background-position:-15px -270px;}.x-tool-save{background-position:0 -285px;}.x-tool-save-over{background-position:-15px -285px;}.x-tool-help{background-position:0 -300px;}.x-tool-help-over{background-position:-15px -300px;}.x-tool-print{background-position:0 -315px;}.x-tool-print-over{background-position:-15px -315px;}.x-panel-ghost{background:#cbddf3;z-index:12000;overflow:hidden;position:absolute;left:0;top:0;opacity:.65;-moz-opacity:.65;filter:alpha(opacity=65);}.x-panel-ghost ul{margin:0;padding:0;overflow:hidden;font-size:0;line-height:0;border:1px solid #99bbe8;border-top:0 none;display:block;}.x-panel-ghost *{cursor:move!important;}.x-panel-dd-spacer{border:2px dashed #99bbe8;}.x-panel-btns-ct{padding:5px;}.x-panel-btns-ct .x-btn{float:right;clear:none;}.x-panel-btns-ct .x-panel-btns td{border:0;padding:0;}.x-panel-btns-ct .x-panel-btns-right table{float:right;clear:none;}.x-panel-btns-ct .x-panel-btns-left table{float:left;clear:none;}.x-panel-btns-ct .x-panel-btns-center{text-align:center;}.x-panel-btns-ct .x-panel-btns-center table{margin:0 auto;}.x-panel-btns-ct table td.x-panel-btn-td{padding:3px;}.x-panel-btns-ct .x-btn-focus .x-btn-left{background-position:0 -147px;}.x-panel-btns-ct .x-btn-focus .x-btn-right{background-position:0 -168px;}.x-panel-btns-ct .x-btn-focus .x-btn-center{background-position:0 -189px;}.x-panel-btns-ct .x-btn-over .x-btn-left{background-position:0 -63px;}.x-panel-btns-ct .x-btn-over .x-btn-right{background-position:0 -84px;}.x-panel-btns-ct .x-btn-over .x-btn-center{background-position:0 -105px;}.x-panel-btns-ct .x-btn-click .x-btn-center{background-position:0 -126px;}.x-panel-btns-ct .x-btn-click .x-btn-right{background-position:0 -84px;}.x-panel-btns-ct .x-btn-click .x-btn-left{background-position:0 -63px;}.x-window{zoom:1;}.x-window .x-resizable-handle{opacity:0;-moz-opacity:0;filter:alpha(opacity=0);}.x-window-proxy{background:#C7DFFC;border:1px solid #99bbe8;z-index:12000;overflow:hidden;position:absolute;left:0;top:0;display:none;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);}.x-window-header{overflow:hidden;zoom:1;}.x-window-bwrap{z-index:1;position:relative;zoom:1;}.x-window-tl .x-window-header{color:#15428b;font:bold 100% arial,sans;padding:5px 0 4px;}.x-window-header-text{cursor:pointer;}.x-window-tc{background:transparent url(../js/ext/resources/images/default/window/top-bottom.png) repeat-x 0 0;overflow:hidden;zoom:1;}.x-window-tl{background:transparent url(../js/ext/resources/images/default/window/left-corners.png) no-repeat 0 0;padding-left:6px;zoom:1;z-index:1;position:relative;}.x-window-tr{background:transparent url(../js/ext/resources/images/default/window/right-corners.png) no-repeat right 0;padding-right:6px;}.x-window-bc{background:transparent url(../js/ext/resources/images/default/window/top-bottom.png) repeat-x 0 bottom;zoom:1;}.x-window-bc .x-window-footer{padding-bottom:6px;zoom:1;font-size:0;line-height:0;}.x-window-bl{background:transparent url(../js/ext/resources/images/default/window/left-corners.png) no-repeat 0 bottom;padding-left:6px;zoom:1;}.x-window-br{background:transparent url(../js/ext/resources/images/default/window/right-corners.png) no-repeat right bottom;padding-right:6px;zoom:1;}.x-window-mc{border:1px solid #99bbe8;padding:0;margin:0;font:normal 100% arial,sans;background:#dfe8f6;}.x-window-ml{background:transparent url(../js/ext/resources/images/default/window/left-right.png) repeat-y 0 0;padding-left:6px;zoom:1;}.x-window-mr{background:transparent url(../js/ext/resources/images/default/window/left-right.png) repeat-y right 0;padding-right:6px;zoom:1;}.x-panel-nofooter .x-window-bc{height:6px;}.x-window-body{overflow:hidden;}.x-window-bwrap{overflow:hidden;}.x-window-maximized .x-window-bl,.x-window-maximized .x-window-br,.x-window-maximized .x-window-ml,.x-window-maximized .x-window-mr,.x-window-maximized .x-window-tl,.x-window-maximized .x-window-tr{padding:0;}.x-window-maximized .x-window-footer{padding-bottom:0;}.x-window-maximized .x-window-tc{padding-left:3px;padding-right:3px;background-color:#FFF;}.x-window-maximized .x-window-mc{border-left:0 none;border-right:0 none;}.x-window-tbar .x-toolbar,.x-window-bbar .x-toolbar{border-left:0 none;border-right:0 none;}.x-window-bbar .x-toolbar{border-top:1px solid #99bbe8;border-bottom:0 none;}.x-window-draggable,.x-window-draggable .x-window-header-text{cursor:move;}.x-window-maximized .x-window-draggable,.x-window-maximized .x-window-draggable .x-window-header-text{cursor:default;}.x-window-body{background:transparent;}.x-panel-ghost .x-window-tl{border-bottom:1px solid #99bbe8;}.x-panel-collapsed .x-window-tl{border-bottom:1px solid #84a0c4;}.x-window-maximized-ct{overflow:hidden;}.x-window-maximized .x-resizable-handle{display:none;}.x-window-sizing-ghost ul{border:0 none!important;}.x-dlg-focus{-moz-outline:0 none;outline:0 none;width:0;height:0;overflow:hidden;position:absolute;top:0;left:0;}.x-dlg-mask{z-index:10000;display:none;position:absolute;top:0;left:0;-moz-opacity:.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;}body.ext-ie6.x-body-masked select{visibility:hidden;}body.ext-ie6.x-body-masked .x-window select{visibility:visible;}.x-window-plain .x-window-mc{background:#CAD9EC;border-right:1px solid #DFE8F6;border-bottom:1px solid #DFE8F6;border-top:1px solid #a3bae9;border-left:1px solid #a3bae9;}.x-window-plain .x-window-body{border-left:1px solid #DFE8F6;border-top:1px solid #DFE8F6;border-bottom:1px solid #a3bae9;border-right:1px solid #a3bae9;background:transparent!important;}body.x-body-masked .x-window-plain .x-window-mc{background:#C7D6E9;}.x-html-editor-wrap{border:1px solid #a9bfd3;background:#FFF;}.x-html-editor-tb .x-btn-text{background:transparent url(../js/ext/resources/images/default/editor/tb-sprite.gif) no-repeat;}.x-html-editor-tb .x-edit-bold .x-btn-text{background-position:0 0;}.x-html-editor-tb .x-edit-italic .x-btn-text{background-position:-16px 0;}.x-html-editor-tb .x-edit-underline .x-btn-text{background-position:-32px 0;}.x-html-editor-tb .x-edit-forecolor .x-btn-text{background-position:-160px 0;}.x-html-editor-tb .x-edit-backcolor .x-btn-text{background-position:-176px 0;}.x-html-editor-tb .x-edit-justifyleft .x-btn-text{background-position:-112px 0;}.x-html-editor-tb .x-edit-justifycenter .x-btn-text{background-position:-128px 0;}.x-html-editor-tb .x-edit-justifyright .x-btn-text{background-position:-144px 0;}.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text{background-position:-80px 0;}.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text{background-position:-96px 0;}.x-html-editor-tb .x-edit-increasefontsize .x-btn-text{background-position:-48px 0;}.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text{background-position:-64px 0;}.x-html-editor-tb .x-edit-sourceedit .x-btn-text{background-position:-192px 0;}.x-html-editor-tb .x-edit-createlink .x-btn-text{background-position:-208px 0;}.x-html-editor-tip .x-tip-bd .x-tip-bd-inner{padding:5px;padding-bottom:1px;}.x-html-editor-tb .x-toolbar{position:static!important;}.x-panel-noborder .x-panel-body-noborder{border-width:0;}.x-panel-noborder .x-panel-header-noborder{border-width:0;border-bottom:1px solid #99bbe8;}.x-panel-noborder .x-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #99bbe8;}.x-panel-noborder .x-panel-bbar-noborder .x-toolbar{border-width:0;border-top:1px solid #99bbe8;}.x-window-noborder .x-window-mc{border-width:0;}.x-window-plain .x-window-body-noborder{border-width:0;}.x-tab-panel-noborder .x-tab-panel-body-noborder{border-width:0;}.x-tab-panel-noborder .x-tab-panel-header-noborder{border-top-width:0;border-left-width:0;border-right-width:0;}.x-tab-panel-noborder .x-tab-panel-footer-noborder{border-bottom-width:0;border-left-width:0;border-right-width:0;}.x-tab-panel-bbar-noborder .x-toolbar{border-width:0;border-top:1px solid #99bbe8;}.x-tab-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #99bbe8;}.x-border-layout-ct{background:#dfe8f6;}.x-border-panel{position:absolute;left:0;top:0;}.x-tool-collapse-south{background-position:0 -195px;}.x-tool-collapse-south-over{background-position:-15px -195px;}.x-tool-collapse-north{background-position:0 -210px;}.x-tool-collapse-north-over{background-position:-15px -210px;}.x-tool-collapse-west{background-position:0 -180px;}.x-tool-collapse-west-over{background-position:-15px -180px;}.x-tool-collapse-east{background-position:0 -165px;}.x-tool-collapse-east-over{background-position:-15px -165px;}.x-tool-expand-south{background-position:0 -210px;}.x-tool-expand-south-over{background-position:-15px -210px;}.x-tool-expand-north{background-position:0 -195px;}.x-tool-expand-north-over{background-position:-15px -195px;}.x-tool-expand-west{background-position:0 -165px;}.x-tool-expand-west-over{background-position:-15px -165px;}.x-tool-expand-east{background-position:0 -180px;}.x-tool-expand-east-over{background-position:-15px -180px;}.x-tool-expand-north,.x-tool-expand-south{float:right;margin:3px;}.x-tool-expand-east,.x-tool-expand-west{float:none;margin:3px auto;}.x-accordion-hd .x-tool-toggle{background-position:0 -255px;}.x-accordion-hd .x-tool-toggle-over{background-position:-15px -255px;}.x-panel-collapsed .x-accordion-hd .x-tool-toggle{background-position:0 -240px;}.x-panel-collapsed .x-accordion-hd .x-tool-toggle-over{background-position:-15px -240px;}.x-accordion-hd{color:#222;padding-top:4px;padding-bottom:3px;border-top:0 none;font-weight:400;background:transparent url(../js/ext/resources/images/default/panel/light-hd.gif) repeat-x 0 -9px;}.x-layout-collapsed{position:absolute;left:-10000px;top:-10000px;visibility:hidden;background-color:#d2e0f2;width:20px;height:20px;overflow:hidden;border:1px solid #98c0f4;z-index:20;}.ext-border-box .x-layout-collapsed{width:22px;height:22px;}.x-layout-collapsed-over{cursor:pointer;background-color:#d9e8fb;}.x-layout-collapsed-west .x-layout-collapsed-tools,.x-layout-collapsed-east .x-layout-collapsed-tools{position:absolute;top:0;left:0;width:20px;height:20px;}.x-layout-split{position:absolute;height:5px;width:5px;line-height:1px;font-size:1px;z-index:3;background-color:transparent;}.x-layout-split-h{background-image:url(../js/ext/resources/images/default/s.gif);background-position:left;}.x-layout-split-v{background-image:url(../js/ext/resources/images/default/s.gif);background-position:top;}.x-column-layout-ct{overflow:hidden;zoom:1;}.x-column{float:left;padding:0;margin:0;overflow:hidden;zoom:1;}.x-layout-mini{position:absolute;top:0;left:0;display:block;width:5px;height:35px;cursor:pointer;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);}.x-layout-mini-over,.x-layout-collapsed-over .x-layout-mini{opacity:1;-moz-opacity:1;filter:none;}.x-layout-split-west .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-left.gif);}.x-layout-split-east .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-right.gif);}.x-layout-split-north .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-top.gif);}.x-layout-split-south .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-bottom.gif);}.x-layout-cmini-west .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-right.gif);}.x-layout-cmini-east .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-left.gif);}.x-layout-cmini-north .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-bottom.gif);}.x-layout-cmini-south .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-top.gif);}.x-layout-cmini-west,.x-layout-cmini-east{border:0 none;width:5px!important;padding:0;background:transparent;}.x-layout-cmini-north,.x-layout-cmini-south{border:0 none;height:5px!important;padding:0;background:transparent;}.x-viewport,.x-viewport body{margin:0;padding:0;border:0 none;overflow:hidden;height:100%;}.x-abs-layout-item{position:absolute;left:0;top:0;}.ext-ie input.x-abs-layout-item,.ext-ie textarea.x-abs-layout-item{margin:0;}.x-progress-wrap{border:1px solid #6593cf;overflow:hidden;}.x-progress-inner{height:18px;background:#e0e8f3 url(../js/ext/resources/images/default/qtip/bg.gif) repeat-x;position:relative;}.x-progress-bar{height:18px;float:left;width:0;background:#9CBFEE url(../js/ext/resources/images/default/progress/progress-bg.gif) repeat-x left center;border-top:1px solid #D1E4FD;border-bottom:1px solid #7FA9E4;border-right:1px solid #7FA9E4;}.x-progress-text{font-size:100%;font-weight:700;color:#fff;padding:1px 5px;overflow:hidden;position:absolute;left:0;text-align:center;}.x-progress-text-back{color:#396095;line-height:16px;}.ext-ie .x-progress-text-back{line-height:15px;}.x-window-dlg .x-window-body{border:0 none!important;padding:5px 10px;overflow:hidden!important;}.x-window-dlg .x-window-mc{border:0 none!important;}.x-window-dlg .ext-mb-text,.x-window-dlg .x-window-header-text{font-size:100%;}.x-window-dlg .ext-mb-input{margin-top:4px;width:95%;}.x-window-dlg .ext-mb-textarea{margin-top:4px;font:normal 100% arial,sans;}.x-window-dlg .x-progress-wrap{margin-top:4px;}.ext-ie .x-window-dlg .x-progress-wrap{margin-top:6px;}.x-window-dlg .x-msg-box-wait{background:transparent url(../js/ext/resources/images/default/grid/loading.gif) no-repeat left;display:block;width:300px;padding-left:18px;line-height:18px;}.x-window-dlg .ext-mb-icon{float:left;width:47px;height:32px;}.ext-ie .x-window-dlg .ext-mb-icon{width:44px;}.x-window-dlg .ext-mb-info{background:transparent url(../js/ext/resources/images/default/window/icon-info.gif) no-repeat top left;}.x-window-dlg .ext-mb-warning{background:transparent url(../js/ext/resources/images/default/window/icon-warning.gif) no-repeat top left;}.x-window-dlg .ext-mb-question{background:transparent url(../js/ext/resources/images/default/window/icon-question.gif) no-repeat top left;}.x-window-dlg .ext-mb-error{background:transparent url(../js/ext/resources/images/default/window/icon-error.gif) no-repeat top left;}/*
+ * Ext JS Library 2.0.2
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing(a)extjs.com
+ *
+ * http://extjs.com/license
+ */.x-panel{border-style:solid;border-color:#d0d0d0;}.x-panel-header{color:#333;border:1px solid #d0d0d0;background-image:url(../js/ext/resources/images/gray/panel/white-top-bottom.gif);}.x-panel-body{border-color:#d0d0d0;}.x-panel-bbar .x-toolbar{border-color:#d0d0d0;}.x-panel-tbar .x-toolbar{border-color:#d0d0d0;}.x-panel-tbar-noheader .x-toolbar,.x-panel-mc .x-panel-tbar .x-toolbar{border-color:#d0d0d0;}.x-panel-body-noheader,.x-panel-mc .x-panel-body{border-color:#d0d0d0;}.x-panel-tl .x-panel-header{color:#333;}.x-panel-tc{background-image:url(../js/ext/resources/images/gray/panel/top-bottom.gif);}.x-panel-tl{background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);border-color:#d0d0d0;}.x-panel-tr{background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);}.x-panel-bc{background-image:url(../js/ext/resources/images/gray/panel/top-bottom.gif);}.x-panel-bl{background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);}.x-panel-br{background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);}.x-panel-mc{background:#f1f1f1;}.x-panel-mc .x-panel-body{background:transparent;border:0 none;}.x-panel-ml{background-image:url(../js/ext/resources/images/gray/panel/left-right.gif);}.x-panel-mr{background-image:url(../js/ext/resources/images/gray/panel/left-right.gif);}/* Tools */.x-tool{background-image:url(../js/ext/resources/images/gray/panel/tool-sprites.gif);}/* Ghosting */.x-panel-ghost{background:#e0e0e0;}.x-panel-ghost ul{border-color:#b0b0b0;}.x-grid-panel .x-panel-mc .x-panel-body{border:1px solid #d0d0d0;}/* Buttons */.x-btn-left{background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);}.x-btn-right{background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);}.x-btn-center{background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);}/* Layout classes */.x-border-layout-ct{background:#f0f0f0;}.x-accordion-hd{background-image:url(../js/ext/resources/images/gray/panel/light-hd.gif);}.x-layout-collapsed{background-color:#eee;border-color:#e0e0e0;}.x-layout-collapsed-over{background-color:#fbfbfb;}/* qtips */.x-tip .x-tip-top{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-top-left{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-top-right{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-ft{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-ft-left{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-ft-right{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-bd-left{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-bd-right{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}/* Toolbars */.x-toolbar{border-color:#d0d0d0;background:#f0f4f5 url(../js/ext/resources/images/gray/toolbar/bg.gif) repeat-x top left;}.x-toolbar button{color:#444;}.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{background-image:url(../js/ext/resources/images/gray/toolbar/btn-arrow.gif);}.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button{background-image:url(../js/ext/resources/images/gray/toolbar/btn-arrow.gif);}.x-toolbar .x-btn-over .x-btn-left{background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .x-btn-over .x-btn-right{background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .x-btn-over .x-btn-center{background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .x-btn-over button{color:#111;}.x-toolbar .x-btn-click .x-btn-left,.x-toolbar .x-btn-pressed .x-btn-left,.x-toolbar .x-btn-menu-active .x-btn-left{background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .x-btn-click .x-btn-right,.x-toolbar .x-btn-pressed .x-btn-right,.x-toolbar .x-btn-menu-active .x-btn-right{background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .x-btn-click .x-btn-center,.x-toolbar .x-btn-pressed .x-btn-center,.x-toolbar .x-btn-menu-active .x-btn-center{background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);}/* Tabs */.x-tab-panel-header,.x-tab-panel-footer{background:#EAEAEA;border-color:#d0d0d0;}.x-tab-panel-header{border-color:#d0d0d0;}.x-tab-panel-footer{border-color:#d0d0d0;}ul.x-tab-strip-top{background:#dbdbdb url(../js/ext/resources/images/gray/tabs/tab-strip-bg.gif) repeat-x left top;border-color:#d0d0d0;padding-top:2px;}ul.x-tab-strip-bottom{background-image:url(../js/ext/resources/images/gray/tabs/tab-strip-btm-bg.gif);border-color:#d0d0d0;}.x-tab-strip span.x-tab-strip-text{color:#333;}.x-tab-strip-over span.x-tab-strip-text{color:#111;}.x-tab-strip-active span.x-tab-strip-text{color:#333;}.x-tab-strip-disabled .x-tabs-text{color:#AAA;}.x-tab-strip-top .x-tab-right{background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);}.x-tab-strip-top .x-tab-left{background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);}.x-tab-strip-top .x-tab-strip-inner{background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);}.x-tab-strip-bottom .x-tab-right{background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-inactive-right-bg.gif);}.x-tab-strip-bottom .x-tab-left{background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-inactive-left-bg.gif);}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-right-bg.gif);}.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-left-bg.gif);}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close{background-image:url(../js/ext/resources/images/gray/tabs/tab-close.gif);}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{background-image:url(../js/ext/resources/images/gray/tabs/tab-close.gif);}.x-tab-panel-body{border-color:#d0d0d0;background:#fff;}.x-tab-panel-bbar .x-toolbar{border-color:#d0d0d0;}.x-tab-panel-tbar .x-toolbar{border-color:#d0d0d0;}.x-tab-panel-header-plain .x-tab-strip-spacer{border-color:#d0d0d0;background:#eaeaea;}.x-tab-scroller-left{background-image:url(../js/ext/resources/images/gray/tabs/scroll-left.gif);border-color:#aeaeae;}.x-tab-scroller-right{background-image:url(../js/ext/resources/images/gray/tabs/scroll-right.gif);border-color:#aeaeae;}/* Window */.x-window-proxy{background:#e0e0e0;border-color:#b0b0b0;}.x-window-tl .x-window-header{color:#555;}.x-window-tc{background-image:url(../js/ext/resources/images/gray/window/top-bottom.png);}.x-window-tl{background-image:url(../js/ext/resources/images/gray/window/left-corners.png);}.x-window-tr{background-image:url(../js/ext/resources/images/gray/window/right-corners.png);}.x-window-bc{background-image:url(../js/ext/resources/images/gray/window/top-bottom.png);}.x-window-bl{background-image:url(../js/ext/resources/images/gray/window/left-corners.png);}.x-window-br{background-image:url(../js/ext/resources/images/gray/window/right-corners.png);}.x-window-mc{border:1px solid #d0d0d0;background:#e8e8e8;}.x-window-ml{background-image:url(../js/ext/resources/images/gray/window/left-right.png);}.x-window-mr{background-image:url(../js/ext/resources/images/gray/window/left-right.png);}.x-panel-ghost .x-window-tl{border-color:#d0d0d0;}.x-panel-collapsed .x-window-tl{border-color:#d0d0d0;}.x-window-plain .x-window-mc{background:#e8e8e8;border-right:1px solid #eee;border-bottom:1px solid #eee;border-top:1px solid #d0d0d0;border-left:1px solid #d0d0d0;}.x-window-plain .x-window-body{border-left:1px solid #eee;border-top:1px solid #eee;border-bottom:1px solid #d0d0d0;border-right:1px solid #d0d0d0;background:transparent!important;}body.x-body-masked .x-window-mc,body.x-body-masked .x-window-plain .x-window-mc{background-color:#e4e4e4;}/* misc */.x-html-editor-wrap{border-color:#d0d0d0;}/* Borders go last for specificity */.x-panel-noborder .x-panel-body-noborder{border-width:0;}.x-panel-noborder .x-panel-header-noborder{border-width:0;border-bottom:1px solid #d0d0d0;}.x-panel-noborder .x-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #d0d0d0;}.x-panel-noborder .x-panel-bbar-noborder .x-toolbar{border-width:0;border-top:1px solid #d0d0d0;}.x-window-noborder .x-window-mc{border-width:0;}.x-window-plain .x-window-body-noborder{border-width:0;}.x-tab-panel-noborder .x-tab-panel-body-noborder{border-width:0;}.x-tab-panel-noborder .x-tab-panel-header-noborder{border-top-width:0;border-left-width:0;border-right-width:0;}.x-tab-panel-noborder .x-tab-panel-footer-noborder{border-bottom-width:0;border-left-width:0;border-right-width:0;}.x-tab-panel-bbar-noborder .x-toolbar{border-width:0;border-top:1px solid #d0d0d0;}.x-tab-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #d0d0d0;}.kunebody{background-color:#FFF;color:#000;font-family:arial, sans;margin:5px;}#kuneinitialcurtain{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#FFF;z-index:9999;}/* Global styles */.gwt-HorizontalSplitPanel .hsplitter{cursor:e-resize;width:6px;}.gwt-DialogBox{border:8px solid #C3D9FF;border:2px outset;background-color:#FFF;}.gwt-DialogBox .Caption{background-color:#C3D9FF;font-size:85%;font-weight:700;padding:3px;margin:2px;cursor:default;}.gwt-MenuBar{background-color:#F2F2F2;border:1px solid #999;vertical-align:middle;padding:5px 0;}.gwt-MenuBar .gwt-MenuItem{cursor:pointer;padding:1px 10px;white-space:nowrap;}.gwt-MenuBar .gwt-MenuItem img{vertical-align:middle;margin-right:3px;}.gwt-MenuBar .gwt-MenuItem{background-color:#F2F2F2;}.gwt-MenuBar .gwt-MenuItem-selected{background-color:#FFB958;}.kune-MenuBar .gwt-MenuItem{background:transparent url(img/button-bg-hard.gif) repeat-x 0 0;border-left:1px solid #AAA;border-right:1px solid #AAA;color:#999;cursor:pointer;cursor:hand;white-space:nowrap;padding:0 10px;}.kune-MenuBar .gwt-MenuItem-selected{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#963;}.kune-expandHoriz{width:100%;}.kune-expandVert{height:100%;}.kune-floatleft{float:left;}.kune-floatright{float:right;}/* Deprecated */.kune-Default-Form{margin:10px;}.kune-valignmiddle{vertical-align:middle;}fieldset{border:1px solid #B5B8C8;/* margin-bottom:10px; */padding:10px 10px 5px;}legend{color:#15428B;font-size:85%;font-size-adjust:none;font-style:normal;font-variant:normal;font-weight:700;line-height:normal;}.gwt-RadioButton input{margin:0 3px;vertical-align:middle;}.gwt-RadioButton label{margin:0 3px;vertical-align:middle;}.kune-pointer{cursor:pointer;}.kuneLabelPre{white-space:pre!important;}/* Buttons */.kune-CustomPushButton-space{margin-top:3px;margin-bottom:3px;}.kune-CustomPushButton{background:transparent url(img/button-bg-hard.gif) repeat-x 0 0;border-left:1px solid #AAA;border-right:1px solid #AAA;color:#999;cursor:pointer;white-space:nowrap;padding:0 12px;}.kune-CustomPushButton-up{color:#161616;}.kune-CustomPushButton-down{color:#000;}.kune-CustomPushButton-up-hovering{color:#161616;background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;}.kune-CustomPushButton-down-hovering{color:#000;}.kune-CustomPushButton-up-disabled{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#E0E0E0;cursor:default;}.kune-CustomPushButton-down-disabled{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#E0E0E0;cursor:default;}.kune-Button-Large-lrSpace{margin-left:12px;margin-right:12px;}.kune-Button-Large-rSpace{margin-right:12px;}.kune-Button-Large-lSpace{margin-left:12px;}.kune-Button-Large-tbSpace{margin-top:12px;margin-bottom:12px;}.kune-Button-Small-lrSpace{margin-left:10px;margin-right:10px;}.kune-Button-Small-rSpace{margin-right:10px;}.kune-Button-Small-lSpace{margin-left:10px;}.kune-Button-Small-tbSpace{margin-top:10px;margin-bottom:10px;}.kune-Button-Mini-lSpace{margin-left:8px;}.kune-Button-Mini-lrSpace{margin-left:8px;margin-right:8px;}.kune-Button-Mini-rSpace{margin-right:8px;}.kune-Button-Mini-tbSpace{margin-top:8px;margin-bottom:8px;}.kune-IconHyperlink{}.kune-IconHyperlink a:link{/* text-decoration: underline; */color:green;}.kune-IconHyperlink a:hover{text-decoration:underline;}.kune-IconHyperlink a:visited{color:olive;}.kune-IconHyperlink img{margin-right:4px;vertical-align:middle;}.kune-IconLabel{}.kune-IconLabel img{margin-right:4px;vertical-align:middle;}.kune-link{text-decoration:underline;color:green;cursor:pointer;}/* DropDowns */.kune-DropDownOuter{background-color:green;}.kune-DropDownInner{margin:0 3px 1px;background:green;background-color:#FFF;padding:3px;}.kune-DropDownLabel{color:#FFF;cursor:pointer;}.kune-DropDownLabel .gwt-Label{margin:0 5px 0 0;width:100%;}.kune-DropDownLabel img{margin:0 3px 0 1px;}.kune-IconLabel{color:green;}.kune-IconLabel img{margin-right:4px;vertical-align:middle;}/* Used in multi chat panel status change */.x-menu-item img{margin-right:4px;vertical-align:middle;}/* Margins */.kune-Margin-40-trbl{margin:40px;}.kune-Margin-40-lr{margin-left:40px;margin-right:40px;}.kune-Margin-40-tl{margin-top:40px;margin-left:40px;}.kune-Margin-40-tb{margin-top:40px;margin-bottom:40px;}.kune-Margin-40-t{margin-top:40px;}.kune-Margin-40-r{margin-right:40px;}.kune-Margin-40-l{margin-left:40px;}.kune-Margin-20-trbl{margin:20px;}.kune-Margin-20-lr{margin-left:20px;margin-right:20px;}.kune-Margin-20-tl{margin-top:20px;margin-left:20px;}.kune-Margin-20-tb{margin-top:20px;margin-bottom:20px;}.kune-Margin-20-t{margin-top:20px;}.kune-Margin-20-r{margin-right:20px;}.kune-Margin-20-l{margin-left:20px;}.kune-Margin-Large-trbl{margin:10px;}.kune-Margin-Large-lr{margin-left:10px;margin-right:10px;}.kune-Margin-Large-tl{margin-top:10px;margin-left:10px;}.kune-Margin-Large-tb{margin-top:10px;margin-bottom:10px;}.kune-Margin-Large-t{margin-top:10px;}.kune-Margin-Large-r{margin-right:10px;}.kune-Margin-Large-l{margin-left:10px;}.kune-Margin-Medium-trbl{margin:5px;}.kune-Margin-Medium-lr{margin-left:5px;margin-right:5px;}.kune-Margin-Medium-tl{margin-top:5px;margin-left:5px;}.kune-Margin-Medium-tb{margin-top:5px;margin-bottom:5px;}.kune-Margin-Medium-t{margin-top:5px;}.kune-Margin-Medium-r{margin-right:5px;}.kune-Margin-Medium-b{margin-bottom:5px;}.kune-Margin-Medium-l{margin-left:5px;}.kune-Margin-Small-trbl{margin:3px;}.kune-Margin-Small-lr{margin-left:3px;margin-right:3px;}.kune-Margin-Small-tl{margin-top:3px;margin-left:3px;}.kune-Margin-Small-tb{margin-top:3px;margin-bottom:3px;}.kune-Margin-Small-t{margin-top:3px;}.kune-Margin-Small-l{margin-left:3px;}.kune-Margin-Small-r{margin-right:3px;}.kune-Margin-Small-b{margin-bottom:3px;}.kune-Margin-Mini-trbl{margin:1px;}.kune-Margin-Mini-lr{margin-left:1px;margin-right:1px;}.kune-Margin-Mini-tl{margin-top:1px;margin-left:1px;}.kune-Margin-Mini-tb{margin-top:1px;margin-bottom:1px;}.kune-Margin-Mini-t{margin-top:1px;}.kune-Margin-Mini-r{margin-right:1px;}.kune-Margin-Mini-b{margin-bottom:1px;}.kune-Margin-Mini-l{margin-left:1px;}/* Fonts
+see: http://developer.yahoo.com/yui/fonts/ */.kune-ft10px{font-size:77%;}.kune-ft11px{font-size:85%;}.kune-ft12px{font-size:93%;}.kune-ft13px{font-size:100%;}.kune-ft14px{font-size:108%;}.kune-ft15px{font-size:116%;}.kune-ft16px{font-size:123.099998%;}.kune-ft17px{font-size:131%;}.kune-ft18px{font-size:138.5%;}.kune-ft19px{font-size:146.5%;}.kune-ft20px{font-size:153.899994%;}.kune-ft21px{font-size:161.600006%;}.kune-ft22px{font-size:167%;}.kune-ft23px{font-size:174%;}.kune-ft24px{font-size:182%;}.kune-ft25px{font-size:189%;}.kune-ft26px{font-size:197%;}/* Sitebar */.kune-SiteBarPanel .kune-IconHyperlink{white-space:nowrap;}.kune-SiteBarPanel .kune-IconHyperlink a:link{cursor:pointer;text-decoration:underline;color:#B3B3B3;}.kune-SiteBarPanel .kune-IconHyperlink a:hover{text-decoration:underline;}.kune-SiteBarPanel .kune-IconHyperlink a:visited{color:#B3B3B3;}.kune-SiteBarPanel{margin-right:10px;height:16px;}.kune-SiteBarPanel .gwt-TextBox{border:1px solid #E4A374;margin:0 15px 0 3px;padding-left:3px;color:#B3B3B3;}.kune-SiteBarPanel .gwt-Hyperlink a{white-space:nowrap;color:#B3B3B3;text-decoration:underline;cursor:pointer;}.kune-SiteBarPanel .gwt-PushButton{cursor:pointer;}.kune-SiteBarPanel-Separator{color:#E4A374;margin:0 5px;}.kune-SiteBarPanel-SpaceSeparator{width:10px;}.kune-SiteMessagePanel{color:#250;position:absolute;z-index:10000;vertical-align:middle;}.kune-SiteMessagePanel .gwt-HTML{margin:15px 5px 15px 2px;}.kune-SiteMessagePanel .gwt-Image{margin:5px;}.kune-SiteMessagePanel-error{background-color:#FFB380;border:1px solid #F06;}.kune-SiteMessagePanel-veryimp{background-color:#FFD4AA;border:1px solid #F59;}.kune-SiteMessagePanel-imp{background-color:#FFE6D5;border:1px solid #DE87AA;}.kune-SiteMessagePanel-info{background-color:#E5FF80;border:1px solid #87DE87;}/* Workspace styles */.kune-WorkspacePanel{width:100%;background-color:#FFF;}.kune-WokspacePanel .Tab{}.kune-WorkspacePanel .GeneralHP{}.kune-WorkspacePanel .ContextPanel{width:100%;border-right:3px solid #DD8A3D;}.kune-GroupSummaryPanel{margin:5px 0 0 5px;width:100%;}.kune-GroupToolsBar{width:150px;}.kune-GroupToolsBar-itemSelected{margin-bottom:5px;}.kune-GroupToolsBar-itemSelected .gwt-Hyperlink a{color:#FFF;padding:0 9px;text-decoration:none;}.kune-GroupToolsBar-itemSelected .gwt-Hyperlink a:hover{text-decoration:none;}.kune-GroupToolsBar-itemNotSelected{margin-bottom:5px;}.kune-GroupToolsBar-itemNotSelected .gwt-Hyperlink a{color:green;padding:0 9px;text-decoration:none;}.kune-GroupToolsBar-itemNotSelected .gwt-Hyperlink a:hover{text-decoration:none;}/* Content titles */.kune-ContentToolBarPanel{background-color:#F2F2F2;padding:2px;height:24px;vertical-align:middle;}.kune-ContentBottomBar{vertical-align:middle;height:24px;}.kune-ContentBottomBar .gwt-Image{margin-left:5px;cursor:pointer;float:left;}.kune-ContentBottomBar .gwt-Label a{}/* Main Content & Context */.kune-WorkspacePanel-Content{background-color:#FCFCFC;width:100%;height:100%;}.kune-WorkspacePanel-Content .main-content{margin:7px 5px 5px 10px;}.kune-WorkspacePanel-Context{background-color:#CFA;width:100%;height:100%;}.kune-NavigationBar{width:100%;}.kune-NavigationBar .topBar{background-color:#ececec;background:#ececec;border-bottom:1px solid #e3dbdb;vertical-align:middle;}.kune-NavigationBar .topBar .gwt-PushButton{margin:1px 3px 1px 0;}.kune-NavigationBar .topBar .gwt-Label{vertical-align:middle;}.kune-NavigationBar .kune-topBar-iconBar{margin:2px 0 2px 5px;}.kune-NavigationBar .kune-ContextItemsPanel-LabelLink{/* text-decoration: underline; */color:green;cursor:pointer;margin-left:3px;}/*
.topBar .gwt-PushButton-up-disabled {
filter: alpha(opacity = 20);
-moz-opacity: 0.2;
@@ -2132,1347 +33,6 @@
-moz-opacity: 0.2;
opacity: 0.2;
}
-*/
-.kune-NavigationBar .topBar .gwt-Image {
- margin: 0 2px 0 5px;
-}
-
-.kune-NavigationBar .Items {
- margin: 2px 0;
-}
-
-.kune-NavigationBar .Items .gwt-Image {
- margin: 2px 0;
- vertical-align: middle;
-}
-
-.kune-NavigationBar .Items .gwt-Hyperlink a {
- color: green; /* FIXME: other color */
-}
-
-.kune-NavigationBar .topBar .topBar-margin {
- margin-left: 5px;
-}
-
-.kune-NavigationBar .pathMenu {
- vertical-align: middle;
-}
-
-.kune-NavigationBar .pathMenu .gwt-MenuItem {
- background: transparent url(img/button-bg-hard.gif) repeat-x 0 0;
- border-left: 1px solid #AAA;
- border-right: 1px solid #AAA;
- color: #999;
- cursor: pointer;
- white-space: nowrap;
- padding: 3px 6px;
-}
-
-.kune-NavigationBar .pathMenu .gwt-MenuItem-selected {
- background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
- color: #000;
-}
-
-.kune-NavigationBar .kune-IconHyperlink {
- vertical-align: middle;
- margin-left: 5px;
-}
-
-.kune-NavigationBar .kune-IconHyperlink a {
- color: green;
- text-decoration: none;
-}
-
-.kune-NavigationBar .kune-IconHyperlink .gwt-Image {
- margin-right: 3px;
- vertical-align: middle;
-}
-
-/* Social Network */
-.kune-StackedDropDownPanel {
-
-}
-
-.kune-StackedDropDownPanel .gwt-StackPanelItem {
- border-top: 1px solid #CCC;
- border-bottom: 1px solid #CCC;
- background-color: #EEFFAA;
- cursor: pointer;
- padding: 1px 3px 0 6px;
- overflow: hidden;
-}
-
-.kune-StackedDropDownPanel .gwt-StackPanelItem img {
- margin: 0 0 0 3px;
- vertical-align: middle;
-}
-
-.kune-StackedDropDownPanel .kune-DropDownInner table {
- width: 100%;
-}
-
-.kune-StackedDropDownPanel .gwt-StackPanelItem-selected {
-
-}
-
-.kune-StackedDropDownPanelLink {
- background-color: #E6E6E6;
- border-top: 1px solid #CCC;
- border-bottom: 1px solid #F2F2F2;
-/* white-space: nowrap; */
- cursor: pointer;
-}
-
-.kune-StackedDropDownPanel .kune-DropDownInner {
- padding: 0px;
-}
-
-/* StackedDropDownPanel Members */
-.kune-StackSubItemLabel {
- overflow: hidden;
-}
-
-.kune-StackSubItemLabel .gwt-MenuItem {
- white-space: nowrap;
- cursor: pointer;
- border-bottom: 1px solid #F2F2F2;
-}
-
-.kune-StackSubItemLabel table {
- width: 100%;
-}
-
-.kune-StackSubItemLabel .gwt-MenuItem img {
- vertical-align: middle;
- margin-top: 1px;
- margin-bottom: 1px;
- margin-left: 5px;
- margin-right: 3px;
-}
-
-.kune-StackSubItemLabel .gwt-MenuItem-selected {
- background-color: #FFE6D5;
-}
-
-.kune-StackSubItemActions {
- background-color: #F2F2F2;
- border: 1px solid #999;
- vertical-align: middle;
- padding: 5px 0;
- margin-left: -120px;
- margin-top: -2px;
-}
-
-.kune-StackSubItemActions .gwt-MenuItem {
- cursor: pointer;
- padding: 1px 10px;
- white-space: nowrap;
-}
-
-.kune-StackSubItemActions .gwt-MenuItem img {
- vertical-align: middle;
- margin-right: 3px;
-}
-
-.kune-StackSubItemActions .gwt-MenuItem-selected {
- background-color: #FFB958;
-}
-
-/* AccessList */
-.kune-AccessListSubLabel {
- font-style: italic;
-}
-
-.kune-AccessList {
- margin: 5px;
- width: 100%;
-}
-
-.kune-AccessList .gwt-DisclosurePanel {
- margin: 5px;
- width: 100%;
-}
-
-.kune-AccessList .gwt-DisclosurePanel-open {
- width: 100%;
-}
-
-.kune-AccessList .gwt-DisclosurePanel-closed {
- width: 100%;
-}
-
-.kune-AccessList .header {
- margin: 0 0 3px 0;
- text-decoration: none;
- width: 100%;
- background-color: #8DD35F;
-}
-
-.kune-AccessList .header table {
- margin: 0 5px 0 0;
- width: 100%;
- color: #FFF;
-}
-
-.kune-AccessList .header img {
- margin: 0 3px 0 0;
-}
-
-.kune-AccessList .content {
- margin: 0 0 0 7px;
- width: 100%;
-}
-
-.kune-AccessList .content table {
- margin-bottom: 5px;
- width: 100%;
-}
-
-/* Rate */
-.kune-RatePanel-Label {
- white-space: nowrap;
- vertical-align: middle;
-}
-
-.kune-RatePanel-Stars {
- margin-left: 5px;
- vertical-align: middle;
-}
-
-.kune-RatePanel-Stars-RateIt {
- cursor: pointer;
-}
-
-/* Licenses */
-.kune-License-CC-Header {
- color: #15428B;
- font-weight: bold;
- font-size: 85%;
- margin-top: 5px;
-}
-
-.kune-License-CC-Header .gwt-Label {
- color: #15428B;
- font-weight: bold;
- font-size: 85%;
- margin-top: 5px;
-}
-
-/* Theme */
-.kune-IconBottomPanel .gwt-MenuItem {
- cursor: pointer;
- background-color: #FFF;
- margin: 2px 2px 2px 5px;
-}
-
-.kune-IconBottomPanel .gwt-MenuItem-selected {
- background-color: #F2F2F2;
-}
-
-.gwt-MenuBar-bottomMenu {
- margin-left: -60px;
- margin-top: -120px;
-}
-
-/* i18n */
-.kune-I18nTranslatorCell {
- white-space: normal;
-}
-
-.kune-i18nTranslator-recommend {
- margin: 10px;
-}
-
-.kune-i18nTranslator-recommend h1 {
- font-size: 131%;
- font-weight: bold;
-}
-
-.kune-i18nTranslator-recommend h2 {
- font-size: 116%;
- font-weight: bold;
-}
-
-.kune-i18nTranslator-recommend h3 {
- font-size: 108%;
- font-weight: bold;
- font-style: italic;
-}
-
-.kune-i18nTranslator-recommend em {
- font-weight: bold;
-}
-
-.kune-i18nTranslator-recommend strong {
- font-weight: bold;
-}
-
-/* Admin Context */
-.kune-AdminContextPanel {
- margin: 6px;
- width: 100%;
-}
-
-.kune-AdminContextPanel .gwt-StackPanelItem {
- background: transparent url(img/arrow-right-white.gif) no-repeat scroll 3px 2px;
- cursor: pointer;
- padding: 3px 10px 1px 20px;
- overflow: hidden;
- width: 100%;
-}
-
-.kune-AdminContextPanel .gwt-StackPanelItem img {
- margin: 0 0 0 3px;
- vertical-align: middle;
-}
-
-.kune-AdminContextPanel .gwt-StackPanelItem-selected {
- background: transparent url(img/arrow-down-white.gif) no-repeat scroll 3px 2px;
- background-color: #DEE3DB;
-}
-
-.kune-AdminContextPanelLink {
- background-color: #E6E6E6;
- border-top: 1px solid #CCC;
- border-bottom: 1px solid #F2F2F2;
- /* white-space: nowrap; */
- cursor: pointer;
-}
-
-.kune-AdminContextPanel-inner {
- background-color: #FFF;
-}
-
-.kune-AdminContextPanel-inner-wrap {
- margin: 5px;
-}
-
-.kune-EditableLabel {
-
-}
-
-.kune-EditableLabel .kune-EditableLabel-editable {
-
-}
-
-.kune-EditableLabel-high {
- background-color: #FFFBC1;
- cursor: pointer;
-}
-
-.kune-EditableLabel-high span {
- background-color: #FFFBC1;
-}
-
-.kune-EditableLabel a {
- margin-left: 5px;
-}
-
-.kune-EditableLabel a:link {
- color: green;
-}
-
-.kune-EditableLabel a:hover {
- text-decoration: underline;
-}
-
-.kune-EditableLabel a:visited {
- color: #808000;
-}
-
-.kune-EditableLabel img {
- margin-right: 4px;
- vertical-align: middle;
-}
-
-.kune-EditableLabel-editable img {
- margin-right: 4px;
- vertical-align: middle;
-}
-
-.kune-EditableLabel-editable span {
- margin: 3px;
-}
-
-.kune-EditableLabel span {
- margin: 3px;
-}
-
-.kune-BottomIconsTrayPanel {
- width: 165px;
- height: 21px;
- vertical-align: middle;
- background-color: #EFEFEF;
-}
-
-.kune-TagsPanel-tag {
- float: left;
- margin-right: 5px;
- cursor: pointer;
-}
-
-.kune-Content-Main {
- margin: 5px;
-}
-
-/* Yahoo ui base.css */
-
-.kune-Content-Main h1 {
- font-size: 138.5%;
-}
-
-.kune-Content-Main h2 {
- font-size: 123.1%;
-}
-
-.kune-Content-Main h3 {
- font-size: 108%;
-}
-
-.kune-Content-Main h1 {
- margin: 1em 0;
-}
-
-.kune-Content-Main h2 {
- margin: 1em 0;
-}
-
-.kune-Content-Main h3 {
- margin: 1em 0;
-}
-
-.kune-Content-Main h1 {
- font-weight: bold;
-}
-
-.kune-Content-Main h2 {
- font-weight: bold;
-}
-
-.kune-Content-Main h3 {
- font-weight: bold;
-}
-
-.kune-Content-Main h4 {
- font-weight: bold;
-}
-
-.kune-Content-Main h5 {
- font-weight: bold;
-}
-
-.kune-Content-Main h6 {
- font-weight: bold;
-}
-
-.kune-Content-Main strong {
- font-weight: bold;
-}
-
-.kune-Content-Main abbr {
- border-bottom: 1px dotted #000;
- cursor: help;
-}
-
-.kune-Content-Main acronym {
- border-bottom: 1px dotted #000;
- cursor: help;
-}
-
-.kune-Content-Main em {
- font-style: italic;
-}
-
-.kune-Content-Main blockquote {
- margin: 1em;
-}
-
-.kune-Content-Main ul {
- margin: 1em;
-}
-
-.kune-Content-Main ol {
- margin: 1em;
-}
-
-.kune-Content-Main dl {
- margin: 1em;
-}
-
-.kune-Content-Main ol {
- margin-left: 2em;
-}
-
-.kune-Content-Main ul {
- margin-left: 2em;
-}
-
-.kune-Content-Main dl {
- margin-left: 2em;
-}
-
-.kune-Content-Main ol {
- list-style: decimal outside;
-}
-
-.kune-Content-Main li {
- list-style: decimal outside;
-}
-
-.kune-Content-Main li {
- list-style: disc outside;
-}
-
-.kune-Content-Main ul {
- list-style: disc outside;
-}
-
-
-.kune-Content-Main dl {
- margin-left: 1em;
-}
-
-.kune-Content-Main dd {
- margin-left: 1em;
-}
-
-.kune-Content-Main th {
- border: 1px solid #000;
- padding: .5em;
- font-weight: bold;
- text-align: center;
-}
-
-.kune-Content-Main td {
- border: 1px solid #000;
- padding: .5em;
-}
-
-.kune-Content-Main caption {
- margin-bottom: .5em;
- text-align: center;
-}
-
-.kune-Content-Main p {
- margin-bottom: 1em;
-}
-
-.kune-Content-Main fieldset {
- margin-bottom: 1em;
-}
-.kune-Content-Main table {
- margin-bottom: 1em;
-}
-
-.kune-Content-Main pre {
- margin-bottom: 1em;
-}
-
-.kune-Content-Main input[type=text] {
- width: 12.25em;*width: 11.9em;}
-
-.kune-Content-Main input[type=password] {
- width: 12.25em;*width: 11.9em;}
-
-.kune-Content-Main textarea {width: 12.25em;*width: 11.9em;}
-
-.search-icon {
- background-image: url(img/search.gif) !important;
-}
-
-.i18n-icon {
- background-image: url(img/language.gif) !important;
-}
-
-
-
-
-/* RTE Text editor */
-.kune-TexEditorPanel-TextArea {
- margin: 3px;
-}
-
-.gwt-RichTextArea { /* border: 1px solid #000;
- background-color: #FFF; */
- border: 1px solid #4D4D4D;
- background-color: #FFF;
- margin: 5px 0px 5px 10px;
-}
-
-.gwt-RichTextToolbar {
- /* background-color: #F2F2F2;
- padding: 5px; */
- height: 24px;
- vertical-align: middle;
-}
-
-.gwt-RichTextToolbar table {
- vertical-align: middle;
-}
-
-.gwt-RichTextToolbar .gwt-ToggleButton {
- float: left;
- margin-top: 2px;
-}
-
-.gwt-RichTextToolbar .gwt-PushButton {
- float: left;
- margin-top: 2px;
-}
-
-.gwt-RichTextToolbar .gwt-PushButton-up {
- margin-right: 2px;
- border: 1px solid #F2F2F2;
-}
-
-.gwt-RichTextToolbar .gwt-PushButton-up-hovering {
- margin-right: 2px;
- border: 1px solid #C3D9FF;
- border-color: #E8F1FF #9daecd #9daecd #e8f1ff;
-}
-
-.gwt-RichTextToolbar .gwt-PushButton-down {
- margin-right: 2px;
- border: 1px solid #C3D9FF;
- border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
-}
-
-.gwt-RichTextToolbar .gwt-PushButton-down-hovering {
- margin-right: 2px;
- border: 1px solid #C3D9FF;
- border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
-}
-
-.gwt-RichTextToolbar .gwt-ToggleButton-up {
- margin-right: 2px;
- border: 1px solid #F2F2F2;
-}
-
-.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering {
- margin-right: 2px;
- border: 1px solid #C3D9FF;
- border-color: #E8F1FF #9daecd #9daecd #e8f1ff;
-}
-
-.gwt-RichTextToolbar .gwt-ToggleButton-down {
- margin-right: 2px;
- background-color: #E8F1FF;
- border: 1px solid #C3D9FF;
- border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
-}
-
-.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering {
- margin-right: 2px;
- background-color: #E8F1FF;
- border: 1px solid #C3D9FF;
- border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
-}
-
-.gwt-RichTextToolbar .x-btn {
- float: left;
-}
-
-.gwt-RichTextToolbar .kune-Button-Large-lSpace {
- float: left;
-}
-
-.gwt-RichTextToolbar .kune-Button-Large-lrSpace {
- float: left;
-}
-
-.RichTextToolbar-menu {
- float: left;
- margin-top: 2px;
-}
-
-.RichTextToolbar-menu table {
- border-collapse: collapse;
- border-spacing: 0;
- margin: 0;
-}
-
-.RichTextToolbar-menu .gwt-MenuItem {
- margin-right: 2px;
- border: 1px solid #F2F2F2;
-}
-
-.RichTextToolbar-menu .gwt-MenuItem-selected {
- margin-right: 2px;
- background-color: #E8F1FF;
- border: 1px solid #C3D9FF;
- border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
-}
-
-.RichTextToolbar-submenu {
- background-color: #FFFCD5;
- border: 1px solid #D38D5F;
- cursor: default;
-}
-
-.RichTextToolbar-submenu .gwt-MenuItem {
- cursor: default;
- white-space: nowrap;
- border: 1px solid #FFFCD5;
- padding: 0 4px;
-}
-
-.RichTextToolbar-submenu .gwt-MenuItem-selected {
- background-color: #FFB958;
- border: 1px solid #C83737;
-}
-
-.kune-WebSafePalette {
- background-color: #FFF;
- border: 1px solid #AAA;
- margin: 1px;
-}
-
-.kune-WebSafePalette td {
- width: 12px;
- height: 10px;
-}
-
-
-.k-site-traybar {
- background: #FFF none repeat scroll 0% 50%;
-}
-
-.k-sitebar .kune-IconHyperlink {
- white-space: nowrap;
-}
-
-.k-sitebar .kune-IconHyperlink a:link {
- cursor: pointer;
- text-decoration: underline;
- color: #B3B3B3;
-}
-
-.k-sitebar .kune-IconHyperlink a:hover {
- text-decoration: underline;
-}
-
-.k-sitebar .kune-IconHyperlink a:visited {
- color: #B3B3B3;
-}
-
-.k-sitebar-labellink {
- white-space: nowrap;
- color: #B3B3B3;
- cursor: pointer;
- text-decoration: underline;
-}
-
-.k-sitebar {
- margin-right: 10px;
- height: 16px;
-}
-
-.k-sitebar .gwt-TextBox {
- border: 1px solid #E4A374;
- margin: 0 15px 0 3px;
- padding-left: 3px;
- color: #B3B3B3;
-}
-
-.k-sitebar .gwt-Hyperlink a {
- white-space: nowrap;
- color: #B3B3B3;
- text-decoration: underline;
- cursor: pointer;
-}
-
-.k-sitebar .gwt-PushButton {
- cursor: pointer;
-}
-
-.k-sitebar-LabelLink {
- white-space: nowrap;
- color: #B3B3B3;
- cursor: pointer;
- text-decoration: underline;
-}
-
-.k-entity-summary {
- border-left-color: #FFF;
- border-left-width: 5px;
-}
-
-.k-entitytextlogo {
- border: 2px solid #F2F2F2;
- height: 60px;
- margin: 0 0 4px -1px;
- overflow: hidden;
- width: 468px;
-}
-
-.k-entitytextlogo .gwt-Label {
- font-size: 167%;
- font-weight: 700;
- margin: 5px;
- height: 27px;
-}
-
-.k-entitytextlogo-default .gwt-Label {
- color: #69312F;
-}
-
-.k-entitytextlogo-green .gwt-Label {
- color: #250;
-}
-
-.k-entitytextlogo-blue .gwt-Label {
- color: #000080;
-}
-
-.k-entitytextlogo-grey .gwt-Label {
- color: #1A1A1A;
-}
-
-.k-entitytextlogo-purple .gwt-Label {
- color: #440055;
-}
-
-.k-entitytextlogo-red .gwt-Label {
- color: #800000;
-}
-
-.k-entitytextlogo .gwt-Hyperlink a {
- color: #CCC;
- font-size: 85%;
- margin: 5px;
- text-decoration: underline;
- white-space: nowrap;
- background-color: #FFF;
-}
-
-.k-entity-default .x-layout-split {
- background: #DD8A3D none repeat scroll 0% 50%;
-}
-
-.k-entity-green .x-layout-split {
- background: #5FD35F none repeat scroll 0% 50%;
-}
-
-.k-entity-blue .x-layout-split {
- background: #0066FF none repeat scroll 0% 50%;
-}
-
-.k-entity-grey .x-layout-split {
- background: #4D4D4D none repeat scroll 0% 50%;
-}
-
-.k-entity-purple .x-layout-split {
- background: #660080 none repeat scroll 0% 50%;
-}
-
-.k-entity-red .x-layout-split {
- background: #D40000 none repeat scroll 0% 50%;
-}
-
-.k-entityworkspace .x-layout-split {
- background: transparent none repeat scroll 0% 50%;
-}
-
-.k-entityworkspace-default .x-layout-split {
- background: #DEAA87 none repeat scroll 0% 50%;
-}
-
-.k-entityworkspace-green .x-layout-split {
- background: #DCE8AB none repeat scroll 0% 50%;
-}
-
-.k-entityworkspace-blue .x-layout-split {
- background: #D5D5FF none repeat scroll 0% 50%;
-}
-
-.k-entityworkspace-grey .x-layout-split {
- background: #999999 none repeat scroll 0% 50%;
-}
-
-.k-entityworkspace-purple .x-layout-split {
- background: #A793AC none repeat scroll 0% 50%;
-}
-
-.k-entityworkspace-red .x-layout-split {
- background: #FF5555 none repeat scroll 0% 50%;
-}
-
-.k-entity-title {
- border-left-style: solid;
- border-left-width: 2px;
-}
-
-.k-entity-title div {
- line-height: 22px;
- white-space: nowrap;
-}
-
-.k-entity-subtitle {
-}
-
-.k-entity-subtitle div {
- line-height: 22px;
- white-space: nowrap;
-}
-
-.k-entity-title-rd-default {
- background: #DD8A3D;
-}
-
-.k-entity-title-rd-green {
- background: #5FD35F;
-}
-
-.k-entity-title-rd-blue {
- background: #0066FF;
-}
-
-.k-entity-title-rd-grey {
- background: #4D4D4D;
-}
-
-.k-entity-title-rd-purple {
- background: #660080;
-}
-
-.k-entity-title-rd-red {
- background: #D40000;
-}
-
-.k-entity-title-default {
- background: #F1BB59 none repeat scroll 0% 50%;
- border-left-color: #DD8A3D;
-}
-
-.k-entity-title-green {
- background: #AFA none repeat scroll 0% 50%;
- border-left-color: #5FD35F;
-}
-
-.k-entity-title-blue {
- background: #AFDDE9 none repeat scroll 0% 50%;
- border-left-color: #0066FF;
-}
-
-.k-entity-title-grey {
- background: #CCCCCC none repeat scroll 0% 50%;
- border-left-color: #4D4D4D;
-}
-
-.k-entity-title-purple {
- background: #DDAFE9 none repeat scroll 0% 50%;
- border-left-color: #660080;
-}
-
-.k-entity-title-red {
- background: #FF8080 none repeat scroll 0% 50%;
- border-left-color: #D40000;
-}
-
-.k-entity-title-default div {
- color: #69312F;
-}
-
-.k-entity-title-green div {
- color: #250;
-}
-
-.k-entity-title-blue div {
- color: #000080;
-}
-
-.k-entity-title-grey div {
- color: #1A1A1A;
-}
-
-.k-entity-title-purple div {
- color: #440055;
-}
-
-.k-entity-title-red div {
- color: #800000;
-}
-
-.k-entity-subtitle-default {
- background: #DD8A3D none repeat scroll 0% 50%;
-}
-
-.k-entity-subtitle-green {
- background: #5FD35F none repeat scroll 0% 50%;
-}
-
-.k-entity-subtitle-blue {
- background: #0066FF none repeat scroll 0% 50%;
-}
-
-.k-entity-subtitle-grey {
- background: #4D4D4D none repeat scroll 0% 50%;
-}
-
-.k-entity-subtitle-purple {
- background: #660080 none repeat scroll 0% 50%;
-}
-
-.k-entity-subtitle-red {
- background: #D40000 none repeat scroll 0% 50%;
-}
-
-.k-entity-subtitle-default div {
- color: #FFF;
-}
-
-.k-entity-subtitle-green div {
- color: #FFF;
-}
-
-.k-entity-subtitle-blue div {
- color: #FFF;
-}
-
-.k-entity-subtitle-grey div {
- color: #FFF;
-}
-
-.k-entity-subtitle-purple div {
- color: #FFF;
-}
-
-.k-entity-subtitle-red div {
- color: #FFF;
-}
-
-.k-entity-bottom-rd-default, .k-entity-bottom-default, .k-toolselectoritem-sel-default {
- background: #DD8A3D;
-}
-
-.k-entity-bottom-rd-green, .k-entity-bottom-green, .k-toolselectoritem-sel-green {
- background: #5FD35F;
-}
-
-.k-entity-bottom-rd-blue, .k-entity-bottom-blue, .k-toolselectoritem-sel-blue {
- background: #0066FF;
-}
-
-.k-entity-bottom-rd-grey, .k-entity-bottom-grey, .k-toolselectoritem-sel-grey {
- background: #4D4D4D;
-}
-
-.k-entity-bottom-rd-purple, .k-entity-bottom-purple, .k-toolselectoritem-sel-purple {
- background: #660080;
-}
-
-.k-entity-bottom-rd-red, .k-entity-bottom-red, .k-toolselectoritem-sel-red {
- background: #D40000;
-}
-
-.k-entitylicensepanel-licensetext {
- cursor: pointer;
- margin-left: 5px;
- text-decoration: underline;
-}
-
-.k-entity-context-default div {
- background: #FFD09D none repeat scroll 0% 50%;
-}
-
-.k-entity-context-green div {
- background: #CFA none repeat scroll 0% 50%;
-}
-
-.k-entity-context-blue div {
- background: #AACCFF none repeat scroll 0% 50%;
-}
-
-.k-entity-context-grey div {
- background: #B3B3B3 none repeat scroll 0% 50%;
-}
-
-.k-entity-context-purple div {
- background: #DDAFE9 none repeat scroll 0% 50%;
-}
-
-.k-entity-context-red div {
- background: #FFAAAA none repeat scroll 0% 50%;
-}
-
-.k-entity-bottom div {
- line-height: 2em;
- color: #FFF;
-}
-
-.k-toolbar-top-line {
- border-top-color: rgb( 208, 208, 208 );
- border-top-style: solid;
- border-top-width: 1px;
-}
-
-.k-toolbar-bottom-line {
- border-bottom-color: rgb( 208, 208, 208 );
- border-bottom-style: solid;
- border-bottom-width: 1px;
-}
-
-.x-toolbar td, .x-toolbar span, .x-toolbar input, .x-toolbar div, .x-toolbar select, .x-toolbar label {
- white-space: nowrap;
- font: normal 100% arial,sans;
- line-height: 19px;
-}
-
-.k-toolbar-sep {
- padding-top: 4px;
- padding-left: 5px;
-}
-/* Custom gwt-ext styles */
-.ytb-sep {
- background-image: url(../js/ext/resources/images/default/grid/grid-split.gif);
- background-position: center;
- background-repeat: no-repeat;
- display: block;
- font-size: 1px;
- height: 16px;
- width: 4px;
- overflow: hidden;
- cursor: default;
- margin: 0 2px 0;
- border: 0;
-}
-
-.ytb-spacer {
- width: 2px;
-}
-
-.x-grid-group-hd {
- border-bottom: 2px solid grey;
- cursor: pointer;
- padding-top: 3px;
-}
-/* Drop down */
-.k-dropdownouter {
- background-color: grey;
-}
-
-.k-dropdownouter-members {
-}
-
-.k-dropdownouter-members-default {
- background-color: #DF5244;
-}
-
-.k-dropdownouter-members-green {
- background-color: #008000;
-}
-
-.k-dropdownouter-members-blue {
- background-color: #5500D4;
-}
-
-.k-dropdownouter-members-grey {
- background-color: #4D4D4D;
-}
-
-.k-dropdownouter-members-purple {
- background-color: #672178;
-}
-
-.k-dropdownouter-members-red {
- background-color: #A02C2C;
-}
-
-.k-dropdownouter-part {
-}
-
-.k-dropdownouter-part-default {
- background-color: #CA5842;
-}
-
-.k-dropdownouter-part-green {
- background-color: #00AA00;
-}
-
-.k-dropdownouter-part-blue {
- background-color: #6600FF;
-}
-
-.k-dropdownouter-part-grey {
- background-color: #666666;
-}
-
-.k-dropdownouter-part-purple {
- background-color: #892CA0;
-}
-
-.k-dropdownouter-part-red {
- background-color: #C83737;
-}
-
-.k-dropdownouter-tags {
-}
-
-.k-dropdownouter-tags-default {
- background-color: #87501E;
-}
-
-.k-dropdownouter-tags-green {
- background-color: #00D400;
-}
-
-.k-dropdownouter-tags-blue {
- background-color: #9955FF;
-}
-
-.k-dropdownouter-tags-grey {
- background-color: #808080;
-}
-
-.k-dropdownouter-tags-purple {
- background-color: #AB37C8;
-}
-
-.k-dropdownouter-tags-red {
- background-color: #D35F5F;
-}
-
-.k-dropdownouter-summary {
-}
-
-.k-dropdownouter-summary-default {
- background-color: #9F734B;
-}
-
-.k-dropdownouter-summary-green {
- background-color: #4CE14C;
-}
-
-.k-dropdownouter-summary-blue {
- background-color: #69A5FF;
-}
-
-.k-dropdownouter-summary-grey {
- background-color: #A6A6A6;
-}
-
-.k-dropdownouter-summary-purple {
- background-color: #C473D8;
-}
-
-.k-dropdownouter-summary-red {
- background-color: #E08F8F;
-}
-
-.k-dropdowninner {
- margin: 0 3px 1px 3px;
- background: green;
- background-color: #FFF;
- /* padding: 3px; */
-}
-
-.k-dropdownlabel {
- color: #FFF;
- cursor: pointer;
-}
-
-.k-dropdownlabel .gwt-Label {
- margin: 0 5px 0 0;
- width: 100%;
-}
-
-.k-dropdownlabel img {
- margin: 0 3px 0 1px;
-}
-/* WsTheme */
-.k-wstheme-icon-default {
- background: #FF8C00;
-}
-
-.k-wstheme-icon-green {
- background: green;
-}
-
-.k-wstheme-icon-blue {
- background: blue;
-}
-
-.k-wstheme-icon-grey {
- background: grey;
-}
-
-.k-wstheme-icon-purple {
- background: purple;
-}
-
-.k-wstheme-icon-red {
- background: red;
-}
-
-/* Tool selector items */
-
-.k-toolselectoritem {
- width: auto;
- margin-bottom: 5px;
- cursor: pointer;
-}
-
-.k-toolselectoritem-sel {
-}
-
-.k-toolselectoritem-notsel-default {
- background: #FFE9A5;
-}
-
-.k-toolselectoritem-notsel-green {
- background: #D6F4D6;
-}
-
-.k-toolselectoritem-notsel-blue {
- background: #D7D7F4;
-}
-
-.k-toolselectoritem-notsel-grey {
- background: #E6E6E6;
-}
-
-.k-toolselectoritem-notsel-purple {
- background: #EED7F4;
-}
-
-.k-toolselectoritem-notsel-red {
- background: #FFD5D5;
-}
-
-.k-toolselectoritem-sel a {
- color: #FFF;
- padding: 0 9px;
- text-decoration: none;
-}
-
-.k-toolselectoritem-sel a:hover {
- text-decoration: none;
-}
-
-.k-toolselectoritem-notsel {
-}
-
-.k-toolselectoritem-notsel a {
- color: #0000FF;
- padding: 0 9px;
- text-decoration: none;
-}
-
-.k-toolselectoritem-notsel a:hover {
- text-decoration: underline;
-}
-
-/* others */
-.k-textlinethrough {
- text-decoration: line-through;
-}
-
-.k-textnormal {
- text-decoration: inherit;
-}
-
-.k-textunderline {
- text-decoration: underline;
-}
-
-
+*/.kune-NavigationBar .topBar .gwt-Image{margin:0 2px 0 5px;}.kune-NavigationBar .Items{margin:2px 0;}.kune-NavigationBar .Items .gwt-Image{margin:2px 0;vertical-align:middle;}.kune-NavigationBar .Items .gwt-Hyperlink a{color:green;/* FIXME: other color */}.kune-NavigationBar .topBar .topBar-margin{margin-left:5px;}.kune-NavigationBar .pathMenu{vertical-align:middle;}.kune-NavigationBar .pathMenu .gwt-MenuItem{background:transparent url(img/button-bg-hard.gif) repeat-x 0 0;border-left:1px solid #AAA;border-right:1px solid #AAA;color:#999;cursor:pointer;white-space:nowrap;padding:3px 6px;}.kune-NavigationBar .pathMenu .gwt-MenuItem-selected{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#000;}.kune-NavigationBar .kune-IconHyperlink{vertical-align:middle;margin-left:5px;}.kune-NavigationBar .kune-IconHyperlink a{color:green;text-decoration:none;}.kune-NavigationBar .kune-IconHyperlink .gwt-Image{margin-right:3px;vertical-align:middle;}/* Social Network */.kune-StackedDropDownPanel{}.kune-StackedDropDownPanel .gwt-StackPanelItem{border-top:1px solid #CCC;border-bottom:1px solid #CCC;background-color:#EFA;cursor:pointer;padding:1px 3px 0 6px;overflow:hidden;}.kune-StackedDropDownPanel .gwt-StackPanelItem img{margin:0 0 0 3px;vertical-align:middle;}.kune-StackedDropDownPanel .kune-DropDownInner table{width:100%;}.kune-StackedDropDownPanel .gwt-StackPanelItem-selected{}.kune-StackedDropDownPanelLink{background-color:#E6E6E6;border-top:1px solid #CCC;border-bottom:1px solid #F2F2F2;/* white-space: nowrap; */cursor:pointer;}.kune-StackedDropDownPanel .kune-DropDownInner{padding:0;}/* StackedDropDownPanel Members */.kune-StackSubItemLabel{overflow:hidden;}.kune-StackSubItemLabel .gwt-MenuItem{white-space:nowrap;cursor:pointer;border-bottom:1px solid #F2F2F2;}.kune-StackSubItemLabel table{width:100%;}.kune-StackSubItemLabel .gwt-MenuItem img{vertical-align:middle;margin-top:1px;margin-bottom:1px;margin-left:5px;margin-right:3px;}.kune-StackSubItemLabel .gwt-MenuItem-selected{background-color:#FFE6D5;}.kune-StackSubItemActions{background-color:#F2F2F2;border:1px solid #999;vertical-align:middle;padding:5px 0;margin-left:-120px;margin-top:-2px;}.kune-StackSubItemActions .gwt-MenuItem{cursor:pointer;padding:1px 10px;white-space:nowrap;}.kune-StackSubItemActions .gwt-MenuItem img{vertical-align:middle;margin-right:3px;}.kune-StackSubItemActions .gwt-MenuItem-selected{background-color:#FFB958;}/* AccessList */.kune-AccessListSubLabel{font-style:italic;}.kune-AccessList{margin:5px;width:100%;}.kune-AccessList .gwt-DisclosurePanel{margin:5px;width:100%;}.kune-AccessList .gwt-DisclosurePanel-open{width:100%;}.kune-AccessList .gwt-DisclosurePanel-closed{width:100%;}.kune-AccessList .header{margin:0 0 3px;text-decoration:none;width:100%;background-color:#8DD35F;}.kune-AccessList .header table{margin:0 5px 0 0;width:100%;color:#FFF;}.kune-AccessList .header img{margin:0 3px 0 0;}.kune-AccessList .content{margin:0 0 0 7px;width:100%;}.kune-AccessList .content table{margin-bottom:5px;width:100%;}/* Rate */.kune-RatePanel-Label{white-space:nowrap;vertical-align:middle;}.kune-RatePanel-Stars{margin-left:5px;vertical-align:middle;}.kune-RatePanel-Stars-RateIt{cursor:pointer;}/* Licenses */.kune-License-CC-Header{color:#15428B;font-weight:700;font-size:85%;margin-top:5px;}.kune-License-CC-Header .gwt-Label{color:#15428B;font-weight:700;font-size:85%;margin-top:5px;}/* Theme */.kune-IconBottomPanel .gwt-MenuItem{cursor:pointer;background-color:#FFF;margin:2px 2px 2px 5px;}.kune-IconBottomPanel .gwt-MenuItem-selected{background-color:#F2F2F2;}.gwt-MenuBar-bottomMenu{margin-left:-60px;margin-top:-120px;}/* i18n */.kune-I18nTranslatorCell{white-space:normal;}.kune-i18nTranslator-recommend{margin:10px;}.kune-i18nTranslator-recommend h1{font-size:131%;font-weight:700;}.kune-i18nTranslator-recommend h2{font-size:116%;font-weight:700;}.kune-i18nTranslator-recommend h3{font-size:108%;font-weight:700;font-style:italic;}.kune-i18nTranslator-recommend em{font-weight:700;}.kune-i18nTranslator-recommend strong{font-weight:700;}/* Admin Context */.kune-AdminContextPanel{margin:6px;width:100%;}.kune-AdminContextPanel .gwt-StackPanelItem{background:transparent url(img/arrow-right-white.gif) no-repeat scroll 3px 2px;cursor:pointer;padding:3px 10px 1px 20px;overflow:hidden;width:100%;}.kune-AdminContextPanel .gwt-StackPanelItem img{margin:0 0 0 3px;vertical-align:middle;}.kune-AdminContextPanel .gwt-StackPanelItem-selected{background:transparent url(img/arrow-down-white.gif) no-repeat scroll 3px 2px;background-color:#DEE3DB;}.kune-AdminContextPanelLink{background-color:#E6E6E6;border-top:1px solid #CCC;border-bottom:1px solid #F2F2F2;/* white-space: nowrap; */cursor:pointer;}.kune-AdminContextPanel-inner{background-color:#FFF;}.kune-AdminContextPanel-inner-wrap{margin:5px;}.kune-EditableLabel{}.kune-EditableLabel .kune-EditableLabel-editable{}.kune-EditableLabel-high{background-color:#FFFBC1;cursor:pointer;}.kune-EditableLabel-high span{background-color:#FFFBC1;}.kune-EditableLabel a{margin-left:5px;}.kune-EditableLabel a:link{color:green;}.kune-EditableLabel a:hover{text-decoration:underline;}.kune-EditableLabel a:visited{color:olive;}.kune-EditableLabel img{margin-right:4px;vertical-align:middle;}.kune-EditableLabel-editable img{margin-right:4px;vertical-align:middle;}.kune-EditableLabel-editable span{margin:3px;}.kune-EditableLabel span{margin:3px;}.kune-BottomIconsTrayPanel{width:165px;height:21px;vertical-align:middle;background-color:#EFEFEF;}.kune-TagsPanel-tag{float:left;margin-right:5px;cursor:pointer;}.kune-Content-Main{margin:5px;}/* Yahoo ui base.css */.kune-Content-Main h1{font-size:138.5%;}.kune-Content-Main h2{font-size:123.099998%;}.kune-Content-Main h3{font-size:108%;}.kune-Content-Main h1{margin:1em 0;}.kune-Content-Main h2{margin:1em 0;}.kune-Content-Main h3{margin:1em 0;}.kune-Content-Main h1{font-weight:700;}.kune-Content-Main h2{font-weight:700;}.kune-Content-Main h3{font-weight:700;}.kune-Content-Main h4{font-weight:700;}.kune-Content-Main h5{font-weight:700;}.kune-Content-Main h6{font-weight:700;}.kune-Content-Main strong{font-weight:700;}.kune-Content-Main abbr{border-bottom:1px dotted #000;cursor:help;}.kune-Content-Main acronym{border-bottom:1px dotted #000;cursor:help;}.kune-Content-Main em{font-style:italic;}.kune-Content-Main blockquote{margin:1em;}.kune-Content-Main ul{margin:1em;}.kune-Content-Main ol{margin:1em;}.kune-Content-Main dl{margin:1em;}.kune-Content-Main ol{margin-left:2em;}.kune-Content-Main ul{margin-left:2em;}.kune-Content-Main dl{margin-left:2em;}.kune-Content-Main ol{list-style:decimal outside;}.kune-Content-Main li{list-style:decimal outside;}.kune-Content-Main li{list-style:disc outside;}.kune-Content-Main ul{list-style:disc outside;}.kune-Content-Main dl{margin-left:1em;}.kune-Content-Main dd{margin-left:1em;}.kune-Content-Main th{border:1px solid #000;padding:.5em;font-weight:700;text-align:center;}.kune-Content-Main td{border:1px solid #000;padding:.5em;}.kune-Content-Main caption{margin-bottom:.5em;text-align:center;}.kune-Content-Main p{margin-bottom:1em;}.kune-Content-Main fieldset{margin-bottom:1em;}.kune-Content-Main table{margin-bottom:1em;}.kune-Content-Main pre{margin-bottom:1em;}.kune-Content-Main input[type=text]{width:12.25em;width:11.9em;}.kune-Content-Main input[type=password]{width:12.25em;width:11.9em;}.kune-Content-Main textarea{width:12.25em;width:11.9em;}.search-icon{background-image:url(img/search.gif)!important;}.i18n-icon{background-image:url(img/language.gif)!important;}/* RTE Text editor */.kune-TexEditorPanel-TextArea{margin:3px;}.gwt-RichTextArea{/* border: 1px solid #000;
+ background-color: #FFF; */border:1px solid #4D4D4D;background-color:#FFF;margin:5px 0 5px 10px;}.gwt-RichTextToolbar{/* background-color: #F2F2F2;
+ padding: 5px; */height:24px;vertical-align:middle;}.gwt-RichTextToolbar table{vertical-align:middle;}.gwt-RichTextToolbar .gwt-ToggleButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-PushButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-PushButton-down{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-PushButton-down-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-ToggleButton-down{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .x-btn{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lSpace{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lrSpace{float:left;}.RichTextToolbar-menu{float:left;margin-top:2px;}.RichTextToolbar-menu table{border-collapse:collapse;border-spacing:0;margin:0;}.RichTextToolbar-menu .gwt-MenuItem{margin-right:2px;border:1px solid #F2F2F2;}.RichTextToolbar-menu .gwt-MenuItem-selected{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.RichTextToolbar-submenu{background-color:#FFFCD5;border:1px solid #D38D5F;cursor:default;}.RichTextToolbar-submenu .gwt-MenuItem{cursor:default;white-space:nowrap;border:1px solid #FFFCD5;padding:0 4px;}.RichTextToolbar-submenu .gwt-MenuItem-selected{background-color:#FFB958;border:1px solid #C83737;}.kune-WebSafePalette{background-color:#FFF;border:1px solid #AAA;margin:1px;}.kune-WebSafePalette td{width:12px;height:10px;}.k-site-traybar{background:#FFF none repeat scroll 0 50%;}.k-sitebar .kune-IconHyperlink{white-space:nowrap;}.k-sitebar .kune-IconHyperlink a:link{cursor:pointer;text-decoration:underline;color:#B3B3B3;}.k-sitebar .kune-IconHyperlink a:hover{text-decoration:underline;}.k-sitebar .kune-IconHyperlink a:visited{color:#B3B3B3;}.k-sitebar-labellink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-sitebar{margin-right:10px;height:16px;}.k-sitebar .gwt-TextBox{border:1px solid #E4A374;margin:0 15px 0 3px;padding-left:3px;color:#B3B3B3;}.k-sitebar .gwt-Hyperlink a{white-space:nowrap;color:#B3B3B3;text-decoration:underline;cursor:pointer;}.k-sitebar .gwt-PushButton{cursor:pointer;}.k-sitebar-LabelLink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-entity-summary{border-left-color:#FFF;border-left-width:5px;}.k-entitytextlogo{border:2px solid #F2F2F2;height:60px;margin:0 0 4px -1px;overflow:hidden;width:468px;}.k-entitytextlogo .gwt-Label{font-size:167%;font-weight:700;margin:5px;height:27px;}.k-entitytextlogo-default .gwt-Label{color:#69312F;}.k-entitytextlogo-green .gwt-Label{color:#250;}.k-entitytextlogo-blue .gwt-Label{color:navy;}.k-entitytextlogo-grey .gwt-Label{color:#1A1A1A;}.k-entitytextlogo-purple .gwt-Label{color:#405;}.k-entitytextlogo-red .gwt-Label{color:maroon;}.k-entitytextlogo .gwt-Hyperlink a{color:#CCC;font-size:85%;margin:5px;text-decoration:underline;white-space:nowrap;background-color:#FFF;}.k-entity-default .x-layout-split{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-green .x-layout-split{background:#5FD35F none repeat scroll 0 50%;}.k-entity-blue .x-layout-split{background:#06F none repeat scroll 0 50%;}.k-entity-grey .x-layout-split{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-purple .x-layout-split{background:#660080 none repeat scroll 0 50%;}.k-entity-red .x-layout-split{background:#D40000 none repeat scroll 0 50%;}.k-entityworkspace .x-layout-split{background:transparent none repeat scroll 0 50%;}.k-entityworkspace-default .x-layout-split{background:#DEAA87 none repeat scroll 0 50%;}.k-entityworkspace-green .x-layout-split{background:#DCE8AB none repeat scroll 0 50%;}.k-entityworkspace-blue .x-layout-split{background:#D5D5FF none repeat scroll 0 50%;}.k-entityworkspace-grey .x-layout-split{background:#999 none repeat scroll 0 50%;}.k-entityworkspace-purple .x-layout-split{background:#A793AC none repeat scroll 0 50%;}.k-entityworkspace-red .x-layout-split{background:#F55 none repeat scroll 0 50%;}.k-entity-title{border-left-style:solid;border-left-width:2px;}.k-entity-title div{line-height:22px;white-space:nowrap;}.k-entity-subtitle{}.k-entity-subtitle div{line-height:22px;white-space:nowrap;}.k-entity-title-rd-default{background:#DD8A3D;}.k-entity-title-rd-green{background:#5FD35F;}.k-entity-title-rd-blue{background:#06F;}.k-entity-title-rd-grey{background:#4D4D4D;}.k-entity-title-rd-purple{background:#660080;}.k-entity-title-rd-red{background:#D40000;}.k-entity-title-default{background:#F1BB59 none repeat scroll 0 50%;border-left-color:#DD8A3D;}.k-entity-title-green{background:#AFA none repeat scroll 0 50%;border-left-color:#5FD35F;}.k-entity-title-blue{background:#AFDDE9 none repeat scroll 0 50%;border-left-color:#06F;}.k-entity-title-grey{background:#CCC none repeat scroll 0 50%;border-left-color:#4D4D4D;}.k-entity-title-purple{background:#DDAFE9 none repeat scroll 0 50%;border-left-color:#660080;}.k-entity-title-red{background:#FF8080 none repeat scroll 0 50%;border-left-color:#D40000;}.k-entity-title-default div{color:#69312F;}.k-entity-title-green div{color:#250;}.k-entity-title-blue div{color:navy;}.k-entity-title-grey div{color:#1A1A1A;}.k-entity-title-purple div{color:#405;}.k-entity-title-red div{color:maroon;}.k-entity-subtitle-default{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-subtitle-green{background:#5FD35F none repeat scroll 0 50%;}.k-entity-subtitle-blue{background:#06F none repeat scroll 0 50%;}.k-entity-subtitle-grey{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-subtitle-purple{background:#660080 none repeat scroll 0 50%;}.k-entity-subtitle-red{background:#D40000 none repeat scroll 0 50%;}.k-entity-subtitle-default div{color:#FFF;}.k-entity-subtitle-green div{color:#FFF;}.k-entity-subtitle-blue div{color:#FFF;}.k-entity-subtitle-grey div{color:#FFF;}.k-entity-subtitle-purple div{color:#FFF;}.k-entity-subtitle-red div{color:#FFF;}.k-entity-bottom-rd-default,.k-entity-bottom-default,.k-toolselectoritem-sel-default{background:#DD8A3D;}.k-entity-bottom-rd-green,.k-entity-bottom-green,.k-toolselectoritem-sel-green{background:#5FD35F;}.k-entity-bottom-rd-blue,.k-entity-bottom-blue,.k-toolselectoritem-sel-blue{background:#06F;}.k-entity-bottom-rd-grey,.k-entity-bottom-grey,.k-toolselectoritem-sel-grey{background:#4D4D4D;}.k-entity-bottom-rd-purple,.k-entity-bottom-purple,.k-toolselectoritem-sel-purple{background:#660080;}.k-entity-bottom-rd-red,.k-entity-bottom-red,.k-toolselectoritem-sel-red{background:#D40000;}.k-entitylicensepanel-licensetext{cursor:pointer;margin-left:5px;text-decoration:underline;}.k-entity-context-default div{background:#FFD09D none repeat scroll 0 50%;}.k-entity-context-green div{background:#CFA none repeat scroll 0 50%;}.k-entity-context-blue div{background:#ACF none repeat scroll 0 50%;}.k-entity-context-grey div{background:#B3B3B3 none repeat scroll 0 50%;}.k-entity-context-purple div{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-context-red div{background:#FAA none repeat scroll 0 50%;}.k-entity-bottom div{line-height:2em;color:#FFF;}.k-toolbar-top-line{border-top-color:#d0d0d0;border-top-style:solid;border-top-width:1px;}.k-toolbar-bottom-line{border-bottom-color:#d0d0d0;border-bottom-style:solid;border-bottom-width:1px;}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial,sans;line-height:19px;}.k-toolbar-sep{padding-top:4px;padding-left:5px;}/* Custom gwt-ext styles */.ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px;border:0;}.ytb-spacer{width:2px;}.x-grid-group-hd{border-bottom:2px solid grey;cursor:pointer;padding-top:3px;}/* Drop down */.k-dropdownouter{background-color:grey;}.k-dropdownouter-members{}.k-dropdownouter-members-default{background-color:#DF5244;}.k-dropdownouter-members-green{background-color:green;}.k-dropdownouter-members-blue{background-color:#5500D4;}.k-dropdownouter-members-grey{background-color:#4D4D4D;}.k-dropdownouter-members-purple{background-color:#672178;}.k-dropdownouter-members-red{background-color:#A02C2C;}.k-dropdownouter-part{}.k-dropdownouter-part-default{background-color:#CA5842;}.k-dropdownouter-part-green{background-color:#0A0;}.k-dropdownouter-part-blue{background-color:#60F;}.k-dropdownouter-part-grey{background-color:#666;}.k-dropdownouter-part-purple{background-color:#892CA0;}.k-dropdownouter-part-red{background-color:#C83737;}.k-dropdownouter-tags{}.k-dropdownouter-tags-default{background-color:#87501E;}.k-dropdownouter-tags-green{background-color:#00D400;}.k-dropdownouter-tags-blue{background-color:#95F;}.k-dropdownouter-tags-grey{background-color:gray;}.k-dropdownouter-tags-purple{background-color:#AB37C8;}.k-dropdownouter-tags-red{background-color:#D35F5F;}.k-dropdownouter-summary{}.k-dropdownouter-summary-default{background-color:#9F734B;}.k-dropdownouter-summary-green{background-color:#4CE14C;}.k-dropdownouter-summary-blue{background-color:#69A5FF;}.k-dropdownouter-summary-grey{background-color:#A6A6A6;}.k-dropdownouter-summary-purple{background-color:#C473D8;}.k-dropdownouter-summary-red{background-color:#E08F8F;}.k-dropdowninner{margin:0 3px 1px;background:green;background-color:#FFF;/* padding: 3px; */}.k-dropdownlabel{color:#FFF;cursor:pointer;}.k-dropdownlabel .gwt-Label{margin:0 5px 0 0;width:100%;}.k-dropdownlabel img{margin:0 3px 0 1px;}/* WsTheme */.k-wstheme-icon-default{background:#FF8C00;}.k-wstheme-icon-green{background:green;}.k-wstheme-icon-blue{background:blue;}.k-wstheme-icon-grey{background:grey;}.k-wstheme-icon-purple{background:purple;}.k-wstheme-icon-red{background:red;}/* Tool selector items */.k-toolselectoritem{width:auto;margin-bottom:5px;cursor:pointer;}.k-toolselectoritem-sel{}.k-toolselectoritem-notsel-default{background:#FFE9A5;}.k-toolselectoritem-notsel-green{background:#D6F4D6;}.k-toolselectoritem-notsel-blue{background:#D7D7F4;}.k-toolselectoritem-notsel-grey{background:#E6E6E6;}.k-toolselectoritem-notsel-purple{background:#EED7F4;}.k-toolselectoritem-notsel-red{background:#FFD5D5;}.k-toolselectoritem-sel a{color:#FFF;padding:0 9px;text-decoration:none;}.k-toolselectoritem-sel a:hover{text-decoration:none;}.k-toolselectoritem-notsel{}.k-toolselectoritem-notsel a{color:#00F;padding:0 9px;text-decoration:none;}.k-toolselectoritem-notsel a:hover{text-decoration:underline;}/* others */.k-textlinethrough{text-decoration:line-through;}.k-textnormal{text-decoration:inherit;}.k-textunderline{text-decoration:underline;}
\ No newline at end of file
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/richtext.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/richtext.css 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/richtext.css 2008-09-22 11:28:17 UTC (rev 877)
@@ -1,32 +1,16 @@
-
/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.3.1
-*/
-body{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input, textarea, select{font-family:inherit;font-size:inherit;font-weight:inherit;}
-
-/*
+*/body{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.3.1
-*/
-body {font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:99%;}
-
-
-/*
+*/body{font:13px/1.22 arial,helvetica,clean,sans-serif;font-size:small;font:x-small;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;font-size:108%;line-height:99%;}/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.4.1
-*/
-h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong{font-weight:bold;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;} em{font-style:italic;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:bold;text-align:center;}caption{margin-bottom:.5em;text-align:center;}p,fieldset,table,pre{margin-bottom:1em;}input[type=text],input[type=password],textarea{width:12.25em;*width:11.9em;}
-
-
-body {
- font-family: arial, sans;
- margin: 5px;
-}
-
+*/h1{font-size:138.5%;}h2{font-size:123.099998%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong{font-weight:700;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;}em{font-style:italic;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:700;text-align:center;}caption{margin-bottom:.5em;text-align:center;}p,fieldset,table,pre{margin-bottom:1em;}input[type=text],input[type=password],textarea{width:12.25em;width:11.9em;}body{font-family:arial, sans;margin:5px;}
\ No newline at end of file
Modified: trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java 2008-09-22 11:28:17 UTC (rev 877)
@@ -28,6 +28,7 @@
import org.ourproject.kune.platf.client.rpc.SocialNetworkService;
import org.ourproject.kune.platf.server.LoggerMethodInterceptor;
import org.ourproject.kune.platf.server.PlatformServerModule;
+import org.ourproject.kune.platf.server.manager.impl.FileUploadManagerRevisited;
import org.ourproject.kune.platf.server.properties.PropertiesFileName;
import org.ourproject.kune.platf.server.rest.ContentJSONService;
import org.ourproject.kune.platf.server.rest.GroupJSONService;
@@ -62,6 +63,7 @@
public KuneRackModule(final String jpaUnit, final String propertiesFileName, final Scope sessionScope) {
configModule = new AbstractModule() {
+ @Override
public void configure() {
bindInterceptor(Matchers.any(), new NotInObject(), new LoggerMethodInterceptor());
bindConstant().annotatedWith(JpaUnit.class).to(jpaUnit);
@@ -94,6 +96,7 @@
UserService.class, SocialNetworkService.class, I18nService.class);
builder.installRESTServices("^/kune/json/", TestJSONService.class, GroupJSONService.class,
UserJSONService.class, I18nTranslationJSONService.class, ContentJSONService.class);
+ builder.installServlet("^/kune/servlets/", FileUploadManagerRevisited.class);
builder.at("^/kune/(.*)$").install(new ForwardFilter("^/kune/(.*)$", "/gwt/org.ourproject.kune.app.Kune/{0}"));
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-22 11:28:17 UTC (rev 877)
@@ -20,7 +20,7 @@
public class FileUploaderDialog implements FileUploader {
- private static final String URL = "/services/fileupload";
+ private static final String URL = "/kune/servlets/FileUploadManagerRevisited";
private UploadDialog dialog;
private ToolbarButton traybarButton;
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java 2008-09-22 11:28:17 UTC (rev 877)
@@ -35,6 +35,7 @@
@Inject
KuneProperties kuneProperties;
+ @Override
@SuppressWarnings( { "unchecked", "deprecation" })
protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException,
IOException {
@@ -54,10 +55,7 @@
final ServletFileUpload upload = new ServletFileUpload(factory);
// maximum size before a FileUploadException will be thrown
- // upload.setSizeMax(new
- // Integer(kuneProperties.get(KuneProperties.UPLOAD_MAX_FILE_SIZE)) *
- // 1024 * 1024);
- upload.setSizeMax(5 * 1024 * 1024);
+ upload.setSizeMax(new Integer(kuneProperties.get(KuneProperties.UPLOAD_MAX_FILE_SIZE)) * 1024 * 1024);
try {
final List fileItems = upload.parseRequest(req);
@@ -70,10 +68,7 @@
} else {
final String fileName = item.getName();
log.info("file: " + fileName + " fieldName: " + item.getFieldName() + " size: " + item.getSize());
- // item.write(new
- // File(kuneProperties.get(KuneProperties.UPLOAD_LOCATION),
- // fileName));
- item.write(new File("/var/lib/kune/uploads", fileName));
+ item.write(new File(kuneProperties.get(KuneProperties.UPLOAD_LOCATION), fileName));
}
}
} catch (final FileUploadException e) {
Modified: trunk/src/main/java/org/ourproject/kune/rack/RackBuilder.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/rack/RackBuilder.java 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/java/org/ourproject/kune/rack/RackBuilder.java 2008-09-22 11:28:17 UTC (rev 877)
@@ -20,89 +20,101 @@
package org.ourproject.kune.rack;
import javax.servlet.Filter;
+import javax.servlet.http.HttpServlet;
import org.ourproject.kune.rack.dock.RegexDock;
import org.ourproject.kune.rack.dock.RegexMatcher;
import org.ourproject.kune.rack.filters.gwts.GWTServiceFilter;
import org.ourproject.kune.rack.filters.rest.RESTServiceFilter;
+import org.ourproject.kune.rack.filters.servlet.ServletServiceFilter;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.inject.Module;
public class RackBuilder {
- public static class RackDockBuilder {
- private final String regex;
- private final Rack rack;
+ public static class RackDockBuilder {
+ private final String regex;
+ private final Rack rack;
- public RackDockBuilder(final Rack rack, final String regex) {
- this.rack = rack;
- this.regex = regex;
- }
+ public RackDockBuilder(final Rack rack, final String regex) {
+ this.rack = rack;
+ this.regex = regex;
+ }
- public RackDockBuilder install(final Filter... filters) {
- for (Filter filter : filters) {
- RegexDock dock = new RegexDock(regex);
- dock.setFilter(filter);
- rack.add(dock);
- }
- return this;
- }
-
+ public RackDockBuilder install(final Filter... filters) {
+ for (final Filter filter : filters) {
+ final RegexDock dock = new RegexDock(regex);
+ dock.setFilter(filter);
+ rack.add(dock);
+ }
+ return this;
}
- private final Rack rack;
+ }
- public RackBuilder() {
- this.rack = new Rack();
- }
+ private final Rack rack;
- public RackBuilder use(final Module... list) {
- for (Module m : list) {
- rack.add(m);
- }
- return this;
- }
+ public RackBuilder() {
+ this.rack = new Rack();
+ }
- public RackDockBuilder at(final String regex) {
- return new RackDockBuilder(rack, regex);
+ public RackBuilder add(final Class<? extends ContainerListener> listener) {
+ rack.add(listener);
+ return this;
+ }
+
+ public RackDockBuilder at(final String regex) {
+ return new RackDockBuilder(rack, regex);
+ }
+
+ public RackBuilder exclude(final String... excludes) {
+ for (final String exclude : excludes) {
+ rack.addExclusion(new RegexMatcher(exclude));
}
+ return this;
+ }
- public RackBuilder installGWTServices(final String root, final Class<? extends RemoteService>... serviceClasses) {
+ public Rack getRack() {
+ return rack;
+ }
- for (Class<? extends RemoteService> serviceClass : serviceClasses) {
- String simpleName = serviceClass.getSimpleName();
- RegexDock dock = new RegexDock(root + simpleName + "$");
- dock.setFilter(new GWTServiceFilter(serviceClass));
- rack.add(dock);
- }
+ public RackBuilder installGWTServices(final String root, final Class<? extends RemoteService>... serviceClasses) {
- return this;
+ for (final Class<? extends RemoteService> serviceClass : serviceClasses) {
+ final String simpleName = serviceClass.getSimpleName();
+ final RegexDock dock = new RegexDock(root + simpleName + "$");
+ dock.setFilter(new GWTServiceFilter(serviceClass));
+ rack.add(dock);
}
- public void installRESTServices(final String root, final Class<?>... serviceClasses) {
- for (Class<?> serviceClass : serviceClasses) {
- String simpleName = serviceClass.getSimpleName();
- String pattern = root + simpleName + "/(.*)$";
- RegexDock dock = new RegexDock(pattern);
- dock.setFilter(new RESTServiceFilter(pattern, serviceClass));
- rack.add(dock);
- }
- }
+ return this;
+ }
- public RackBuilder add(final Class<? extends ContainerListener> listener) {
- rack.add(listener);
- return this;
+ public void installRESTServices(final String root, final Class<?>... serviceClasses) {
+ for (final Class<?> serviceClass : serviceClasses) {
+ final String simpleName = serviceClass.getSimpleName();
+ final String pattern = root + simpleName + "/(.*)$";
+ final RegexDock dock = new RegexDock(pattern);
+ dock.setFilter(new RESTServiceFilter(pattern, serviceClass));
+ rack.add(dock);
}
+ }
- public Rack getRack() {
- return rack;
+ public void installServlet(final String root, final Class<? extends HttpServlet>... servletClasses) {
+ for (final Class<? extends HttpServlet> servletClass : servletClasses) {
+ final String simpleName = servletClass.getSimpleName();
+ final RegexDock dock = new RegexDock(root + simpleName + "$");
+ dock.setFilter(new ServletServiceFilter(servletClass));
+ rack.add(dock);
}
- public RackBuilder exclude(final String... excludes) {
- for (String exclude : excludes) {
- rack.addExclusion(new RegexMatcher(exclude));
- }
- return this;
+ }
+
+ public RackBuilder use(final Module... list) {
+ for (final Module m : list) {
+ rack.add(m);
}
+ return this;
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/rack/filters/InjectedFilter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/rack/filters/InjectedFilter.java 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/java/org/ourproject/kune/rack/filters/InjectedFilter.java 2008-09-22 11:28:17 UTC (rev 877)
@@ -29,23 +29,22 @@
import com.google.inject.Injector;
public abstract class InjectedFilter implements Filter {
- private ServletContext ctx;
+ protected ServletContext ctx;
- public <T> T getInstance(Class<T> type) {
- return getInjector().getInstance(type);
- }
+ public void destroy() {
+ }
- private Injector getInjector() {
- return (Injector) ctx.getAttribute(RackServletFilter.INJECTOR_ATTRIBUTE);
- }
+ public <T> T getInstance(final Class<T> type) {
+ return getInjector().getInstance(type);
+ }
- public void init(FilterConfig filterConfig) throws ServletException {
- this.ctx = filterConfig.getServletContext();
- getInjector().injectMembers(this);
- }
+ public void init(final FilterConfig filterConfig) throws ServletException {
+ this.ctx = filterConfig.getServletContext();
+ getInjector().injectMembers(this);
+ }
- public void destroy() {
- }
+ private Injector getInjector() {
+ return (Injector) ctx.getAttribute(RackServletFilter.INJECTOR_ATTRIBUTE);
+ }
-
}
Added: trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/ServletServiceFilter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/ServletServiceFilter.java 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/java/org/ourproject/kune/rack/filters/servlet/ServletServiceFilter.java 2008-09-22 11:28:17 UTC (rev 877)
@@ -0,0 +1,37 @@
+package org.ourproject.kune.rack.filters.servlet;
+
+import java.io.IOException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServlet;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.ourproject.kune.rack.RackHelper;
+import org.ourproject.kune.rack.filters.InjectedFilter;
+
+public class ServletServiceFilter extends InjectedFilter {
+ Log log = LogFactory.getLog(ServletServiceFilter.class);
+ private final Class<? extends HttpServlet> servletClass;
+
+ public ServletServiceFilter(final Class<? extends HttpServlet> servletClass) {
+ this.servletClass = servletClass;
+ }
+
+ public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
+ throws IOException, ServletException {
+ log.debug("SERVICE: " + RackHelper.getURI(request) + " - " + servletClass.getSimpleName());
+ final HttpServlet servlet = getInstance(servletClass);
+ servlet.service(request, response);
+ }
+
+ @Override
+ public void init(final FilterConfig filterConfig) throws ServletException {
+ super.init(filterConfig);
+ }
+
+}
Modified: trunk/src/main/resources/kune.properties
===================================================================
--- trunk/src/main/resources/kune.properties 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/resources/kune.properties 2008-09-22 11:28:17 UTC (rev 877)
@@ -24,6 +24,6 @@
kune.sitelogourl = images/kune-logo-16px.png
-kune.upload.location = /var/lib/kune/upload/
-kune.upload.gallerypermittedextensions = jpg,jpeg,png,gif,bmp,svg,avi,mpg,mpeg,ogg,mov
+kune.upload.location = /var/lib/kune/uploads/
+kune.upload.gallerypermittedextensions = jpg,jpeg,png,gif,bmp,svg,avi,mpg,mpeg,ogg,mov,tif,tiff
kune.upload.maxfilesizeinmegas = 10
Modified: trunk/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/src/main/webapp/WEB-INF/web.xml 2008-09-19 23:33:06 UTC (rev 876)
+++ trunk/src/main/webapp/WEB-INF/web.xml 2008-09-22 11:28:17 UTC (rev 877)
@@ -46,38 +46,4 @@
<url-pattern>/http-bind/</url-pattern>
</servlet-mapping>
- <servlet>
- <servlet-name>FileUploadService</servlet-name>
- <servlet-class>
- org.ourproject.kune.platf.server.manager.impl.FileUploadManagerRevisited
- </servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>FileUploadService</servlet-name>
- <url-pattern>/services/fileupload</url-pattern>
- </servlet-mapping>
-
- <!-- Change the servlet name and mapping with appropriate name and URL pattern respectively -->
- <servlet>
- <servlet-name>FileUploadServiceOld</servlet-name>
- <servlet-class>
- org.cafesip.gwtcomp.server.FileUploadServlet
- </servlet-class>
-
- <init-param>
- <param-name>action-class</param-name>
-
- <!-- Replace the action class name below with the fully qualified name of the action class -->
- <param-value>
- org.ourproject.kune.platf.server.manager.impl.FileUploadManagerDefault
- </param-value>
- </init-param>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>FileUploadServiceOld</servlet-name>
- <url-pattern>/services/fileuploadold</url-pattern>
- </servlet-mapping>
-
</web-app>
1
0
Author: vjrj
Date: 2008-09-20 01:33:06 +0200 (Sat, 20 Sep 2008)
New Revision: 876
Added:
trunk/img/nav-icons/wiki.png
trunk/img/nav-icons/wiki_add.png
trunk/img/nav-icons/wikipage.png
trunk/img/nav-icons/wikipage_add.png
trunk/img/wiki.svg
trunk/src/main/java/org/ourproject/kune/docs/client/actions/
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditInProgressAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentPublishAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentRejectAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSetStatusAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSubmitForPublishAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTranslationAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTrashAction.java
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wiki.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wiki_add.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wikipage.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wikipage_add.png
trunk/src/test/java/org/ourproject/kune/platf/client/actions/
trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerTest.java
Removed:
trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/SocialNetworkManagerTest.java
Modified:
trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/server/DocumentServerTool.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java
trunk/src/main/java/org/ourproject/kune/platf/server/init/DatabaseInitializer.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/SocialNetworkManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/UserManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java
Log:
Incomplete - task 53: SocialNetworkManager.getParticipation bug: personal groups showed ...
Incomplete - task 54: ContextNav refactoring (less bussiness logic in view) and tests
Added: trunk/img/nav-icons/wiki.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/nav-icons/wiki.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/img/nav-icons/wiki_add.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/nav-icons/wiki_add.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/img/nav-icons/wikipage.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/nav-icons/wikipage.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/img/nav-icons/wikipage_add.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/nav-icons/wikipage_add.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/img/wiki.svg
===================================================================
--- trunk/img/wiki.svg 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/img/wiki.svg 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docbase="/Users/vjrj/Desktop"
+ sodipodi:docname="wiki.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/Users/vjrj/Desktop/wikipage_add.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3201">
+ <stop
+ style="stop-color:#ff9900;stop-opacity:1"
+ offset="0"
+ id="stop3203" />
+ <stop
+ style="stop-color:#ffc400;stop-opacity:0;"
+ offset="1"
+ id="stop3205" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3201"
+ id="linearGradient3207"
+ x1="9.0366335"
+ y1="7.9007425"
+ x2="-6.7049499"
+ y2="14.666832"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3201"
+ id="linearGradient3417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6797384,0,0,0.6722173,4.432061,3.547779)"
+ x1="9.0366335"
+ y1="7.9007425"
+ x2="-6.7049499"
+ y2="14.666832" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3201"
+ id="linearGradient3485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6797384,0,0,0.6722173,4.432061,3.547779)"
+ x1="9.0366335"
+ y1="7.9007425"
+ x2="-6.7049499"
+ y2="14.666832" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.197802"
+ inkscape:cx="8"
+ inkscape:cy="8"
+ inkscape:current-layer="layer3"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1409"
+ inkscape:window-height="914"
+ inkscape:window-x="31"
+ inkscape:window-y="86" />
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="wikipage"
+ style="display:inline">
+ <image
+ style="display:inline"
+ y="0"
+ x="0"
+ id="image3267"
+ height="16"
+ width="16"
+ sodipodi:absref="/Users/vjrj/Desktop/page_add.png"
+ xlink:href="page_add.png" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="blank"
+ style="display:none">
+ <image
+ style="display:inline"
+ y="0"
+ x="-8.8817842e-16"
+ id="image2226"
+ height="16"
+ width="16"
+ sodipodi:absref="/Users/vjrj/Desktop/page.png"
+ xlink:href="page.png"
+ inkscape:export-filename="/Users/vjrj/Desktop/wikipage.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ style="display:inline">
+ <g
+ id="g3481"
+ transform="translate(19,-7.4782179)">
+ <image
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/Users/vjrj/Desktop/wikiicon.png"
+ xlink:href="wiki.png"
+ sodipodi:absref="/Users/vjrj/Desktop/wiki.png"
+ width="16"
+ height="16"
+ id="image3413"
+ x="0"
+ y="0" />
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/Users/vjrj/Desktop/wikiicon.png"
+ sodipodi:nodetypes="cccccc"
+ id="path3362"
+ d="M 13.130693,6.917851 L 10.889575,11.9505 L 10.209836,7.9171915 L 8.170622,11.9505 L 7.490883,8.2253455 L 6.811146,9.261626"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient3485);stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ </g>
+ <image
+ y="-0.49554455"
+ x="13.559901"
+ id="image3478"
+ height="16"
+ width="16"
+ sodipodi:absref="/Users/vjrj/Desktop/add-small.png"
+ xlink:href="add-small.png" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="w_of_wikipage"
+ style="display:inline">
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient3207);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M 12.79703,5.013366 L 9.5,12.5 L 8.5,6.4999997 L 5.5,12.5 L 4.5,6.9584154 L 3.5,8.4999997"
+ id="path2229"
+ sodipodi:nodetypes="cccccc"
+ inkscape:export-filename="/Users/vjrj/Desktop/wikipage.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+</svg>
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2008-09-19 23:33:06 UTC (rev 876)
@@ -3463,8 +3463,16 @@
}
/* others */
-.k-linethrough {
+.k-textlinethrough {
text-decoration: line-through;
}
+.k-textnormal {
+ text-decoration: inherit;
+}
+.k-textunderline {
+ text-decoration: underline;
+}
+
+
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2008-09-19 23:33:06 UTC (rev 876)
@@ -628,6 +628,14 @@
}
/* others */
-.k-linethrough {
+.k-textlinethrough {
text-decoration: line-through;
}
+
+.k-textnormal {
+ text-decoration: inherit;
+}
+
+.k-textunderline {
+ text-decoration: underline;
+}
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -1,21 +0,0 @@
-package org.ourproject.kune.docs.client;
-
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionPosition;
-import org.ourproject.kune.platf.client.dto.AccessRolDTO;
-import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-
-import com.calclab.suco.client.signal.Slot;
-
-public class ContentEditAction extends ActionButtonDescriptor<StateToken> {
-
- public ContentEditAction(final I18nUITranslationService i18n) {
- super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() {
- public void onEvent(final StateToken stateToken) {
- }
- });
- this.setTextDescription(i18n.tWithNT("Edit", "used in button"));
- // this.setIconUrl("images/");
- }
-}
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -1,24 +0,0 @@
-package org.ourproject.kune.docs.client;
-
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionPosition;
-import org.ourproject.kune.platf.client.dto.AccessRolDTO;
-import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import org.ourproject.kune.workspace.client.site.Site;
-
-import com.calclab.suco.client.signal.Slot;
-
-public class ContentTranslationAction extends ActionButtonDescriptor<StateToken> {
-
- public ContentTranslationAction(final I18nUITranslationService i18n) {
- super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() {
- public void onEvent(final StateToken stateToken) {
- Site.important(i18n.t("Sorry, this functionality is currently in development"));
- }
- });
- this.setTextDescription(i18n.tWithNT("Translate", "used in button"));
- this.setToolTip(i18n.t("Translate this document to other languages"));
- // this.setIconUrl("images/");
- }
-}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -1,5 +1,12 @@
package org.ourproject.kune.docs.client;
+import org.ourproject.kune.docs.client.actions.ContentEditAction;
+import org.ourproject.kune.docs.client.actions.ContentEditInProgressAction;
+import org.ourproject.kune.docs.client.actions.ContentPublishAction;
+import org.ourproject.kune.docs.client.actions.ContentRejectAction;
+import org.ourproject.kune.docs.client.actions.ContentSubmitForPublishAction;
+import org.ourproject.kune.docs.client.actions.ContentTranslationAction;
+import org.ourproject.kune.docs.client.actions.ContentTrashAction;
import org.ourproject.kune.docs.client.cnt.DocumentContent;
import org.ourproject.kune.docs.client.cnt.DocumentContentPanel;
import org.ourproject.kune.docs.client.cnt.DocumentContentPresenter;
@@ -66,6 +73,28 @@
}
});
+ register(SingletonScope.class, new Factory<ContentPublishAction>(ContentPublishAction.class) {
+ public ContentPublishAction create() {
+ return new ContentPublishAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ }
+ }, new Factory<ContentRejectAction>(ContentRejectAction.class) {
+ public ContentRejectAction create() {
+ return new ContentRejectAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ }
+ }, new Factory<ContentEditInProgressAction>(ContentEditInProgressAction.class) {
+ public ContentEditInProgressAction create() {
+ return new ContentEditInProgressAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ }
+ }, new Factory<ContentSubmitForPublishAction>(ContentSubmitForPublishAction.class) {
+ public ContentSubmitForPublishAction create() {
+ return new ContentSubmitForPublishAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ }
+ }, new Factory<ContentTrashAction>(ContentTrashAction.class) {
+ public ContentTrashAction create() {
+ return new ContentTrashAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ }
+ });
+
register(SingletonScope.class, new Factory<ContentEditAction>(ContentEditAction.class) {
public ContentEditAction create() {
return new ContentEditAction(i18n);
@@ -91,6 +120,15 @@
$(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentEditAction.class));
$(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
$(ContentTranslationAction.class));
+ $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
+ $(ContentPublishAction.class));
+ $(ContentActionRegistry.class)
+ .addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentRejectAction.class));
+ $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
+ $(ContentSubmitForPublishAction.class));
+ $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
+ $(ContentEditInProgressAction.class));
+ $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentTrashAction.class));
presenter.init(panel);
return presenter;
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -56,10 +56,12 @@
public class DocumentClientTool extends AbstractClientTool {
public static final String TYPE_ROOT = "docs.root";
public static final String TYPE_FOLDER = "docs.folder";
+ public static final String TYPE_DOCUMENT = "docs.doc";
public static final String TYPE_GALLERY = "docs.gallery";
public static final String TYPE_BLOG = "docs.blog";
- public static final String TYPE_DOCUMENT = "docs.doc";
public static final String TYPE_POST = "docs.post";
+ public static final String TYPE_WIKI = "docs.wiki";
+ public static final String TYPE_WIKIPAGE = "docs.wikipage";
public static final String TYPE_UPLOADEDFILE = "docs.uploaded";
public static final String NAME = "docs";
@@ -71,7 +73,6 @@
private final Session session;
private final Provider<ContentServiceAsync> contentServiceProvider;
private final Provider<FileUploader> fileUploaderProvider;
- private final ContentActionRegistry contentActionRegistry;
private final ContextActionRegistry contextActionRegistry;
private final DragDropContentRegistry dragDropContentRegistry;
private final ContentIconsRegistry contentIconsRegistry;
@@ -92,7 +93,6 @@
this.stateManager = stateManager;
this.contentServiceProvider = contentServiceProvider;
this.fileUploaderProvider = fileUploaderProvider;
- this.contentActionRegistry = contentActionRegistry;
this.contextActionRegistry = contextActionRegistry;
this.dragDropContentRegistry = dragDropContentRegistry;
this.contentIconsRegistry = contentIconsRegistry;
@@ -116,11 +116,13 @@
}
private void createActions() {
-
final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png",
- i18n.t("New folder"), i18n.t("Folder"), i18n.t("New"));
+ i18n.t("New folder"), i18n.t("Folder"), i18n.t("New"), i18n.t("New folder"));
final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY,
- "images/nav/gallery_add.png", i18n.t("New gallery"), i18n.t("Folder"), i18n.t("New"));
+ "images/nav/gallery_add.png", i18n.t("New gallery"), i18n.t("Folder"), i18n.t("New"), i18n
+ .t("New gallery"));
+ final ActionMenuDescriptor<StateToken> addWiki = createFolderAction(TYPE_WIKI, "images/nav/wiki_add.png", i18n
+ .t("New wiki"), i18n.t("Folder"), i18n.t("New"), i18n.t("wiki"));
final ActionMenuDescriptor<StateToken> addDoc = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor,
ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
@@ -258,7 +260,6 @@
contextActionRegistry.addAction(TYPE_FOLDER, go);
contextActionRegistry.addAction(TYPE_FOLDER, addDoc);
contextActionRegistry.addAction(TYPE_FOLDER, addFolder);
- contentActionRegistry.addAction(TYPE_FOLDER, delContainer);
contextActionRegistry.addAction(TYPE_FOLDER, delContainer);
contextActionRegistry.addAction(TYPE_FOLDER, rename);
contextActionRegistry.addAction(TYPE_FOLDER, goGroupHome);
@@ -274,15 +275,19 @@
contextActionRegistry.addAction(TYPE_GALLERY, goGroupHome);
contextActionRegistry.addAction(TYPE_GALLERY, refresh);
+ contextActionRegistry.addAction(TYPE_WIKI, go);
+ contextActionRegistry.addAction(TYPE_WIKI, goGroupHome);
+ contextActionRegistry.addAction(TYPE_WIKI, refresh);
+
contextActionRegistry.addAction(TYPE_ROOT, addDoc);
contextActionRegistry.addAction(TYPE_ROOT, addFolder);
contextActionRegistry.addAction(TYPE_ROOT, addGallery);
+ contextActionRegistry.addAction(TYPE_ROOT, addWiki);
contextActionRegistry.addAction(TYPE_ROOT, goGroupHome);
contextActionRegistry.addAction(TYPE_ROOT, refresh);
contextActionRegistry.addAction(TYPE_ROOT, uploadFile);
contextActionRegistry.addAction(TYPE_DOCUMENT, go);
- contentActionRegistry.addAction(TYPE_DOCUMENT, delContent);
contextActionRegistry.addAction(TYPE_DOCUMENT, delContent);
contextActionRegistry.addAction(TYPE_DOCUMENT, rename);
contextActionRegistry.addAction(TYPE_DOCUMENT, goGroupHome);
@@ -291,15 +296,15 @@
}
private ActionMenuDescriptor<StateToken> createFolderAction(final String contentTypeId, final String iconUrl,
- final String textDescription, final String parentMenuTitle, final String parentMenuSubtitle) {
+ final String textDescription, final String parentMenuTitle, final String parentMenuSubtitle,
+ final String defaultName) {
final ActionMenuDescriptor<StateToken> addFolder;
addFolder = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.topbarAndItemMenu,
new Slot<StateToken>() {
public void onEvent(final StateToken stateToken) {
Site.showProgressProcessing();
- contentServiceProvider.get().addFolder(session.getUserHash(), stateToken, textDescription,
+ contentServiceProvider.get().addFolder(session.getUserHash(), stateToken, defaultName,
contentTypeId, new AsyncCallbackSimple<StateDTO>() {
-
public void onSuccess(final StateDTO state) {
contextNavigator.setEditOnNextStateChange(true);
stateManager.setRetrievedState(state);
@@ -348,6 +353,8 @@
contentIconsRegistry.registerContentTypeIcon(TYPE_GALLERY, "images/nav/gallery.png");
contentIconsRegistry.registerContentTypeIcon(TYPE_DOCUMENT, "images/nav/page.png");
contentIconsRegistry.registerContentTypeIcon(TYPE_POST, "images/nav/post.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_WIKI, "images/nav/wiki.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_WIKIPAGE, "images/nav/wikipage.png");
}
}
Copied: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditAction.java (from rev 874, trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java 2008-09-18 15:37:09 UTC (rev 874)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,21 @@
+package org.ourproject.kune.docs.client.actions;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+
+import com.calclab.suco.client.signal.Slot;
+
+public class ContentEditAction extends ActionButtonDescriptor<StateToken> {
+
+ public ContentEditAction(final I18nUITranslationService i18n) {
+ super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() {
+ public void onEvent(final StateToken stateToken) {
+ }
+ });
+ this.setTextDescription(i18n.tWithNT("Edit", "used in button"));
+ // this.setIconUrl("images/");
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditInProgressAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditInProgressAction.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditInProgressAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,20 @@
+/**
+ *
+ */
+package org.ourproject.kune.docs.client.actions;
+
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
+import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+
+import com.calclab.suco.client.provider.Provider;
+
+public class ContentEditInProgressAction extends ContentSetStatusAction {
+ public ContentEditInProgressAction(final Session session, final Provider<ContentServiceAsync> provider,
+ final I18nUITranslationService i18n) {
+ super(session, provider, i18n, AccessRolDTO.Administrator, i18n.t("Editing in progress"),
+ ContentStatusDTO.editingInProgress);
+ }
+}
\ No newline at end of file
Added: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentPublishAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentPublishAction.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentPublishAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,20 @@
+/**
+ *
+ */
+package org.ourproject.kune.docs.client.actions;
+
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
+import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+
+import com.calclab.suco.client.provider.Provider;
+
+public class ContentPublishAction extends ContentSetStatusAction {
+ public ContentPublishAction(final Session session, final Provider<ContentServiceAsync> provider,
+ final I18nUITranslationService i18n) {
+ super(session, provider, i18n, AccessRolDTO.Administrator, i18n.t("Published online"),
+ ContentStatusDTO.publishedOnline);
+ }
+}
\ No newline at end of file
Added: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentRejectAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentRejectAction.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentRejectAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,19 @@
+/**
+ *
+ */
+package org.ourproject.kune.docs.client.actions;
+
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
+import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+
+import com.calclab.suco.client.provider.Provider;
+
+public class ContentRejectAction extends ContentSetStatusAction {
+ public ContentRejectAction(final Session session, final Provider<ContentServiceAsync> provider,
+ final I18nUITranslationService i18n) {
+ super(session, provider, i18n, AccessRolDTO.Administrator, i18n.t("Rejected"), ContentStatusDTO.rejected);
+ }
+}
\ No newline at end of file
Added: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSetStatusAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSetStatusAction.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSetStatusAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,39 @@
+package org.ourproject.kune.docs.client.actions;
+
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
+import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+
+import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.signal.Slot;
+
+public abstract class ContentSetStatusAction extends ActionMenuDescriptor<StateToken> {
+
+ public ContentSetStatusAction(final Session session, final Provider<ContentServiceAsync> contentServiceProvider,
+ final I18nUITranslationService i18n, final AccessRolDTO rol, final String textDescription,
+ final ContentStatusDTO status) {
+ super(rol, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
+ public void onEvent(final StateToken stateToken) {
+ final AsyncCallbackSimple<Object> callback = new AsyncCallbackSimple<Object>() {
+ public void onSuccess(final Object result) {
+ session.getCurrentState().setStatus(status);
+ }
+ };
+ if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)) {
+ contentServiceProvider.get().setStatusAsAdmin(session.getUserHash(), stateToken, status, callback);
+ } else {
+ contentServiceProvider.get().setStatus(session.getUserHash(), stateToken, status, callback);
+ }
+ }
+ });
+ this.setTextDescription(textDescription);
+ this.setParentMenuTitle(i18n.t("File"));
+ this.setParentSubMenuTitle(i18n.t("Change the status"));
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSubmitForPublishAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSubmitForPublishAction.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSubmitForPublishAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,20 @@
+/**
+ *
+ */
+package org.ourproject.kune.docs.client.actions;
+
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
+import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+
+import com.calclab.suco.client.provider.Provider;
+
+public class ContentSubmitForPublishAction extends ContentSetStatusAction {
+ public ContentSubmitForPublishAction(final Session session, final Provider<ContentServiceAsync> provider,
+ final I18nUITranslationService i18n) {
+ super(session, provider, i18n, AccessRolDTO.Administrator, i18n.t("Submitted for publish"),
+ ContentStatusDTO.publishedOnline);
+ }
+}
\ No newline at end of file
Copied: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTranslationAction.java (from rev 874, trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java 2008-09-18 15:37:09 UTC (rev 874)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTranslationAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,24 @@
+package org.ourproject.kune.docs.client.actions;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.site.Site;
+
+import com.calclab.suco.client.signal.Slot;
+
+public class ContentTranslationAction extends ActionButtonDescriptor<StateToken> {
+
+ public ContentTranslationAction(final I18nUITranslationService i18n) {
+ super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() {
+ public void onEvent(final StateToken stateToken) {
+ Site.important(i18n.t("Sorry, this functionality is currently in development"));
+ }
+ });
+ this.setTextDescription(i18n.tWithNT("Translate", "used in button"));
+ this.setToolTip(i18n.t("Translate this document to other languages"));
+ // this.setIconUrl("images/");
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTrashAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTrashAction.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTrashAction.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,20 @@
+/**
+ *
+ */
+package org.ourproject.kune.docs.client.actions;
+
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
+import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+
+import com.calclab.suco.client.provider.Provider;
+
+public class ContentTrashAction extends ContentSetStatusAction {
+ public ContentTrashAction(final Session session, final Provider<ContentServiceAsync> provider,
+ final I18nUITranslationService i18n) {
+ super(session, provider, i18n, AccessRolDTO.Administrator, i18n.t("In the dustbin"),
+ ContentStatusDTO.inTheDustbin);
+ }
+}
\ No newline at end of file
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -62,14 +62,14 @@
private final I18nUITranslationService i18n;
private final KuneErrorHandler errorHandler;
private final ActionToolbar toolbar;
- private final ActionRegistry actionRegistry;
+ private final ActionRegistry<StateToken> actionRegistry;
public DocumentContentPresenter(final StateManager stateManager, final I18nUITranslationService i18n,
final KuneErrorHandler errorHandler, final Session session, final RateIt rateIt,
final Provider<DocumentReader> docReaderProvider, final Provider<TextEditor> textEditorProvider,
final Provider<FolderViewer> folderViewerProvider,
final Provider<ContentServiceAsync> contentServiceProvider, final ActionToolbar toolbar,
- final ActionRegistry actionRegistry) {
+ final ActionRegistry<StateToken> actionRegistry) {
this.stateManager = stateManager;
this.i18n = i18n;
this.errorHandler = errorHandler;
Modified: trunk/src/main/java/org/ourproject/kune/docs/server/DocumentServerTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/server/DocumentServerTool.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/docs/server/DocumentServerTool.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -26,6 +26,7 @@
import org.ourproject.kune.platf.server.content.ContentManager;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
+import org.ourproject.kune.platf.server.domain.ContentStatus;
import org.ourproject.kune.platf.server.domain.Group;
import org.ourproject.kune.platf.server.domain.ToolConfiguration;
import org.ourproject.kune.platf.server.domain.User;
@@ -38,10 +39,12 @@
public class DocumentServerTool implements ServerTool {
public static final String TYPE_ROOT = "docs.root";
public static final String TYPE_FOLDER = "docs.folder";
+ public static final String TYPE_DOCUMENT = "docs.doc";
public static final String TYPE_GALLERY = "docs.gallery";
public static final String TYPE_BLOG = "docs.blog";
- public static final String TYPE_DOCUMENT = "docs.doc";
public static final String TYPE_POST = "docs.post";
+ public static final String TYPE_WIKI = "docs.wiki";
+ public static final String TYPE_WIKIPAGE = "docs.wikipage";
public static final String TYPE_UPLOADEDFILE = "docs.uploaded";
public static final String NAME = "docs";
@@ -78,6 +81,7 @@
descriptor.addAuthor(user);
descriptor.setLanguage(user.getLanguage());
descriptor.setTypeId(TYPE_DOCUMENT);
+ descriptor.setStatus(ContentStatus.publishedOnline);
group.setDefaultContent(descriptor);
return group;
}
@@ -97,11 +101,14 @@
}
private void checkTypeId(final String parentTypeId, final String typeId) {
- if (typeId.equals(TYPE_FOLDER) || typeId.equals(TYPE_GALLERY)) {
+ if (typeId.equals(TYPE_FOLDER) || typeId.equals(TYPE_GALLERY) || typeId.equals(TYPE_WIKI)) {
// ok valid container
if (typeId.equals(TYPE_GALLERY) && !parentTypeId.equals(TYPE_ROOT)) {
throw new ContainerNotPermittedException();
}
+ if (typeId.equals(TYPE_WIKI) && !parentTypeId.equals(TYPE_ROOT)) {
+ throw new ContainerNotPermittedException();
+ }
} else {
throw new ContainerNotPermittedException();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -3,35 +3,34 @@
import java.util.HashMap;
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
-import org.ourproject.kune.platf.client.dto.StateToken;
-public class ActionRegistry {
+public class ActionRegistry<T> {
- private final HashMap<String, ActionCollection<StateToken>> actions;
+ private final HashMap<String, ActionCollection<T>> actions;
public ActionRegistry() {
- actions = new HashMap<String, ActionCollection<StateToken>>();
+ actions = new HashMap<String, ActionCollection<T>>();
}
- public void addAction(final String contentTypeId, final ActionDescriptor<StateToken> action) {
- final ActionCollection<StateToken> actionColl = getActions(contentTypeId);
+ public void addAction(final String contentTypeId, final ActionDescriptor<T> action) {
+ final ActionCollection<T> actionColl = getActions(contentTypeId);
actionColl.add(action);
}
- public boolean checkEnabling(final ActionDescriptor<StateToken> action, final StateToken stateToken) {
- final ActionEnableCondition<StateToken> enableCondition = action.getEnableCondition();
- return enableCondition != null ? enableCondition.mustBeEnabled(stateToken) : true;
+ public boolean checkEnabling(final ActionDescriptor<T> action, final T T) {
+ final ActionEnableCondition<T> enableCondition = action.getEnableCondition();
+ return enableCondition != null ? enableCondition.mustBeEnabled(T) : true;
}
- public void removeAction(final String contentTypeId, final ActionDescriptor<StateToken> action) {
+ public void removeAction(final String contentTypeId, final ActionDescriptor<T> action) {
actions.get(contentTypeId).remove(action);
}
- public ActionCollectionSet<StateToken> selectCurrentActions(final AccessRightsDTO rights, final String contentTypeId) {
- final ActionCollectionSet<StateToken> set = new ActionCollectionSet<StateToken>();
+ public ActionCollectionSet<T> selectCurrentActions(final AccessRightsDTO rights, final String contentTypeId) {
+ final ActionCollectionSet<T> set = new ActionCollectionSet<T>();
boolean add = false;
- for (final ActionDescriptor<StateToken> action : getActions(contentTypeId)) {
+ for (final ActionDescriptor<T> action : getActions(contentTypeId)) {
switch (action.getAccessRol()) {
case Administrator:
add = rights.isAdministrable();
@@ -64,10 +63,10 @@
return set;
}
- private ActionCollection<StateToken> getActions(final String contentTypeId) {
- ActionCollection<StateToken> actionColl = actions.get(contentTypeId);
+ private ActionCollection<T> getActions(final String contentTypeId) {
+ ActionCollection<T> actionColl = actions.get(contentTypeId);
if (actionColl == null) {
- actionColl = new ActionCollection<StateToken>();
+ actionColl = new ActionCollection<T>();
actions.put(contentTypeId, actionColl);
}
return actionColl;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -1,5 +1,7 @@
package org.ourproject.kune.platf.client.actions;
-public class ContentActionRegistry extends ActionRegistry {
+import org.ourproject.kune.platf.client.dto.StateToken;
+public class ContentActionRegistry extends ActionRegistry<StateToken> {
+
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -1,5 +1,7 @@
package org.ourproject.kune.platf.client.actions;
-public class ContextActionRegistry extends ActionRegistry {
+import org.ourproject.kune.platf.client.dto.StateToken;
+public class ContextActionRegistry extends ActionRegistry<StateToken> {
+
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -62,7 +62,7 @@
button.addListener(new ButtonListenerAdapter() {
@Override
public void onClick(final Button button, final EventObject e) {
- actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
+ actionManagerProvider.get().doAction(action, session.getCurrentStateToken());
}
});
if (iconUrl != null) {
@@ -143,7 +143,7 @@
final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
@Override
public void onClick(BaseItem item, EventObject e) {
- actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
+ actionManagerProvider.get().doAction(action, session.getCurrentStateToken());
}
});
item.setIcon(action.getIconUrl());
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -13,10 +13,10 @@
public class ActionToolbarPresenter implements ActionToolbar {
private final ActionToolbarPanel toolbar;
private final Session session;
- private final ActionRegistry actionRegistry;
+ private final ActionRegistry<StateToken> actionRegistry;
public ActionToolbarPresenter(final Session session, final ActionToolbarPanel actionToolbarPanel,
- final ActionRegistry actionRegistry) {
+ final ActionRegistry<StateToken> actionRegistry) {
this.session = session;
toolbar = actionToolbarPanel;
this.actionRegistry = actionRegistry;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -25,6 +25,7 @@
import org.ourproject.kune.platf.client.dto.CommentDTO;
import org.ourproject.kune.platf.client.dto.ContentDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
import org.ourproject.kune.platf.client.dto.I18nLanguageDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -72,6 +73,10 @@
void setPublishedOn(String userHash, StateToken token, Date date) throws DefaultException;
+ void setStatus(String userHash, StateToken stateToken, ContentStatusDTO status);
+
+ void setStatusAsAdmin(String userHash, StateToken stateToken, ContentStatusDTO status);
+
List<TagResultDTO> setTags(String userHash, StateToken token, String tags) throws DefaultException;
CommentDTO voteComment(String userHash, StateToken token, Long commentId, boolean votePositive)
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -25,6 +25,7 @@
import org.ourproject.kune.platf.client.dto.CommentDTO;
import org.ourproject.kune.platf.client.dto.ContentDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
import org.ourproject.kune.platf.client.dto.I18nLanguageDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -72,6 +73,11 @@
void setPublishedOn(String userHash, StateToken token, Date publishedOn, AsyncCallback<?> asyncCallback);
+ void setStatus(String userHash, StateToken stateToken, ContentStatusDTO status, AsyncCallback<?> asyncCallback);
+
+ void setStatusAsAdmin(String userHash, StateToken stateToken, ContentStatusDTO status,
+ AsyncCallback<?> asyncCallback);
+
void setTags(String userHash, StateToken token, String tags, AsyncCallback<List<TagResultDTO>> asyncCallback);
void voteComment(String userHash, StateToken token, Long commentId, boolean votePositive,
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -22,6 +22,7 @@
import org.ourproject.kune.platf.client.errors.AccessViolationException;
import org.ourproject.kune.platf.client.errors.AlreadyGroupMemberException;
import org.ourproject.kune.platf.client.errors.AlreadyUserMemberException;
+import org.ourproject.kune.platf.client.errors.ContainerNotPermittedException;
import org.ourproject.kune.platf.client.errors.ContentNotFoundException;
import org.ourproject.kune.platf.client.errors.GroupNotFoundException;
import org.ourproject.kune.platf.client.errors.LastAdminInGroupException;
@@ -96,6 +97,10 @@
logException(e);
Site.error(i18n.t("Content not found"));
stateManagerProvider.get().gotoToken("");
+ } catch (final ContainerNotPermittedException e) {
+ logException(e);
+ Site.error(i18n.t("Action not permitted in this location"));
+ stateManagerProvider.get().gotoToken("");
} catch (final LastAdminInGroupException e) {
logException(e);
getWorkspaceSkeleton().showAlertMessage(
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wiki.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wiki.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wiki_add.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wiki_add.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wikipage.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wikipage.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wikipage_add.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/wikipage_add.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManager.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -25,6 +25,7 @@
import org.ourproject.kune.platf.client.errors.DefaultException;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
+import org.ourproject.kune.platf.server.domain.ContentStatus;
import org.ourproject.kune.platf.server.domain.I18nLanguage;
import org.ourproject.kune.platf.server.domain.User;
import org.ourproject.kune.platf.server.manager.Manager;
@@ -32,34 +33,36 @@
public interface ContentManager extends Manager<Content, Long> {
- public void addAuthor(User user, Long contentId, String authorShortName) throws DefaultException;
+ void addAuthor(User user, Long contentId, String authorShortName) throws DefaultException;
- public Content createContent(String title, String body, User author, Container container);
+ Content createContent(String title, String body, User author, Container container);
- public void delContent(User user, Long contentId) throws DefaultException;
+ void delContent(User user, Long contentId) throws DefaultException;
- public Double getRateAvg(Content content);
+ Double getRateAvg(Content content);
- public Long getRateByUsers(Content content);
+ Long getRateByUsers(Content content);
- public Double getRateContent(User user, Content content);
+ Double getRateContent(User user, Content content);
- public void rateContent(User rater, Long contentId, Double value) throws DefaultException;
+ void rateContent(User rater, Long contentId, Double value) throws DefaultException;
- public void removeAuthor(User user, Long contentId, String authorShortName) throws DefaultException;
+ void removeAuthor(User user, Long contentId, String authorShortName) throws DefaultException;
- public String renameContent(User user, Long contentId, String newName) throws DefaultException;
+ String renameContent(User user, Long contentId, String newName) throws DefaultException;
- public Content save(User editor, Content descriptor, String content);
+ Content save(User editor, Content descriptor, String content);
- public I18nLanguage setLanguage(User user, Long contentId, String languageCode) throws DefaultException;
+ SearchResult<Content> search(String search);
- public void setPublishedOn(User user, Long contentId, Date publishedOn) throws DefaultException;
+ SearchResult<Content> search(String search, Integer firstResult, Integer maxResults);
- public void setTags(User user, Long contentId, String tags) throws DefaultException;
+ I18nLanguage setLanguage(User user, Long contentId, String languageCode) throws DefaultException;
- SearchResult<Content> search(String search);
+ void setPublishedOn(User user, Long contentId, Date publishedOn) throws DefaultException;
- SearchResult<Content> search(String search, Integer firstResult, Integer maxResults);
+ void setStatus(Long contentId, ContentStatus contentStatus);
+ void setTags(User user, Long contentId, String tags) throws DefaultException;
+
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentManagerDefault.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -188,6 +188,11 @@
content.setPublishedOn(publishedOn);
}
+ public void setStatus(final Long contentId, final ContentStatus status) {
+ final Content content = finder.getContent(contentId);
+ content.setStatus(status);
+ }
+
public void setTags(final User user, final Long contentId, final String tags) throws DefaultException {
final Content content = finder.getContent(contentId);
final ArrayList<String> tagsStripped = KuneStringUtils.splitTags(tags);
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -126,7 +126,7 @@
this.createdOn = System.currentTimeMillis();
this.lastRevision = new Revision(this);
accessLists = null;
- status = ContentStatus.publishedOnline;
+ status = ContentStatus.editingInProgress;
}
public void addAuthor(final User user) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/init/DatabaseInitializer.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/init/DatabaseInitializer.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/init/DatabaseInitializer.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -28,6 +28,7 @@
import org.ourproject.kune.platf.client.errors.UserMustBeLoggedException;
import org.ourproject.kune.platf.server.content.ContentManager;
import org.ourproject.kune.platf.server.domain.Content;
+import org.ourproject.kune.platf.server.domain.ContentStatus;
import org.ourproject.kune.platf.server.domain.Group;
import org.ourproject.kune.platf.server.domain.I18nCountry;
import org.ourproject.kune.platf.server.domain.I18nLanguage;
@@ -149,6 +150,7 @@
+ "into other languages.<br><br>Thank you,<br>"
+ "<br>--<br><span style=\"font-style: italic;\">" + "The kune development team</span><br>");
contentManager.renameContent(user, defaultContent.getId(), "Welcome to kune demo");
+ contentManager.setStatus(defaultContent.getId(), ContentStatus.publishedOnline);
}
private void createLicenses() {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/SocialNetworkManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/SocialNetworkManager.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/SocialNetworkManager.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -32,8 +32,6 @@
void acceptJoinGroup(User userLogged, Group group, Group inGroup) throws DefaultException;
- void addAdmin(User user, Group group);
-
void addGroupToAdmins(User userLogged, Group group, Group inGroup) throws DefaultException;
void addGroupToCollabs(User userLogged, Group group, Group inGroup) throws DefaultException;
@@ -44,10 +42,10 @@
void denyJoinGroup(User userLogged, Group group, Group inGroup) throws DefaultException;
- SocialNetwork find(User user, Group group) throws DefaultException;
-
ParticipationData findParticipation(User user, Group group) throws DefaultException;
+ SocialNetwork get(User userLogged, Group group) throws DefaultException;
+
SocialNetworkRequestResult requestToJoin(User user, Group inGroup) throws DefaultException;
void setAdminAsCollab(User userLogged, Group group, Group inGroup) throws DefaultException;
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/UserManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/UserManager.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/UserManager.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -25,8 +25,6 @@
import org.ourproject.kune.platf.server.manager.impl.SearchResult;
public interface UserManager {
- User login(String nickOrEmail, String passwd);
-
/**
* CreateUser new method with language country and timezone params
*
@@ -42,20 +40,22 @@
* @throws I18nNotFoundException
*/
User createUser(String shortName, String longName, String email, String passwd, String language, String country,
- String timezone) throws I18nNotFoundException;
+ String timezone) throws I18nNotFoundException;
/**
- * IMPORTANT: if userId == null, it returns User.NONE
+ * IMPORTANT: if userId == null, it returns User.UNKNOWN_USER
*
* @param userId
* @return
*/
User find(Long userId);
+ User login(String nickOrEmail, String passwd);
+
+ void reIndex();
+
SearchResult<User> search(String search);
SearchResult<User> search(String search, Integer firstResult, Integer maxResults);
- void reIndex();
-
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -111,7 +111,7 @@
final String defaultSiteWorkspaceTheme = kuneProperties.get(KuneProperties.WS_THEMES_DEF);
final String licenseDefId = properties.getDefaultLicense();
final License licenseDef = licenseFinder.findByShortName(licenseDefId);
- final Group group = new Group(user.getShortName(), user.getName(), licenseDef, GroupType.PERSONAL);
+ final Group userGroup = new Group(user.getShortName(), user.getName(), licenseDef, GroupType.PERSONAL);
User userSameEmail = null;
try {
userSameEmail = userFinder.getByEmail(user.getEmail());
@@ -121,17 +121,17 @@
if (userSameEmail != null) {
throw new EmailAddressInUseException();
}
- group.setAdmissionType(AdmissionType.Closed);
- group.setWorkspaceTheme(defaultSiteWorkspaceTheme);
- user.setUserGroup(group);
- initSocialNetwork(group, group);
+ userGroup.setAdmissionType(AdmissionType.Closed);
+ userGroup.setWorkspaceTheme(defaultSiteWorkspaceTheme);
+ user.setUserGroup(userGroup);
+ initSocialNetwork(userGroup, userGroup);
try {
- initGroup(user, group);
+ initGroup(user, userGroup);
super.persist(user, User.class);
} catch (final EntityExistsException e) {
throw new GroupNameInUseException();
}
- return group;
+ return userGroup;
}
public List<Group> findAdminInGroups(final Long groupId) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerDefault.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerDefault.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -72,11 +72,6 @@
}
}
- public void addAdmin(final User user, final Group group) {
- final SocialNetwork sn = group.getSocialNetwork();
- sn.addAdmin(user.getUserGroup());
- }
-
public void addGroupToAdmins(final User userLogged, final Group group, final Group inGroup) throws DefaultException {
checkGroupAddingToSelf(group, inGroup);
final SocialNetwork sn = inGroup.getSocialNetwork();
@@ -131,35 +126,36 @@
}
}
- public SocialNetwork find(final User user, final Group group) throws AccessViolationException {
- final SocialNetwork sn = group.getSocialNetwork();
- if (!sn.getAccessLists().getViewers().includes(user.getUserGroup())) {
- throw new AccessViolationException();
- }
- return sn;
- }
-
- public ParticipationData findParticipation(final User user, final Group group) throws AccessViolationException {
- find(user, group); // check access
+ public ParticipationData findParticipation(final User userLogged, final Group group)
+ throws AccessViolationException {
+ get(userLogged, group); // check access
final Long groupId = group.getId();
final List<Group> adminInGroups = finder.findAdminInGroups(groupId);
// Don't show self user group
- adminInGroups.remove(user.getUserGroup());
+ adminInGroups.remove(userLogged.getUserGroup());
final List<Group> collabInGroups = finder.findCollabInGroups(groupId);
return new ParticipationData(adminInGroups, collabInGroups);
}
- public SocialNetworkRequestResult requestToJoin(final User user, final Group inGroup) throws DefaultException,
- UserMustBeLoggedException {
+ public SocialNetwork get(final User petitioner, final Group group) throws AccessViolationException {
+ final SocialNetwork sn = group.getSocialNetwork();
+ if (!sn.getAccessLists().getViewers().includes(petitioner.getUserGroup())) {
+ throw new AccessViolationException();
+ }
+ return sn;
+ }
+
+ public SocialNetworkRequestResult requestToJoin(final User userLogged, final Group inGroup)
+ throws DefaultException, UserMustBeLoggedException {
final SocialNetwork sn = inGroup.getSocialNetwork();
- if (!User.isKnownUser(user)) {
+ if (!User.isKnownUser(userLogged)) {
throw new UserMustBeLoggedException();
}
final AdmissionType admissionType = inGroup.getAdmissionType();
if (admissionType == null) {
throw new RuntimeException();
}
- final Group userGroup = user.getUserGroup();
+ final Group userGroup = userLogged.getUserGroup();
checkGroupIsNotAlreadyAMember(userGroup, sn);
if (isModerated(admissionType)) {
sn.addPendingCollaborator(userGroup);
@@ -226,6 +222,11 @@
}
}
+ void addAdmin(final User newAdmin, final Group group) {
+ final SocialNetwork sn = group.getSocialNetwork();
+ sn.addAdmin(newAdmin.getUserGroup());
+ }
+
private void checkGroupAddingToSelf(final Group group, final Group inGroup) throws DefaultException {
if (group.equals(inGroup)) {
throwGroupMemberException(group);
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -31,6 +31,7 @@
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
import org.ourproject.kune.platf.client.dto.CommentDTO;
import org.ourproject.kune.platf.client.dto.ContentDTO;
+import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
import org.ourproject.kune.platf.client.dto.I18nLanguageDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -57,6 +58,7 @@
import org.ourproject.kune.platf.server.domain.Comment;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
+import org.ourproject.kune.platf.server.domain.ContentStatus;
import org.ourproject.kune.platf.server.domain.Group;
import org.ourproject.kune.platf.server.domain.User;
import org.ourproject.kune.platf.server.manager.GroupManager;
@@ -364,6 +366,23 @@
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
+ public void setStatus(final String userHash, final StateToken token, final ContentStatusDTO status) {
+ if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)) {
+ throw new AccessViolationException();
+ }
+ contentManager.setStatus(parseId(token.getDocument()), ContentStatus.valueOf(status.toString()));
+ }
+
+ @Authenticated
+ @Authorizated(accessRolRequired = AccessRol.Administrator)
+ @Transactional(type = TransactionType.READ_WRITE)
+ public void setStatusAsAdmin(final String userHash, final StateToken token, final ContentStatusDTO status) {
+ contentManager.setStatus(parseId(token.getDocument()), ContentStatus.valueOf(status.toString()));
+ }
+
+ @Authenticated
+ @Authorizated(accessRolRequired = AccessRol.Editor)
+ @Transactional(type = TransactionType.READ_WRITE)
public List<TagResultDTO> setTags(final String userHash, final StateToken token, final String tags)
throws DefaultException {
final Long contentId = parseId(token.getDocument());
@@ -398,7 +417,7 @@
}
state.setGroupTags(tagManager.getSummaryByGroup(group));
- state.setGroupMembers(socialNetworkManager.find(user, group));
+ state.setGroupMembers(socialNetworkManager.get(user, group));
state.setParticipation(socialNetworkManager.findParticipation(user, group));
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -208,7 +208,7 @@
}
private SocialNetworkDTO getGroupMembers(final User user, final Group group) throws DefaultException {
- return mapper.map(socialNetworkManager.find(user, group), SocialNetworkDTO.class);
+ return mapper.map(socialNetworkManager.get(user, group), SocialNetworkDTO.class);
}
private ParticipationDataDTO getParticipation(final User user, final Group group) throws DefaultException {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -85,18 +85,6 @@
child.setHref("#" + item.getStateToken().toString());
child.setAllowDrag(item.isDraggable());
child.setAllowDrop(item.isDroppable());
- switch (item.getContentStatus()) {
- case publishedOnline:
- child.enable();
- break;
- case inTheDustbin:
- case rejected:
- child.setCls("k-linethrough");
- case editingInProgress:
- case submittedForEvaluation:
- child.disable();
- break;
- }
createItemMenu(nodeId, item.getActionCollection(), item.getStateToken());
final TreeNode parent = treePanel.getNodeById(item.getParentId());
if (parent != null) {
@@ -124,6 +112,19 @@
child.setLeaf(true);
}
parent.appendChild(child);
+ switch (item.getContentStatus()) {
+ case publishedOnline:
+ child.setCls("k-textnormal");
+ break;
+ case inTheDustbin:
+ case rejected:
+ child.setCls("k-textlinethrough");
+ break;
+ case editingInProgress:
+ case submittedForEvaluation:
+ child.setCls("k-textunderline");
+ break;
+ }
} else {
Log.error("Error building file tree, parent folder not found");
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -61,13 +61,13 @@
private boolean editOnNextStateChange;
private final ContentIconsRegistry contentIconsRegistry;
private final DragDropContentRegistry dragDropContentRegistry;
- private final ActionRegistry actionRegistry;
+ private final ActionRegistry<StateToken> actionRegistry;
private final ActionToolbar toolbar;
public ContextNavigatorPresenter(final StateManager stateManager, final Session session,
final Provider<ContentServiceAsync> contentServiceProvider, final I18nUITranslationService i18n,
final EntityTitle entityTitle, final ContentIconsRegistry contentIconsRegistry,
- final DragDropContentRegistry dragDropContentRegistry, final ActionRegistry actionRegistry,
+ final DragDropContentRegistry dragDropContentRegistry, final ActionRegistry<StateToken> actionRegistry,
final ActionToolbar toolbar) {
this.stateManager = stateManager;
this.session = session;
Added: trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,96 @@
+package org.ourproject.kune.platf.client.actions;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+
+import com.calclab.suco.client.signal.Slot;
+
+public class ActionRegistryTest {
+
+ private static final String DEF_CONTENT_TYPE_ID = "test";
+ private ActionRegistry<StateToken> registry;
+ private ActionDescriptor<StateToken> adminAction;
+ private ActionDescriptor<StateToken> editorAction;
+ private ActionDescriptor<StateToken> viewerAction;
+
+ @Before
+ public void before() {
+ registry = new ActionRegistry<StateToken>();
+ adminAction = new ActionDescriptor<StateToken>(AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu,
+ new Slot<StateToken>() {
+ public void onEvent(final StateToken parameter) {
+ }
+ });
+ editorAction = new ActionDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.topbarAndItemMenu,
+ new Slot<StateToken>() {
+ public void onEvent(final StateToken parameter) {
+ }
+ });
+
+ viewerAction = new ActionDescriptor<StateToken>(AccessRolDTO.Viewer, ActionPosition.topbarAndItemMenu,
+ new Slot<StateToken>() {
+ public void onEvent(final StateToken parameter) {
+ }
+ });
+ }
+
+ @Test
+ public void testAddWhenAdmin() {
+ addDefActions();
+ checkActionLists(3, 3, new AccessRightsDTO(true, true, true));
+ }
+
+ @Test
+ public void testAddWhenEditor() {
+ addDefActions();
+ checkActionLists(2, 2, new AccessRightsDTO(false, true, true));
+ }
+
+ @Test
+ public void testAddWhenViewer() {
+ addDefActions();
+ checkActionLists(1, 1, new AccessRightsDTO(false, false, true));
+ }
+
+ @Test
+ public void testEnablingFalse() {
+ adminAction.setEnableCondition(new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken param) {
+ return false;
+ }
+ });
+ registry.addAction(DEF_CONTENT_TYPE_ID, adminAction);
+ assertTrue(!registry.checkEnabling(adminAction, new StateToken()));
+ }
+
+ @Test
+ public void testEnablingTrue() {
+ adminAction.setEnableCondition(new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken param) {
+ return true;
+ }
+ });
+ registry.addAction(DEF_CONTENT_TYPE_ID, adminAction);
+ assertTrue(registry.checkEnabling(adminAction, new StateToken()));
+ }
+
+ private void addDefActions() {
+ registry.addAction(DEF_CONTENT_TYPE_ID, adminAction);
+ registry.addAction(DEF_CONTENT_TYPE_ID, editorAction);
+ registry.addAction(DEF_CONTENT_TYPE_ID, viewerAction);
+ }
+
+ private void checkActionLists(final int expectedToolActions, final int expectedItemActions,
+ final AccessRightsDTO accessRightsDTO) {
+ assertEquals(expectedItemActions, registry.selectCurrentActions(accessRightsDTO, DEF_CONTENT_TYPE_ID)
+ .getToolbarActions().size());
+ assertEquals(expectedItemActions, registry.selectCurrentActions(accessRightsDTO, DEF_CONTENT_TYPE_ID)
+ .getItemActions().size());
+ }
+}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -58,6 +58,14 @@
}
@Test
+ public void defAdminDontShowAsParticipation() throws Exception {
+ doLogin();
+ final StateDTO content = contentService.getContent(getHash(), new StateToken(getSiteAdminShortName()));
+ assertEquals(0, content.getParticipation().getGroupsIsCollab().size());
+ assertEquals(1, content.getParticipation().getGroupsIsAdmin().size());
+ }
+
+ @Test
public void folderRename() throws Exception {
doLogin();
defaultContent = getDefaultContent();
Deleted: trunk/src/test/java/org/ourproject/kune/platf/server/manager/SocialNetworkManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/SocialNetworkManagerTest.java 2008-09-18 17:24:02 UTC (rev 875)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/SocialNetworkManagerTest.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -1,342 +0,0 @@
-package org.ourproject.kune.platf.server.manager;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.ourproject.kune.platf.client.dto.GroupType;
-import org.ourproject.kune.platf.client.dto.SocialNetworkRequestResult;
-import org.ourproject.kune.platf.client.errors.AccessViolationException;
-import org.ourproject.kune.platf.client.errors.AlreadyGroupMemberException;
-import org.ourproject.kune.platf.client.errors.LastAdminInGroupException;
-import org.ourproject.kune.platf.server.PersistenceTest;
-import org.ourproject.kune.platf.server.domain.AdmissionType;
-import org.ourproject.kune.platf.server.domain.Group;
-import org.ourproject.kune.platf.server.domain.GroupListMode;
-import org.ourproject.kune.platf.server.domain.User;
-import org.ourproject.kune.testhelper.ctx.DomainContext;
-
-import com.google.inject.Inject;
-
-public class SocialNetworkManagerTest extends PersistenceTest {
- @Inject
- private SocialNetworkManager socialNetworkManager;
- private Group group;
- private Group userGroup;
- private Group orphanedGroup;
- private User user;
- private User admin;
- private User otherUser;
- private DomainContext ctx;
-
- @Test
- public void acceptJoinGroup() throws Exception {
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
-
- assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
- assertTrue(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 1);
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NORMAL);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
- closeTransaction();
- }
-
- @Test(expected = Exception.class)
- public void acceptJoinNotPendingGroupFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
- }
-
- @Test(expected = AlreadyGroupMemberException.class)
- public void addAdminAsAdminFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.addGroupToAdmins(admin, admin.getUserGroup(), group);
- }
-
- @Test(expected = AlreadyGroupMemberException.class)
- public void addAdminAsCollabFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.addGroupToCollabs(admin, admin.getUserGroup(), group);
- }
-
- @Test(expected = AlreadyGroupMemberException.class)
- public void addAdminAsViewerFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.addGroupToViewers(admin, admin.getUserGroup(), group);
- }
-
- @Test(expected = Exception.class)
- public void addAdminNotAdminFails() throws Exception {
- socialNetworkManager.addGroupToAdmins(otherUser, userGroup, group);
- }
-
- @Test(expected = Exception.class)
- public void addCollabNotAdminFails() throws Exception {
- socialNetworkManager.addGroupToCollabs(otherUser, userGroup, group);
- }
-
- @Test
- public void addPendingAsCollabDirectly() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addGroupToCollabs(admin, userGroup, group);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
- closeTransaction();
- }
-
- @Test
- public void addPendingAsCollabDirectlyAsAdmin() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addGroupToAdmins(admin, userGroup, group);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
- closeTransaction();
- }
-
- @Test(expected = Exception.class)
- public void addViewerNotAdminFails() throws Exception {
- socialNetworkManager.addGroupToViewers(otherUser, userGroup, group);
- }
-
- @After
- public void close() {
- if (getTransaction().isActive()) {
- rollbackTransaction();
- }
- }
-
- @Test
- public void deleteMember() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
- assertTrue(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
- socialNetworkManager.deleteMember(admin, userGroup, group);
- assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
- assertFalse(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NOBODY);
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 0);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
- closeTransaction();
- }
-
- @Test(expected = Exception.class)
- public void deleteNotMemberFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.deleteMember(admin, userGroup, group);
- }
-
- @Test
- public void denyJoinGroup() throws Exception {
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.denyJoinGroup(admin, userGroup, group);
-
- assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
- assertFalse(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 0);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
- closeTransaction();
- }
-
- @Test(expected = AccessViolationException.class)
- public void denyJoinGroupNotAdminFails() throws Exception {
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.denyJoinGroup(otherUser, userGroup, group);
- }
-
- @Test(expected = Exception.class)
- public void denyNotPendingFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.denyJoinGroup(admin, userGroup, group);
- }
-
- @Test(expected = RuntimeException.class)
- public void ilegalAdmissionType() throws Exception {
- group.setAdmissionType(null);
- socialNetworkManager.requestToJoin(user, group);
- }
-
- @Before
- public void init() {
- openTransaction();
- ctx = new DomainContext();
- ctx.createUsers("user1");
- ctx.createUsers("admin");
- ctx.createUsers("otheruser");
- ctx.createGroups("group1");
- ctx.createOrphanGroup("grouporph");
- user = ctx.getUser("user1");
- group = ctx.getGroup("group1");
- orphanedGroup = ctx.getGroup("grouporph");
- userGroup = user.getUserGroup();
- admin = ctx.getUser("admin");
- otherUser = ctx.getUser("otheruser");
- assertSocialNetworkIsEmpty();
- }
-
- @Test(expected = LastAdminInGroupException.class)
- public void lastAdminUnjoinGroupWithCollabsFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
- socialNetworkManager.unJoinGroup(admin.getUserGroup(), group);
- }
-
- @Test
- public void lastAdminUnjoinGroupWithoutCollabsOrphaned() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.unJoinGroup(admin.getUserGroup(), group);
- assertEquals(GroupType.ORPHANED_PROJECT, group.getType());
- assertEquals(0, group.getSocialNetwork().getAccessLists().getAdmins().getList().size());
- assertEquals(0, group.getSocialNetwork().getAccessLists().getEditors().getList().size());
- }
-
- @Test(expected = AccessViolationException.class)
- public void notAdminTryDeleteMember() throws Exception {
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
- socialNetworkManager.deleteMember(otherUser, userGroup, group);
- }
-
- @Test
- public void requestJoinAClosedGroupDeny() throws Exception {
- group.setAdmissionType(AdmissionType.Closed);
-
- final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, group);
- assertEquals(result, SocialNetworkRequestResult.denied);
- closeTransaction();
- }
-
- @Test
- public void requestJoinAModeratedGroupAddUserGroupToPending() throws Exception {
- group.setAdmissionType(AdmissionType.Moderated);
-
- final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, group);
- assertEquals(result, SocialNetworkRequestResult.moderated);
- assertTrue(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
- closeTransaction();
- }
-
- @Test
- public void requestJoinAOpenGroupAddUserGroupToEditors() throws Exception {
- group.setAdmissionType(AdmissionType.Open);
-
- final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, group);
- assertEquals(result, SocialNetworkRequestResult.accepted);
- assertTrue(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NORMAL);
- closeTransaction();
- }
-
- @Test
- public void requestJoinAOrphanedGroupAddUserGroupToAdmins() throws Exception {
- orphanedGroup.setAdmissionType(AdmissionType.Open);
-
- final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, orphanedGroup);
- assertEquals(result, SocialNetworkRequestResult.accepted);
- assertTrue(orphanedGroup.getSocialNetwork().getAccessLists().getAdmins().getList().contains(userGroup));
- assertEquals(orphanedGroup.getSocialNetwork().getAccessLists().getAdmins().getMode(), GroupListMode.NORMAL);
-
- // FIXME Check change group type to PROJECT
- closeTransaction();
- }
-
- @Test(expected = AlreadyGroupMemberException.class)
- public void requestJoinTwiceAOrphanedGroupAddUserGroupToAdmins() throws Exception {
- orphanedGroup.setAdmissionType(AdmissionType.Open);
-
- final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, orphanedGroup);
- assertEquals(SocialNetworkRequestResult.accepted, result);
- socialNetworkManager.requestToJoin(user, orphanedGroup);
- }
-
- @Test
- public void requestToJoinTwiceDontDuplicatePending() throws Exception {
- group.setAdmissionType(AdmissionType.Moderated);
-
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.requestToJoin(user, group);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 1);
- closeTransaction();
- }
-
- @Test(expected = Exception.class)
- public void setAdminAnonMemberFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.setAdminAsCollab(admin, userGroup, group);
- }
-
- @Test
- public void setAdminAsCollab() throws Exception {
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
- socialNetworkManager.setCollabAsAdmin(admin, userGroup, group);
- socialNetworkManager.setAdminAsCollab(admin, userGroup, group);
-
- assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
- assertTrue(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
- assertFalse(group.getSocialNetwork().getAccessLists().getAdmins().getList().contains(userGroup));
- assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getList().size(), 1);
- assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getMode(), GroupListMode.NORMAL);
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 1);
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NORMAL);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
- closeTransaction();
- }
-
- @Test(expected = AccessViolationException.class)
- public void setAdminAsCollabNotAdminFails() throws Exception {
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
- socialNetworkManager.setCollabAsAdmin(otherUser, userGroup, group);
- }
-
- @Test(expected = Exception.class)
- public void setAdminNotCollabFails() throws Exception {
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.setCollabAsAdmin(admin, userGroup, group);
- }
-
- @Test
- public void setCollabAsAdmin() throws Exception {
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
- socialNetworkManager.setCollabAsAdmin(admin, userGroup, group);
-
- assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
- assertFalse(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
- assertTrue(group.getSocialNetwork().getAccessLists().getAdmins().getList().contains(userGroup));
- assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getList().size(), 2);
- assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getMode(), GroupListMode.NORMAL);
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 0);
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NOBODY);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
- closeTransaction();
- }
-
- @Test(expected = AccessViolationException.class)
- public void setCollabAsAdminNotAdminFails() throws Exception {
- socialNetworkManager.requestToJoin(user, group);
- socialNetworkManager.addAdmin(admin, group);
- socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
- socialNetworkManager.setCollabAsAdmin(otherUser, userGroup, group);
- }
-
- private void assertSocialNetworkIsEmpty() {
- assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getList().size(), 0);
- assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 0);
- assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
- }
-}
Copied: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerTest.java (from rev 863, trunk/src/test/java/org/ourproject/kune/platf/server/manager/SocialNetworkManagerTest.java)
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/SocialNetworkManagerTest.java 2008-09-08 01:25:13 UTC (rev 863)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/SocialNetworkManagerTest.java 2008-09-19 23:33:06 UTC (rev 876)
@@ -0,0 +1,363 @@
+package org.ourproject.kune.platf.server.manager.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.ourproject.kune.platf.client.dto.GroupType;
+import org.ourproject.kune.platf.client.dto.SocialNetworkRequestResult;
+import org.ourproject.kune.platf.client.errors.AccessViolationException;
+import org.ourproject.kune.platf.client.errors.AlreadyGroupMemberException;
+import org.ourproject.kune.platf.client.errors.LastAdminInGroupException;
+import org.ourproject.kune.platf.server.ParticipationData;
+import org.ourproject.kune.platf.server.PersistenceTest;
+import org.ourproject.kune.platf.server.domain.AdmissionType;
+import org.ourproject.kune.platf.server.domain.Group;
+import org.ourproject.kune.platf.server.domain.GroupListMode;
+import org.ourproject.kune.platf.server.domain.User;
+import org.ourproject.kune.testhelper.ctx.DomainContext;
+
+import com.google.inject.Inject;
+
+public class SocialNetworkManagerTest extends PersistenceTest {
+ @Inject
+ private SocialNetworkManagerDefault socialNetworkManager;
+ private Group group;
+ private Group userGroup;
+ private Group orphanedGroup;
+ private User user;
+ private User admin;
+ private User otherUser;
+ private DomainContext ctx;
+
+ @Test
+ public void acceptJoinGroup() throws Exception {
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+
+ assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
+ assertTrue(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 1);
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NORMAL);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
+ closeTransaction();
+ }
+
+ @Test(expected = Exception.class)
+ public void acceptJoinNotPendingGroupFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+ }
+
+ @Test(expected = AlreadyGroupMemberException.class)
+ public void addAdminAsAdminFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.addGroupToAdmins(admin, admin.getUserGroup(), group);
+ }
+
+ @Test(expected = AlreadyGroupMemberException.class)
+ public void addAdminAsCollabFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.addGroupToCollabs(admin, admin.getUserGroup(), group);
+ }
+
+ @Test(expected = AlreadyGroupMemberException.class)
+ public void addAdminAsViewerFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.addGroupToViewers(admin, admin.getUserGroup(), group);
+ }
+
+ @Test(expected = Exception.class)
+ public void addAdminNotAdminFails() throws Exception {
+ socialNetworkManager.addGroupToAdmins(otherUser, userGroup, group);
+ }
+
+ @Test(expected = Exception.class)
+ public void addCollabNotAdminFails() throws Exception {
+ socialNetworkManager.addGroupToCollabs(otherUser, userGroup, group);
+ }
+
+ @Test
+ public void addPendingAsCollabDirectly() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addGroupToCollabs(admin, userGroup, group);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
+ closeTransaction();
+ }
+
+ @Test
+ public void addPendingAsCollabDirectlyAsAdmin() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addGroupToAdmins(admin, userGroup, group);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
+ closeTransaction();
+ }
+
+ @Test(expected = Exception.class)
+ public void addViewerNotAdminFails() throws Exception {
+ socialNetworkManager.addGroupToViewers(otherUser, userGroup, group);
+ }
+
+ @After
+ public void close() {
+ if (getTransaction().isActive()) {
+ rollbackTransaction();
+ }
+ }
+
+ @Test
+ public void deleteMember() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+ assertTrue(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
+ socialNetworkManager.deleteMember(admin, userGroup, group);
+ assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
+ assertFalse(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NOBODY);
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 0);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
+ closeTransaction();
+ }
+
+ @Test(expected = Exception.class)
+ public void deleteNotMemberFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.deleteMember(admin, userGroup, group);
+ }
+
+ @Test
+ public void denyJoinGroup() throws Exception {
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.denyJoinGroup(admin, userGroup, group);
+
+ assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
+ assertFalse(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 0);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
+ closeTransaction();
+ }
+
+ @Test(expected = AccessViolationException.class)
+ public void denyJoinGroupNotAdminFails() throws Exception {
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.denyJoinGroup(otherUser, userGroup, group);
+ }
+
+ @Test(expected = Exception.class)
+ public void denyNotPendingFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.denyJoinGroup(admin, userGroup, group);
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void ilegalAdmissionType() throws Exception {
+ group.setAdmissionType(null);
+ socialNetworkManager.requestToJoin(user, group);
+ }
+
+ @Before
+ public void init() {
+ openTransaction();
+ ctx = new DomainContext();
+ ctx.createUsers("user1");
+ ctx.createUsers("admin");
+ ctx.createUsers("otheruser");
+ ctx.createGroups("group1");
+ ctx.createOrphanGroup("grouporph");
+ user = ctx.getUser("user1");
+ group = ctx.getGroup("group1");
+ orphanedGroup = ctx.getGroup("grouporph");
+ userGroup = user.getUserGroup();
+ admin = ctx.getUser("admin");
+ otherUser = ctx.getUser("otheruser");
+ assertSocialNetworkIsEmpty();
+ }
+
+ @Test(expected = LastAdminInGroupException.class)
+ public void lastAdminUnjoinGroupWithCollabsFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+ socialNetworkManager.unJoinGroup(admin.getUserGroup(), group);
+ }
+
+ @Test
+ public void lastAdminUnjoinGroupWithoutCollabsOrphaned() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.unJoinGroup(admin.getUserGroup(), group);
+ assertEquals(GroupType.ORPHANED_PROJECT, group.getType());
+ assertEquals(0, group.getSocialNetwork().getAccessLists().getAdmins().getList().size());
+ assertEquals(0, group.getSocialNetwork().getAccessLists().getEditors().getList().size());
+ }
+
+ @Test(expected = AccessViolationException.class)
+ public void notAdminTryDeleteMember() throws Exception {
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+ socialNetworkManager.deleteMember(otherUser, userGroup, group);
+ }
+
+ @Test
+ public void participationDontShowSelfGroup() {
+ group.getSocialNetwork().getAccessLists().getViewers().setMode(GroupListMode.EVERYONE);
+ user.getUserGroup().getSocialNetwork().getAccessLists().getViewers().setMode(GroupListMode.EVERYONE);
+ assertEquals(GroupListMode.EVERYONE, group.getSocialNetwork().getAccessLists().getViewers().getMode());
+ ParticipationData part = socialNetworkManager.findParticipation(User.UNKNOWN_USER, group);
+ assertFalse(part.getGroupsIsAdmin().contains(group));
+ assertFalse(part.getGroupsIsCollab().contains(group));
+
+ socialNetworkManager.addAdmin(admin, group);
+ part = socialNetworkManager.findParticipation(admin, group);
+ assertFalse(part.getGroupsIsAdmin().contains(group));
+ assertFalse(part.getGroupsIsCollab().contains(group));
+
+ socialNetworkManager.addAdmin(user, user.getUserGroup());
+ part = socialNetworkManager.findParticipation(User.UNKNOWN_USER, user.getUserGroup());
+ assertFalse(part.getGroupsIsAdmin().contains(user.getUserGroup()));
+ assertFalse(part.getGroupsIsCollab().contains(user.getUserGroup()));
+ }
+
+ @Test
+ public void requestJoinAClosedGroupDeny() throws Exception {
+ group.setAdmissionType(AdmissionType.Closed);
+
+ final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, group);
+ assertEquals(result, SocialNetworkRequestResult.denied);
+ closeTransaction();
+ }
+
+ @Test
+ public void requestJoinAModeratedGroupAddUserGroupToPending() throws Exception {
+ group.setAdmissionType(AdmissionType.Moderated);
+
+ final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, group);
+ assertEquals(result, SocialNetworkRequestResult.moderated);
+ assertTrue(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
+ closeTransaction();
+ }
+
+ @Test
+ public void requestJoinAOpenGroupAddUserGroupToEditors() throws Exception {
+ group.setAdmissionType(AdmissionType.Open);
+
+ final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, group);
+ assertEquals(result, SocialNetworkRequestResult.accepted);
+ assertTrue(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NORMAL);
+ closeTransaction();
+ }
+
+ @Test
+ public void requestJoinAOrphanedGroupAddUserGroupToAdmins() throws Exception {
+ orphanedGroup.setAdmissionType(AdmissionType.Open);
+
+ final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, orphanedGroup);
+ assertEquals(result, SocialNetworkRequestResult.accepted);
+ assertTrue(orphanedGroup.getSocialNetwork().getAccessLists().getAdmins().getList().contains(userGroup));
+ assertEquals(orphanedGroup.getSocialNetwork().getAccessLists().getAdmins().getMode(), GroupListMode.NORMAL);
+
+ // FIXME Check change group type to PROJECT
+ closeTransaction();
+ }
+
+ @Test(expected = AlreadyGroupMemberException.class)
+ public void requestJoinTwiceAOrphanedGroupAddUserGroupToAdmins() throws Exception {
+ orphanedGroup.setAdmissionType(AdmissionType.Open);
+
+ final SocialNetworkRequestResult result = socialNetworkManager.requestToJoin(user, orphanedGroup);
+ assertEquals(SocialNetworkRequestResult.accepted, result);
+ socialNetworkManager.requestToJoin(user, orphanedGroup);
+ }
+
+ @Test
+ public void requestToJoinTwiceDontDuplicatePending() throws Exception {
+ group.setAdmissionType(AdmissionType.Moderated);
+
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.requestToJoin(user, group);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 1);
+ closeTransaction();
+ }
+
+ @Test(expected = Exception.class)
+ public void setAdminAnonMemberFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.setAdminAsCollab(admin, userGroup, group);
+ }
+
+ @Test
+ public void setAdminAsCollab() throws Exception {
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+ socialNetworkManager.setCollabAsAdmin(admin, userGroup, group);
+ socialNetworkManager.setAdminAsCollab(admin, userGroup, group);
+
+ assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
+ assertTrue(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
+ assertFalse(group.getSocialNetwork().getAccessLists().getAdmins().getList().contains(userGroup));
+ assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getList().size(), 1);
+ assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getMode(), GroupListMode.NORMAL);
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 1);
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NORMAL);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
+ closeTransaction();
+ }
+
+ @Test(expected = AccessViolationException.class)
+ public void setAdminAsCollabNotAdminFails() throws Exception {
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+ socialNetworkManager.setCollabAsAdmin(otherUser, userGroup, group);
+ }
+
+ @Test(expected = Exception.class)
+ public void setAdminNotCollabFails() throws Exception {
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.setCollabAsAdmin(admin, userGroup, group);
+ }
+
+ @Test
+ public void setCollabAsAdmin() throws Exception {
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+ socialNetworkManager.setCollabAsAdmin(admin, userGroup, group);
+
+ assertFalse(group.getSocialNetwork().getPendingCollaborators().getList().contains(userGroup));
+ assertFalse(group.getSocialNetwork().getAccessLists().getEditors().getList().contains(userGroup));
+ assertTrue(group.getSocialNetwork().getAccessLists().getAdmins().getList().contains(userGroup));
+ assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getList().size(), 2);
+ assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getMode(), GroupListMode.NORMAL);
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 0);
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getMode(), GroupListMode.NOBODY);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
+ closeTransaction();
+ }
+
+ @Test(expected = AccessViolationException.class)
+ public void setCollabAsAdminNotAdminFails() throws Exception {
+ socialNetworkManager.requestToJoin(user, group);
+ socialNetworkManager.addAdmin(admin, group);
+ socialNetworkManager.acceptJoinGroup(admin, userGroup, group);
+ socialNetworkManager.setCollabAsAdmin(otherUser, userGroup, group);
+ }
+
+ private void assertSocialNetworkIsEmpty() {
+ assertEquals(group.getSocialNetwork().getAccessLists().getAdmins().getList().size(), 0);
+ assertEquals(group.getSocialNetwork().getAccessLists().getEditors().getList().size(), 0);
+ assertEquals(group.getSocialNetwork().getPendingCollaborators().getList().size(), 0);
+ }
+}
1
0
r875 - in trunk/src/main/java/org/ourproject/kune: docs/client platf/client/actions/toolbar
by vjrj 18 Sep '08
by vjrj 18 Sep '08
18 Sep '08
Author: vjrj
Date: 2008-09-18 19:24:02 +0200 (Thu, 18 Sep 2008)
New Revision: 875
Modified:
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
Log:
Minor changes
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-18 15:37:09 UTC (rev 874)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-18 17:24:02 UTC (rev 875)
@@ -118,9 +118,9 @@
private void createActions() {
final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png",
- i18n.t("New folder"), i18n.t("File"), i18n.t("New"));
+ i18n.t("New folder"), i18n.t("Folder"), i18n.t("New"));
final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY,
- "images/nav/gallery_add.png", i18n.t("New gallery"), i18n.t("File"), i18n.t("New"));
+ "images/nav/gallery_add.png", i18n.t("New gallery"), i18n.t("Folder"), i18n.t("New"));
final ActionMenuDescriptor<StateToken> addDoc = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor,
ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
@@ -137,7 +137,7 @@
}
});
addDoc.setTextDescription(i18n.t("New document"));
- addDoc.setParentMenuTitle(i18n.t("File"));
+ addDoc.setParentMenuTitle(i18n.t("Folder"));
addDoc.setParentSubMenuTitle(i18n.t("New"));
addDoc.setIconUrl("images/nav/page_add.png");
@@ -147,7 +147,7 @@
Site.info("Sorry, in development");
}
});
- delContainer.setParentMenuTitle(i18n.t("File"));
+ delContainer.setParentMenuTitle(i18n.t("Folder"));
delContainer.setTextDescription(i18n.t("Delete folder"));
delContainer.setMustBeConfirmed(true);
delContainer.setConfirmationTitle(i18n.t("Please confirm"));
@@ -165,7 +165,7 @@
});
}
});
- delContent.setParentMenuTitle(i18n.t("File"));
+ delContent.setParentMenuTitle(i18n.t("Folder"));
delContent.setTextDescription(i18n.t("Delete document"));
delContent.setMustBeConfirmed(true);
delContent.setConfirmationTitle(i18n.t("Please confirm"));
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-18 15:37:09 UTC (rev 874)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-18 17:24:02 UTC (rev 875)
@@ -179,15 +179,10 @@
final String menuKey) {
final Menu menu = new Menu();
final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
+ toolbarMenu.setMenu(menu);
if (iconUrl != null) {
toolbarMenu.setIcon(iconUrl);
}
- toolbarMenu.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- menu.showAt(e.getXY());
- }
- });
toolbarMenus.put(menuKey, menu);
add(barPosition, toolbarMenu);
return menu;
1
0
Author: vjrj
Date: 2008-09-18 17:37:09 +0200 (Thu, 18 Sep 2008)
New Revision: 874
Added:
trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/DragDropContentRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java
Removed:
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditor.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorView.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/ui/
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControl.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlView.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/ui/DocumentReaderControlPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java
trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java
Modified:
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
Log:
Content/ContextNav refactoring, Content toolbar actions
Added: trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/ContentEditAction.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,21 @@
+package org.ourproject.kune.docs.client;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+
+import com.calclab.suco.client.signal.Slot;
+
+public class ContentEditAction extends ActionButtonDescriptor<StateToken> {
+
+ public ContentEditAction(final I18nUITranslationService i18n) {
+ super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() {
+ public void onEvent(final StateToken stateToken) {
+ }
+ });
+ this.setTextDescription(i18n.tWithNT("Edit", "used in button"));
+ // this.setIconUrl("images/");
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/ContentTranslationAction.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,24 @@
+package org.ourproject.kune.docs.client;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.site.Site;
+
+import com.calclab.suco.client.signal.Slot;
+
+public class ContentTranslationAction extends ActionButtonDescriptor<StateToken> {
+
+ public ContentTranslationAction(final I18nUITranslationService i18n) {
+ super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() {
+ public void onEvent(final StateToken stateToken) {
+ Site.important(i18n.t("Sorry, this functionality is currently in development"));
+ }
+ });
+ this.setTextDescription(i18n.tWithNT("Translate", "used in button"));
+ this.setToolTip(i18n.t("Translate this document to other languages"));
+ // this.setIconUrl("images/");
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -3,20 +3,13 @@
import org.ourproject.kune.docs.client.cnt.DocumentContent;
import org.ourproject.kune.docs.client.cnt.DocumentContentPanel;
import org.ourproject.kune.docs.client.cnt.DocumentContentPresenter;
-import org.ourproject.kune.docs.client.cnt.folder.FolderEditor;
-import org.ourproject.kune.docs.client.cnt.folder.FolderEditorPresenter;
-import org.ourproject.kune.docs.client.cnt.folder.ui.FolderEditorPanel;
import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewer;
import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewerPresenter;
import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewerView;
import org.ourproject.kune.docs.client.cnt.folder.viewer.ui.FolderViewerPanel;
import org.ourproject.kune.docs.client.cnt.reader.DocumentReader;
-import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControl;
-import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControlPresenter;
-import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControlView;
import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderPresenter;
import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderView;
-import org.ourproject.kune.docs.client.cnt.reader.ui.DocumentReaderControlPanel;
import org.ourproject.kune.docs.client.cnt.reader.ui.DocumentReaderPanel;
import org.ourproject.kune.docs.client.ctx.DocumentContext;
import org.ourproject.kune.docs.client.ctx.DocumentContextPanel;
@@ -25,6 +18,14 @@
import org.ourproject.kune.docs.client.ctx.admin.AdminContextPresenter;
import org.ourproject.kune.docs.client.ctx.admin.AdminContextView;
import org.ourproject.kune.docs.client.ctx.admin.ui.AdminContextPanel;
+import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
+import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
+import org.ourproject.kune.platf.client.actions.ContextActionRegistry;
+import org.ourproject.kune.platf.client.actions.DragDropContentRegistry;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
import org.ourproject.kune.platf.client.services.KuneErrorHandler;
import org.ourproject.kune.platf.client.state.Session;
@@ -59,33 +60,53 @@
public DocumentClientTool create() {
return new DocumentClientTool(i18n, $(ToolSelector.class), $(WsThemePresenter.class),
$(WorkspaceSkeleton.class), $$(DocumentContext.class), $(ContextNavigator.class),
- $(Session.class), $(StateManager.class), $$(ContentServiceAsync.class), $$(FileUploader.class));
+ $(Session.class), $(StateManager.class), $$(ContentServiceAsync.class), $$(FileUploader.class),
+ $(ContentActionRegistry.class), $(ContextActionRegistry.class),
+ $(DragDropContentRegistry.class), $(ContentIconsRegistry.class));
}
});
- register(SingletonScope.class, new Factory<AdminContext>(AdminContext.class) {
- public AdminContext create() {
- final AdminContextPresenter presenter = new AdminContextPresenter($(Session.class),
- $(StateManager.class), $$(TagsSummary.class), $$(ContentServiceAsync.class),
- $(EntityTitle.class), $(EntitySubTitle.class));
- final AdminContextView view = new AdminContextPanel(presenter, i18n);
- presenter.init(view);
- return presenter;
+ register(SingletonScope.class, new Factory<ContentEditAction>(ContentEditAction.class) {
+ public ContentEditAction create() {
+ return new ContentEditAction(i18n);
}
+ }, new Factory<ContentTranslationAction>(ContentTranslationAction.class) {
+ public ContentTranslationAction create() {
+ return new ContentTranslationAction(i18n);
+ }
});
register(SingletonScope.class, new Factory<DocumentContent>(DocumentContent.class) {
public DocumentContent create() {
+ final ActionToolbarPanel contentNavigatorToolbar = new ActionToolbarPanel(
+ ActionToolbarPanel.Position.content, $(Session.class), $$(ActionManager.class), ws);
+ final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class), contentNavigatorToolbar,
+ $(ContentActionRegistry.class));
+
final DocumentContentPresenter presenter = new DocumentContentPresenter($(StateManager.class),
$(I18nUITranslationService.class), $(KuneErrorHandler.class), $(Session.class),
- $(RateIt.class), $$(DocumentReader.class), $$(DocumentReaderControl.class),
- $$(TextEditor.class), $$(FolderViewer.class), $$(FolderEditor.class),
- $$(ContentServiceAsync.class));
+ $(RateIt.class), $$(DocumentReader.class), $$(TextEditor.class), $$(FolderViewer.class),
+ $$(ContentServiceAsync.class), toolbar, $(ContentActionRegistry.class));
final DocumentContentPanel panel = new DocumentContentPanel($(WorkspaceSkeleton.class));
+ $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentEditAction.class));
+ $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
+ $(ContentTranslationAction.class));
presenter.init(panel);
return presenter;
}
});
+
+ register(SingletonScope.class, new Factory<AdminContext>(AdminContext.class) {
+ public AdminContext create() {
+ final AdminContextPresenter presenter = new AdminContextPresenter($(Session.class),
+ $(StateManager.class), $$(TagsSummary.class), $$(ContentServiceAsync.class),
+ $(EntityTitle.class), $(EntitySubTitle.class));
+ final AdminContextView view = new AdminContextPanel(presenter, i18n);
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
register(SingletonScope.class, new Factory<DocumentContext>(DocumentContext.class) {
public DocumentContext create() {
final DocumentContextPresenter presenter = new DocumentContextPresenter($(StateManager.class),
@@ -104,24 +125,6 @@
}
});
- register(SingletonScope.class, new Factory<DocumentReaderControl>(DocumentReaderControl.class) {
- public DocumentReaderControl create() {
- final DocumentReaderControlPresenter presenter = new DocumentReaderControlPresenter(
- $(DocumentContent.class));
- final DocumentReaderControlView view = new DocumentReaderControlPanel(presenter, i18n, ws);
- presenter.init(view);
- return presenter;
- }
- });
-
- register(SingletonScope.class, new Factory<FolderEditor>(FolderEditor.class) {
- public FolderEditor create() {
- final FolderEditorPanel view = new FolderEditorPanel();
- final FolderEditorPresenter presenter = new FolderEditorPresenter(view);
- return presenter;
- }
- });
-
register(SingletonScope.class, new Factory<FolderViewer>(FolderViewer.class) {
public FolderViewer create() {
final FolderViewerView view = new FolderViewerPanel();
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -27,6 +27,10 @@
import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
+import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
+import org.ourproject.kune.platf.client.actions.ContextActionRegistry;
+import org.ourproject.kune.platf.client.actions.DragDropContentRegistry;
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import org.ourproject.kune.platf.client.dto.ContentDTO;
import org.ourproject.kune.platf.client.dto.InitDataDTO;
@@ -67,13 +71,19 @@
private final Session session;
private final Provider<ContentServiceAsync> contentServiceProvider;
private final Provider<FileUploader> fileUploaderProvider;
+ private final ContentActionRegistry contentActionRegistry;
+ private final ContextActionRegistry contextActionRegistry;
+ private final DragDropContentRegistry dragDropContentRegistry;
+ private final ContentIconsRegistry contentIconsRegistry;
public DocumentClientTool(final I18nUITranslationService i18n, final ToolSelector toolSelector,
final WsThemePresenter wsThemePresenter, final WorkspaceSkeleton ws,
final Provider<DocumentContext> documentContextProvider, final ContextNavigator contextNavigator,
final Session session, final StateManager stateManager,
final Provider<ContentServiceAsync> contentServiceProvider,
- final Provider<FileUploader> fileUploaderProvider) {
+ final Provider<FileUploader> fileUploaderProvider, final ContentActionRegistry contentActionRegistry,
+ final ContextActionRegistry contextActionRegistry, final DragDropContentRegistry dragDropContentRegistry,
+ final ContentIconsRegistry contentIconsRegistry) {
super(NAME, i18n.t("documents"), toolSelector, wsThemePresenter, ws);
this.i18n = i18n;
this.documentContextProvider = documentContextProvider;
@@ -82,6 +92,10 @@
this.stateManager = stateManager;
this.contentServiceProvider = contentServiceProvider;
this.fileUploaderProvider = fileUploaderProvider;
+ this.contentActionRegistry = contentActionRegistry;
+ this.contextActionRegistry = contextActionRegistry;
+ this.dragDropContentRegistry = dragDropContentRegistry;
+ this.contentIconsRegistry = contentIconsRegistry;
createActions();
registerDragDropTypes();
registerImageTypes();
@@ -102,6 +116,7 @@
}
private void createActions() {
+
final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png",
i18n.t("New folder"), i18n.t("File"), i18n.t("New"));
final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY,
@@ -236,41 +251,43 @@
final ActionDescriptor<StateToken> uploadMedia = createUploadAction(i18n.t("Upload media"),
"images/nav/upload.png", i18n.t("Upload some media (images, videos)"), session
.getGalleryPermittedExtensions());
- contextNavigator.addAction(TYPE_GALLERY, uploadMedia);
+ contextActionRegistry.addAction(TYPE_GALLERY, uploadMedia);
}
});
- contextNavigator.addAction(TYPE_FOLDER, go);
- contextNavigator.addAction(TYPE_FOLDER, addDoc);
- contextNavigator.addAction(TYPE_FOLDER, addFolder);
- contextNavigator.addAction(TYPE_FOLDER, delContainer);
- contextNavigator.addAction(TYPE_FOLDER, rename);
- contextNavigator.addAction(TYPE_FOLDER, goGroupHome);
- contextNavigator.addAction(TYPE_FOLDER, refresh);
- contextNavigator.addAction(TYPE_FOLDER, uploadFile);
+ contextActionRegistry.addAction(TYPE_FOLDER, go);
+ contextActionRegistry.addAction(TYPE_FOLDER, addDoc);
+ contextActionRegistry.addAction(TYPE_FOLDER, addFolder);
+ contentActionRegistry.addAction(TYPE_FOLDER, delContainer);
+ contextActionRegistry.addAction(TYPE_FOLDER, delContainer);
+ contextActionRegistry.addAction(TYPE_FOLDER, rename);
+ contextActionRegistry.addAction(TYPE_FOLDER, goGroupHome);
+ contextActionRegistry.addAction(TYPE_FOLDER, refresh);
+ contextActionRegistry.addAction(TYPE_FOLDER, uploadFile);
- contextNavigator.addAction(TYPE_BLOG, go);
- contextNavigator.addAction(TYPE_BLOG, uploadFile);
- contextNavigator.addAction(TYPE_BLOG, setAsDefGroupContent);
- contextNavigator.addAction(TYPE_BLOG, refresh);
+ contextActionRegistry.addAction(TYPE_BLOG, go);
+ contextActionRegistry.addAction(TYPE_BLOG, uploadFile);
+ contextActionRegistry.addAction(TYPE_BLOG, setAsDefGroupContent);
+ contextActionRegistry.addAction(TYPE_BLOG, refresh);
- contextNavigator.addAction(TYPE_GALLERY, go);
- contextNavigator.addAction(TYPE_GALLERY, goGroupHome);
- contextNavigator.addAction(TYPE_GALLERY, refresh);
+ contextActionRegistry.addAction(TYPE_GALLERY, go);
+ contextActionRegistry.addAction(TYPE_GALLERY, goGroupHome);
+ contextActionRegistry.addAction(TYPE_GALLERY, refresh);
- contextNavigator.addAction(TYPE_ROOT, addDoc);
- contextNavigator.addAction(TYPE_ROOT, addFolder);
- contextNavigator.addAction(TYPE_ROOT, addGallery);
- contextNavigator.addAction(TYPE_ROOT, goGroupHome);
- contextNavigator.addAction(TYPE_ROOT, refresh);
- contextNavigator.addAction(TYPE_ROOT, uploadFile);
+ contextActionRegistry.addAction(TYPE_ROOT, addDoc);
+ contextActionRegistry.addAction(TYPE_ROOT, addFolder);
+ contextActionRegistry.addAction(TYPE_ROOT, addGallery);
+ contextActionRegistry.addAction(TYPE_ROOT, goGroupHome);
+ contextActionRegistry.addAction(TYPE_ROOT, refresh);
+ contextActionRegistry.addAction(TYPE_ROOT, uploadFile);
- contextNavigator.addAction(TYPE_DOCUMENT, go);
- contextNavigator.addAction(TYPE_DOCUMENT, delContent);
- contextNavigator.addAction(TYPE_DOCUMENT, rename);
- contextNavigator.addAction(TYPE_DOCUMENT, goGroupHome);
- contextNavigator.addAction(TYPE_DOCUMENT, refresh);
- contextNavigator.addAction(TYPE_DOCUMENT, setAsDefGroupContent);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, go);
+ contentActionRegistry.addAction(TYPE_DOCUMENT, delContent);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, delContent);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, rename);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, goGroupHome);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, refresh);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, setAsDefGroupContent);
}
private ActionMenuDescriptor<StateToken> createFolderAction(final String contentTypeId, final String iconUrl,
@@ -317,20 +334,20 @@
}
private void registerDragDropTypes() {
- contextNavigator.registerDraggableType(TYPE_DOCUMENT);
- contextNavigator.registerDraggableType(TYPE_FOLDER);
- contextNavigator.registerDraggableType(TYPE_UPLOADEDFILE);
+ dragDropContentRegistry.registerDraggableType(TYPE_DOCUMENT);
+ dragDropContentRegistry.registerDraggableType(TYPE_FOLDER);
+ dragDropContentRegistry.registerDraggableType(TYPE_UPLOADEDFILE);
- contextNavigator.registerDroppableType(TYPE_ROOT);
- contextNavigator.registerDroppableType(TYPE_FOLDER);
- contextNavigator.registerDroppableType(TYPE_GALLERY);
+ dragDropContentRegistry.registerDroppableType(TYPE_ROOT);
+ dragDropContentRegistry.registerDroppableType(TYPE_FOLDER);
+ dragDropContentRegistry.registerDroppableType(TYPE_GALLERY);
}
private void registerImageTypes() {
- contextNavigator.registerContentTypeIcon(TYPE_BLOG, "images/nav/blog.png");
- contextNavigator.registerContentTypeIcon(TYPE_GALLERY, "images/nav/gallery.png");
- contextNavigator.registerContentTypeIcon(TYPE_DOCUMENT, "images/nav/page.png");
- contextNavigator.registerContentTypeIcon(TYPE_POST, "images/nav/post.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_BLOG, "images/nav/blog.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_GALLERY, "images/nav/gallery.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_DOCUMENT, "images/nav/page.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_POST, "images/nav/post.png");
}
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -21,11 +21,13 @@
package org.ourproject.kune.docs.client.cnt;
import org.ourproject.kune.docs.client.DocumentClientTool;
-import org.ourproject.kune.docs.client.cnt.folder.FolderEditor;
import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewer;
import org.ourproject.kune.docs.client.cnt.reader.DocumentReader;
-import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControl;
+import org.ourproject.kune.platf.client.actions.ActionCollectionSet;
+import org.ourproject.kune.platf.client.actions.ActionRegistry;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
import org.ourproject.kune.platf.client.dto.StateDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.errors.SessionExpiredException;
import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
@@ -51,9 +53,7 @@
private StateDTO content;
private final Session session;
private final RateIt rateIt;
- private final Provider<DocumentReaderControl> docReaderControlProvider;
private final Provider<DocumentReader> docReaderProvider;
- private final Provider<FolderEditor> folderEditorProvider;
private final Provider<TextEditor> textEditorProvider;
private final Provider<FolderViewer> folderViewerProvider;
private final Signal0 onEditing;
@@ -61,32 +61,32 @@
private final Provider<ContentServiceAsync> contentServiceProvider;
private final I18nUITranslationService i18n;
private final KuneErrorHandler errorHandler;
+ private final ActionToolbar toolbar;
+ private final ActionRegistry actionRegistry;
public DocumentContentPresenter(final StateManager stateManager, final I18nUITranslationService i18n,
final KuneErrorHandler errorHandler, final Session session, final RateIt rateIt,
- final Provider<DocumentReader> docReaderProvider,
- final Provider<DocumentReaderControl> docReaderControlProvider,
- final Provider<TextEditor> textEditorProvider, final Provider<FolderViewer> folderViewerProvider,
- final Provider<FolderEditor> folderEditorProvider,
- final Provider<ContentServiceAsync> contentServiceProvider) {
+ final Provider<DocumentReader> docReaderProvider, final Provider<TextEditor> textEditorProvider,
+ final Provider<FolderViewer> folderViewerProvider,
+ final Provider<ContentServiceAsync> contentServiceProvider, final ActionToolbar toolbar,
+ final ActionRegistry actionRegistry) {
this.stateManager = stateManager;
this.i18n = i18n;
this.errorHandler = errorHandler;
this.session = session;
this.rateIt = rateIt;
this.docReaderProvider = docReaderProvider;
- this.docReaderControlProvider = docReaderControlProvider;
this.textEditorProvider = textEditorProvider;
this.folderViewerProvider = folderViewerProvider;
- this.folderEditorProvider = folderEditorProvider;
this.contentServiceProvider = contentServiceProvider;
+ this.toolbar = toolbar;
+ this.actionRegistry = actionRegistry;
this.onEditing = new Signal0("onEditing");
this.onEditCancelled = new Signal0("onEditCancelled");
stateManager.onStateChanged(new Slot<StateDTO>() {
public void onEvent(final StateDTO state) {
if (state.getToolName().equals(DocumentClientTool.NAME)) {
- content = state;
- showContent();
+ setState(state);
}
}
});
@@ -137,9 +137,9 @@
editor.setToolbarVisible(true);
view.setContent(editor.getView());
} else {
- final FolderEditor editor = folderEditorProvider.get();
- editor.setFolder(content.getContainer());
- view.setContent(editor.getView());
+ // final FolderEditor editor = folderEditorProvider.get();
+ // editor.setFolder(content.getContainer());
+ // view.setContent(editor.getView());
}
onEditing.fire();
}
@@ -186,13 +186,25 @@
public void onTranslate() {
}
+ private void setState(final StateDTO state) {
+ content = state;
+ ActionCollectionSet<StateToken> set;
+ final String typeId = content.getTypeId();
+ if (content.hasDocument()) {
+ set = actionRegistry.selectCurrentActions(content.getContentRights(), typeId);
+ } else {
+ set = actionRegistry.selectCurrentActions(content.getContainerRights(), typeId);
+ }
+ toolbar.disableMenusAndClearButtons();
+ toolbar.setActions(set.getToolbarActions(), true);
+ showContent();
+ }
+
private void showContent() {
textEditorProvider.get().setToolbarVisible(false);
if (content.hasDocument()) {
docReaderProvider.get().showDocument(content.getContent());
textEditorProvider.get().reset();
- docReaderControlProvider.get().setRights(content.getContentRights());
- docReaderControlProvider.get().show();
docReaderProvider.get().show();
} else {
final FolderViewer viewer = folderViewerProvider.get();
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditor.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditor.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,30 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.docs.client.cnt.folder;
-
-import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.dto.ContainerDTO;
-
-public interface FolderEditor {
- View getView();
-
- void setFolder(ContainerDTO folder);
-}
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorPresenter.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorPresenter.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.docs.client.cnt.folder;
-
-import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.dto.ContainerDTO;
-
-public class FolderEditorPresenter implements FolderEditor {
-
- private final FolderEditorView view;
-
- public FolderEditorPresenter(final FolderEditorView view) {
- this.view = view;
- }
-
- public View getView() {
- return view;
- }
-
- public void setFolder(final ContainerDTO folder) {
-
- }
-}
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorView.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/folder/FolderEditorView.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,27 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.docs.client.cnt.folder;
-
-import org.ourproject.kune.platf.client.View;
-
-public interface FolderEditorView extends View {
-
-}
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControl.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControl.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControl.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,31 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.docs.client.cnt.reader;
-
-import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
-
-public interface DocumentReaderControl {
-
- void setRights(AccessRightsDTO accessRights);
-
- void show();
-
-}
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlPresenter.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlPresenter.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,70 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.docs.client.cnt.reader;
-
-import org.ourproject.kune.docs.client.cnt.DocumentContent;
-import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
-
-import com.calclab.suco.client.signal.Slot0;
-
-public class DocumentReaderControlPresenter implements DocumentReaderControl {
- private DocumentReaderControlView view;
- private final DocumentContent docContent;
-
- public DocumentReaderControlPresenter(final DocumentContent docContent) {
- this.docContent = docContent;
- docContent.onEditing(new Slot0() {
- public void onEvent() {
- view.hide();
- }
- });
- docContent.onEditCancelled(new Slot0() {
- public void onEvent() {
- view.show();
- }
- });
- }
-
- public void init(final DocumentReaderControlView view) {
- this.view = view;
- }
-
- public void onDeleteClicked() {
- // docContent.onDeleteClicked();
- }
-
- public void onEditClicked() {
- // docContent.onEditClicked();
- }
-
- public void onTranslateClicked() {
- }
-
- public void setRights(final AccessRightsDTO accessRights) {
- view.setEditEnabled(accessRights.isEditable());
- view.setDeleteEnabled(accessRights.isAdministrable());
- view.setTranslateEnabled(accessRights.isEditable());
- }
-
- public void show() {
- view.show();
- }
-}
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlView.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderControlView.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,37 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.docs.client.cnt.reader;
-
-import org.ourproject.kune.platf.client.View;
-
-public interface DocumentReaderControlView extends View {
-
- void hide();
-
- void setDeleteEnabled(boolean isEnabled);
-
- void setEditEnabled(boolean isEnabled);
-
- void setTranslateEnabled(boolean isEnabled);
-
- void show();
-
-}
Deleted: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/ui/DocumentReaderControlPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/ui/DocumentReaderControlPanel.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/ui/DocumentReaderControlPanel.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,102 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.docs.client.cnt.reader.ui;
-
-import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControlPresenter;
-import org.ourproject.kune.docs.client.cnt.reader.DocumentReaderControlView;
-import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import org.ourproject.kune.workspace.client.skel.Toolbar;
-import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-
-import com.google.gwt.user.client.ui.Widget;
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.ToolbarButton;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-
-public class DocumentReaderControlPanel implements DocumentReaderControlView {
- private final ToolbarButton editBtn;
- private final ToolbarButton deleteBtn;
- private final ToolbarButton translateBtn;
- private final Widget space1;
- private final Widget space2;
-
- public DocumentReaderControlPanel(final DocumentReaderControlPresenter presenter,
- final I18nUITranslationService i18n, final WorkspaceSkeleton ws) {
- editBtn = new ToolbarButton(i18n.tWithNT("Edit", "used in button"), new ButtonListenerAdapter() {
- public void onClick(final Button button, final EventObject e) {
- presenter.onEditClicked();
- }
- });
-
- deleteBtn = new ToolbarButton(i18n.tWithNT("Delete", "used in button"), new ButtonListenerAdapter() {
- public void onClick(final Button button, final EventObject e) {
- presenter.onDeleteClicked();
- }
- });
-
- translateBtn = new ToolbarButton(i18n.tWithNT("Translate", "used in button"), new ButtonListenerAdapter() {
- public void onClick(final Button button, final EventObject e) {
- presenter.onTranslateClicked();
- ws.showAlertMessage(i18n.t("Alert"), i18n.t("Sorry, this functionality is currently in development"));
- }
- });
-
- final Toolbar contentTopBar = ws.getEntityWorkspace().getContentTopBar();
- contentTopBar.add(editBtn);
- space1 = contentTopBar.addSpacer();
- contentTopBar.add(deleteBtn);
- space2 = contentTopBar.addSpacer();
- contentTopBar.add(translateBtn);
- setEditEnabled(false);
- setDeleteEnabled(false);
- setTranslateEnabled(false);
- hide();
- }
-
- public void hide() {
- this.setVisible(false);
- }
-
- public void setDeleteEnabled(final boolean isEnabled) {
- deleteBtn.setVisible(isEnabled);
- }
-
- public void setEditEnabled(final boolean isEnabled) {
- editBtn.setVisible(isEnabled);
- }
-
- public void setTranslateEnabled(final boolean isEnabled) {
- translateBtn.setVisible(isEnabled);
- }
-
- public void show() {
- this.setVisible(true);
- }
-
- private void setVisible(final boolean visible) {
- editBtn.setVisible(visible);
- deleteBtn.setVisible(visible);
- translateBtn.setVisible(visible);
- space1.setVisible(visible);
- space2.setVisible(visible);
- }
-}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,75 @@
+package org.ourproject.kune.platf.client.actions;
+
+import java.util.HashMap;
+
+import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+
+public class ActionRegistry {
+
+ private final HashMap<String, ActionCollection<StateToken>> actions;
+
+ public ActionRegistry() {
+ actions = new HashMap<String, ActionCollection<StateToken>>();
+ }
+
+ public void addAction(final String contentTypeId, final ActionDescriptor<StateToken> action) {
+ final ActionCollection<StateToken> actionColl = getActions(contentTypeId);
+ actionColl.add(action);
+ }
+
+ public boolean checkEnabling(final ActionDescriptor<StateToken> action, final StateToken stateToken) {
+ final ActionEnableCondition<StateToken> enableCondition = action.getEnableCondition();
+ return enableCondition != null ? enableCondition.mustBeEnabled(stateToken) : true;
+ }
+
+ public void removeAction(final String contentTypeId, final ActionDescriptor<StateToken> action) {
+ actions.get(contentTypeId).remove(action);
+ }
+
+ public ActionCollectionSet<StateToken> selectCurrentActions(final AccessRightsDTO rights, final String contentTypeId) {
+ final ActionCollectionSet<StateToken> set = new ActionCollectionSet<StateToken>();
+ boolean add = false;
+
+ for (final ActionDescriptor<StateToken> action : getActions(contentTypeId)) {
+ switch (action.getAccessRol()) {
+ case Administrator:
+ add = rights.isAdministrable();
+ break;
+ case Editor:
+ add = rights.isEditable();
+ break;
+ case Viewer:
+ add = rights.isVisible();
+ break;
+ }
+ if (add) {
+ switch (action.getActionPosition()) {
+ case topbarAndItemMenu:
+ set.getItemActions().add(action);
+ case topbar:
+ set.getToolbarActions().add(action);
+ break;
+ case bootombarAndItemMenu:
+ set.getItemActions().add(action);
+ case bottombar:
+ set.getToolbarActions().add(action);
+ break;
+ case itemMenu:
+ set.getItemActions().add(action);
+ break;
+ }
+ }
+ }
+ return set;
+ }
+
+ private ActionCollection<StateToken> getActions(final String contentTypeId) {
+ ActionCollection<StateToken> actionColl = actions.get(contentTypeId);
+ if (actionColl == null) {
+ actionColl = new ActionCollection<StateToken>();
+ actions.put(contentTypeId, actionColl);
+ }
+ return actionColl;
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentActionRegistry.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.client.actions;
+
+public class ContentActionRegistry extends ActionRegistry {
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,20 @@
+package org.ourproject.kune.platf.client.actions;
+
+import java.util.HashMap;
+
+public class ContentIconsRegistry {
+ private final HashMap<String, String> contentTypesIcons;
+
+ public ContentIconsRegistry() {
+ contentTypesIcons = new HashMap<String, String>();
+ }
+
+ public String getContentTypeIcon(final String typeId) {
+ final String icon = contentTypesIcons.get(typeId);
+ return icon == null ? "" : icon;
+ }
+
+ public void registerContentTypeIcon(final String contentTypeId, final String iconUrl) {
+ contentTypesIcons.put(contentTypeId, iconUrl);
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContextActionRegistry.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.client.actions;
+
+public class ContextActionRegistry extends ActionRegistry {
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/DragDropContentRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/DragDropContentRegistry.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/DragDropContentRegistry.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,31 @@
+package org.ourproject.kune.platf.client.actions;
+
+import java.util.ArrayList;
+
+public class DragDropContentRegistry {
+
+ private final ArrayList<String> draggables;
+ private final ArrayList<String> droppables;
+
+ public DragDropContentRegistry() {
+ draggables = new ArrayList<String>();
+ droppables = new ArrayList<String>();
+ }
+
+ public boolean isDraggable(final String typeId, final boolean administrable) {
+ return administrable && draggables.contains(typeId);
+ }
+
+ public boolean isDroppable(final String typeId, final boolean administrable) {
+ return administrable && droppables.contains(typeId);
+ }
+
+ public void registerDraggableType(final String type) {
+ draggables.add(type);
+ }
+
+ public void registerDroppableType(final String type) {
+ droppables.add(type);
+ }
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,14 @@
+package org.ourproject.kune.platf.client.actions.toolbar;
+
+import org.ourproject.kune.platf.client.actions.ActionCollection;
+import org.ourproject.kune.platf.client.dto.StateToken;
+
+public interface ActionToolbar {
+
+ void clear();
+
+ void disableMenusAndClearButtons();
+
+ void setActions(ActionCollection<StateToken> actionCollection, boolean isItemSelected);
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,236 @@
+package org.ourproject.kune.platf.client.actions.toolbar;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
+import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.skel.Toolbar;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+
+import com.calclab.suco.client.provider.Provider;
+import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.menu.BaseItem;
+import com.gwtext.client.widgets.menu.Item;
+import com.gwtext.client.widgets.menu.Menu;
+import com.gwtext.client.widgets.menu.MenuItem;
+import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
+
+public class ActionToolbarPanel implements ActionToolbarView {
+
+ public enum Position {
+ content, context
+ }
+
+ private final HashMap<String, Menu> toolbarMenus;
+ private final ArrayList<Widget> removableToolbarItems;
+ private final HashMap<String, Item> menuItems;
+ private final WorkspaceSkeleton ws;
+ private final Session session;
+ private final Provider<ActionManager> actionManagerProvider;
+ private final Position position;
+
+ public ActionToolbarPanel(final Position position, final Session session,
+ final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) {
+ this.position = position;
+ this.session = session;
+ this.actionManagerProvider = actionManagerProvider;
+ this.ws = ws;
+ toolbarMenus = new HashMap<String, Menu>();
+ removableToolbarItems = new ArrayList<Widget>();
+ menuItems = new HashMap<String, Item>();
+
+ }
+
+ public void addButtonAction(final ActionButtonDescriptor<StateToken> action) {
+ final ActionPosition pos = action.getActionPosition();
+ final ToolbarButton button = new ToolbarButton();
+ final String text = action.getText();
+ final String iconUrl = action.getIconUrl();
+ if (text != null) {
+ button.setText(text);
+ }
+ button.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(final Button button, final EventObject e) {
+ actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
+ }
+ });
+ if (iconUrl != null) {
+ button.setIcon(iconUrl);
+ }
+ button.setTooltip(action.getToolTip());
+
+ final Toolbar toolbar = getToolbar(pos);
+ if (action.hasLeftSeparator()) {
+ removableToolbarItems.add(add(toolbar, action.getLeftSeparator()));
+ }
+ toolbar.add(button);
+ if (action.hasRightSeparator()) {
+ removableToolbarItems.add(add(toolbar, action.getRightSeparator()));
+ }
+ removableToolbarItems.add(button);
+ }
+
+ public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) {
+ final String menuTitle = action.getParentMenuTitle();
+ final String menuSubTitle = action.getParentSubMenuTitle();
+ final ActionPosition pos = action.getActionPosition();
+ final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
+ Item item = menuItems.get(itemKey);
+ if (item == null) {
+ item = createToolbarMenu(pos, menuTitle, menuSubTitle, action);
+ menuItems.put(itemKey, item);
+ }
+ if (enable) {
+ item.enable();
+ } else {
+ item.disable();
+ }
+ doLayoutIfNeeded(pos);
+ }
+
+ public void clear() {
+ toolbarMenus.clear();
+ menuItems.clear();
+ removableToolbarItems.clear();
+ getToolbar(ActionPosition.topbar).removeAll();
+ getToolbar(ActionPosition.bottombar).removeAll();
+ }
+
+ public void clearRemovableActions() {
+ for (final Widget widget : removableToolbarItems) {
+ widget.removeFromParent();
+ }
+ removableToolbarItems.clear();
+ doLayoutIfNeeded();
+ }
+
+ public void disableAllMenuItems() {
+ for (final Item item : menuItems.values()) {
+ item.disable();
+ }
+ doLayoutIfNeeded();
+ }
+
+ private void add(final ActionPosition toolbar, final Widget widget) {
+ getToolbar(toolbar).add(widget);
+ }
+
+ private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) {
+ switch (separator) {
+ case fill:
+ return toolbar.addFill();
+ case separator:
+ return toolbar.addSeparator();
+ case spacer:
+ default:
+ return toolbar.addSpacer();
+ }
+ }
+
+ private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
+ final ActionMenuDescriptor<StateToken> action) {
+ final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
+ @Override
+ public void onClick(BaseItem item, EventObject e) {
+ actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
+ }
+ });
+ item.setIcon(action.getIconUrl());
+
+ final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null);
+ final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null);
+ Menu menu = toolbarMenus.get(menuKey);
+ Menu subMenu = toolbarMenus.get(subMenuKey);
+ if (menuSubTitle != null) {
+ if (subMenu == null) {
+ subMenu = new Menu();
+ final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
+ if (menu == null) {
+ menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
+ }
+ menu.addItem(subMenuItem);
+ toolbarMenus.put(subMenuKey, subMenu);
+ }
+ subMenu.addItem(item);
+
+ } else {
+ // Menu action without submenu
+ if (menu == null) {
+ menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
+ }
+ menu.addItem(item);
+ }
+ doLayoutIfNeeded(toolBarPos);
+ return item;
+ }
+
+ private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle,
+ final String menuKey) {
+ final Menu menu = new Menu();
+ final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
+ if (iconUrl != null) {
+ toolbarMenu.setIcon(iconUrl);
+ }
+ toolbarMenu.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(final Button button, final EventObject e) {
+ menu.showAt(e.getXY());
+ }
+ });
+ toolbarMenus.put(menuKey, menu);
+ add(barPosition, toolbarMenu);
+ return menu;
+ }
+
+ private void doLayoutIfNeeded() {
+ doLayoutIfNeeded(ActionPosition.topbar);
+ doLayoutIfNeeded(ActionPosition.bottombar);
+ }
+
+ private void doLayoutIfNeeded(final ActionPosition pos) {
+ getToolbar(pos).doLayoutIfNeeded();
+ }
+
+ private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle,
+ final String actionText) {
+ final String basePart = "km-" + pos.toString() + "-" + menuTitle;
+ final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
+ final String itemPart = actionText != null ? "-item-" + actionText : "";
+ return basePart + subMenuPart + itemPart;
+ }
+
+ private Toolbar getToolbar(final ActionPosition pos) {
+ switch (pos) {
+ case bootombarAndItemMenu:
+ case bottombar:
+ switch (position) {
+ case content:
+ return ws.getEntityWorkspace().getContentBottomBar();
+ case context:
+ default:
+ return ws.getEntityWorkspace().getContextBottomBar();
+ }
+ case topbar:
+ case topbarAndItemMenu:
+ default:
+ switch (position) {
+ case content:
+ return ws.getEntityWorkspace().getContentTopBar();
+ case context:
+ default:
+ return ws.getEntityWorkspace().getContextTopBar();
+ }
+ }
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,52 @@
+package org.ourproject.kune.platf.client.actions.toolbar;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionCollection;
+import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionRegistry;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.state.Session;
+
+import com.allen_sauer.gwt.log.client.Log;
+
+public class ActionToolbarPresenter implements ActionToolbar {
+ private final ActionToolbarPanel toolbar;
+ private final Session session;
+ private final ActionRegistry actionRegistry;
+
+ public ActionToolbarPresenter(final Session session, final ActionToolbarPanel actionToolbarPanel,
+ final ActionRegistry actionRegistry) {
+ this.session = session;
+ toolbar = actionToolbarPanel;
+ this.actionRegistry = actionRegistry;
+ }
+
+ public void clear() {
+ toolbar.clear();
+ }
+
+ public void disableMenusAndClearButtons() {
+ toolbar.clearRemovableActions();
+ toolbar.disableAllMenuItems();
+ }
+
+ public void setActions(final ActionCollection<StateToken> actions, final boolean isItemSelected) {
+ for (final ActionDescriptor<StateToken> action : actions) {
+ if (action instanceof ActionMenuDescriptor) {
+ toolbar.addMenuAction((ActionMenuDescriptor<StateToken>) action, isItemSelected
+ && actionRegistry.checkEnabling(action, session.getCurrentStateToken()));
+ } else {
+ if (action instanceof ActionButtonDescriptor) {
+ if (isItemSelected && actionRegistry.checkEnabling(action, session.getCurrentStateToken())) {
+ toolbar.addButtonAction((ActionButtonDescriptor<StateToken>) action);
+ }
+ } else {
+ // Code smell
+ Log.error("Not an ActionMenuDescriptor or ActionButtonDescriptor");
+ }
+ }
+ }
+ }
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -0,0 +1,19 @@
+package org.ourproject.kune.platf.client.actions.toolbar;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.dto.StateToken;
+
+public interface ActionToolbarView {
+
+ void addButtonAction(ActionButtonDescriptor<StateToken> action);
+
+ void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable);
+
+ void clear();
+
+ void clearRemovableActions();
+
+ void disableAllMenuItems();
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -3,6 +3,13 @@
import org.ourproject.kune.chat.client.ChatClientModule;
import org.ourproject.kune.docs.client.DocumentClientModule;
import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
+import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
+import org.ourproject.kune.platf.client.actions.ContextActionRegistry;
+import org.ourproject.kune.platf.client.actions.DragDropContentRegistry;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter;
import org.ourproject.kune.platf.client.app.Application;
import org.ourproject.kune.platf.client.app.ApplicationDefault;
import org.ourproject.kune.platf.client.app.HistoryWrapper;
@@ -36,7 +43,6 @@
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPanel;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPresenter;
-import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorToolbar;
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.editor.TextEditorPanel;
import org.ourproject.kune.workspace.client.editor.TextEditorPresenter;
@@ -588,14 +594,43 @@
}
});
+ register(SingletonScope.class, new Factory<ContextActionRegistry>(ContextActionRegistry.class) {
+ public ContextActionRegistry create() {
+ return new ContextActionRegistry();
+ }
+ });
+
+ register(SingletonScope.class, new Factory<ContentActionRegistry>(ContentActionRegistry.class) {
+ public ContentActionRegistry create() {
+ return new ContentActionRegistry();
+ }
+ });
+
+ register(SingletonScope.class, new Factory<DragDropContentRegistry>(DragDropContentRegistry.class) {
+ public DragDropContentRegistry create() {
+ return new DragDropContentRegistry();
+ }
+ });
+
+ register(SingletonScope.class, new Factory<ContentIconsRegistry>(ContentIconsRegistry.class) {
+ public ContentIconsRegistry create() {
+ return new ContentIconsRegistry();
+ }
+ });
+
register(SingletonScope.class, new Factory<ContextNavigator>(ContextNavigator.class) {
public ContextNavigator create() {
- final ContextNavigatorToolbar contextNavigatorToolbar = new ContextNavigatorToolbar($(Session.class),
- $$(ActionManager.class), ws);
+ final ActionToolbarPanel contextNavigatorToolbar = new ActionToolbarPanel(ActionToolbarPanel.Position.context,
+ $(Session.class), $$(ActionManager.class), ws);
+ final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class),
+ contextNavigatorToolbar, $(ContextActionRegistry.class));
+
final ContextNavigatorPresenter presenter = new ContextNavigatorPresenter($(StateManager.class),
$(Session.class), $$(ContentServiceAsync.class), i18n, $(EntityTitle.class),
- $$(ActionManager.class), contextNavigatorToolbar);
- final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n, ws);
+ $(ContentIconsRegistry.class), $(DragDropContentRegistry.class),
+ $(ContextActionRegistry.class), toolbar);
+ final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n, ws,
+ $(ActionManager.class));
presenter.init(panel);
return presenter;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -27,6 +27,7 @@
import org.ourproject.kune.platf.client.dto.InitDataDTO;
import org.ourproject.kune.platf.client.dto.LicenseDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.dto.UserInfoDTO;
import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
@@ -50,6 +51,8 @@
public StateDTO getCurrentState();
+ public StateToken getCurrentStateToken();
+
public List<I18nLanguageSimpleDTO> getLanguages();
public Object[][] getLanguagesArray();
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -29,6 +29,7 @@
import org.ourproject.kune.platf.client.dto.InitDataDTO;
import org.ourproject.kune.platf.client.dto.LicenseDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.dto.UserInfoDTO;
import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
import org.ourproject.kune.workspace.client.site.rpc.UserServiceAsync;
@@ -87,6 +88,10 @@
return currentState;
}
+ public StateToken getCurrentStateToken() {
+ return currentState == null ? null : currentState.getStateToken();
+ }
+
public UserInfoDTO getCurrentUserInfo() {
return currentUserInfo;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,9 +1,5 @@
package org.ourproject.kune.platf.server.manager;
-import org.ourproject.kune.platf.server.domain.Container;
-import org.ourproject.kune.platf.server.domain.Content;
-import org.ourproject.kune.platf.server.domain.User;
-
public interface FileManager {
-
+
}
Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,233 +0,0 @@
-package org.ourproject.kune.workspace.client.component;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
-import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionPosition;
-import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.platf.client.state.Session;
-import org.ourproject.kune.workspace.client.skel.Toolbar;
-import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-
-import com.calclab.suco.client.provider.Provider;
-import com.google.gwt.user.client.ui.Widget;
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.ToolbarButton;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import com.gwtext.client.widgets.menu.BaseItem;
-import com.gwtext.client.widgets.menu.Item;
-import com.gwtext.client.widgets.menu.Menu;
-import com.gwtext.client.widgets.menu.MenuItem;
-import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
-
-public class EntityToolbar implements EntityToolbarView {
-
- protected enum ToolbarPosition {
- content, context
- }
-
- private final HashMap<String, Menu> toolbarMenus;
- private final ArrayList<Widget> removableToolbarItems;
- private final HashMap<String, Item> menuItems;
- private final WorkspaceSkeleton ws;
- private final Session session;
- private final Provider<ActionManager> actionManagerProvider;
- private final ToolbarPosition position;
-
- public EntityToolbar(final ToolbarPosition position, final Session session,
- final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) {
- this.position = position;
- this.session = session;
- this.actionManagerProvider = actionManagerProvider;
- this.ws = ws;
- toolbarMenus = new HashMap<String, Menu>();
- removableToolbarItems = new ArrayList<Widget>();
- menuItems = new HashMap<String, Item>();
-
- }
-
- public void addButtonAction(final ActionButtonDescriptor<StateToken> action) {
- final ActionPosition pos = action.getActionPosition();
- final ToolbarButton button = new ToolbarButton();
- final String text = action.getText();
- if (text != null) {
- button.setText(text);
- }
- button.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
- }
- });
- button.setIcon(action.getIconUrl());
- button.setTooltip(action.getToolTip());
-
- final Toolbar toolbar = getToolbar(pos);
- if (action.hasLeftSeparator()) {
- removableToolbarItems.add(add(toolbar, action.getLeftSeparator()));
- }
- toolbar.add(button);
- if (action.hasRightSeparator()) {
- removableToolbarItems.add(add(toolbar, action.getRightSeparator()));
- }
- removableToolbarItems.add(button);
- }
-
- public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) {
- final String menuTitle = action.getParentMenuTitle();
- final String menuSubTitle = action.getParentSubMenuTitle();
- final ActionPosition pos = action.getActionPosition();
- final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
- Item item = menuItems.get(itemKey);
- if (item == null) {
- item = createToolbarMenu(pos, menuTitle, menuSubTitle, action);
- menuItems.put(itemKey, item);
- }
- if (enable) {
- item.enable();
- } else {
- item.disable();
- }
- doLayoutIfNeeded(pos);
- }
-
- public void clear() {
- toolbarMenus.clear();
- menuItems.clear();
- removableToolbarItems.clear();
- getToolbar(ActionPosition.topbar).removeAll();
- getToolbar(ActionPosition.bottombar).removeAll();
- }
-
- public void clearRemovableActions() {
- for (final Widget widget : removableToolbarItems) {
- widget.removeFromParent();
- }
- removableToolbarItems.clear();
- doLayoutIfNeeded();
- }
-
- public void disableAllMenuItems() {
- for (final Item item : menuItems.values()) {
- item.disable();
- }
- doLayoutIfNeeded();
- }
-
- private void add(final ActionPosition toolbar, final Widget widget) {
- getToolbar(toolbar).add(widget);
- }
-
- private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) {
- switch (separator) {
- case fill:
- return toolbar.addFill();
- case separator:
- return toolbar.addSeparator();
- case spacer:
- default:
- return toolbar.addSpacer();
- }
- }
-
- private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
- final ActionMenuDescriptor<StateToken> action) {
- final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
- @Override
- public void onClick(BaseItem item, EventObject e) {
- actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
- }
- });
- item.setIcon(action.getIconUrl());
-
- final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null);
- final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null);
- Menu menu = toolbarMenus.get(menuKey);
- Menu subMenu = toolbarMenus.get(subMenuKey);
- if (menuSubTitle != null) {
- if (subMenu == null) {
- subMenu = new Menu();
- final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
- if (menu == null) {
- menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
- }
- menu.addItem(subMenuItem);
- toolbarMenus.put(subMenuKey, subMenu);
- }
- subMenu.addItem(item);
-
- } else {
- // Menu action without submenu
- if (menu == null) {
- menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
- }
- menu.addItem(item);
- }
- doLayoutIfNeeded(toolBarPos);
- return item;
- }
-
- private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle,
- final String menuKey) {
- final Menu menu = new Menu();
- final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
- if (iconUrl != null) {
- toolbarMenu.setIcon(iconUrl);
- }
- toolbarMenu.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- menu.showAt(e.getXY());
- }
- });
- toolbarMenus.put(menuKey, menu);
- add(barPosition, toolbarMenu);
- return menu;
- }
-
- private void doLayoutIfNeeded() {
- doLayoutIfNeeded(ActionPosition.topbar);
- doLayoutIfNeeded(ActionPosition.bottombar);
- }
-
- private void doLayoutIfNeeded(final ActionPosition pos) {
- getToolbar(pos).doLayoutIfNeeded();
- }
-
- private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle,
- final String actionText) {
- final String basePart = "km-" + pos.toString() + "-" + menuTitle;
- final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
- final String itemPart = actionText != null ? "-item-" + actionText : "";
- return basePart + subMenuPart + itemPart;
- }
-
- private Toolbar getToolbar(final ActionPosition pos) {
- switch (pos) {
- case bootombarAndItemMenu:
- case bottombar:
- switch (position) {
- case content:
- return ws.getEntityWorkspace().getContentBottomBar();
- case context:
- default:
- return ws.getEntityWorkspace().getContextBottomBar();
- }
- case topbar:
- case topbarAndItemMenu:
- default:
- switch (position) {
- case content:
- return ws.getEntityWorkspace().getContentTopBar();
- case context:
- default:
- return ws.getEntityWorkspace().getContextTopBar();
- }
- }
- }
-}
Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,19 +0,0 @@
-package org.ourproject.kune.workspace.client.component;
-
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
-import org.ourproject.kune.platf.client.dto.StateToken;
-
-public interface EntityToolbarView {
-
- void addButtonAction(ActionButtonDescriptor<StateToken> action);
-
- void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable);
-
- void clear();
-
- void clearRemovableActions();
-
- void disableAllMenuItems();
-
-}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -21,28 +21,17 @@
package org.ourproject.kune.workspace.client.ctxnav;
import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionDescriptor;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
public interface ContextNavigator {
- void addAction(String contentTypeId, ActionDescriptor<StateToken> action);
-
void editItem(StateToken stateToken);
View getView();
boolean isSelected(StateToken stateToken);
- void registerContentTypeIcon(String contentTypeId, String iconUrl);
-
- void registerDraggableType(String typeId);
-
- void registerDroppableType(String typeId);
-
- void removeAction(String contentTypeId, ActionDescriptor<StateToken> action);
-
void selectItem(StateToken stateToken);
void setEditOnNextStateChange(boolean edit);
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -24,6 +24,7 @@
import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionManager;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
import org.ourproject.kune.workspace.client.site.Site;
@@ -57,13 +58,15 @@
private final HashMap<String, Menu> contextMenus;
private final WorkspaceSkeleton ws;
private boolean fireOnTextChange;
+ private boolean isEditable;
+ private final ActionManager actionManager;
private final ContextNavigatorPresenter presenter;
- private boolean isEditable;
public ContextNavigatorPanel(final ContextNavigatorPresenter presenter, final I18nTranslationService i18n,
- final WorkspaceSkeleton ws) {
+ final WorkspaceSkeleton ws, final ActionManager actionManager) {
this.presenter = presenter;
this.ws = ws;
+ this.actionManager = actionManager;
contextMenus = new HashMap<String, Menu>();
fireOnTextChange = true;
@@ -279,7 +282,7 @@
}
private void doAction(final ActionDescriptor<StateToken> action, final StateToken stateToken) {
- presenter.doAction(action, stateToken);
+ actionManager.doAction(action, stateToken);
}
private TreeNode getNode(final String id) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -20,17 +20,15 @@
package org.ourproject.kune.workspace.client.ctxnav;
-import java.util.ArrayList;
import java.util.HashMap;
import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionCollectionSet;
-import org.ourproject.kune.platf.client.actions.ActionDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
-import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionRegistry;
+import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
+import org.ourproject.kune.platf.client.actions.DragDropContentRegistry;
+import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
import org.ourproject.kune.platf.client.dto.ContainerDTO;
import org.ourproject.kune.platf.client.dto.ContainerSimpleDTO;
@@ -58,48 +56,32 @@
private final Session session;
private final Provider<ContentServiceAsync> contentServiceProvider;
private final I18nUITranslationService i18n;
- private final HashMap<String, ActionCollection<StateToken>> actions;
private final HashMap<StateToken, ActionCollection<StateToken>> actionsByItem;
- private final ArrayList<String> draggables;
- private final ArrayList<String> droppables;
- private final HashMap<String, String> contentTypesIcons;
private final EntityTitle entityTitle;
- private final Provider<ActionManager> actionManagerProvider;
private boolean editOnNextStateChange;
- private final ContextNavigatorToolbar toolbar;
+ private final ContentIconsRegistry contentIconsRegistry;
+ private final DragDropContentRegistry dragDropContentRegistry;
+ private final ActionRegistry actionRegistry;
+ private final ActionToolbar toolbar;
public ContextNavigatorPresenter(final StateManager stateManager, final Session session,
final Provider<ContentServiceAsync> contentServiceProvider, final I18nUITranslationService i18n,
- final EntityTitle entityTitle, final Provider<ActionManager> actionManagerProvider,
- final ContextNavigatorToolbar contextNavigatorToolbar) {
+ final EntityTitle entityTitle, final ContentIconsRegistry contentIconsRegistry,
+ final DragDropContentRegistry dragDropContentRegistry, final ActionRegistry actionRegistry,
+ final ActionToolbar toolbar) {
this.stateManager = stateManager;
this.session = session;
this.contentServiceProvider = contentServiceProvider;
this.i18n = i18n;
this.entityTitle = entityTitle;
- this.actionManagerProvider = actionManagerProvider;
- this.toolbar = contextNavigatorToolbar;
- actions = new HashMap<String, ActionCollection<StateToken>>();
+ this.contentIconsRegistry = contentIconsRegistry;
+ this.dragDropContentRegistry = dragDropContentRegistry;
+ this.actionRegistry = actionRegistry;
+ this.toolbar = toolbar;
actionsByItem = new HashMap<StateToken, ActionCollection<StateToken>>();
- draggables = new ArrayList<String>();
- droppables = new ArrayList<String>();
- contentTypesIcons = new HashMap<String, String>();
editOnNextStateChange = false;
}
- public void addAction(final String contentTypeId, final ActionDescriptor<StateToken> action) {
- ActionCollection<StateToken> actionColl = actions.get(contentTypeId);
- if (actionColl == null) {
- actionColl = new ActionCollection<StateToken>();
- actions.put(contentTypeId, actionColl);
- }
- actionColl.add(action);
- }
-
- public void doAction(final ActionDescriptor<StateToken> action, final StateToken stateToken) {
- actionManagerProvider.get().doAction(action, stateToken);
- }
-
public void editItem(final StateToken stateToken) {
view.editItem(genId(stateToken));
}
@@ -167,27 +149,10 @@
}
}
- public void registerContentTypeIcon(final String contentTypeId, final String iconUrl) {
- contentTypesIcons.put(contentTypeId, iconUrl);
- }
-
- public void registerDraggableType(final String type) {
- draggables.add(type);
- }
-
- public void registerDroppableType(final String type) {
- droppables.add(type);
- }
-
- public void removeAction(final String contentTypeId, final ActionDescriptor<StateToken> action) {
- actions.get(contentTypeId).remove(action);
- }
-
public void selectItem(final StateToken stateToken) {
view.selectItem(genId(stateToken));
- toolbar.clearRemovableActions();
- toolbar.disableAllMenuItems();
- setActions(actionsByItem.get(stateToken), true);
+ toolbar.disableMenusAndClearButtons();
+ toolbar.setActions(actionsByItem.get(stateToken), true);
}
public void setEditOnNextStateChange(final boolean edit) {
@@ -215,10 +180,11 @@
// childs to view)
final ContainerDTO root = state.getRootContainer();
if (root != null) {
- final ActionCollectionSet<StateToken> set = createItemActions(containerRights, root.getTypeId());
+ final ActionCollectionSet<StateToken> set = actionRegistry.selectCurrentActions(containerRights, root
+ .getTypeId());
view.setRootItem(genId(root.getStateToken()), i18n.t(root.getName()), root.getStateToken(), set
.getItemActions());
- setActions(set.getToolbarActions(), false);
+ toolbar.setActions(set.getToolbarActions(), false);
createChildItems(root, containerRights);
actionsByItem.put(root.getStateToken(), set.getToolbarActions());
}
@@ -252,33 +218,27 @@
}
}
+ protected void clear() {
+ toolbar.clear();
+ view.clear();
+ actionsByItem.clear();
+ }
+
private void addItem(final String title, final String contentTypeId, final ContentStatusDTO status,
final StateToken stateToken, final StateToken parentStateToken, final AccessRightsDTO rights,
final boolean isNodeSelected) {
- final ActionCollectionSet<StateToken> set = createItemActions(rights, contentTypeId);
- setActions(set.getToolbarActions(), isNodeSelected);
+ final ActionCollectionSet<StateToken> set = actionRegistry.selectCurrentActions(rights, contentTypeId);
+ toolbar.setActions(set.getToolbarActions(), isNodeSelected);
final ContextNavigatorItem item = new ContextNavigatorItem(genId(stateToken), genId(parentStateToken),
- getContentTypeIcon(contentTypeId), title, status, stateToken, isDraggable(contentTypeId, rights
- .isAdministrable()), isDroppable(contentTypeId, rights.isAdministrable()), set.getItemActions());
+ contentIconsRegistry.getContentTypeIcon(contentTypeId), title, status, stateToken,
+ dragDropContentRegistry.isDraggable(contentTypeId, rights.isAdministrable()), dragDropContentRegistry
+ .isDroppable(contentTypeId, rights.isAdministrable()), set.getItemActions());
view.addItem(item);
actionsByItem.put(stateToken, set.getToolbarActions());
}
- private boolean checkEnabling(final boolean isNodeSelected, final ActionDescriptor<StateToken> action) {
- final ActionEnableCondition<StateToken> enableCondition = action.getEnableCondition();
- final boolean mustBeEnabled = enableCondition != null ? enableCondition.mustBeEnabled(getCurrentStateToken())
- : true;
- return isNodeSelected && mustBeEnabled;
- }
-
- private void clear() {
- view.clear();
- actionsByItem.clear();
- toolbar.clear();
- }
-
private void createChildItems(final ContainerDTO container, final AccessRightsDTO containerRights) {
for (final ContentDTO content : container.getContents()) {
addItem(content.getTitle(), content.getTypeId(), content.getStatus(), content.getStateToken(), content
@@ -292,43 +252,6 @@
}
}
- private ActionCollectionSet<StateToken> createItemActions(final AccessRightsDTO rights, final String contentTypeId) {
- final ActionCollectionSet<StateToken> set = new ActionCollectionSet<StateToken>();
- boolean add = false;
-
- for (final ActionDescriptor<StateToken> action : actions.get(contentTypeId)) {
- switch (action.getAccessRol()) {
- case Administrator:
- add = rights.isAdministrable();
- break;
- case Editor:
- add = rights.isEditable();
- break;
- case Viewer:
- add = rights.isVisible();
- break;
- }
- if (add) {
- switch (action.getActionPosition()) {
- case topbarAndItemMenu:
- set.getItemActions().add(action);
- case topbar:
- set.getToolbarActions().add(action);
- break;
- case bootombarAndItemMenu:
- set.getItemActions().add(action);
- case bottombar:
- set.getToolbarActions().add(action);
- break;
- case itemMenu:
- set.getItemActions().add(action);
- break;
- }
- }
- }
- return set;
- }
-
private void createTreePath(final StateToken state, final ContainerSimpleDTO[] absolutePath,
final AccessRightsDTO rights) {
for (int i = 0; i < absolutePath.length; i++) {
@@ -349,28 +272,4 @@
return "k-" + token.toString().replace(StateToken.SEPARATOR, "-");
}
- private String getContentTypeIcon(final String typeId) {
- final String icon = contentTypesIcons.get(typeId);
- return icon == null ? "" : icon;
- }
-
- private boolean isDraggable(final String typeId, final boolean administrable) {
- return administrable && draggables.contains(typeId);
- }
-
- private boolean isDroppable(final String typeId, final boolean administrable) {
- return administrable && droppables.contains(typeId);
- }
-
- private void setActions(final ActionCollection<StateToken> actions, final boolean isNodeSelected) {
- for (final ActionDescriptor<StateToken> action : actions) {
- if (action instanceof ActionMenuDescriptor) {
- toolbar.addMenuAction((ActionMenuDescriptor<StateToken>) action, checkEnabling(isNodeSelected, action));
- } else {
- if (checkEnabling(isNodeSelected, action)) {
- toolbar.addButtonAction((ActionButtonDescriptor<StateToken>) action);
- }
- }
- }
- }
}
Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java 2008-09-18 02:06:07 UTC (rev 873)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java 2008-09-18 15:37:09 UTC (rev 874)
@@ -1,15 +0,0 @@
-package org.ourproject.kune.workspace.client.ctxnav;
-
-import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.state.Session;
-import org.ourproject.kune.workspace.client.component.EntityToolbar;
-import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-
-import com.calclab.suco.client.provider.Provider;
-
-public class ContextNavigatorToolbar extends EntityToolbar {
- public ContextNavigatorToolbar(final Session session, final Provider<ActionManager> actionManagerProvider,
- final WorkspaceSkeleton ws) {
- super(ToolbarPosition.context, session, actionManagerProvider, ws);
- }
-}
1
0
r873 - in trunk/src/main/java/org/ourproject/kune/workspace/client: component ctxnav
by vjrj 18 Sep '08
by vjrj 18 Sep '08
18 Sep '08
Author: vjrj
Date: 2008-09-18 04:06:07 +0200 (Thu, 18 Sep 2008)
New Revision: 873
Added:
trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java
trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java
Removed:
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java
Modified:
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
Log:
TreePanel refactor and fix
Copied: trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java (from rev 872, trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java 2008-09-18 00:45:41 UTC (rev 872)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbar.java 2008-09-18 02:06:07 UTC (rev 873)
@@ -0,0 +1,233 @@
+package org.ourproject.kune.workspace.client.component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
+import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.skel.Toolbar;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+
+import com.calclab.suco.client.provider.Provider;
+import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.menu.BaseItem;
+import com.gwtext.client.widgets.menu.Item;
+import com.gwtext.client.widgets.menu.Menu;
+import com.gwtext.client.widgets.menu.MenuItem;
+import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
+
+public class EntityToolbar implements EntityToolbarView {
+
+ protected enum ToolbarPosition {
+ content, context
+ }
+
+ private final HashMap<String, Menu> toolbarMenus;
+ private final ArrayList<Widget> removableToolbarItems;
+ private final HashMap<String, Item> menuItems;
+ private final WorkspaceSkeleton ws;
+ private final Session session;
+ private final Provider<ActionManager> actionManagerProvider;
+ private final ToolbarPosition position;
+
+ public EntityToolbar(final ToolbarPosition position, final Session session,
+ final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) {
+ this.position = position;
+ this.session = session;
+ this.actionManagerProvider = actionManagerProvider;
+ this.ws = ws;
+ toolbarMenus = new HashMap<String, Menu>();
+ removableToolbarItems = new ArrayList<Widget>();
+ menuItems = new HashMap<String, Item>();
+
+ }
+
+ public void addButtonAction(final ActionButtonDescriptor<StateToken> action) {
+ final ActionPosition pos = action.getActionPosition();
+ final ToolbarButton button = new ToolbarButton();
+ final String text = action.getText();
+ if (text != null) {
+ button.setText(text);
+ }
+ button.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(final Button button, final EventObject e) {
+ actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
+ }
+ });
+ button.setIcon(action.getIconUrl());
+ button.setTooltip(action.getToolTip());
+
+ final Toolbar toolbar = getToolbar(pos);
+ if (action.hasLeftSeparator()) {
+ removableToolbarItems.add(add(toolbar, action.getLeftSeparator()));
+ }
+ toolbar.add(button);
+ if (action.hasRightSeparator()) {
+ removableToolbarItems.add(add(toolbar, action.getRightSeparator()));
+ }
+ removableToolbarItems.add(button);
+ }
+
+ public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) {
+ final String menuTitle = action.getParentMenuTitle();
+ final String menuSubTitle = action.getParentSubMenuTitle();
+ final ActionPosition pos = action.getActionPosition();
+ final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
+ Item item = menuItems.get(itemKey);
+ if (item == null) {
+ item = createToolbarMenu(pos, menuTitle, menuSubTitle, action);
+ menuItems.put(itemKey, item);
+ }
+ if (enable) {
+ item.enable();
+ } else {
+ item.disable();
+ }
+ doLayoutIfNeeded(pos);
+ }
+
+ public void clear() {
+ toolbarMenus.clear();
+ menuItems.clear();
+ removableToolbarItems.clear();
+ getToolbar(ActionPosition.topbar).removeAll();
+ getToolbar(ActionPosition.bottombar).removeAll();
+ }
+
+ public void clearRemovableActions() {
+ for (final Widget widget : removableToolbarItems) {
+ widget.removeFromParent();
+ }
+ removableToolbarItems.clear();
+ doLayoutIfNeeded();
+ }
+
+ public void disableAllMenuItems() {
+ for (final Item item : menuItems.values()) {
+ item.disable();
+ }
+ doLayoutIfNeeded();
+ }
+
+ private void add(final ActionPosition toolbar, final Widget widget) {
+ getToolbar(toolbar).add(widget);
+ }
+
+ private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) {
+ switch (separator) {
+ case fill:
+ return toolbar.addFill();
+ case separator:
+ return toolbar.addSeparator();
+ case spacer:
+ default:
+ return toolbar.addSpacer();
+ }
+ }
+
+ private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
+ final ActionMenuDescriptor<StateToken> action) {
+ final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
+ @Override
+ public void onClick(BaseItem item, EventObject e) {
+ actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
+ }
+ });
+ item.setIcon(action.getIconUrl());
+
+ final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null);
+ final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null);
+ Menu menu = toolbarMenus.get(menuKey);
+ Menu subMenu = toolbarMenus.get(subMenuKey);
+ if (menuSubTitle != null) {
+ if (subMenu == null) {
+ subMenu = new Menu();
+ final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
+ if (menu == null) {
+ menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
+ }
+ menu.addItem(subMenuItem);
+ toolbarMenus.put(subMenuKey, subMenu);
+ }
+ subMenu.addItem(item);
+
+ } else {
+ // Menu action without submenu
+ if (menu == null) {
+ menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
+ }
+ menu.addItem(item);
+ }
+ doLayoutIfNeeded(toolBarPos);
+ return item;
+ }
+
+ private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle,
+ final String menuKey) {
+ final Menu menu = new Menu();
+ final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
+ if (iconUrl != null) {
+ toolbarMenu.setIcon(iconUrl);
+ }
+ toolbarMenu.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(final Button button, final EventObject e) {
+ menu.showAt(e.getXY());
+ }
+ });
+ toolbarMenus.put(menuKey, menu);
+ add(barPosition, toolbarMenu);
+ return menu;
+ }
+
+ private void doLayoutIfNeeded() {
+ doLayoutIfNeeded(ActionPosition.topbar);
+ doLayoutIfNeeded(ActionPosition.bottombar);
+ }
+
+ private void doLayoutIfNeeded(final ActionPosition pos) {
+ getToolbar(pos).doLayoutIfNeeded();
+ }
+
+ private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle,
+ final String actionText) {
+ final String basePart = "km-" + pos.toString() + "-" + menuTitle;
+ final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
+ final String itemPart = actionText != null ? "-item-" + actionText : "";
+ return basePart + subMenuPart + itemPart;
+ }
+
+ private Toolbar getToolbar(final ActionPosition pos) {
+ switch (pos) {
+ case bootombarAndItemMenu:
+ case bottombar:
+ switch (position) {
+ case content:
+ return ws.getEntityWorkspace().getContentBottomBar();
+ case context:
+ default:
+ return ws.getEntityWorkspace().getContextBottomBar();
+ }
+ case topbar:
+ case topbarAndItemMenu:
+ default:
+ switch (position) {
+ case content:
+ return ws.getEntityWorkspace().getContentTopBar();
+ case context:
+ default:
+ return ws.getEntityWorkspace().getContextTopBar();
+ }
+ }
+ }
+}
Copied: trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java (from rev 872, trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java 2008-09-18 00:45:41 UTC (rev 872)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/component/EntityToolbarView.java 2008-09-18 02:06:07 UTC (rev 873)
@@ -0,0 +1,19 @@
+package org.ourproject.kune.workspace.client.component;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.dto.StateToken;
+
+public interface EntityToolbarView {
+
+ void addButtonAction(ActionButtonDescriptor<StateToken> action);
+
+ void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable);
+
+ void clear();
+
+ void clearRemovableActions();
+
+ void disableAllMenuItems();
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-18 00:45:41 UTC (rev 872)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-18 02:06:07 UTC (rev 873)
@@ -34,8 +34,11 @@
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.ExtElement;
import com.gwtext.client.data.Node;
import com.gwtext.client.data.Tree;
+import com.gwtext.client.widgets.Editor;
+import com.gwtext.client.widgets.event.EditorListenerAdapter;
import com.gwtext.client.widgets.form.TextField;
import com.gwtext.client.widgets.menu.BaseItem;
import com.gwtext.client.widgets.menu.Item;
@@ -55,6 +58,7 @@
private final WorkspaceSkeleton ws;
private boolean fireOnTextChange;
private final ContextNavigatorPresenter presenter;
+ private boolean isEditable;
public ContextNavigatorPanel(final ContextNavigatorPresenter presenter, final I18nTranslationService i18n,
final WorkspaceSkeleton ws) {
@@ -63,6 +67,7 @@
contextMenus = new HashMap<String, Menu>();
fireOnTextChange = true;
+ isEditable = false;
}
public void addItem(final ContextNavigatorItem item) {
@@ -160,6 +165,10 @@
}
}
+ public void setEditable(final boolean editable) {
+ this.isEditable = editable;
+ }
+
public void setFireOnTextChange(final boolean fireOnTextChange) {
this.fireOnTextChange = fireOnTextChange;
}
@@ -242,7 +251,7 @@
}
});
treePanel.setLines(false);
- treePanel.setEnableDD(true);
+ treePanel.setEnableDD(isEditable);
treePanel.setRootNode(root);
// treePanel.setAutoScroll(true);
treePanel.setContainerScroll(true);
@@ -250,6 +259,11 @@
final TextField field = new TextField();
treeEditor = new TreeEditor(treePanel, field);
+ treeEditor.addListener(new EditorListenerAdapter() {
+ public boolean doBeforeStartEdit(final Editor source, final ExtElement boundEl, final Object value) {
+ return isEditable;
+ }
+ });
final ScrollPanel panel = new ScrollPanel();
// final Panel panel = new Panel();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-18 00:45:41 UTC (rev 872)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-18 02:06:07 UTC (rev 873)
@@ -200,10 +200,17 @@
public void setState(final StateDTO state) {
final ContainerDTO container = state.getContainer();
-
final StateToken stateToken = state.getStateToken();
final AccessRightsDTO containerRights = state.getContainerRights();
+ AccessRightsDTO rights;
+ if (stateToken.hasAll()) {
+ rights = state.getContentRights();
+ } else {
+ rights = containerRights;
+ }
+ view.setEditable(rights.isEditable());
+
// If root sended (container is not a root folder) process root (add
// childs to view)
final ContainerDTO root = state.getRootContainer();
@@ -221,9 +228,11 @@
// Process our current content/container
if (state.hasDocument()) {
+ rights = state.getContentRights();
addItem(state.getTitle(), state.getTypeId(), state.getStatus(), stateToken, container.getStateToken(),
- state.getContentRights(), false);
+ rights, false);
} else {
+ rights = containerRights;
addItem(container.getName(), container.getTypeId(), ContentStatusDTO.publishedOnline, container
.getStateToken(), container.getStateToken().clone().setFolder(container.getParentFolderId()),
containerRights, false);
@@ -239,6 +248,7 @@
setEditOnNextStateChange(false);
} else {
selectItem(stateToken);
+
}
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java 2008-09-18 00:45:41 UTC (rev 872)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java 2008-09-18 02:06:07 UTC (rev 873)
@@ -2,6 +2,7 @@
import org.ourproject.kune.platf.client.actions.ActionManager;
import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.component.EntityToolbar;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import com.calclab.suco.client.provider.Provider;
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-18 00:45:41 UTC (rev 872)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-18 02:06:07 UTC (rev 873)
@@ -36,6 +36,8 @@
void selectItem(String id);
+ void setEditable(boolean editable);
+
void setFireOnTextChange(boolean fire);
void setItemText(String id, String text);
Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java 2008-09-18 00:45:41 UTC (rev 872)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java 2008-09-18 02:06:07 UTC (rev 873)
@@ -1,233 +0,0 @@
-package org.ourproject.kune.workspace.client.ctxnav;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
-import org.ourproject.kune.platf.client.actions.ActionManager;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionPosition;
-import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.platf.client.state.Session;
-import org.ourproject.kune.workspace.client.skel.Toolbar;
-import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-
-import com.calclab.suco.client.provider.Provider;
-import com.google.gwt.user.client.ui.Widget;
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.ToolbarButton;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import com.gwtext.client.widgets.menu.BaseItem;
-import com.gwtext.client.widgets.menu.Item;
-import com.gwtext.client.widgets.menu.Menu;
-import com.gwtext.client.widgets.menu.MenuItem;
-import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
-
-public class EntityToolbar implements EntityToolbarView {
-
- protected enum ToolbarPosition {
- content, context
- }
-
- private final HashMap<String, Menu> toolbarMenus;
- private final ArrayList<Widget> removableToolbarItems;
- private final HashMap<String, Item> menuItems;
- private final WorkspaceSkeleton ws;
- private final Session session;
- private final Provider<ActionManager> actionManagerProvider;
- private final ToolbarPosition position;
-
- public EntityToolbar(final ToolbarPosition position, final Session session,
- final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) {
- this.position = position;
- this.session = session;
- this.actionManagerProvider = actionManagerProvider;
- this.ws = ws;
- toolbarMenus = new HashMap<String, Menu>();
- removableToolbarItems = new ArrayList<Widget>();
- menuItems = new HashMap<String, Item>();
-
- }
-
- public void addButtonAction(final ActionButtonDescriptor<StateToken> action) {
- final ActionPosition pos = action.getActionPosition();
- final ToolbarButton button = new ToolbarButton();
- final String text = action.getText();
- if (text != null) {
- button.setText(text);
- }
- button.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
- }
- });
- button.setIcon(action.getIconUrl());
- button.setTooltip(action.getToolTip());
-
- final Toolbar toolbar = getToolbar(pos);
- if (action.hasLeftSeparator()) {
- removableToolbarItems.add(add(toolbar, action.getLeftSeparator()));
- }
- toolbar.add(button);
- if (action.hasRightSeparator()) {
- removableToolbarItems.add(add(toolbar, action.getRightSeparator()));
- }
- removableToolbarItems.add(button);
- }
-
- public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) {
- final String menuTitle = action.getParentMenuTitle();
- final String menuSubTitle = action.getParentSubMenuTitle();
- final ActionPosition pos = action.getActionPosition();
- final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
- Item item = menuItems.get(itemKey);
- if (item == null) {
- item = createToolbarMenu(pos, menuTitle, menuSubTitle, action);
- menuItems.put(itemKey, item);
- }
- if (enable) {
- item.enable();
- } else {
- item.disable();
- }
- doLayoutIfNeeded(pos);
- }
-
- public void clear() {
- toolbarMenus.clear();
- menuItems.clear();
- removableToolbarItems.clear();
- getToolbar(ActionPosition.topbar).removeAll();
- getToolbar(ActionPosition.bottombar).removeAll();
- }
-
- public void clearRemovableActions() {
- for (final Widget widget : removableToolbarItems) {
- widget.removeFromParent();
- }
- removableToolbarItems.clear();
- doLayoutIfNeeded();
- }
-
- public void disableAllMenuItems() {
- for (final Item item : menuItems.values()) {
- item.disable();
- }
- doLayoutIfNeeded();
- }
-
- private void add(final ActionPosition toolbar, final Widget widget) {
- getToolbar(toolbar).add(widget);
- }
-
- private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) {
- switch (separator) {
- case fill:
- return toolbar.addFill();
- case separator:
- return toolbar.addSeparator();
- case spacer:
- default:
- return toolbar.addSpacer();
- }
- }
-
- private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
- final ActionMenuDescriptor<StateToken> action) {
- final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
- @Override
- public void onClick(BaseItem item, EventObject e) {
- actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
- }
- });
- item.setIcon(action.getIconUrl());
-
- final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null);
- final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null);
- Menu menu = toolbarMenus.get(menuKey);
- Menu subMenu = toolbarMenus.get(subMenuKey);
- if (menuSubTitle != null) {
- if (subMenu == null) {
- subMenu = new Menu();
- final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
- if (menu == null) {
- menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
- }
- menu.addItem(subMenuItem);
- toolbarMenus.put(subMenuKey, subMenu);
- }
- subMenu.addItem(item);
-
- } else {
- // Menu action without submenu
- if (menu == null) {
- menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
- }
- menu.addItem(item);
- }
- doLayoutIfNeeded(toolBarPos);
- return item;
- }
-
- private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle,
- final String menuKey) {
- final Menu menu = new Menu();
- final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
- if (iconUrl != null) {
- toolbarMenu.setIcon(iconUrl);
- }
- toolbarMenu.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- menu.showAt(e.getXY());
- }
- });
- toolbarMenus.put(menuKey, menu);
- add(barPosition, toolbarMenu);
- return menu;
- }
-
- private void doLayoutIfNeeded() {
- doLayoutIfNeeded(ActionPosition.topbar);
- doLayoutIfNeeded(ActionPosition.bottombar);
- }
-
- private void doLayoutIfNeeded(final ActionPosition pos) {
- getToolbar(pos).doLayoutIfNeeded();
- }
-
- private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle,
- final String actionText) {
- final String basePart = "km-" + pos.toString() + "-" + menuTitle;
- final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
- final String itemPart = actionText != null ? "-item-" + actionText : "";
- return basePart + subMenuPart + itemPart;
- }
-
- private Toolbar getToolbar(final ActionPosition pos) {
- switch (pos) {
- case bootombarAndItemMenu:
- case bottombar:
- switch (position) {
- case content:
- return ws.getEntityWorkspace().getContentBottomBar();
- case context:
- default:
- return ws.getEntityWorkspace().getContextBottomBar();
- }
- case topbar:
- case topbarAndItemMenu:
- default:
- switch (position) {
- case content:
- return ws.getEntityWorkspace().getContentTopBar();
- case context:
- default:
- return ws.getEntityWorkspace().getContextTopBar();
- }
- }
- }
-}
Deleted: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java 2008-09-18 00:45:41 UTC (rev 872)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java 2008-09-18 02:06:07 UTC (rev 873)
@@ -1,19 +0,0 @@
-package org.ourproject.kune.workspace.client.ctxnav;
-
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
-import org.ourproject.kune.platf.client.dto.StateToken;
-
-public interface EntityToolbarView {
-
- void addButtonAction(ActionButtonDescriptor<StateToken> action);
-
- void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable);
-
- void clear();
-
- void clearRemovableActions();
-
- void disableAllMenuItems();
-
-}
1
0
Author: vjrj
Date: 2008-09-18 02:45:41 +0200 (Thu, 18 Sep 2008)
New Revision: 872
Added:
trunk/img/nav-icons/gallery_add.png
trunk/img/nav-icons/room.png
trunk/img/nav-icons/room_add.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/gallery_add.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/room.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/room_add.png
trunk/src/main/java/org/ourproject/kune/platf/server/auth/ActionLevel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java
Removed:
trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessType.java
trunk/src/main/java/org/ourproject/kune/platf/server/auth/ContentAuthorizated.java
trunk/src/main/java/org/ourproject/kune/platf/server/auth/ContentAuthorizatedMethodInterceptor.java
trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizated.java
trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizatedMethodInterceptor.java
Modified:
trunk/img/nav-icons/upload.png
trunk/pom.xml
trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/client/ctx/admin/AdminContextPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/GroupDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupService.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupServiceAsync.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/SocialNetworkService.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/SocialNetworkServiceAsync.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/ContentProviderDefault.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RateItPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/upload.gif
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/upload.png
trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java
trunk/src/main/java/org/ourproject/kune/platf/server/access/Access.java
trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessService.java
trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/auth/Authorizated.java
trunk/src/main/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptor.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/GroupManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java
trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentCommentServiceTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceGetTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceIntegrationTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceSaveTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/socialnet/SocialNetworkServiceTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/auth/AuthenticatedMethodInterceptorTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptorTest.java
Log:
Complete - task 38: Auth*MethodInterceptors Tests and refactorization (now userhash + StateToken are checked with annotations in services)
Incomplete - task 45: setContext/Content
Incomplete - task 54: ContextNav refactorization (less bussiness logic in view) and tests
Added: trunk/img/nav-icons/gallery_add.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/nav-icons/gallery_add.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/img/nav-icons/room.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/nav-icons/room.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/img/nav-icons/room_add.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/nav-icons/room_add.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/img/nav-icons/upload.png
===================================================================
(Binary files differ)
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/pom.xml 2008-09-18 00:45:41 UTC (rev 872)
@@ -326,7 +326,7 @@
<plugin>
<groupId>com.totsp.gwt</groupId>
<artifactId>maven-googlewebtoolkit2-plugin</artifactId>
- <version>2.0-beta14</version>
+ <version>2.0-beta23</version>
<configuration>
<logLevel>INFO</logLevel>
<style>PRETTY</style>
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -76,8 +76,14 @@
};
final String initialWindowTitle = Window.getTitle();
chatOptions.userOptions = userChatOptions;
- emiteDialog.start(userChatOptions, chatOptions.httpBase, chatOptions.roomHost, initialWindowTitle,
- avatarProvider, i18n.t("Chat"));
+ if (emiteDialog.isDialogNotStarted()) {
+ emiteDialog.start(userChatOptions, chatOptions.httpBase, chatOptions.roomHost, initialWindowTitle,
+ avatarProvider, i18n.t("Chat"));
+ } else {
+ emiteDialog.setEnableStatusUI(true);
+ emiteDialog.refreshUserInfo(chatOptions.userOptions);
+
+ }
emiteDialog.show(OwnStatus.online);
if (traybarButton == null) {
traybarButton = new ToolbarButton();
@@ -106,7 +112,6 @@
}
});
}
- emiteDialog.setEnableStatusUI(true);
emiteDialog.hide();
emiteDialog.onChatAttended(new Slot<String>() {
public void onEvent(final String parameter) {
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -28,6 +28,7 @@
import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.actions.ActionPosition;
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentDTO;
import org.ourproject.kune.platf.client.dto.InitDataDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -44,6 +45,7 @@
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
+import com.allen_sauer.gwt.log.client.Log;
import com.calclab.suco.client.provider.Provider;
import com.calclab.suco.client.signal.Slot;
@@ -102,23 +104,21 @@
private void createActions() {
final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png",
i18n.t("New folder"), i18n.t("File"), i18n.t("New"));
- final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY, "images/nav/gallery.png",
- i18n.t("New gallery"), i18n.t("File"), i18n.t("New"));
+ final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY,
+ "images/nav/gallery_add.png", i18n.t("New gallery"), i18n.t("File"), i18n.t("New"));
final ActionMenuDescriptor<StateToken> addDoc = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor,
ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
public void onEvent(final StateToken token) {
+ Site.showProgressProcessing();
contentServiceProvider.get().addContent(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(),
- session.getCurrentState().getContainer().getId(), i18n.t("New document"),
+ session.getCurrentState().getStateToken(), i18n.t("New document"),
new AsyncCallbackSimple<StateDTO>() {
public void onSuccess(final StateDTO state) {
- contextNavigator.setState(state);
+ contextNavigator.setEditOnNextStateChange(true);
stateManager.setRetrievedState(state);
- contextNavigator.editItem(state.getStateToken());
}
});
-
}
});
addDoc.setTextDescription(i18n.t("New document"));
@@ -141,8 +141,7 @@
final ActionMenuDescriptor<StateToken> delContent = new ActionMenuDescriptor<StateToken>(
AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
public void onEvent(final StateToken token) {
- contentServiceProvider.get().delContent(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), token.getDocument(),
+ contentServiceProvider.get().delContent(session.getUserHash(), token,
new AsyncCallbackSimple<String>() {
public void onSuccess(final String result) {
final StateToken parent = token.clone().clearDocument();
@@ -165,6 +164,11 @@
});
go.setTextDescription(i18n.t("Open"));
go.setIconUrl("images/nav/go.png");
+ go.setEnableCondition(new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken currentStateToken) {
+ return !contextNavigator.isSelected(currentStateToken);
+ }
+ });
final ActionDescriptor<StateToken> rename = new ActionDescriptor<StateToken>(AccessRolDTO.Editor,
ActionPosition.itemMenu, new Slot<StateToken>() {
@@ -181,22 +185,37 @@
}
});
goGroupHome.setIconUrl("images/group-home.png");
- goGroupHome.setLeftSeparator(ActionButtonSeparator.fill);
- goGroupHome.setRightSeparator(ActionButtonSeparator.separator);
goGroupHome.setEnableCondition(new ActionEnableCondition<StateToken>() {
- public boolean mustBeEnabled(final StateToken param) {
- return !param.equals(session.getCurrentState().getStateToken());
+ public boolean mustBeEnabled(final StateToken currentStateToken) {
+ final StateToken defContentToken = session.getCurrentState().getGroup().getDefaultContent()
+ .getStateToken();
+ return !currentStateToken.equals(defContentToken);
}
});
final ActionMenuDescriptor<StateToken> setAsDefGroupContent = new ActionMenuDescriptor<StateToken>(
AccessRolDTO.Administrator, ActionPosition.itemMenu, new Slot<StateToken>() {
public void onEvent(final StateToken token) {
- Site.info("In development");
+ Site.showProgressProcessing();
+ contentServiceProvider.get().setAsDefaultContent(session.getUserHash(), token,
+ new AsyncCallbackSimple<ContentDTO>() {
+ public void onSuccess(ContentDTO defContent) {
+ session.getCurrentState().getGroup().setDefaultContent(defContent);
+ Site.hideProgress();
+ Site.info(i18n.t("Document selected as the group homepage"));
+ }
+ });
}
});
setAsDefGroupContent.setTextDescription(i18n.t("Set this as the group default page"));
setAsDefGroupContent.setIconUrl("images/group-home.png");
+ setAsDefGroupContent.setEnableCondition(new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken currentStateToken) {
+ final StateToken defContentToken = session.getCurrentState().getGroup().getDefaultContent()
+ .getStateToken();
+ return !contextNavigator.isSelected(defContentToken);
+ }
+ });
final ActionButtonDescriptor<StateToken> refresh = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Viewer,
ActionPosition.topbar, new Slot<StateToken>() {
@@ -207,6 +226,7 @@
});
refresh.setIconUrl("images/nav/refresh.png");
refresh.setToolTip(i18n.t("Refresh"));
+ refresh.setLeftSeparator(ActionButtonSeparator.fill);
final ActionDescriptor<StateToken> uploadFile = createUploadAction(i18n.t("Upload file"),
"images/nav/upload.png", i18n.t("Upload some files (images, PDFs, ...)"), null);
@@ -220,7 +240,7 @@
}
});
- // contextNavigator.addAction(TYPE_FOLDER, go);
+ contextNavigator.addAction(TYPE_FOLDER, go);
contextNavigator.addAction(TYPE_FOLDER, addDoc);
contextNavigator.addAction(TYPE_FOLDER, addFolder);
contextNavigator.addAction(TYPE_FOLDER, delContainer);
@@ -229,10 +249,14 @@
contextNavigator.addAction(TYPE_FOLDER, refresh);
contextNavigator.addAction(TYPE_FOLDER, uploadFile);
+ contextNavigator.addAction(TYPE_BLOG, go);
contextNavigator.addAction(TYPE_BLOG, uploadFile);
contextNavigator.addAction(TYPE_BLOG, setAsDefGroupContent);
+ contextNavigator.addAction(TYPE_BLOG, refresh);
+ contextNavigator.addAction(TYPE_GALLERY, go);
contextNavigator.addAction(TYPE_GALLERY, goGroupHome);
+ contextNavigator.addAction(TYPE_GALLERY, refresh);
contextNavigator.addAction(TYPE_ROOT, addDoc);
contextNavigator.addAction(TYPE_ROOT, addFolder);
@@ -241,7 +265,7 @@
contextNavigator.addAction(TYPE_ROOT, refresh);
contextNavigator.addAction(TYPE_ROOT, uploadFile);
- // contextNavigator.addAction(TYPE_DOCUMENT, go);
+ contextNavigator.addAction(TYPE_DOCUMENT, go);
contextNavigator.addAction(TYPE_DOCUMENT, delContent);
contextNavigator.addAction(TYPE_DOCUMENT, rename);
contextNavigator.addAction(TYPE_DOCUMENT, goGroupHome);
@@ -254,14 +278,14 @@
final ActionMenuDescriptor<StateToken> addFolder;
addFolder = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.topbarAndItemMenu,
new Slot<StateToken>() {
- public void onEvent(final StateToken parameter) {
- contentServiceProvider.get().addFolder(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), new Long(parameter.getFolder()),
- textDescription, contentTypeId, new AsyncCallbackSimple<StateDTO>() {
+ public void onEvent(final StateToken stateToken) {
+ Site.showProgressProcessing();
+ contentServiceProvider.get().addFolder(session.getUserHash(), stateToken, textDescription,
+ contentTypeId, new AsyncCallbackSimple<StateDTO>() {
+
public void onSuccess(final StateDTO state) {
- contextNavigator.setState(state);
+ contextNavigator.setEditOnNextStateChange(true);
stateManager.setRetrievedState(state);
- contextNavigator.editItem(state.getStateToken());
}
});
}
@@ -279,7 +303,10 @@
uploadFile = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.bootombarAndItemMenu,
new Slot<StateToken>() {
public void onEvent(final StateToken token) {
- fileUploaderProvider.get().setPermittedExtensions(permitedExtensions);
+ if (permitedExtensions != null) {
+ Log.info("Permited extensions (in dev): " + permitedExtensions);
+ fileUploaderProvider.get().setPermittedExtensions(permitedExtensions);
+ }
fileUploaderProvider.get().show();
}
});
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -105,8 +105,7 @@
public void onDeleteClicked() {
Site.showProgressProcessing();
- contentServiceProvider.get().delContent(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), content.getDocumentId(),
+ contentServiceProvider.get().delContent(session.getUserHash(), content.getStateToken(),
new AsyncCallbackSimple<Object>() {
public void onSuccess(final Object result) {
Site.hideProgress();
@@ -154,8 +153,8 @@
public void onSave(final String text) {
content.setContent(text);
Site.showProgressSaving();
- contentServiceProvider.get().save(session.getUserHash(), session.getCurrentState().getGroup().getShortName(),
- content.getDocumentId(), content.getContent(), new AsyncCallback<Integer>() {
+ contentServiceProvider.get().save(session.getUserHash(), content.getStateToken(), content.getContent(),
+ new AsyncCallback<Integer>() {
public void onFailure(final Throwable caught) {
Site.hideProgress();
try {
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/ctx/admin/AdminContextPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ctx/admin/AdminContextPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/ctx/admin/AdminContextPresenter.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -65,8 +65,8 @@
public void addAuthor(final String authorShortName) {
Site.showProgressProcessing();
final StateDTO currentState = session.getCurrentState();
- contentServiceProvider.get().addAuthor(session.getUserHash(), currentState.getGroup().getShortName(),
- currentState.getDocumentId(), authorShortName, new AsyncCallbackSimple<Object>() {
+ contentServiceProvider.get().addAuthor(session.getUserHash(), currentState.getStateToken(), authorShortName,
+ new AsyncCallbackSimple<Object>() {
public void onSuccess(final Object result) {
Site.hideProgress();
stateManager.reload();
@@ -77,8 +77,8 @@
public void delAuthor(final String authorShortName) {
Site.showProgressProcessing();
final StateDTO currentState = session.getCurrentState();
- contentServiceProvider.get().removeAuthor(session.getUserHash(), currentState.getGroup().getShortName(),
- currentState.getDocumentId(), authorShortName, new AsyncCallbackSimple<Object>() {
+ contentServiceProvider.get().removeAuthor(session.getUserHash(), currentState.getStateToken(), authorShortName,
+ new AsyncCallbackSimple<Object>() {
public void onSuccess(final Object result) {
Site.hideProgress();
stateManager.reload();
@@ -89,8 +89,8 @@
public void doChangeLanguage(final String langCode) {
Site.showProgressProcessing();
final StateDTO currentState = session.getCurrentState();
- contentServiceProvider.get().setLanguage(session.getUserHash(), currentState.getGroup().getShortName(),
- currentState.getDocumentId(), langCode, new AsyncCallbackSimple<I18nLanguageDTO>() {
+ contentServiceProvider.get().setLanguage(session.getUserHash(), currentState.getStateToken(), langCode,
+ new AsyncCallbackSimple<I18nLanguageDTO>() {
public void onSuccess(final I18nLanguageDTO lang) {
Site.hideProgress();
entitySubTitle.setContentLanguage(lang.getEnglishName());
@@ -109,8 +109,8 @@
public void setPublishedOn(final Date publishedOn) {
Site.showProgressProcessing();
final StateDTO currentState = session.getCurrentState();
- contentServiceProvider.get().setPublishedOn(session.getUserHash(), currentState.getGroup().getShortName(),
- currentState.getDocumentId(), publishedOn, new AsyncCallbackSimple<Object>() {
+ contentServiceProvider.get().setPublishedOn(session.getUserHash(), currentState.getStateToken(), publishedOn,
+ new AsyncCallbackSimple<Object>() {
public void onSuccess(final Object result) {
Site.hideProgress();
entityTitle.setContentDate(publishedOn);
@@ -159,8 +159,8 @@
public void setTags(final String tagsString) {
Site.showProgressProcessing();
final StateDTO currentState = session.getCurrentState();
- contentServiceProvider.get().setTags(session.getUserHash(), currentState.getGroup().getShortName(),
- currentState.getDocumentId(), tagsString, new AsyncCallbackSimple<List<TagResultDTO>>() {
+ contentServiceProvider.get().setTags(session.getUserHash(), currentState.getStateToken(), tagsString,
+ new AsyncCallbackSimple<List<TagResultDTO>>() {
public void onSuccess(final List<TagResultDTO> result) {
tagsSummaryProvider.get().setGroupTags(result);
Site.hideProgress();
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/GroupDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/GroupDTO.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/GroupDTO.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -20,7 +20,6 @@
package org.ourproject.kune.platf.client.dto;
-
import com.google.gwt.user.client.rpc.IsSerializable;
public class GroupDTO implements IsSerializable {
@@ -30,9 +29,7 @@
private String longName;
private String publicDesc;
private GroupType type;
- private String defaultToolName;
- private Long defaultFolderId;
- private Long defaultContentId;
+ private ContentDTO defaultContent;
private LicenseDTO defaultLicense;
private String workspaceTheme;
private String tags;
@@ -56,20 +53,6 @@
return false;
}
final GroupDTO other = (GroupDTO) obj;
- if (defaultContentId == null) {
- if (other.defaultContentId != null) {
- return false;
- }
- } else if (!defaultContentId.equals(other.defaultContentId)) {
- return false;
- }
- if (defaultFolderId == null) {
- if (other.defaultFolderId != null) {
- return false;
- }
- } else if (!defaultFolderId.equals(other.defaultFolderId)) {
- return false;
- }
if (defaultLicense == null) {
if (other.defaultLicense != null) {
return false;
@@ -77,13 +60,6 @@
} else if (!defaultLicense.equals(other.defaultLicense)) {
return false;
}
- if (defaultToolName == null) {
- if (other.defaultToolName != null) {
- return false;
- }
- } else if (!defaultToolName.equals(other.defaultToolName)) {
- return false;
- }
if (id == null) {
if (other.id != null) {
return false;
@@ -118,22 +94,14 @@
return true;
}
- public Long getDefaultContentId() {
- return defaultContentId;
+ public ContentDTO getDefaultContent() {
+ return defaultContent;
}
- public Long getDefaultFolderId() {
- return defaultFolderId;
- }
-
public LicenseDTO getDefaultLicense() {
return defaultLicense;
}
- public String getDefaultToolName() {
- return defaultToolName;
- }
-
public Long getId() {
return id;
}
@@ -165,10 +133,7 @@
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + (defaultContentId == null ? 0 : defaultContentId.hashCode());
- result = prime * result + (defaultFolderId == null ? 0 : defaultFolderId.hashCode());
result = prime * result + (defaultLicense == null ? 0 : defaultLicense.hashCode());
- result = prime * result + (defaultToolName == null ? 0 : defaultToolName.hashCode());
result = prime * result + (id == null ? 0 : id.hashCode());
result = prime * result + (longName == null ? 0 : longName.hashCode());
result = prime * result + (publicDesc == null ? 0 : publicDesc.hashCode());
@@ -177,22 +142,14 @@
return result;
}
- public void setDefaultContentId(final Long defaultContentId) {
- this.defaultContentId = defaultContentId;
+ public void setDefaultContent(final ContentDTO defaultContent) {
+ this.defaultContent = defaultContent;
}
- public void setDefaultFolderId(final Long defaultFolderId) {
- this.defaultFolderId = defaultFolderId;
- }
-
public void setDefaultLicense(final LicenseDTO defaultLicense) {
this.defaultLicense = defaultLicense;
}
- public void setDefaultToolName(final String defaultToolName) {
- this.defaultToolName = defaultToolName;
- }
-
public void setId(final Long id) {
this.id = id;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -24,6 +24,7 @@
import java.util.List;
import org.ourproject.kune.platf.client.dto.CommentDTO;
+import org.ourproject.kune.platf.client.dto.ContentDTO;
import org.ourproject.kune.platf.client.dto.I18nLanguageDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -34,48 +35,45 @@
public interface ContentService extends RemoteService {
- void addAuthor(String userHash, String groupShortName, String documentId, String authorShortName)
+ void addAuthor(String userHash, StateToken token, String authorShortName) throws DefaultException;
+
+ CommentDTO addComment(String userHash, StateToken token, Long parentCommentId, String commentText)
throws DefaultException;
- CommentDTO addComment(String userHash, String groupShortName, String documentId, Long parentCommentId,
- String commentText) throws DefaultException;
+ CommentDTO addComment(String userHash, StateToken token, String commentText) throws DefaultException;
- CommentDTO addComment(String userHash, String groupShortName, String documentId, String commentText)
- throws DefaultException;
+ StateDTO addContent(String user, StateToken parentToken, String name) throws DefaultException;
- StateDTO addContent(String user, String groupShortName, Long parentFolderId, String name) throws DefaultException;
+ StateDTO addFolder(String hash, StateToken parentToken, String typeId, String title) throws DefaultException;
- StateDTO addFolder(String hash, String groupShortName, Long parentFolderId, String typeId, String title)
- throws DefaultException;
+ StateDTO addRoom(String user, StateToken parentToken, String name) throws DefaultException;
- StateDTO addRoom(String user, String groupShortName, Long parentFolderId, String name) throws DefaultException;
+ void delContent(String userHash, StateToken token) throws DefaultException;
- void delContent(String userHash, String groupShortName, String documentId) throws DefaultException;
+ StateDTO getContent(String userHash, StateToken token) throws DefaultException;
- StateDTO getContent(String userHash, String groupShortName, StateToken token) throws DefaultException;
+ List<TagResultDTO> getSummaryTags(String userHash, StateToken groupToken) throws DefaultException;
- List<TagResultDTO> getSummaryTags(String userHash, String groupShortName) throws DefaultException;
+ CommentDTO markCommentAsAbuse(String userHash, StateToken token, Long commentId) throws DefaultException;
- CommentDTO markCommentAsAbuse(String userHash, String groupShortName, String documentId, Long commentId)
- throws DefaultException;
+ void rateContent(String userHash, StateToken token, Double value) throws DefaultException;
- void rateContent(String userHash, String groupShortName, String documentId, Double value) throws DefaultException;
+ void removeAuthor(String userHash, StateToken token, String authorShortName) throws DefaultException;
- void removeAuthor(String userHash, String groupShortName, String documentId, String authorShortName)
- throws DefaultException;
+ String renameContainer(String userHash, StateToken token, String newName) throws DefaultException;
- String rename(String userHash, String groupShortName, String token, String newName) throws DefaultException;
+ String renameContent(String userHash, StateToken token, String newName) throws DefaultException;
- Integer save(String user, String groupShortName, String documentId, String content) throws DefaultException;
+ Integer save(String user, StateToken token, String content) throws DefaultException;
- I18nLanguageDTO setLanguage(String userHash, String groupShortName, String documentId, String languageCode)
- throws DefaultException;
+ ContentDTO setAsDefaultContent(String userHash, StateToken token);
- void setPublishedOn(String userHash, String groupShortName, String documentId, Date date) throws DefaultException;
+ I18nLanguageDTO setLanguage(String userHash, StateToken token, String languageCode) throws DefaultException;
- List<TagResultDTO> setTags(String userHash, String groupShortName, String documentId, String tags)
- throws DefaultException;
+ void setPublishedOn(String userHash, StateToken token, Date date) throws DefaultException;
- CommentDTO voteComment(String userHash, String groupShortName, String documentId, Long commentId,
- boolean votePositive) throws DefaultException;
+ List<TagResultDTO> setTags(String userHash, StateToken token, String tags) throws DefaultException;
+
+ CommentDTO voteComment(String userHash, StateToken token, Long commentId, boolean votePositive)
+ throws DefaultException;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -24,6 +24,7 @@
import java.util.List;
import org.ourproject.kune.platf.client.dto.CommentDTO;
+import org.ourproject.kune.platf.client.dto.ContentDTO;
import org.ourproject.kune.platf.client.dto.I18nLanguageDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -33,53 +34,46 @@
public interface ContentServiceAsync {
- void addAuthor(String userHash, String groupShortName, String documentId, String authorShortName,
- AsyncCallback<?> asyncCallback);
+ void addAuthor(String userHash, StateToken token, String authorShortName, AsyncCallback<?> asyncCallback);
- void addComment(String userHash, String groupShortName, String documentId, Long parentCommentId,
- String commentText, AsyncCallback<CommentDTO> asyncCallback);
-
- void addComment(String userHash, String groupShortName, String documentId, String commentText,
+ void addComment(String userHash, StateToken token, Long parentCommentId, String commentText,
AsyncCallback<CommentDTO> asyncCallback);
- void addContent(String user, String groupShortName, Long parentFolderId, String name,
- AsyncCallback<StateDTO> callback);
+ void addComment(String userHash, StateToken token, String commentText, AsyncCallback<CommentDTO> asyncCallback);
- void addFolder(String hash, String groupShortName, Long parentFolderId, String title, String typeId,
- AsyncCallback<StateDTO> callback);
+ void addContent(String user, StateToken parentToken, String name, AsyncCallback<StateDTO> callback);
- void addRoom(String user, String groupShortName, Long parentFolderId, String name, AsyncCallback<StateDTO> callback);
+ void addFolder(String hash, StateToken parentToken, String title, String typeId, AsyncCallback<StateDTO> callback);
- void delContent(String userHash, String groupShortName, String documentId, AsyncCallback<?> asyncCallback);
+ void addRoom(String user, StateToken parentToken, String name, AsyncCallback<StateDTO> callback);
- void getContent(String user, String groupShortName, StateToken newState, AsyncCallback<StateDTO> callback);
+ void delContent(String userHash, StateToken token, AsyncCallback<?> asyncCallback);
- void getSummaryTags(String userHash, String groupShortName, AsyncCallback<List<TagResultDTO>> asyncCallback);
+ void getContent(String user, StateToken newState, AsyncCallback<StateDTO> callback);
- void markCommentAsAbuse(String userHash, String groupShortName, String documentId, Long commentId,
- AsyncCallback<CommentDTO> asyncCallback);
+ void getSummaryTags(String userHash, StateToken groupToken, AsyncCallback<List<TagResultDTO>> asyncCallback);
- void rateContent(String userHash, String groupShortName, String documentId, Double value,
- AsyncCallback<?> asyncCallback);
+ void markCommentAsAbuse(String userHash, StateToken token, Long commentId, AsyncCallback<CommentDTO> asyncCallback);
- void removeAuthor(String userHash, String groupShortName, String documentId, String authorShortName,
- AsyncCallback<?> asyncCallback);
+ void rateContent(String userHash, StateToken token, Double value, AsyncCallback<?> asyncCallback);
- void rename(String userHash, String groupShortName, String token, String newName,
- AsyncCallback<String> asyncCallback);
+ void removeAuthor(String userHash, StateToken token, String authorShortName, AsyncCallback<?> asyncCallback);
- void save(String user, String groupShortName, String documentId, String content,
- AsyncCallback<Integer> asyncCallback);
+ void renameContainer(String userHash, StateToken token, String newName, AsyncCallback<String> asyncCallback);
- void setLanguage(String userHash, String groupShortName, String documentId, String languageCode,
+ void renameContent(String userHash, StateToken token, String newName, AsyncCallback<String> asyncCallback);
+
+ void save(String user, StateToken token, String content, AsyncCallback<Integer> asyncCallback);
+
+ void setAsDefaultContent(String userHash, StateToken token, AsyncCallback<ContentDTO> asyncCallback);
+
+ void setLanguage(String userHash, StateToken token, String languageCode,
AsyncCallback<I18nLanguageDTO> asyncCallback);
- void setPublishedOn(String userHash, String groupShortName, String documentId, Date publishedOn,
- AsyncCallback<?> asyncCallback);
+ void setPublishedOn(String userHash, StateToken token, Date publishedOn, AsyncCallback<?> asyncCallback);
- void setTags(String userHash, String groupShortName, String documentId, String tags,
- AsyncCallback<List<TagResultDTO>> asyncCallback);
+ void setTags(String userHash, StateToken token, String tags, AsyncCallback<List<TagResultDTO>> asyncCallback);
- void voteComment(String userHash, String groupShortName, String documentId, Long commentId, boolean votePositive,
+ void voteComment(String userHash, StateToken token, Long commentId, boolean votePositive,
AsyncCallback<CommentDTO> asyncCallback);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupService.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupService.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -28,7 +28,7 @@
public interface GroupService extends RemoteService {
- void changeGroupWsTheme(String userHash, String groupShortName, String theme) throws DefaultException;
+ void changeGroupWsTheme(String userHash, StateToken groupToken, String theme) throws DefaultException;
StateToken createNewGroup(String userHash, GroupDTO group) throws DefaultException;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupServiceAsync.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupServiceAsync.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/GroupServiceAsync.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -27,8 +27,8 @@
public interface GroupServiceAsync {
+ void changeGroupWsTheme(String userHash, StateToken groupToken, String theme, AsyncCallback<?> callback);
+
void createNewGroup(String userHash, GroupDTO group, AsyncCallback<StateToken> callback);
- void changeGroupWsTheme(String userHash, String groupShortName, String theme, AsyncCallback<?> callback);
-
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/SocialNetworkService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/SocialNetworkService.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/SocialNetworkService.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -23,41 +23,42 @@
import org.ourproject.kune.platf.client.dto.SocialNetworkDTO;
import org.ourproject.kune.platf.client.dto.SocialNetworkRequestResult;
import org.ourproject.kune.platf.client.dto.SocialNetworkResultDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.errors.DefaultException;
import com.google.gwt.user.client.rpc.RemoteService;
public interface SocialNetworkService extends RemoteService {
- SocialNetworkResultDTO AcceptJoinGroup(String hash, String groupShortName, String groupToAcceptShortName)
+ SocialNetworkResultDTO AcceptJoinGroup(String hash, StateToken groupToken, String groupToAcceptShortName)
throws DefaultException;
- SocialNetworkResultDTO addAdminMember(String hash, String groupShortName, String groupToAddShortName)
+ SocialNetworkResultDTO addAdminMember(String hash, StateToken groupToken, String groupToAddShortName)
throws DefaultException;
- SocialNetworkResultDTO addCollabMember(String hash, String groupShortName, String groupToAddShortName)
+ SocialNetworkResultDTO addCollabMember(String hash, StateToken groupToken, String groupToAddShortName)
throws DefaultException;
- SocialNetworkResultDTO addViewerMember(String hash, String groupShortName, String groupToAddShortName)
+ SocialNetworkResultDTO addViewerMember(String hash, StateToken groupToken, String groupToAddShortName)
throws DefaultException;
- SocialNetworkResultDTO deleteMember(String hash, String groupShortName, String groupToDeleteShortName)
+ SocialNetworkResultDTO deleteMember(String hash, StateToken groupToken, String groupToDeleteShortName)
throws DefaultException;
- SocialNetworkResultDTO denyJoinGroup(String hash, String groupShortName, String groupToDenyShortName)
+ SocialNetworkResultDTO denyJoinGroup(String hash, StateToken groupToken, String groupToDenyShortName)
throws DefaultException;
- SocialNetworkDTO getGroupMembers(String hash, String groupShortName) throws DefaultException;
+ SocialNetworkDTO getGroupMembers(String hash, StateToken groupToken) throws DefaultException;
- ParticipationDataDTO getParticipation(String hash, String groupShortName) throws DefaultException;
+ ParticipationDataDTO getParticipation(String hash, StateToken groupToken) throws DefaultException;
- SocialNetworkRequestResult requestJoinGroup(String hash, String groupShortName) throws DefaultException;
+ SocialNetworkRequestResult requestJoinGroup(String hash, StateToken groupToken) throws DefaultException;
- SocialNetworkResultDTO setAdminAsCollab(String hash, String groupShortName, String groupToSetCollabShortName)
+ SocialNetworkResultDTO setAdminAsCollab(String hash, StateToken groupToken, String groupToSetCollabShortName)
throws DefaultException;
- SocialNetworkResultDTO setCollabAsAdmin(String hash, String groupShortName, String groupToSetAdminShortName)
+ SocialNetworkResultDTO setCollabAsAdmin(String hash, StateToken groupToken, String groupToSetAdminShortName)
throws DefaultException;
- SocialNetworkResultDTO unJoinGroup(String hash, String groupShortName) throws DefaultException;
+ SocialNetworkResultDTO unJoinGroup(String hash, StateToken groupToken) throws DefaultException;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/SocialNetworkServiceAsync.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/SocialNetworkServiceAsync.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/SocialNetworkServiceAsync.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -21,40 +21,41 @@
import org.ourproject.kune.platf.client.dto.ParticipationDataDTO;
import org.ourproject.kune.platf.client.dto.SocialNetworkResultDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface SocialNetworkServiceAsync {
- void requestJoinGroup(String hash, String groupShortName, AsyncCallback<?> callback);
+ void AcceptJoinGroup(String hash, StateToken groupToken, String groupToAcceptShortName,
+ AsyncCallback<SocialNetworkResultDTO> callback);
- void AcceptJoinGroup(String hash, String groupShortName, String groupToAcceptShortName,
- AsyncCallback<SocialNetworkResultDTO> callback);
+ void addAdminMember(String hash, StateToken groupToken, String groupToAddShortName,
+ AsyncCallback<SocialNetworkResultDTO> callback);
- void deleteMember(String hash, String groupShortName, String groupToDeleteShortName,
- AsyncCallback<SocialNetworkResultDTO> callback);
+ void addCollabMember(String hash, StateToken groupToken, String groupToAddShortName,
+ AsyncCallback<SocialNetworkResultDTO> callback);
- void denyJoinGroup(String hash, String groupShortName, String groupToDenyShortName,
- AsyncCallback<SocialNetworkResultDTO> callback);
+ void addViewerMember(String hash, StateToken groupToken, String groupToAddShortName,
+ AsyncCallback<SocialNetworkResultDTO> callback);
- void unJoinGroup(String hash, String groupShortName, AsyncCallback<SocialNetworkResultDTO> callback);
+ void deleteMember(String hash, StateToken groupToken, String groupToDeleteShortName,
+ AsyncCallback<SocialNetworkResultDTO> callback);
- void setCollabAsAdmin(String hash, String groupShortName, String groupToSetAdminShortName,
- AsyncCallback<SocialNetworkResultDTO> callback);
+ void denyJoinGroup(String hash, StateToken groupToken, String groupToDenyShortName,
+ AsyncCallback<SocialNetworkResultDTO> callback);
- void setAdminAsCollab(String hash, String groupShortName, String groupToSetCollabShortName,
- AsyncCallback<SocialNetworkResultDTO> callback);
+ void getGroupMembers(String hash, StateToken groupToken, AsyncCallback<SocialNetworkResultDTO> callback);
- void addAdminMember(String hash, String groupShortName, String groupToAddShortName,
- AsyncCallback<SocialNetworkResultDTO> callback);
+ void getParticipation(String hash, StateToken groupToken, AsyncCallback<ParticipationDataDTO> callback);
- void addCollabMember(String hash, String groupShortName, String groupToAddShortName,
- AsyncCallback<SocialNetworkResultDTO> callback);
+ void requestJoinGroup(String hash, StateToken groupToken, AsyncCallback<?> callback);
- void addViewerMember(String hash, String groupShortName, String groupToAddShortName,
- AsyncCallback<SocialNetworkResultDTO> callback);
+ void setAdminAsCollab(String hash, StateToken groupToken, String groupToSetCollabShortName,
+ AsyncCallback<SocialNetworkResultDTO> callback);
- void getGroupMembers(String hash, String groupShortName, AsyncCallback<SocialNetworkResultDTO> callback);
+ void setCollabAsAdmin(String hash, StateToken groupToken, String groupToSetAdminShortName,
+ AsyncCallback<SocialNetworkResultDTO> callback);
- void getParticipation(String hash, String groupShortName, AsyncCallback<ParticipationDataDTO> callback);
+ void unJoinGroup(String hash, StateToken groupToken, AsyncCallback<SocialNetworkResultDTO> callback);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -36,6 +36,7 @@
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPanel;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPresenter;
+import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorToolbar;
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.editor.TextEditorPanel;
import org.ourproject.kune.workspace.client.editor.TextEditorPresenter;
@@ -589,9 +590,11 @@
register(SingletonScope.class, new Factory<ContextNavigator>(ContextNavigator.class) {
public ContextNavigator create() {
+ final ContextNavigatorToolbar contextNavigatorToolbar = new ContextNavigatorToolbar($(Session.class),
+ $$(ActionManager.class), ws);
final ContextNavigatorPresenter presenter = new ContextNavigatorPresenter($(StateManager.class),
$(Session.class), $$(ContentServiceAsync.class), i18n, $(EntityTitle.class),
- $$(ActionManager.class));
+ $$(ActionManager.class), contextNavigatorToolbar);
final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n, ws);
presenter.init(panel);
return presenter;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/ContentProviderDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/ContentProviderDefault.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/ContentProviderDefault.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -49,7 +49,7 @@
if (catched != null) {
callback.onSuccess(catched);
} else {
- server.getContent(user, newState.getGroup(), newState, callback);
+ server.getContent(user, newState, callback);
}
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -139,9 +139,9 @@
siteTokens.remove(token);
}
- public void setRetrievedState(final StateDTO content) {
- final StateToken state = content.getStateToken();
- contentProvider.cache(state, content);
+ public void setRetrievedState(final StateDTO newState) {
+ contentProvider.cache(newState.getStateToken(), newState);
+ setState(newState);
}
public void setSocialNetwork(final SocialNetworkResultDTO socialNet) {
@@ -171,18 +171,10 @@
}
}
- private void loadContent(final StateDTO state) {
- onStateChanged.fire(state);
- Site.hideProgress();
- }
-
private void onHistoryChanged(final StateToken newState) {
contentProvider.getContent(session.getUserHash(), newState, new AsyncCallbackSimple<StateDTO>() {
public void onSuccess(final StateDTO newState) {
- loadContent(newState);
- session.setCurrent(newState);
- checkGroupAndToolChange(oldState, newState);
- oldState = newState;
+ setState(newState);
}
});
}
@@ -191,10 +183,17 @@
if (oldState == null) {
onHistoryChanged(new StateToken());
} else {
- final StateDTO currentState = session.getCurrentState();
- session.setCurrent(oldState);
- checkGroupAndToolChange(currentState, oldState);
- loadContent(oldState);
+ final StateDTO newState = oldState;
+ oldState = session.getCurrentState();
+ setState(newState);
}
}
+
+ private void setState(final StateDTO newState) {
+ session.setCurrent(newState);
+ onStateChanged.fire(newState);
+ Site.hideProgress();
+ checkGroupAndToolChange(oldState, newState);
+ oldState = newState;
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -8,6 +8,8 @@
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.UrlParam;
import com.gwtext.client.widgets.Button;
@@ -20,62 +22,17 @@
private static final String URL = "/services/fileupload";
- private final UploadDialog dialog;
+ private UploadDialog dialog;
private ToolbarButton traybarButton;
private final I18nUITranslationService i18n;
private final WorkspaceSkeleton ws;
+ private final Session session;
public FileUploaderDialog(final I18nUITranslationService i18n, final WorkspaceSkeleton ws, final Session session) {
this.i18n = i18n;
this.ws = ws;
- dialog = new UploadDialog(i18n.t("File uploader"), false, true);
- // dialog.setUploadAutostart(true);
- dialog.setResetOnHide(false);
- dialog.addListener(new UploadDialogListenerAdapter() {
-
- @Override
- public void onFileUploadStart(final UploadDialog source, final String filename) {
- setUploadParams(session.getUserHash(), session.getCurrentState().getStateToken().toString(), filename);
- }
-
- @Override
- public void onUploadComplete(final UploadDialog source) {
- if (!dialog.isVisible()) {
- Site.info(i18n.t("Upload completed"));
- traybarButton.destroy();
- traybarButton = null;
- }
- }
-
- @Override
- public void onUploadError(final UploadDialog source, final String filename, final JavaScriptObject data) {
- showError();
- }
-
- @Override
- public void onUploadFailed(final UploadDialog source, final String filename) {
- showError();
- }
-
- private void setUploadParams(final String userhash, final String currentStateToken, final String filename) {
- Log.info("Setting upload params");
- final UrlParam param[] = new UrlParam[3];
- param[0] = new UrlParam("userhash", userhash);
- param[1] = new UrlParam("currentStateToken", currentStateToken);
- param[2] = new UrlParam("filename", filename);
- dialog.setBaseParams(param);
- dialog.setPostVarName(filename);
- }
-
- private void showError() {
- if (!dialog.isVisible()) {
- Site.veryImportant(i18n.t("Error uploading"));
- }
- }
-
- });
- dialog.setUrl(URL);
-
+ this.session = session;
+ createDialog(false);
}
public void hide() {
@@ -83,7 +40,16 @@
}
public void setPermittedExtensions(final String extensions) {
- dialog.setPermittedExtensions((String[]) KuneStringUtils.splitTags(extensions).toArray());
+ DeferredCommand.addCommand(new Command() {
+ public void execute() {
+ final Object[] objs = KuneStringUtils.splitTags(extensions).toArray();
+ final String[] exts = new String[objs.length];
+ for (int i = 0; i < objs.length; i++) {
+ exts[i] = (String) objs[i];
+ }
+ dialog.setPermittedExtensions(exts);
+ }
+ });
}
public void show() {
@@ -103,6 +69,71 @@
});
ws.getSiteTraybar().addButton(traybarButton);
}
- dialog.show();
+ if (dialog == null) {
+ createDialog(true);
+ } else {
+ dialog.show();
+ }
}
+
+ private void createDialog(final boolean show) {
+ DeferredCommand.addCommand(new Command() {
+
+ public void execute() {
+
+ dialog = new UploadDialog(i18n.t("File uploader"), false, true);
+ // dialog.setUploadAutostart(true);
+ dialog.setResetOnHide(false);
+ dialog.addListener(new UploadDialogListenerAdapter() {
+ @Override
+ public void onFileUploadStart(final UploadDialog source, final String filename) {
+ setUploadParams(session.getUserHash(), session.getCurrentState().getStateToken().toString(),
+ filename);
+ }
+
+ @Override
+ public void onUploadComplete(final UploadDialog source) {
+ if (!dialog.isVisible()) {
+ Site.info(i18n.t("Upload completed"));
+ traybarButton.destroy();
+ traybarButton = null;
+ }
+ }
+
+ @Override
+ public void onUploadError(final UploadDialog source, final String filename,
+ final JavaScriptObject data) {
+ showError();
+ }
+
+ @Override
+ public void onUploadFailed(final UploadDialog source, final String filename) {
+ showError();
+ }
+
+ private void setUploadParams(final String userhash, final String currentStateToken,
+ final String filename) {
+ Log.info("Setting upload params");
+ final UrlParam param[] = new UrlParam[3];
+ param[0] = new UrlParam("userhash", userhash);
+ param[1] = new UrlParam("currentStateToken", currentStateToken);
+ param[2] = new UrlParam("filename", filename);
+ dialog.setBaseParams(param);
+ dialog.setPostVarName(filename);
+ }
+
+ private void showError() {
+ if (!dialog.isVisible()) {
+ Site.veryImportant(i18n.t("Error uploading"));
+ }
+ }
+
+ });
+ dialog.setUrl(URL);
+ if (show) {
+ dialog.show();
+ }
+ }
+ });
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RateItPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RateItPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RateItPresenter.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -85,8 +85,8 @@
setRatePanel(newValue);
Site.showProgressProcessing();
final StateDTO currentState = session.getCurrentState();
- contentServiceProvider.get().rateContent(session.getUserHash(), currentState.getGroup().getShortName(),
- currentState.getDocumentId(), newValue, new AsyncCallbackSimple<Object>() {
+ contentServiceProvider.get().rateContent(session.getUserHash(), currentState.getStateToken(), newValue,
+ new AsyncCallbackSimple<Object>() {
public void onSuccess(final Object result) {
Site.hideProgress();
Site.info(i18n.t("Content rated"));
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/gallery_add.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/gallery_add.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/room.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/room.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/room_add.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/room_add.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/upload.gif
===================================================================
(Binary files differ)
Modified: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/upload.png
===================================================================
(Binary files differ)
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -41,8 +41,6 @@
import org.ourproject.kune.platf.server.auth.AuthenticatedMethodInterceptor;
import org.ourproject.kune.platf.server.auth.Authorizated;
import org.ourproject.kune.platf.server.auth.AuthorizatedMethodInterceptor;
-import org.ourproject.kune.platf.server.auth.GroupAuthorizated;
-import org.ourproject.kune.platf.server.auth.GroupAuthorizatedMethodInterceptor;
import org.ourproject.kune.platf.server.auth.SessionService;
import org.ourproject.kune.platf.server.auth.SessionServiceDefault;
import org.ourproject.kune.platf.server.content.CommentManager;
@@ -116,8 +114,6 @@
outermostCall(new AuthenticatedMethodInterceptor()));
bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authorizated.class),
outermostCall(new AuthorizatedMethodInterceptor()));
- bindInterceptor(Matchers.any(), Matchers.annotatedWith(GroupAuthorizated.class),
- outermostCall(new GroupAuthorizatedMethodInterceptor()));
}
private void bindManagers() {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/access/Access.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/access/Access.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/access/Access.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -29,17 +29,29 @@
private Content content;
private Container container;
private AccessLists contentAccessLists;
- private AccessLists folderAccessLists;
+ private AccessLists containerAccessLists;
private AccessLists groupAccessLists;
private AccessRights contentRights;
- private AccessRights folderRights;
+ private AccessRights containerRights;
private AccessRights groupRights;
public Access(final Content descriptor, final Container container) {
setContent(descriptor);
- setFolder(container);
+ setContainer(container);
}
+ public Container getContainer() {
+ return container;
+ }
+
+ public AccessLists getContainerAccessLists() {
+ return containerAccessLists;
+ }
+
+ public AccessRights getContainerRights() {
+ return containerRights;
+ }
+
public Content getContent() {
return content;
}
@@ -52,18 +64,6 @@
return contentRights;
}
- public Container getFolder() {
- return container;
- }
-
- public AccessLists getFolderAccessLists() {
- return folderAccessLists;
- }
-
- public AccessRights getFolderRights() {
- return folderRights;
- }
-
public AccessLists getGroupAccessLists() {
return groupAccessLists;
}
@@ -72,18 +72,31 @@
return groupRights;
}
+ public boolean hasContainerRights() {
+ return containerRights != null;
+ }
+
public boolean hasContentRights() {
return contentRights != null;
}
- public boolean hasFolderRights() {
- return folderRights != null;
- }
-
public boolean hasGroupRights() {
return groupRights != null;
}
+ public void setContainer(final Container container) {
+ this.container = container;
+ containerAccessLists = container != null ? getContainerAccessLists(container) : null;
+ groupAccessLists = containerAccessLists;
+ }
+
+ public void setContainerRights(final AccessRights accessRights) {
+ this.containerRights = accessRights;
+ if (equalsAccessLists()) {
+ this.contentRights = accessRights;
+ }
+ }
+
public void setContent(final Content descriptor) {
this.content = descriptor;
contentAccessLists = descriptor != null ? getContentAccessList(descriptor) : null;
@@ -92,39 +105,26 @@
public void setContentRights(final AccessRights accessRights) {
this.contentRights = accessRights;
if (equalsAccessLists()) {
- this.folderRights = accessRights;
+ this.containerRights = accessRights;
}
}
public void setContentWidthFolderRights(final Content content) {
setContent(content);
- this.contentRights = folderRights;
+ this.contentRights = containerRights;
}
- public void setFolder(final Container container) {
- this.container = container;
- folderAccessLists = container != null ? getFolderAccessLists(container) : null;
- groupAccessLists = folderAccessLists;
- }
-
- public void setFolderRights(final AccessRights accessRights) {
- this.folderRights = accessRights;
- if (equalsAccessLists()) {
- this.contentRights = accessRights;
- }
- }
-
public void setGroupRights(final AccessRights accessRights) {
this.groupRights = accessRights;
}
private boolean equalsAccessLists() {
- if (contentAccessLists == folderAccessLists) {
+ if (contentAccessLists == containerAccessLists) {
return true;
} else if (contentAccessLists != null) {
- return contentAccessLists.equals(folderAccessLists);
+ return contentAccessLists.equals(containerAccessLists);
} else {
- return folderAccessLists.equals(contentAccessLists);
+ return containerAccessLists.equals(contentAccessLists);
}
}
@@ -139,7 +139,7 @@
return accessLists;
}
- private AccessLists getFolderAccessLists(final Container container) {
+ private AccessLists getContainerAccessLists(final Container container) {
return container.getOwner().getSocialNetwork().getAccessLists();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessService.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessService.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -22,16 +22,17 @@
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.errors.DefaultException;
+import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
import org.ourproject.kune.platf.server.domain.Group;
import org.ourproject.kune.platf.server.domain.User;
public interface AccessService {
- Content accessToContent(Long contentId, User user, AccessType accessType) throws DefaultException;
+ Container accessToContainer(Long folderId, User user, AccessRol accessRol) throws DefaultException;
- Access getAccess(User user, StateToken token, Group defaultGroup, AccessType accessType) throws DefaultException;
+ Content accessToContent(Long contentId, User user, AccessRol accessRol) throws DefaultException;
- Access getFolderAccess(Group group, Long folderId, User user, AccessType accessType) throws DefaultException;
+ Access getAccess(User user, StateToken token, Group defaultGroup, AccessRol accessRol) throws DefaultException;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -49,40 +49,37 @@
this.groupFinder = groupFinder;
}
- public Content accessToContent(final Long contentId, final User user, final AccessType accessType)
+ public Container accessToContainer(final Long folderId, final User user, final AccessRol accessRol)
throws DefaultException {
+ final Container folder = finder.getFolder(folderId);
+ final Access access = new Access(null, folder);
+ addFolderRights(access, user);
+ addGroupRights(access, user);
+ return check(access, access.getContainerRights(), accessRol).getContainer();
+ }
+
+ public Content accessToContent(final Long contentId, final User user, final AccessRol accessRol)
+ throws DefaultException {
final Content descriptor = finder.getContent(contentId);
final Access access = new Access(descriptor, null);
addContentRights(access, user);
- return check(access, access.getContentRights(), accessType).getContent();
+ return check(access, access.getContentRights(), accessRol).getContent();
}
- public Access getAccess(final User user, final StateToken token, final Group defaultGroup,
- final AccessType accessType) throws DefaultException {
+ public Access getAccess(final User user, final StateToken token, final Group defaultGroup, final AccessRol accessRol)
+ throws DefaultException {
checkGroupExistence(token);
final Content descriptor = finder.getContent(token, defaultGroup);
final Access access = new Access(descriptor, descriptor.getContainer());
addContentRights(access, user);
addFolderRights(access, user);
addGroupRights(access, user);
- if (!isValid(accessType, access.getContentRights()) || !isValid(accessType, access.getFolderRights())) {
+ if (!isValid(accessRol, access.getContentRights()) || !isValid(accessRol, access.getContainerRights())) {
throw new AccessViolationException();
}
return access;
}
- public Access getFolderAccess(final Group group, final Long folderId, final User user, final AccessType accessType)
- throws DefaultException {
- final Container folder = finder.getFolder(folderId);
- if (!folder.getOwner().equals(group)) {
- throw new AccessViolationException();
- }
- final Access access = new Access(null, folder);
- addFolderRights(access, user);
- addGroupRights(access, user);
- return check(access, access.getFolderRights(), accessType);
- }
-
private void addContentRights(final Access access, final User user) {
if (!access.hasContentRights()) {
access.setContentRights(accessRightsService.get(user, access.getContentAccessLists()));
@@ -90,8 +87,8 @@
}
private void addFolderRights(final Access access, final User user) {
- if (!access.hasFolderRights()) {
- access.setFolderRights(accessRightsService.get(user, access.getFolderAccessLists()));
+ if (!access.hasContainerRights()) {
+ access.setContainerRights(accessRightsService.get(user, access.getContainerAccessLists()));
}
}
@@ -101,9 +98,9 @@
}
}
- private Access check(final Access access, final AccessRights rights, final AccessType accessType)
+ private Access check(final Access access, final AccessRights rights, final AccessRol accessRol)
throws AccessViolationException {
- if (!isValid(accessType, rights)) {
+ if (!isValid(accessRol, rights)) {
throw new AccessViolationException();
}
return access;
@@ -120,13 +117,13 @@
}
}
- private boolean isValid(final AccessType accessType, final AccessRights rights) {
- switch (accessType) {
- case READ:
+ private boolean isValid(final AccessRol accessRol, final AccessRights rights) {
+ switch (accessRol) {
+ case Viewer:
return rights.isVisible();
- case EDIT:
+ case Editor:
return rights.isEditable();
- case ADMIN:
+ case Administrator:
return rights.isAdministrable();
default:
return false;
Deleted: trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessType.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessType.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessType.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -1,28 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.platf.server.access;
-
-public enum AccessType {
- READ, EDIT, ADMIN;
-}
\ No newline at end of file
Added: trunk/src/main/java/org/ourproject/kune/platf/server/auth/ActionLevel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/auth/ActionLevel.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/ActionLevel.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.server.auth;
+
+public enum ActionLevel {
+ group, tool, container, content
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/auth/Authorizated.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/auth/Authorizated.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/Authorizated.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -23,7 +23,7 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import org.ourproject.kune.platf.server.access.AccessType;
+import org.ourproject.kune.platf.server.access.AccessRol;
import com.google.inject.BindingAnnotation;
@@ -40,8 +40,13 @@
@Retention(RetentionPolicy.RUNTIME)
public @interface Authorizated {
- AccessType accessTypeRequired() default AccessType.READ;
+ AccessRol accessRolRequired() default AccessRol.Viewer;
- boolean checkContent() default false;
+ /**
+ * If the action is over a "group", "tool", "container" or over the content.
+ *
+ * @return
+ */
+ ActionLevel actionLevel() default ActionLevel.content;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptor.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptor.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -23,97 +23,108 @@
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.errors.AccessViolationException;
import org.ourproject.kune.platf.client.errors.ContentNotFoundException;
import org.ourproject.kune.platf.server.UserSession;
+import org.ourproject.kune.platf.server.access.AccessRights;
+import org.ourproject.kune.platf.server.access.AccessRightsService;
+import org.ourproject.kune.platf.server.access.AccessRol;
import org.ourproject.kune.platf.server.access.AccessService;
-import org.ourproject.kune.platf.server.access.AccessType;
+import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
import org.ourproject.kune.platf.server.domain.Group;
-import org.ourproject.kune.platf.server.domain.SocialNetwork;
import org.ourproject.kune.platf.server.domain.User;
import org.ourproject.kune.platf.server.manager.GroupManager;
import com.google.inject.Inject;
import com.google.inject.Provider;
+import com.google.inject.Singleton;
+@Singleton
public class AuthorizatedMethodInterceptor implements MethodInterceptor {
@Inject
- Provider<UserSession> userSessionProvider;
+ private Provider<UserSession> userSessionProvider;
@Inject
- Provider<GroupManager> groupManagerProvider;
+ private Provider<GroupManager> groupManagerProvider;
@Inject
- Provider<AccessService> accessServiceProvider;
+ private Provider<AccessRightsService> accessRightsServiceProvider;
+ @Inject
+ private Provider<AccessService> accessServiceProvider;
public Object invoke(final MethodInvocation invocation) throws Throwable {
- Object[] arguments = invocation.getArguments();
- String groupShortName = (String) arguments[1];
+ final Object[] arguments = invocation.getArguments();
+ final StateToken token = (StateToken) arguments[1];
- UserSession userSession = userSessionProvider.get();
- GroupManager groupManager = groupManagerProvider.get();
- AccessService accessService = accessServiceProvider.get();
+ final UserSession userSession = userSessionProvider.get();
+ final GroupManager groupManager = groupManagerProvider.get();
+ final AccessService accessService = accessServiceProvider.get();
- Authorizated authoAnnotation = invocation.getStaticPart().getAnnotation(Authorizated.class);
- AccessType accessType = authoAnnotation.accessTypeRequired();
- boolean checkContent = authoAnnotation.checkContent();
+ final Authorizated authoAnnotation = invocation.getStaticPart().getAnnotation(Authorizated.class);
+ final AccessRol accessRol = authoAnnotation.accessRolRequired();
+ final ActionLevel actionLevel = authoAnnotation.actionLevel();
- User user = userSession.getUser();
- Group group = Group.NO_GROUP;
- try {
- group = groupManager.findByShortName(groupShortName);
- } catch (NoResultException e) {
- // continue, and check later
- }
+ final User user = userSession.getUser();
+ Group group = Group.NO_GROUP;
+ try {
+ group = groupManager.findByShortName(token.getGroup());
+ } catch (final NoResultException e) {
+ // continue, and check later
+ }
- if (checkContent) {
- String contentIdS = (String) arguments[2];
- Long contentId = parseId(contentIdS);
- Content content = accessService.accessToContent(contentId, user, accessType);
- if (!content.getContainer().getOwner().equals(group)) {
- throw new AccessViolationException();
- }
- }
+ switch (actionLevel) {
+ case content:
+ default:
+ final Content content = accessService.accessToContent(parseId(token.getDocument()), user, accessRol);
+ if (!content.getContainer().getOwner().equals(group)) {
+ throw new AccessViolationException();
+ }
+ if (!content.getContainer().getId().equals(parseId(token.getFolder()))) {
+ throw new AccessViolationException();
+ }
+ if (!content.getContainer().getToolName().equals(token.getTool())) {
+ throw new AccessViolationException();
+ }
+ case container:
+ final Container container = accessService.accessToContainer(parseId(token.getFolder()), user, accessRol);
+ if (!container.getOwner().equals(group)) {
+ throw new AccessViolationException();
+ }
+ case tool:
+ case group:
+ break;
+ }
- if (!correctMember(user, group, accessType)) {
- throw new AccessViolationException();
- }
+ if (!correctMember(user, group, accessRol)) {
+ throw new AccessViolationException();
+ }
- Object result = invocation.proceed();
- return result;
+ return invocation.proceed();
}
- private boolean correctMember(final User user, final Group group, final AccessType memberType)
- throws AccessViolationException {
- boolean correctMember = false;
+ private boolean correctMember(final User user, final Group group, final AccessRol memberType)
+ throws AccessViolationException {
- if (group == Group.NO_GROUP) {
- throw new AccessViolationException();
- }
- SocialNetwork sn = group.getSocialNetwork();
- Group userGroup;
+ final AccessRights accessRights = accessRightsServiceProvider.get().get(user,
+ group.getSocialNetwork().getAccessLists());
- if (user == null) {
- userGroup = Group.NO_GROUP;
- } else {
- userGroup = user.getUserGroup();
- }
-
- if (memberType.equals(AccessType.ADMIN)) {
- correctMember = sn.isAdmin(userGroup);
- } else if (memberType.equals(AccessType.EDIT)) {
- correctMember = sn.isCollab(userGroup) || sn.isAdmin(userGroup);
- } else if (memberType.equals(AccessType.READ)) {
- correctMember = sn.isViewer(userGroup) || sn.isCollab(userGroup) || sn.isAdmin(userGroup);
- }
- return correctMember;
+ switch (memberType) {
+ case Administrator:
+ return accessRights.isAdministrable();
+ case Editor:
+ return accessRights.isEditable();
+ default:
+ return accessRights.isVisible();
+ }
}
private Long parseId(final String documentId) throws ContentNotFoundException {
- try {
- return new Long(documentId);
- } catch (final NumberFormatException e) {
- throw new ContentNotFoundException();
- }
+ try {
+ return new Long(documentId);
+ } catch (final NumberFormatException e) {
+ throw new ContentNotFoundException();
+ }
}
+
}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/server/auth/ContentAuthorizated.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/auth/ContentAuthorizated.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/ContentAuthorizated.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.platf.server.auth;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-import org.ourproject.kune.platf.server.access.AccessType;
-
-import com.google.inject.BindingAnnotation;
-
-/**
- * Use in RPC methods, for instance: <code>
- * Authorizated(authLevelRequired = AuthLevelRequired.COLLAB, checkContent = true) </code>
- *
- * The first parameter in the method must be the userHash, the second parameter
- * must be a content token
- *
- */
-@BindingAnnotation
-(a)Retention(RetentionPolicy.RUNTIME)
-public @interface ContentAuthorizated {
-
- AccessType accessTypeRequired() default AccessType.READ;
-
-}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/server/auth/ContentAuthorizatedMethodInterceptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/auth/ContentAuthorizatedMethodInterceptor.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/ContentAuthorizatedMethodInterceptor.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -1,85 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.platf.server.auth;
-
-import javax.persistence.NoResultException;
-
-import org.aopalliance.intercept.MethodInterceptor;
-import org.aopalliance.intercept.MethodInvocation;
-import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.platf.client.errors.AccessViolationException;
-import org.ourproject.kune.platf.client.errors.ContentNotFoundException;
-import org.ourproject.kune.platf.server.UserSession;
-import org.ourproject.kune.platf.server.access.AccessService;
-import org.ourproject.kune.platf.server.access.AccessType;
-import org.ourproject.kune.platf.server.domain.Content;
-import org.ourproject.kune.platf.server.domain.Group;
-import org.ourproject.kune.platf.server.domain.User;
-import org.ourproject.kune.platf.server.manager.GroupManager;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class ContentAuthorizatedMethodInterceptor implements MethodInterceptor {
-
- @Inject
- Provider<UserSession> userSessionProvider;
- @Inject
- Provider<GroupManager> groupManagerProvider;
- @Inject
- Provider<AccessService> accessServiceProvider;
-
- public Object invoke(final MethodInvocation invocation) throws Throwable {
- final Object[] arguments = invocation.getArguments();
- final String groupShortName = (String) arguments[1];
-
- final UserSession userSession = userSessionProvider.get();
- final GroupManager groupManager = groupManagerProvider.get();
- final AccessService accessService = accessServiceProvider.get();
-
- final ContentAuthorizated authoAnnotation = invocation.getStaticPart().getAnnotation(ContentAuthorizated.class);
- final AccessType accessType = authoAnnotation.accessTypeRequired();
-
- final User user = userSession.getUser();
- Group group = Group.NO_GROUP;
- try {
- group = groupManager.findByShortName(groupShortName);
- } catch (final NoResultException e) {
- // continue, and check later
- }
- final StateToken contentToken = (StateToken) arguments[2];
- final Long contentId = parseId(contentToken.getDocument());
-
- final Content content = accessService.accessToContent(contentId, user, accessType);
- if (!content.getContainer().getOwner().equals(group)) {
- throw new AccessViolationException();
- }
- final Object result = invocation.proceed();
- return result;
- }
-
- private Long parseId(final String documentId) throws ContentNotFoundException {
- try {
- return new Long(documentId);
- } catch (final NumberFormatException e) {
- throw new ContentNotFoundException();
- }
- }
-}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizated.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizated.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizated.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -1,24 +0,0 @@
-package org.ourproject.kune.platf.server.auth;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-import org.ourproject.kune.platf.server.access.AccessType;
-
-import com.google.inject.BindingAnnotation;
-
-/**
- * Use in RPC methods, for instance: <code>
- * GroupAuthorizated(authLevelRequired = AuthLevelRequired.COLLAB) </code>
- *
- * The first parameter in the method must be the userHash, the second the group
- * shortName
- *
- */
-@BindingAnnotation
-(a)Retention(RetentionPolicy.RUNTIME)
-public @interface GroupAuthorizated {
-
- AccessType accessTypeRequired() default AccessType.READ;
-
-}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizatedMethodInterceptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizatedMethodInterceptor.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/GroupAuthorizatedMethodInterceptor.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -1,89 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 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 org.ourproject.kune.platf.server.auth;
-
-import javax.persistence.NoResultException;
-
-import org.aopalliance.intercept.MethodInterceptor;
-import org.aopalliance.intercept.MethodInvocation;
-import org.ourproject.kune.platf.client.errors.AccessViolationException;
-import org.ourproject.kune.platf.server.UserSession;
-import org.ourproject.kune.platf.server.access.AccessRights;
-import org.ourproject.kune.platf.server.access.AccessRightsService;
-import org.ourproject.kune.platf.server.access.AccessType;
-import org.ourproject.kune.platf.server.domain.Group;
-import org.ourproject.kune.platf.server.domain.User;
-import org.ourproject.kune.platf.server.manager.GroupManager;
-
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-public class GroupAuthorizatedMethodInterceptor implements MethodInterceptor {
-
- @Inject
- Provider<UserSession> userSessionProvider;
- @Inject
- Provider<GroupManager> groupManagerProvider;
- @Inject
- Provider<AccessRightsService> accessRightsServiceProvider;
-
- public Object invoke(final MethodInvocation invocation) throws Throwable {
- final Object[] arguments = invocation.getArguments();
- final String groupShortName = (String) arguments[1];
-
- final UserSession userSession = userSessionProvider.get();
- final GroupManager groupManager = groupManagerProvider.get();
-
- final GroupAuthorizated authoAnnotation = invocation.getStaticPart().getAnnotation(GroupAuthorizated.class);
- final AccessType accessType = authoAnnotation.accessTypeRequired();
-
- final User user = userSession.getUser();
-
- Group group = Group.NO_GROUP;
- try {
- group = groupManager.findByShortName(groupShortName);
- } catch (final NoResultException e) {
- throw new AccessViolationException();
- }
-
- if (!correctMember(user, group, accessType)) {
- throw new AccessViolationException();
- }
-
- final Object result = invocation.proceed();
- return result;
- }
-
- private boolean correctMember(final User user, final Group group, final AccessType memberType)
- throws AccessViolationException {
- final AccessRightsService accessRightsService = accessRightsServiceProvider.get();
- final AccessRights accessRights = accessRightsService.get(user, group.getSocialNetwork().getAccessLists());
-
- switch (memberType) {
- case ADMIN:
- return accessRights.isAdministrable();
- case EDIT:
- return accessRights.isEditable();
- default:
- return accessRights.isVisible();
- }
- }
-
-}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/GroupManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/GroupManager.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/GroupManager.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -26,26 +26,27 @@
import org.ourproject.kune.platf.client.errors.EmailAddressInUseException;
import org.ourproject.kune.platf.client.errors.GroupNameInUseException;
import org.ourproject.kune.platf.client.errors.UserMustBeLoggedException;
+import org.ourproject.kune.platf.server.domain.Content;
import org.ourproject.kune.platf.server.domain.Group;
import org.ourproject.kune.platf.server.domain.User;
import org.ourproject.kune.platf.server.manager.impl.SearchResult;
public interface GroupManager extends Manager<Group, Long> {
- Group findByShortName(String groupName);
+ void changeWsTheme(User user, Group group, String theme) throws AccessViolationException;
+ Group createGroup(Group group, User user) throws GroupNameInUseException, UserMustBeLoggedException;
+
+ Group createUserGroup(User user) throws GroupNameInUseException, EmailAddressInUseException;
+
List<Group> findAdminInGroups(Long groupId);
+ Group findByShortName(String groupName);
+
List<Group> findCollabInGroups(Long groupId);
- Group createGroup(Group group, User user) throws GroupNameInUseException, UserMustBeLoggedException;
-
- Group createUserGroup(User user) throws GroupNameInUseException, EmailAddressInUseException;
-
Group getDefaultGroup();
- void changeWsTheme(User user, Group group, String theme) throws AccessViolationException;
-
/**
* IMPORTANT: returns null if userId is null
*
@@ -54,10 +55,12 @@
*/
Group getGroupOfUserWithId(Long userId);
+ void reIndex();
+
SearchResult<Group> search(String search);
SearchResult<Group> search(String search, Integer firstResult, Integer maxResults);
- void reIndex();
+ void setDefaultContent(String groupShortName, Content content);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/GroupManagerDefault.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -37,6 +37,7 @@
import org.ourproject.kune.platf.client.errors.UserMustBeLoggedException;
import org.ourproject.kune.platf.server.domain.AccessLists;
import org.ourproject.kune.platf.server.domain.AdmissionType;
+import org.ourproject.kune.platf.server.domain.Content;
import org.ourproject.kune.platf.server.domain.Group;
import org.ourproject.kune.platf.server.domain.GroupListMode;
import org.ourproject.kune.platf.server.domain.License;
@@ -170,6 +171,11 @@
return super.search(query, firstResult, maxResults);
}
+ public void setDefaultContent(final String groupShortName, final Content content) {
+ final Group group = findByShortName(groupShortName);
+ group.setDefaultContent(content);
+ }
+
private void initGroup(final User user, final Group group) throws GroupNameInUseException {
try {
persist(group);
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -44,8 +44,9 @@
import org.ourproject.kune.platf.server.UserSession;
import org.ourproject.kune.platf.server.access.Access;
import org.ourproject.kune.platf.server.access.AccessRightsService;
+import org.ourproject.kune.platf.server.access.AccessRol;
import org.ourproject.kune.platf.server.access.AccessService;
-import org.ourproject.kune.platf.server.access.AccessType;
+import org.ourproject.kune.platf.server.auth.ActionLevel;
import org.ourproject.kune.platf.server.auth.Authenticated;
import org.ourproject.kune.platf.server.auth.Authorizated;
import org.ourproject.kune.platf.server.content.CommentManager;
@@ -109,75 +110,78 @@
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT, checkContent = true)
+ @Authorizated(accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public void addAuthor(final String userHash, final String groupShortName, final String documentId,
- final String authorShortName) throws DefaultException {
- final Long contentId = parseId(documentId);
+ public void addAuthor(final String userHash, final StateToken token, final String authorShortName)
+ throws DefaultException {
+ final Long contentId = parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
contentManager.addAuthor(user, contentId, authorShortName);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.READ)
+ @Authorizated(accessRolRequired = AccessRol.Viewer)
@Transactional(type = TransactionType.READ_WRITE)
- public CommentDTO addComment(final String userHash, final String groupShortName, final String documentId,
- final Long parentCommentId, final String commentText) throws DefaultException {
+ public CommentDTO addComment(final String userHash, final StateToken token, final Long parentCommentId,
+ final String commentText) throws DefaultException {
final UserSession userSession = getUserSession();
final User author = userSession.getUser();
- final Long contentId = parseId(documentId);
+ final Long contentId = parseId(token.getDocument());
final Comment comment = commentManager.addComment(author, contentId, commentText, parentCommentId);
return mapper.map(comment, CommentDTO.class);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.READ)
+ @Authorizated(accessRolRequired = AccessRol.Viewer)
@Transactional(type = TransactionType.READ_WRITE)
- public CommentDTO addComment(final String userHash, final String groupShortName, final String documentId,
- final String commentText) throws DefaultException {
+ public CommentDTO addComment(final String userHash, final StateToken token, final String commentText)
+ throws DefaultException {
final UserSession userSession = getUserSession();
final User author = userSession.getUser();
- final Long contentId = parseId(documentId);
+ final Long contentId = parseId(token.getDocument());
final Comment comment = commentManager.addComment(author, contentId, commentText);
return mapper.map(comment, CommentDTO.class);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT)
+ @Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public StateDTO addContent(final String userHash, final String groupShortName, final Long parentFolderId,
- final String title) throws DefaultException {
- final Group group = groupManager.findByShortName(groupShortName);
+ public StateDTO addContent(final String userHash, final StateToken parentToken, final String title)
+ throws DefaultException {
+ final Group group = groupManager.findByShortName(parentToken.getGroup());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
final boolean userIsLoggedIn = userSession.isUserLoggedIn();
- final Access access = accessService.getFolderAccess(group, parentFolderId, user, AccessType.EDIT);
- access.setContentWidthFolderRights(creationService.createContent(title, "", user, access.getFolder()));
+ final Container container = accessService.accessToContainer(parseId(parentToken.getFolder()), user,
+ AccessRol.Editor);
+ final Content addedContent = creationService.createContent(title, "", user, container);
+ final Access access = accessService.getAccess(user, addedContent.getStateToken(), group, AccessRol.Editor);
final State state = stateService.create(access);
completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT)
+ @Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public StateDTO addFolder(final String userHash, final String groupShortName, final Long parentFolderId,
- final String title, final String contentTypeId) throws DefaultException {
- final Group group = groupManager.findByShortName(groupShortName);
+ public StateDTO addFolder(final String userHash, final StateToken parentToken, final String title,
+ final String contentTypeId) throws DefaultException {
+ final Group group = groupManager.findByShortName(parentToken.getGroup());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
final boolean userIsLoggedIn = userSession.isUserLoggedIn();
- final State state = createFolder(groupShortName, parentFolderId, title, contentTypeId);
+ final State state = createFolder(parentToken.getGroup(), parseId(parentToken.getFolder()), title, contentTypeId);
completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT)
+ @Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public StateDTO addRoom(final String userHash, final String groupShortName, final Long parentFolderId,
- final String roomName) throws DefaultException {
+ public StateDTO addRoom(final String userHash, final StateToken parentToken, final String roomName)
+ throws DefaultException {
+ final String groupShortName = parentToken.getGroup();
final Group group = groupManager.findByShortName(groupShortName);
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
@@ -188,7 +192,8 @@
xmppManager.createRoom(connection, roomName, userShortName + userHash);
xmppManager.disconnect(connection);
try {
- final State state = createFolder(groupShortName, parentFolderId, roomName, ChatServerTool.TYPE_ROOM);
+ final State state = createFolder(groupShortName, parseId(parentToken.getFolder()), roomName,
+ ChatServerTool.TYPE_ROOM);
completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
} catch (final ContentNotFoundException e) {
@@ -204,11 +209,10 @@
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.ADMIN, checkContent = true)
+ @Authorizated(accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public void delContent(final String userHash, final String groupShortName, final String documentId)
- throws DefaultException {
- final Long contentId = parseId(documentId);
+ public void delContent(final String userHash, final StateToken token) throws DefaultException {
+ final Long contentId = parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
contentManager.delContent(user, contentId);
@@ -219,8 +223,7 @@
// contents for instance)
@Authenticated(mandatory = false)
@Transactional(type = TransactionType.READ_ONLY)
- public StateDTO getContent(final String userHash, final String groupShortName, final StateToken token)
- throws DefaultException {
+ public StateDTO getContent(final String userHash, final StateToken token) throws DefaultException {
Group defaultGroup;
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
@@ -232,7 +235,7 @@
}
Access access;
try {
- access = accessService.getAccess(user, token, defaultGroup, AccessType.READ);
+ access = accessService.getAccess(user, token, defaultGroup, AccessRol.Viewer);
} catch (final NoResultException e) {
throw new ContentNotFoundException();
} catch (final ToolNotFoundException e) {
@@ -245,33 +248,32 @@
}
@Authenticated(mandatory = false)
- @Authorizated(accessTypeRequired = AccessType.READ)
+ @Authorizated(accessRolRequired = AccessRol.Viewer)
@Transactional(type = TransactionType.READ_ONLY)
- public List<TagResultDTO> getSummaryTags(final String userHash, final String groupShortName) {
- final Group group = groupManager.findByShortName(groupShortName);
+ public List<TagResultDTO> getSummaryTags(final String userHash, final StateToken groupToken) {
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
return getSummaryTags(group);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.READ)
+ @Authorizated(accessRolRequired = AccessRol.Viewer)
@Transactional(type = TransactionType.READ_WRITE)
- public CommentDTO markCommentAsAbuse(final String userHash, final String groupShortName, final String documentId,
- final Long commentId) throws DefaultException {
+ public CommentDTO markCommentAsAbuse(final String userHash, final StateToken token, final Long commentId)
+ throws DefaultException {
final UserSession userSession = getUserSession();
final User informer = userSession.getUser();
- final Long contentId = parseId(documentId);
+ final Long contentId = parseId(token.getDocument());
final Comment comment = commentManager.markAsAbuse(informer, contentId, commentId);
return mapper.map(comment, CommentDTO.class);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.READ, checkContent = true)
+ @Authorizated(accessRolRequired = AccessRol.Viewer)
@Transactional(type = TransactionType.READ_WRITE)
- public void rateContent(final String userHash, final String groupShortName, final String documentId,
- final Double value) throws DefaultException {
+ public void rateContent(final String userHash, final StateToken token, final Double value) throws DefaultException {
final UserSession userSession = getUserSession();
final User rater = userSession.getUser();
- final Long contentId = parseId(documentId);
+ final Long contentId = parseId(token.getDocument());
if (userSession.isUserLoggedIn()) {
contentManager.rateContent(rater, contentId, value);
@@ -281,100 +283,105 @@
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT, checkContent = true)
+ @Authorizated(accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public void removeAuthor(final String userHash, final String groupShortName, final String documentId,
- final String authorShortName) throws DefaultException {
- final Long contentId = parseId(documentId);
+ public void removeAuthor(final String userHash, final StateToken token, final String authorShortName)
+ throws DefaultException {
+ final Long contentId = parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
contentManager.removeAuthor(user, contentId, authorShortName);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT)
+ @Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public String rename(final String userHash, final String groupShortName, final String token, final String newName)
+ public String renameContainer(final String userHash, final StateToken token, final String newName)
throws DefaultException {
- String result;
+ return renameFolder(token.getGroup(), parseId(token.getFolder()), newName);
+ }
+
+ @Authenticated
+ @Authorizated(accessRolRequired = AccessRol.Editor)
+ @Transactional(type = TransactionType.READ_WRITE)
+ public String renameContent(final String userHash, final StateToken token, final String newName)
+ throws DefaultException {
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- final StateToken stateToken = new StateToken(token);
- final Group group = groupManager.findByShortName(groupShortName);
- if (stateToken.isComplete()) {
- try {
- final Content content = accessService.accessToContent(parseId(stateToken.getDocument()), user,
- AccessType.EDIT);
- if (!content.getContainer().getOwner().equals(group)) {
- throw new AccessViolationException();
- }
- } catch (final NoResultException e) {
- throw new AccessViolationException();
- }
- result = renameContent(stateToken.getDocument(), newName);
- } else {
- result = renameFolder(groupShortName, parseId(stateToken.getFolder()), newName);
+ try {
+ accessService.accessToContent(parseId(token.getDocument()), user, AccessRol.Editor);
+ } catch (final NoResultException e) {
+ throw new AccessViolationException();
}
- return result;
+ return renameContent(token.getDocument(), newName);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT, checkContent = true)
+ @Authorizated(accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public Integer save(final String userHash, final String groupShortName, final String documentId,
- final String textContent) throws DefaultException {
+ public Integer save(final String userHash, final StateToken token, final String textContent)
+ throws DefaultException {
- final Long contentId = parseId(documentId);
+ final Long contentId = parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- final Content content = accessService.accessToContent(contentId, user, AccessType.EDIT);
+ final Content content = accessService.accessToContent(contentId, user, AccessRol.Editor);
final Content descriptor = creationService.saveContent(user, content, textContent);
return descriptor.getVersion();
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT, checkContent = true)
+ @Authorizated(accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public I18nLanguageDTO setLanguage(final String userHash, final String groupShortName, final String documentId,
- final String languageCode) throws DefaultException {
- final Long contentId = parseId(documentId);
+ public ContentDTO setAsDefaultContent(final String userHash, final StateToken token) {
+ final Content content = contentManager.find(parseId(token.getDocument()));
+ groupManager.setDefaultContent(token.getGroup(), content);
+ return mapper.map(content, ContentDTO.class);
+ }
+
+ @Authenticated
+ @Authorizated(accessRolRequired = AccessRol.Editor)
+ @Transactional(type = TransactionType.READ_WRITE)
+ public I18nLanguageDTO setLanguage(final String userHash, final StateToken token, final String languageCode)
+ throws DefaultException {
+ final Long contentId = parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
return mapper.map(contentManager.setLanguage(user, contentId, languageCode), I18nLanguageDTO.class);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT, checkContent = true)
+ @Authorizated(accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public void setPublishedOn(final String userHash, final String groupShortName, final String documentId,
- final Date publishedOn) throws DefaultException {
- final Long contentId = parseId(documentId);
+ public void setPublishedOn(final String userHash, final StateToken token, final Date publishedOn)
+ throws DefaultException {
+ final Long contentId = parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
contentManager.setPublishedOn(user, contentId, publishedOn);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.EDIT, checkContent = true)
+ @Authorizated(accessRolRequired = AccessRol.Editor)
@Transactional(type = TransactionType.READ_WRITE)
- public List<TagResultDTO> setTags(final String userHash, final String groupShortName, final String documentId,
- final String tags) throws DefaultException {
- final Long contentId = parseId(documentId);
+ public List<TagResultDTO> setTags(final String userHash, final StateToken token, final String tags)
+ throws DefaultException {
+ final Long contentId = parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(token.getGroup());
contentManager.setTags(user, contentId, tags);
return getSummaryTags(group);
}
@Authenticated
- @Authorizated(accessTypeRequired = AccessType.READ)
+ @Authorizated(accessRolRequired = AccessRol.Viewer)
@Transactional(type = TransactionType.READ_WRITE)
- public CommentDTO voteComment(final String userHash, final String groupShortName, final String documentId,
- final Long commentId, final boolean votePositive) throws DefaultException {
+ public CommentDTO voteComment(final String userHash, final StateToken token, final Long commentId,
+ final boolean votePositive) throws DefaultException {
final UserSession userSession = getUserSession();
final User voter = userSession.getUser();
- final Long contentId = parseId(documentId);
+ final Long contentId = parseId(token.getDocument());
final Comment comment = commentManager.vote(voter, contentId, commentId, votePositive);
return mapper.map(comment, CommentDTO.class);
}
@@ -401,11 +408,11 @@
final User user = userSession.getUser();
final Group group = groupManager.findByShortName(groupShortName);
- Access access = accessService.getFolderAccess(group, parentFolderId, user, AccessType.EDIT);
+ accessService.accessToContainer(parentFolderId, user, AccessRol.Editor);
final Container container = creationService.createFolder(group, parentFolderId, title, user.getLanguage(),
typeId);
- access = accessService.getAccess(user, container.getStateToken(), group, AccessType.EDIT);
+ final Access access = accessService.getAccess(user, container.getStateToken(), group, AccessRol.Editor);
final State state = stateService.create(access);
return state;
}
@@ -436,9 +443,9 @@
return stateDTO;
}
- private Long parseId(final String documentId) throws ContentNotFoundException {
+ private Long parseId(final String id) throws ContentNotFoundException {
try {
- return new Long(documentId);
+ return new Long(id);
} catch (final NumberFormatException e) {
throw new ContentNotFoundException();
}
@@ -457,7 +464,8 @@
final Group group = groupManager.findByShortName(groupShortName);
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- final Access folderAccess = accessService.getFolderAccess(group, folderId, user, AccessType.EDIT);
- return containerManager.renameFolder(group, folderAccess.getFolder(), newName);
+ final Container container = accessService.accessToContainer(folderId, user, AccessRol.Editor);
+ return containerManager.renameFolder(group, container, newName);
}
+
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/GroupRPC.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -27,9 +27,10 @@
import org.ourproject.kune.platf.client.errors.DefaultException;
import org.ourproject.kune.platf.client.rpc.GroupService;
import org.ourproject.kune.platf.server.UserSession;
-import org.ourproject.kune.platf.server.access.AccessType;
+import org.ourproject.kune.platf.server.access.AccessRol;
+import org.ourproject.kune.platf.server.auth.ActionLevel;
import org.ourproject.kune.platf.server.auth.Authenticated;
-import org.ourproject.kune.platf.server.auth.GroupAuthorizated;
+import org.ourproject.kune.platf.server.auth.Authorizated;
import org.ourproject.kune.platf.server.content.ContentManager;
import org.ourproject.kune.platf.server.domain.Group;
import org.ourproject.kune.platf.server.domain.User;
@@ -60,13 +61,13 @@
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE, rollbackOn = DefaultException.class)
- public void changeGroupWsTheme(final String userHash, final String groupShortName, final String theme)
+ public void changeGroupWsTheme(final String userHash, final StateToken groupToken, final String theme)
throws DefaultException {
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
groupManager.changeWsTheme(user, group, theme);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/SocialNetworkRPC.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -23,12 +23,14 @@
import org.ourproject.kune.platf.client.dto.SocialNetworkDTO;
import org.ourproject.kune.platf.client.dto.SocialNetworkRequestResult;
import org.ourproject.kune.platf.client.dto.SocialNetworkResultDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.errors.DefaultException;
import org.ourproject.kune.platf.client.rpc.SocialNetworkService;
import org.ourproject.kune.platf.server.UserSession;
-import org.ourproject.kune.platf.server.access.AccessType;
+import org.ourproject.kune.platf.server.access.AccessRol;
+import org.ourproject.kune.platf.server.auth.ActionLevel;
import org.ourproject.kune.platf.server.auth.Authenticated;
-import org.ourproject.kune.platf.server.auth.GroupAuthorizated;
+import org.ourproject.kune.platf.server.auth.Authorizated;
import org.ourproject.kune.platf.server.domain.Group;
import org.ourproject.kune.platf.server.domain.User;
import org.ourproject.kune.platf.server.manager.GroupManager;
@@ -59,78 +61,78 @@
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO AcceptJoinGroup(final String hash, final String groupShortName,
+ public SocialNetworkResultDTO AcceptJoinGroup(final String hash, final StateToken groupToken,
final String groupToAcceptShortName) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
final Group groupToAccept = groupManager.findByShortName(groupToAcceptShortName);
socialNetworkManager.acceptJoinGroup(userLogged, groupToAccept, group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO addAdminMember(final String hash, final String groupShortName,
+ public SocialNetworkResultDTO addAdminMember(final String hash, final StateToken groupToken,
final String groupToAddShortName) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
final Group groupToAdd = groupManager.findByShortName(groupToAddShortName);
socialNetworkManager.addGroupToAdmins(userLogged, groupToAdd, group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO addCollabMember(final String hash, final String groupShortName,
+ public SocialNetworkResultDTO addCollabMember(final String hash, final StateToken groupToken,
final String groupToAddShortName) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
final Group groupToAdd = groupManager.findByShortName(groupToAddShortName);
socialNetworkManager.addGroupToCollabs(userLogged, groupToAdd, group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO addViewerMember(final String hash, final String groupShortName,
+ public SocialNetworkResultDTO addViewerMember(final String hash, final StateToken groupToken,
final String groupToAddShortName) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
final Group groupToAdd = groupManager.findByShortName(groupToAddShortName);
socialNetworkManager.addGroupToViewers(userLogged, groupToAdd, group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO deleteMember(final String hash, final String groupShortName,
+ public SocialNetworkResultDTO deleteMember(final String hash, final StateToken groupToken,
final String groupToDeleleShortName) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
final Group groupToDelete = groupManager.findByShortName(groupToDeleleShortName);
socialNetworkManager.deleteMember(userLogged, groupToDelete, group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO denyJoinGroup(final String hash, final String groupShortName,
+ public SocialNetworkResultDTO denyJoinGroup(final String hash, final StateToken groupToken,
final String groupToDenyShortName) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
final Group groupToDenyJoin = groupManager.findByShortName(groupToDenyShortName);
socialNetworkManager.denyJoinGroup(userLogged, groupToDenyJoin, group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
@@ -138,58 +140,58 @@
@Authenticated(mandatory = false)
// At least you can access as Viewer to the Group
- @GroupAuthorizated(accessTypeRequired = AccessType.READ)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Viewer)
@Transactional(type = TransactionType.READ_ONLY)
- public SocialNetworkDTO getGroupMembers(final String hash, final String groupShortName) throws DefaultException {
+ public SocialNetworkDTO getGroupMembers(final String hash, final StateToken groupToken) throws DefaultException {
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
return getGroupMembers(user, group);
}
@Authenticated(mandatory = false)
// At least you can access as Viewer to the Group
- @GroupAuthorizated(accessTypeRequired = AccessType.READ)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Viewer)
@Transactional(type = TransactionType.READ_ONLY)
- public ParticipationDataDTO getParticipation(final String hash, final String groupShortName)
+ public ParticipationDataDTO getParticipation(final String hash, final StateToken groupToken)
throws DefaultException {
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
return getParticipation(user, group);
}
@Authenticated
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkRequestResult requestJoinGroup(final String hash, final String groupShortName)
+ public SocialNetworkRequestResult requestJoinGroup(final String hash, final StateToken groupToken)
throws DefaultException {
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
return socialNetworkManager.requestToJoin(user, group);
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO setAdminAsCollab(final String hash, final String groupShortName,
+ public SocialNetworkResultDTO setAdminAsCollab(final String hash, final StateToken groupToken,
final String groupToSetCollabShortName) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
final Group groupToSetCollab = groupManager.findByShortName(groupToSetCollabShortName);
socialNetworkManager.setAdminAsCollab(userLogged, groupToSetCollab, group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
}
@Authenticated
- @GroupAuthorizated(accessTypeRequired = AccessType.ADMIN)
+ @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO setCollabAsAdmin(final String hash, final String groupShortName,
+ public SocialNetworkResultDTO setCollabAsAdmin(final String hash, final StateToken groupToken,
final String groupToSetAdminShortName) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
final Group groupToSetAdmin = groupManager.findByShortName(groupToSetAdminShortName);
socialNetworkManager.setCollabAsAdmin(userLogged, groupToSetAdmin, group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
@@ -197,10 +199,10 @@
@Authenticated
@Transactional(type = TransactionType.READ_WRITE)
- public SocialNetworkResultDTO unJoinGroup(final String hash, final String groupShortName) throws DefaultException {
+ public SocialNetworkResultDTO unJoinGroup(final String hash, final StateToken groupToken) throws DefaultException {
final UserSession userSession = getUserSession();
final User userLogged = userSession.getUser();
- final Group group = groupManager.findByShortName(groupShortName);
+ final Group group = groupManager.findByShortName(groupToken.getGroup());
socialNetworkManager.unJoinGroup(userLogged.getUserGroup(), group);
return new SocialNetworkResultDTO(getGroupMembers(userLogged, group), getParticipation(userLogged, group));
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -33,7 +33,7 @@
public State create(final Access access) {
final Content content = access.getContent();
- final Container container = content.getContainer();
+ final Container container = access.getContainer();
final State state = new State();
final Long documentId = content.getId();
@@ -72,7 +72,7 @@
state.setContainer(container);
state.setAccessLists(access.getContentAccessLists());
state.setContentRights(access.getContentRights());
- state.setContainerRights(access.getFolderRights());
+ state.setContainerRights(access.getContainerRights());
state.setGroupRights(access.getGroupRights());
License contentLicense = content.getLicense();
if (contentLicense == null) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -33,6 +33,8 @@
View getView();
+ boolean isSelected(StateToken stateToken);
+
void registerContentTypeIcon(String contentTypeId, String iconUrl);
void registerDraggableType(String typeId);
@@ -43,6 +45,8 @@
void selectItem(StateToken stateToken);
+ void setEditOnNextStateChange(boolean edit);
+
void setItemText(StateToken stateToken, String name);
void setState(StateDTO state);
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -20,36 +20,26 @@
package org.ourproject.kune.workspace.client.ctxnav;
-import java.util.ArrayList;
import java.util.HashMap;
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionPosition;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
-import org.ourproject.kune.workspace.client.skel.Toolbar;
+import org.ourproject.kune.workspace.client.site.Site;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
-import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.ScrollPanel;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.Node;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.ToolbarButton;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.data.Tree;
import com.gwtext.client.widgets.form.TextField;
-import com.gwtext.client.widgets.layout.FitLayout;
import com.gwtext.client.widgets.menu.BaseItem;
import com.gwtext.client.widgets.menu.Item;
import com.gwtext.client.widgets.menu.Menu;
-import com.gwtext.client.widgets.menu.MenuItem;
import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
import com.gwtext.client.widgets.tree.TreeEditor;
import com.gwtext.client.widgets.tree.TreeNode;
@@ -62,11 +52,9 @@
private TreePanel treePanel;
private TreeEditor treeEditor;
private final HashMap<String, Menu> contextMenus;
- private final HashMap<String, Menu> toolbarMenus;
private final WorkspaceSkeleton ws;
+ private boolean fireOnTextChange;
private final ContextNavigatorPresenter presenter;
- private final ArrayList<Widget> removableToolbarItems;
- private final HashMap<String, Item> menuItems;
public ContextNavigatorPanel(final ContextNavigatorPresenter presenter, final I18nTranslationService i18n,
final WorkspaceSkeleton ws) {
@@ -74,38 +62,9 @@
this.ws = ws;
contextMenus = new HashMap<String, Menu>();
- toolbarMenus = new HashMap<String, Menu>();
- removableToolbarItems = new ArrayList<Widget>();
- menuItems = new HashMap<String, Item>();
+ fireOnTextChange = true;
}
- public void addButtonAction(final ActionButtonDescriptor<StateToken> action) {
- final ActionPosition pos = action.getActionPosition();
- final ToolbarButton button = new ToolbarButton();
- final String text = action.getText();
- if (text != null) {
- button.setText(text);
- }
- button.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- doAction(action, presenter.getCurrentStateToken());
- }
- });
- button.setIcon(action.getIconUrl());
- button.setTooltip(action.getToolTip());
-
- final Toolbar toolbar = getToolbar(pos);
- if (action.hasLeftSeparator()) {
- removableToolbarItems.add(add(toolbar, action.getLeftSeparator()));
- }
- toolbar.add(button);
- if (action.hasRightSeparator()) {
- removableToolbarItems.add(add(toolbar, action.getRightSeparator()));
- }
- removableToolbarItems.add(button);
- }
-
public void addItem(final ContextNavigatorItem item) {
final String nodeId = item.getId();
if (treePanel.getNodeById(nodeId) == null) {
@@ -138,7 +97,9 @@
child.addListener(new TreeNodeListenerAdapter() {
@Override
public void onTextChange(final Node node, final String text, final String oldText) {
- presenter.onItemRename(getToken(node), text, oldText);
+ if (fireOnTextChange) {
+ presenter.onItemRename(getToken(node), text, oldText);
+ }
}
});
if (!item.getStateToken().hasAll()) {
@@ -164,57 +125,26 @@
}
- public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) {
- final String menuTitle = action.getParentMenuTitle();
- final String menuSubTitle = action.getParentSubMenuTitle();
- final ActionPosition pos = action.getActionPosition();
- final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
- Item item = menuItems.get(itemKey);
- if (item == null) {
- item = createToolbarMenu(pos, menuTitle, menuSubTitle, action);
- menuItems.put(itemKey, item);
- } else {
- }
- if (enable) { // && action.getEnableCondition().mustBeEnabled(param))
- // ) {
- item.enable();
- } else {
- item.disable();
- }
- doLayoutIfNeeded(pos);
- }
-
public void clear() {
if (treePanel != null) {
treePanel.clear();
+ treePanel = null;
}
- ws.getEntityWorkspace().getContextTopBar().removeAll();
- ws.getEntityWorkspace().getContextBottomBar().removeAll();
contextMenus.clear();
- toolbarMenus.clear();
- menuItems.clear();
- removableToolbarItems.clear();
}
- public void clearRemovableActions() {
- for (final Widget widget : removableToolbarItems) {
- widget.removeFromParent();
- }
- removableToolbarItems.clear();
- doLayoutIfNeeded();
+ public void editItem(final String id) {
+ treeEditor.startEdit(getNode(id));
}
- public void disableAllMenuItems() {
- for (final Item item : menuItems.values()) {
- item.disable();
+ public boolean isSelected(final String id) {
+ final TreeNode item = getNode(id);
+ if (item != null) {
+ return item.isSelected();
}
- doLayoutIfNeeded();
+ return false;
}
- public void editItem(final String id) {
- treeEditor.startEdit(getNode(id));
- }
-
public void selectItem(final String id) {
final TreeNode item = getNode(id);
if (item != null) {
@@ -230,6 +160,10 @@
}
}
+ public void setFireOnTextChange(final boolean fireOnTextChange) {
+ this.fireOnTextChange = fireOnTextChange;
+ }
+
public void setItemText(final String genId, final String text) {
final TreeNode node = getNode(genId);
node.setText(text);
@@ -242,22 +176,6 @@
}
}
- private void add(final ActionPosition toolbar, final Widget widget) {
- getToolbar(toolbar).add(widget);
- }
-
- private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) {
- switch (separator) {
- case fill:
- return toolbar.addFill();
- case separator:
- return toolbar.addSeparator();
- case spacer:
- default:
- return toolbar.addSpacer();
- }
- }
-
private void createItemMenu(final String nodeId, final ActionCollection<StateToken> actionCollection,
final StateToken stateToken) {
DeferredCommand.addCommand(new Command() {
@@ -286,61 +204,6 @@
});
}
- private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
- final ActionMenuDescriptor<StateToken> action) {
- final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
- @Override
- public void onClick(BaseItem item, EventObject e) {
- doAction(action, presenter.getCurrentStateToken());
- }
- });
- item.setIcon(action.getIconUrl());
-
- final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null);
- final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null);
- Menu menu = toolbarMenus.get(menuKey);
- Menu subMenu = toolbarMenus.get(subMenuKey);
- if (menuSubTitle != null) {
- if (subMenu == null) {
- subMenu = new Menu();
- final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
- if (menu == null) {
- menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
- }
- menu.addItem(subMenuItem);
- toolbarMenus.put(subMenuKey, subMenu);
- }
- subMenu.addItem(item);
-
- } else {
- // Menu action without submenu
- if (menu == null) {
- menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
- }
- menu.addItem(item);
- }
- doLayoutIfNeeded(toolBarPos);
- return item;
- }
-
- private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle,
- final String menuKey) {
- final Menu menu = new Menu();
- final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
- if (iconUrl != null) {
- toolbarMenu.setIcon(iconUrl);
- }
- toolbarMenu.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- menu.showAt(e.getXY());
- }
- });
- toolbarMenus.put(menuKey, menu);
- add(barPosition, toolbarMenu);
- return menu;
- }
-
private void createTreePanel(final String rootId, final String text, final StateToken stateToken,
final ActionCollection<StateToken> actions) {
if (treePanel != null) {
@@ -351,6 +214,7 @@
treePanel.setBorder(false);
treePanel.setRootVisible(true);
treePanel.setUseArrows(true);
+ // treePanel.setSelectionModel(new MultiSelectionModel());
final TreeNode root = new TreeNode();
root.setAllowDrag(false);
root.setExpanded(true);
@@ -362,48 +226,48 @@
treePanel.addListener(new TreePanelListenerAdapter() {
public void onContextMenu(final TreeNode node, final EventObject e) {
final Menu menu = contextMenus.get(node.getId());
- if (menu != null && menu.getItems().length != 0) {
+ if (menu != null && menu.getItems().length > 0) {
menu.showAt(e.getXY());
} else {
Log.info("Empty item menu");
}
}
+
+ @Override
+ public void onMoveNode(final Tree treePanel, final TreeNode node, final TreeNode oldParent,
+ final TreeNode newParent, final int index) {
+ newParent.removeChild(node);
+ oldParent.appendChild(node);
+ Site.info("Drag & drop of contents in development");
+ }
});
treePanel.setLines(false);
treePanel.setEnableDD(true);
treePanel.setRootNode(root);
+ // treePanel.setAutoScroll(true);
+ treePanel.setContainerScroll(true);
+ treePanel.setAutoWidth(true);
+
final TextField field = new TextField();
treeEditor = new TreeEditor(treePanel, field);
- final Panel panel = new Panel();
- panel.setLayout(new FitLayout());
- panel.setBorder(false);
- panel.setAutoScroll(true);
+
+ final ScrollPanel panel = new ScrollPanel();
+ // final Panel panel = new Panel();
+ // panel.setLayout(new FitLayout());
+ // panel.setBorder(false);
+ // panel.setAutoScroll(true);
+ // new ScrollPanel
+ panel.setWidth("100%");
+ panel.setHeight("100%");
panel.add(treePanel);
- ws.getEntityWorkspace().setContext(treePanel);
+ ws.getEntityWorkspace().setContext(panel);
}
private void doAction(final ActionDescriptor<StateToken> action, final StateToken stateToken) {
presenter.doAction(action, stateToken);
}
- private void doLayoutIfNeeded() {
- doLayoutIfNeeded(ActionPosition.topbar);
- doLayoutIfNeeded(ActionPosition.bottombar);
- }
-
- private void doLayoutIfNeeded(final ActionPosition pos) {
- getToolbar(pos).doLayoutIfNeeded();
- }
-
- private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle,
- final String actionText) {
- final String basePart = "km-" + pos.toString() + "-" + menuTitle;
- final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
- final String itemPart = actionText != null ? "-item-" + actionText : "";
- return basePart + subMenuPart + itemPart;
- }
-
private TreeNode getNode(final String id) {
final TreeNode node = treePanel.getNodeById(id);
if (node == null) {
@@ -416,15 +280,4 @@
return node.getAttribute("href").substring(1);
}
- private Toolbar getToolbar(final ActionPosition pos) {
- switch (pos) {
- case bootombarAndItemMenu:
- case bottombar:
- return ws.getEntityWorkspace().getContextBottomBar();
- case topbar:
- case topbarAndItemMenu:
- default:
- return ws.getEntityWorkspace().getContextTopBar();
- }
- }
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -28,6 +28,7 @@
import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionCollectionSet;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
import org.ourproject.kune.platf.client.actions.ActionManager;
import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
@@ -48,7 +49,6 @@
import com.calclab.suco.client.provider.Provider;
import com.calclab.suco.client.signal.Slot;
import com.calclab.suco.client.signal.Slot0;
-import com.calclab.suco.client.signal.Slot2;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class ContextNavigatorPresenter implements ContextNavigator {
@@ -65,21 +65,26 @@
private final HashMap<String, String> contentTypesIcons;
private final EntityTitle entityTitle;
private final Provider<ActionManager> actionManagerProvider;
+ private boolean editOnNextStateChange;
+ private final ContextNavigatorToolbar toolbar;
public ContextNavigatorPresenter(final StateManager stateManager, final Session session,
final Provider<ContentServiceAsync> contentServiceProvider, final I18nUITranslationService i18n,
- final EntityTitle entityTitle, final Provider<ActionManager> actionManagerProvider) {
+ final EntityTitle entityTitle, final Provider<ActionManager> actionManagerProvider,
+ final ContextNavigatorToolbar contextNavigatorToolbar) {
this.stateManager = stateManager;
this.session = session;
this.contentServiceProvider = contentServiceProvider;
this.i18n = i18n;
this.entityTitle = entityTitle;
this.actionManagerProvider = actionManagerProvider;
+ this.toolbar = contextNavigatorToolbar;
actions = new HashMap<String, ActionCollection<StateToken>>();
actionsByItem = new HashMap<StateToken, ActionCollection<StateToken>>();
draggables = new ArrayList<String>();
droppables = new ArrayList<String>();
contentTypesIcons = new HashMap<String, String>();
+ editOnNextStateChange = false;
}
public void addAction(final String contentTypeId, final ActionDescriptor<StateToken> action) {
@@ -113,20 +118,6 @@
public void init(final ContextNavigatorView view) {
this.view = view;
- stateManager.onGroupChanged(new Slot2<String, String>() {
- public void onEvent(final String oldGroup, final String newGroup) {
- if (oldGroup != null) {
- clear();
- }
- }
- });
- stateManager.onToolChanged(new Slot2<String, String>() {
- public void onEvent(final String oldTool, final String newTool) {
- if (oldTool != null) {
- clear();
- }
- }
- });
session.onUserSignIn(new Slot<UserInfoDTO>() {
public void onEvent(final UserInfoDTO parameter) {
clear();
@@ -139,26 +130,40 @@
});
}
+ public boolean isSelected(final StateToken stateToken) {
+ return view.isSelected(genId(stateToken));
+ }
+
+ public boolean mustEditOnNextStateChange() {
+ return editOnNextStateChange;
+ }
+
public void onItemRename(final String token, final String newName, final String oldName) {
if (!newName.equals(oldName)) {
Site.showProgress(i18n.t("Renaming"));
- final StateDTO currentState = session.getCurrentState();
- contentServiceProvider.get().rename(session.getUserHash(), currentState.getGroup().getShortName(), token,
- newName, new AsyncCallback<String>() {
- public void onFailure(final Throwable caught) {
- setItemText(new StateToken(token), oldName);
- Site.error(i18n.t("Error renaming"));
- Site.hideProgress();
- }
+ final StateToken stateToken = new StateToken(token);
+ final AsyncCallback<String> asyncCallback = new AsyncCallback<String>() {
+ public void onFailure(final Throwable caught) {
+ view.setFireOnTextChange(false);
+ setItemText(stateToken, oldName);
+ view.setFireOnTextChange(true);
+ Site.error(i18n.t("Error renaming"));
+ Site.hideProgress();
+ }
- public void onSuccess(final String result) {
- Site.hideProgress();
- if (session.getCurrentState().getStateToken().getEncoded().equals(token)) {
- // I have to update EntityTitle
- entityTitle.setContentTitle(newName);
- }
- }
- });
+ public void onSuccess(final String result) {
+ Site.hideProgress();
+ if (session.getCurrentState().getStateToken().getEncoded().equals(token)) {
+ // I have to update EntityTitle
+ entityTitle.setContentTitle(newName);
+ }
+ }
+ };
+ if (stateToken.isComplete()) {
+ contentServiceProvider.get().renameContent(session.getUserHash(), stateToken, newName, asyncCallback);
+ } else {
+ contentServiceProvider.get().renameContainer(session.getUserHash(), stateToken, newName, asyncCallback);
+ }
}
}
@@ -180,11 +185,15 @@
public void selectItem(final StateToken stateToken) {
view.selectItem(genId(stateToken));
- view.clearRemovableActions();
- view.disableAllMenuItems();
+ toolbar.clearRemovableActions();
+ toolbar.disableAllMenuItems();
setActions(actionsByItem.get(stateToken), true);
}
+ public void setEditOnNextStateChange(final boolean edit) {
+ editOnNextStateChange = edit;
+ }
+
public void setItemText(final StateToken stateToken, final String name) {
view.setItemText(genId(stateToken), name);
}
@@ -224,7 +233,13 @@
createChildItems(container, containerRights);
// Finaly
- selectItem(stateToken);
+ if (mustEditOnNextStateChange()) {
+ selectItem(stateToken);
+ editItem(stateToken);
+ setEditOnNextStateChange(false);
+ } else {
+ selectItem(stateToken);
+ }
}
private void addItem(final String title, final String contentTypeId, final ContentStatusDTO status,
@@ -241,9 +256,17 @@
actionsByItem.put(stateToken, set.getToolbarActions());
}
+ private boolean checkEnabling(final boolean isNodeSelected, final ActionDescriptor<StateToken> action) {
+ final ActionEnableCondition<StateToken> enableCondition = action.getEnableCondition();
+ final boolean mustBeEnabled = enableCondition != null ? enableCondition.mustBeEnabled(getCurrentStateToken())
+ : true;
+ return isNodeSelected && mustBeEnabled;
+ }
+
private void clear() {
view.clear();
actionsByItem.clear();
+ toolbar.clear();
}
private void createChildItems(final ContainerDTO container, final AccessRightsDTO containerRights) {
@@ -332,10 +355,10 @@
private void setActions(final ActionCollection<StateToken> actions, final boolean isNodeSelected) {
for (final ActionDescriptor<StateToken> action : actions) {
if (action instanceof ActionMenuDescriptor) {
- view.addMenuAction((ActionMenuDescriptor<StateToken>) action, isNodeSelected);
+ toolbar.addMenuAction((ActionMenuDescriptor<StateToken>) action, checkEnabling(isNodeSelected, action));
} else {
- if (isNodeSelected) {
- view.addButtonAction((ActionButtonDescriptor<StateToken>) action);
+ if (checkEnabling(isNodeSelected, action)) {
+ toolbar.addButtonAction((ActionButtonDescriptor<StateToken>) action);
}
}
}
Added: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorToolbar.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -0,0 +1,14 @@
+package org.ourproject.kune.workspace.client.ctxnav;
+
+import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+
+import com.calclab.suco.client.provider.Provider;
+
+public class ContextNavigatorToolbar extends EntityToolbar {
+ public ContextNavigatorToolbar(final Session session, final Provider<ActionManager> actionManagerProvider,
+ final WorkspaceSkeleton ws) {
+ super(ToolbarPosition.context, session, actionManagerProvider, ws);
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -21,29 +21,23 @@
package org.ourproject.kune.workspace.client.ctxnav;
import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionCollection;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.dto.StateToken;
public interface ContextNavigatorView extends View {
- void addButtonAction(ActionButtonDescriptor<StateToken> action);
-
void addItem(ContextNavigatorItem contextNavigatorItem);
- void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable);
-
void clear();
- void disableAllMenuItems();
-
void editItem(String id);
- void clearRemovableActions();
+ boolean isSelected(String id);
void selectItem(String id);
+ void setFireOnTextChange(boolean fire);
+
void setItemText(String id, String text);
void setRootItem(String id, String text, StateToken stateToken, ActionCollection<StateToken> actions);
Added: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbar.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -0,0 +1,233 @@
+package org.ourproject.kune.workspace.client.ctxnav;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
+import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.skel.Toolbar;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+
+import com.calclab.suco.client.provider.Provider;
+import com.google.gwt.user.client.ui.Widget;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.menu.BaseItem;
+import com.gwtext.client.widgets.menu.Item;
+import com.gwtext.client.widgets.menu.Menu;
+import com.gwtext.client.widgets.menu.MenuItem;
+import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
+
+public class EntityToolbar implements EntityToolbarView {
+
+ protected enum ToolbarPosition {
+ content, context
+ }
+
+ private final HashMap<String, Menu> toolbarMenus;
+ private final ArrayList<Widget> removableToolbarItems;
+ private final HashMap<String, Item> menuItems;
+ private final WorkspaceSkeleton ws;
+ private final Session session;
+ private final Provider<ActionManager> actionManagerProvider;
+ private final ToolbarPosition position;
+
+ public EntityToolbar(final ToolbarPosition position, final Session session,
+ final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) {
+ this.position = position;
+ this.session = session;
+ this.actionManagerProvider = actionManagerProvider;
+ this.ws = ws;
+ toolbarMenus = new HashMap<String, Menu>();
+ removableToolbarItems = new ArrayList<Widget>();
+ menuItems = new HashMap<String, Item>();
+
+ }
+
+ public void addButtonAction(final ActionButtonDescriptor<StateToken> action) {
+ final ActionPosition pos = action.getActionPosition();
+ final ToolbarButton button = new ToolbarButton();
+ final String text = action.getText();
+ if (text != null) {
+ button.setText(text);
+ }
+ button.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(final Button button, final EventObject e) {
+ actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
+ }
+ });
+ button.setIcon(action.getIconUrl());
+ button.setTooltip(action.getToolTip());
+
+ final Toolbar toolbar = getToolbar(pos);
+ if (action.hasLeftSeparator()) {
+ removableToolbarItems.add(add(toolbar, action.getLeftSeparator()));
+ }
+ toolbar.add(button);
+ if (action.hasRightSeparator()) {
+ removableToolbarItems.add(add(toolbar, action.getRightSeparator()));
+ }
+ removableToolbarItems.add(button);
+ }
+
+ public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) {
+ final String menuTitle = action.getParentMenuTitle();
+ final String menuSubTitle = action.getParentSubMenuTitle();
+ final ActionPosition pos = action.getActionPosition();
+ final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
+ Item item = menuItems.get(itemKey);
+ if (item == null) {
+ item = createToolbarMenu(pos, menuTitle, menuSubTitle, action);
+ menuItems.put(itemKey, item);
+ }
+ if (enable) {
+ item.enable();
+ } else {
+ item.disable();
+ }
+ doLayoutIfNeeded(pos);
+ }
+
+ public void clear() {
+ toolbarMenus.clear();
+ menuItems.clear();
+ removableToolbarItems.clear();
+ getToolbar(ActionPosition.topbar).removeAll();
+ getToolbar(ActionPosition.bottombar).removeAll();
+ }
+
+ public void clearRemovableActions() {
+ for (final Widget widget : removableToolbarItems) {
+ widget.removeFromParent();
+ }
+ removableToolbarItems.clear();
+ doLayoutIfNeeded();
+ }
+
+ public void disableAllMenuItems() {
+ for (final Item item : menuItems.values()) {
+ item.disable();
+ }
+ doLayoutIfNeeded();
+ }
+
+ private void add(final ActionPosition toolbar, final Widget widget) {
+ getToolbar(toolbar).add(widget);
+ }
+
+ private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) {
+ switch (separator) {
+ case fill:
+ return toolbar.addFill();
+ case separator:
+ return toolbar.addSeparator();
+ case spacer:
+ default:
+ return toolbar.addSpacer();
+ }
+ }
+
+ private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
+ final ActionMenuDescriptor<StateToken> action) {
+ final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
+ @Override
+ public void onClick(BaseItem item, EventObject e) {
+ actionManagerProvider.get().doAction(action, session.getCurrentState().getStateToken());
+ }
+ });
+ item.setIcon(action.getIconUrl());
+
+ final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null);
+ final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null);
+ Menu menu = toolbarMenus.get(menuKey);
+ Menu subMenu = toolbarMenus.get(subMenuKey);
+ if (menuSubTitle != null) {
+ if (subMenu == null) {
+ subMenu = new Menu();
+ final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
+ if (menu == null) {
+ menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
+ }
+ menu.addItem(subMenuItem);
+ toolbarMenus.put(subMenuKey, subMenu);
+ }
+ subMenu.addItem(item);
+
+ } else {
+ // Menu action without submenu
+ if (menu == null) {
+ menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
+ }
+ menu.addItem(item);
+ }
+ doLayoutIfNeeded(toolBarPos);
+ return item;
+ }
+
+ private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle,
+ final String menuKey) {
+ final Menu menu = new Menu();
+ final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
+ if (iconUrl != null) {
+ toolbarMenu.setIcon(iconUrl);
+ }
+ toolbarMenu.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(final Button button, final EventObject e) {
+ menu.showAt(e.getXY());
+ }
+ });
+ toolbarMenus.put(menuKey, menu);
+ add(barPosition, toolbarMenu);
+ return menu;
+ }
+
+ private void doLayoutIfNeeded() {
+ doLayoutIfNeeded(ActionPosition.topbar);
+ doLayoutIfNeeded(ActionPosition.bottombar);
+ }
+
+ private void doLayoutIfNeeded(final ActionPosition pos) {
+ getToolbar(pos).doLayoutIfNeeded();
+ }
+
+ private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle,
+ final String actionText) {
+ final String basePart = "km-" + pos.toString() + "-" + menuTitle;
+ final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
+ final String itemPart = actionText != null ? "-item-" + actionText : "";
+ return basePart + subMenuPart + itemPart;
+ }
+
+ private Toolbar getToolbar(final ActionPosition pos) {
+ switch (pos) {
+ case bootombarAndItemMenu:
+ case bottombar:
+ switch (position) {
+ case content:
+ return ws.getEntityWorkspace().getContentBottomBar();
+ case context:
+ default:
+ return ws.getEntityWorkspace().getContextBottomBar();
+ }
+ case topbar:
+ case topbarAndItemMenu:
+ default:
+ switch (position) {
+ case content:
+ return ws.getEntityWorkspace().getContentTopBar();
+ case context:
+ default:
+ return ws.getEntityWorkspace().getContextTopBar();
+ }
+ }
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/EntityToolbarView.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -0,0 +1,19 @@
+package org.ourproject.kune.workspace.client.ctxnav;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.dto.StateToken;
+
+public interface EntityToolbarView {
+
+ void addButtonAction(ActionButtonDescriptor<StateToken> action);
+
+ void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable);
+
+ void clear();
+
+ void clearRemovableActions();
+
+ void disableAllMenuItems();
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -88,9 +88,8 @@
public void addCollab(final String groupShortName) {
Site.showProgressProcessing();
- snServiceProvider.get().addCollabMember(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), groupShortName,
- new AsyncCallbackSimple<SocialNetworkResultDTO>() {
+ snServiceProvider.get().addCollabMember(session.getUserHash(), session.getCurrentState().getStateToken(),
+ groupShortName, new AsyncCallbackSimple<SocialNetworkResultDTO>() {
public void onSuccess(final SocialNetworkResultDTO result) {
Site.hideProgress();
Site.info(i18n.t("Member added as collaborator"));
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -5,6 +5,7 @@
import org.ourproject.kune.platf.client.dto.GroupType;
import org.ourproject.kune.platf.client.dto.SocialNetworkRequestResult;
import org.ourproject.kune.platf.client.dto.SocialNetworkResultDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
import org.ourproject.kune.platf.client.rpc.SocialNetworkServiceAsync;
import org.ourproject.kune.platf.client.services.ImageDescriptor;
@@ -104,7 +105,7 @@
public void onEvent(final String parameter) {
Site.showProgressProcessing();
snServiceProvider.get().requestJoinGroup(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), new AsyncCallbackSimple<Object>() {
+ session.getCurrentState().getStateToken(), new AsyncCallbackSimple<Object>() {
public void onSuccess(final Object result) {
Site.hideProgress();
final SocialNetworkRequestResult resultType = (SocialNetworkRequestResult) result;
@@ -183,7 +184,7 @@
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().setAdminAsCollab(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), group.getShortName(),
+ session.getCurrentState().getStateToken(), group.getShortName(),
new AsyncCallbackSimple<SocialNetworkResultDTO>() {
public void onSuccess(final SocialNetworkResultDTO result) {
Site.hideProgress();
@@ -198,7 +199,7 @@
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().deleteMember(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), group.getShortName(),
+ session.getCurrentState().getStateToken(), group.getShortName(),
new AsyncCallbackSimple<SocialNetworkResultDTO>() {
public void onSuccess(final SocialNetworkResultDTO result) {
Site.hideProgress();
@@ -217,7 +218,7 @@
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().setCollabAsAdmin(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), group.getShortName(),
+ session.getCurrentState().getStateToken(), group.getShortName(),
new AsyncCallbackSimple<SocialNetworkResultDTO>() {
public void onSuccess(final SocialNetworkResultDTO result) {
Site.hideProgress();
@@ -232,7 +233,7 @@
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().AcceptJoinGroup(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), group.getShortName(),
+ session.getCurrentState().getStateToken(), group.getShortName(),
new AsyncCallbackSimple<SocialNetworkResultDTO>() {
public void onSuccess(final SocialNetworkResultDTO result) {
Site.hideProgress();
@@ -247,7 +248,7 @@
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().denyJoinGroup(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), group.getShortName(),
+ session.getCurrentState().getStateToken(), group.getShortName(),
new AsyncCallbackSimple<SocialNetworkResultDTO>() {
public void onSuccess(final SocialNetworkResultDTO result) {
Site.hideProgress();
@@ -265,7 +266,7 @@
private void removeMemberAction(final GroupDTO groupDTO) {
Site.showProgressProcessing();
- snServiceProvider.get().unJoinGroup(session.getUserHash(), groupDTO.getShortName(),
+ snServiceProvider.get().unJoinGroup(session.getUserHash(), new StateToken(groupDTO.getShortName()),
new AsyncCallbackSimple<SocialNetworkResultDTO>() {
public void onSuccess(final SocialNetworkResultDTO result) {
Site.hideProgress();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePresenter.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePresenter.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -49,9 +49,8 @@
protected void onChangeGroupWsTheme(final WsTheme newTheme) {
Site.showProgressProcessing();
- groupServiceProvider.get().changeGroupWsTheme(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), newTheme.getName(),
- new AsyncCallbackSimple<Object>() {
+ groupServiceProvider.get().changeGroupWsTheme(session.getUserHash(), session.getCurrentState().getStateToken(),
+ newTheme.getName(), new AsyncCallbackSimple<Object>() {
public void onSuccess(final Object result) {
setTheme(newTheme);
Site.hideProgress();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -90,21 +90,24 @@
protected void onTitleRename(final String newName) {
Site.showProgressSaving();
- final StateDTO currentState = session.getCurrentState();
- final StateToken stateToken = currentState.getStateToken();
- contentServiceProvider.get().rename(session.getUserHash(), currentState.getGroup().getShortName(),
- stateToken.getEncoded(), newName, new AsyncCallback<String>() {
- public void onFailure(final Throwable caught) {
- view.restoreOldTitle();
- errorHandler.process(caught);
- }
+ final StateToken stateToken = session.getCurrentState().getStateToken();
+ final AsyncCallback<String> asyncCallback = new AsyncCallback<String>() {
+ public void onFailure(final Throwable caught) {
+ view.restoreOldTitle();
+ errorHandler.process(caught);
+ }
- public void onSuccess(final String result) {
- Site.hideProgress();
- view.setContentTitle(result);
- contextNavigatorProvider.get().setItemText(stateToken, newName);
- }
- });
+ public void onSuccess(final String result) {
+ Site.hideProgress();
+ view.setContentTitle(result);
+ contextNavigatorProvider.get().setItemText(stateToken, newName);
+ }
+ };
+ if (stateToken.isComplete()) {
+ contentServiceProvider.get().renameContent(session.getUserHash(), stateToken, newName, asyncCallback);
+ } else {
+ contentServiceProvider.get().renameContainer(session.getUserHash(), stateToken, newName, asyncCallback);
+ }
Site.hideProgress();
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentCommentServiceTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentCommentServiceTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentCommentServiceTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -17,27 +17,27 @@
@Test
public void commentDefaultContent() throws Exception {
- doLogin();
- String commentText = "Some comment";
- CommentDTO commentDTO = contentService.addComment(session.getHash(), groupName, defaultContent.getDocumentId(),
- commentText);
- assertEquals(commentDTO.getText(), commentText);
- assertEquals(commentDTO.getPositiveVotersCount(), 0);
- assertEquals(commentDTO.getNegativeVotersCount(), 0);
- assertEquals(commentDTO.getAbuseInformersCount(), 0);
+ doLogin();
+ final String commentText = "Some comment";
+ final CommentDTO commentDTO = contentService.addComment(session.getHash(), defaultContent.getStateToken(),
+ commentText);
+ assertEquals(commentDTO.getText(), commentText);
+ assertEquals(commentDTO.getPositiveVotersCount(), 0);
+ assertEquals(commentDTO.getNegativeVotersCount(), 0);
+ assertEquals(commentDTO.getAbuseInformersCount(), 0);
}
@Test(expected = UserMustBeLoggedException.class)
public void commentWithoutLoginMustFail() throws DefaultException {
- String commentText = "Some comment";
- contentService.addComment(session.getHash(), groupName, defaultContent.getDocumentId(), commentText);
+ final String commentText = "Some comment";
+ contentService.addComment(session.getHash(), defaultContent.getStateToken(), commentText);
}
@Before
public void init() throws Exception {
- new IntegrationTestHelper(this);
- groupName = getDefSiteGroupName();
- defaultContent = getDefaultContent();
+ new IntegrationTestHelper(this);
+ groupName = getDefSiteGroupName();
+ defaultContent = getDefaultContent();
}
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -32,8 +32,7 @@
@Test(expected = UserMustBeLoggedException.class)
public void noLoggedInShouldThrowIllegalAccess() throws ContentNotFoundException, Exception {
defaultContent = getDefaultContent();
- final Long folderId = defaultContent.getContainer().getId();
- contentService.addContent(session.getHash(), groupName, folderId, "a name");
+ contentService.addContent(session.getHash(), defaultContent.getContainer().getStateToken(), "a name");
}
@Test
@@ -46,8 +45,8 @@
final AccessRightsDTO groupRights = defaultContent.getGroupRights();
final String title = "New Content Title";
- final StateDTO added = contentService.addContent(session.getHash(), groupName, defaultContent.getContainer()
- .getId(), title);
+ final StateDTO added = contentService.addContent(session.getHash(), defaultContent.getContainer()
+ .getStateToken(), title);
assertNotNull(added);
final List<ContentDTO> contents = added.getContainer().getContents();
assertEquals(title, added.getTitle());
@@ -60,7 +59,7 @@
assertNotNull(added.getAccessLists());
final StateToken newState = added.getStateToken();
- final StateDTO sameAgain = contentService.getContent(session.getHash(), groupName, newState);
+ final StateDTO sameAgain = contentService.getContent(session.getHash(), newState);
assertNotNull(sameAgain);
assertEquals(2, sameAgain.getContainer().getContents().size());
@@ -72,7 +71,7 @@
defaultContent = getDefaultContent();
final ContainerDTO parent = defaultContent.getContainer();
final String title = "folder name";
- final StateDTO newState = contentService.addFolder(session.getHash(), groupName, parent.getId(), title,
+ final StateDTO newState = contentService.addFolder(session.getHash(), parent.getStateToken(), title,
DocumentClientTool.TYPE_FOLDER);
assertNotNull(newState);
assertNotNull(newState.getGroupMembers());
@@ -81,7 +80,6 @@
assertNotNull(newState.getContainerRights());
assertNotNull(newState.getGroupRights());
assertNotNull(newState.getRootContainer().getContents().get(0).getRights());
- assertNotNull(newState.getContainer().getContents().get(0).getRights());
final ContainerDTO parentAgain = getDefaultContent().getContainer();
final ContainerSimpleDTO child = parentAgain.getChilds().get(0);
@@ -97,7 +95,7 @@
defaultContent = getDefaultContent();
final ContainerDTO parent = defaultContent.getContainer();
final String roomName = "testroom";
- final StateDTO newState = contentService.addRoom(session.getHash(), groupName, parent.getId(), roomName);
+ final StateDTO newState = contentService.addRoom(session.getHash(), parent.getStateToken(), roomName);
assertNotNull(newState);
}
@@ -107,11 +105,11 @@
defaultContent = getDefaultContent();
final ContainerDTO parent = defaultContent.getContainer();
final String title = "folder name";
- final StateDTO newState = contentService.addFolder(session.getHash(), groupName, parent.getId(), title,
+ final StateDTO newState = contentService.addFolder(session.getHash(), parent.getStateToken(), title,
DocumentClientTool.TYPE_FOLDER);
assertNotNull(newState);
- final StateDTO newState2 = contentService.addFolder(session.getHash(), groupName, parent.getId(), title,
+ final StateDTO newState2 = contentService.addFolder(session.getHash(), parent.getStateToken(), title,
DocumentClientTool.TYPE_FOLDER);
assertNotNull(newState2);
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceGetTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceGetTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceGetTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -13,12 +13,10 @@
public class ContentServiceGetTest extends ContentServiceIntegrationTest {
- private String groupName;
-
@Test
public void contentWithLoggedUserIsEditable() throws Exception {
final String userHash = doLogin();
- final StateDTO response = contentService.getContent(userHash, groupName, new StateToken());
+ final StateDTO response = contentService.getContent(userHash, new StateToken());
assertNotNull(response.getContentRights());
assertTrue(response.getContentRights().isEditable());
// assertTrue(response.getAccessLists().getAdmin().size() == 1);
@@ -27,12 +25,11 @@
@Before
public void create() {
new IntegrationTestHelper(this);
- groupName = getDefSiteGroupName();
}
@Test
public void defaultCountentShouldExist() throws Exception {
- final StateDTO content = contentService.getContent(null, groupName, new StateToken());
+ final StateDTO content = contentService.getContent(null, new StateToken());
assertNotNull(content);
assertNotNull(content.getGroup());
assertNotNull(content.getContainer());
@@ -45,39 +42,39 @@
@Test
public void noContentNotLogged() throws Exception {
- final StateDTO response = contentService.getContent(null, null, new StateToken());
+ final StateDTO response = contentService.getContent(null, new StateToken());
assertNotNull(response);
}
@Test(expected = ContentNotFoundException.class)
public void nonExistentContent() throws Exception {
- contentService.getContent(null, groupName, new StateToken("foo foo foo"));
+ contentService.getContent(null, new StateToken("foo foo foo"));
}
@Test(expected = ContentNotFoundException.class)
public void nonExistentContent2() throws Exception {
- contentService.getContent(null, groupName, new StateToken("site.foofoo"));
+ contentService.getContent(null, new StateToken("site.foofoo"));
}
@Test(expected = ContentNotFoundException.class)
public void nonExistentContent3() throws Exception {
- contentService.getContent(null, groupName, new StateToken("site.docs.foofoo"));
+ contentService.getContent(null, new StateToken("site.docs.foofoo"));
}
@Test(expected = ContentNotFoundException.class)
public void nonExistentContent4() throws Exception {
final StateDTO stateDTO = getDefaultContent();
- contentService.getContent(null, groupName, stateDTO.getStateToken().clone().setDocument("dadaas"));
+ contentService.getContent(null, stateDTO.getStateToken().clone().setDocument("dadaas"));
}
@Test(expected = ContentNotFoundException.class)
public void nonExistentContent5() throws Exception {
- contentService.getContent(null, groupName, new StateToken("comm3.docs.19"));
+ contentService.getContent(null, new StateToken("comm3.docs.19"));
}
@Test
public void notLoggedUserShouldNotEditDefaultDoc() throws Exception {
- final StateDTO content = contentService.getContent(null, groupName, new StateToken());
+ final StateDTO content = contentService.getContent(null, new StateToken());
assertFalse(content.getContentRights().isAdministrable());
assertFalse(content.getContentRights().isEditable());
assertTrue(content.getContentRights().isVisible());
@@ -88,7 +85,7 @@
@Test
public void unknownContent() throws Exception {
- final StateDTO content = contentService.getContent(null, groupName, new StateToken("site.docs"));
+ final StateDTO content = contentService.getContent(null, new StateToken("site.docs"));
assertNotNull(content);
assertNotNull(content.getGroup());
assertNotNull(content.getContainer());
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceIntegrationTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceIntegrationTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceIntegrationTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -13,7 +13,7 @@
protected StateDTO getDefaultContent() throws Exception {
final StateToken stateToken = new StateToken(getDefSiteGroupName());
- final StateDTO content = contentService.getContent(session.getHash(), getDefSiteGroupName(), stateToken);
+ final StateDTO content = contentService.getContent(session.getHash(), stateToken);
return content;
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceSaveTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceSaveTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceSaveTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -10,7 +10,6 @@
public class ContentServiceSaveTest extends ContentServiceIntegrationTest {
- private String groupName;
private StateDTO defaultContent;
@Before
@@ -18,7 +17,6 @@
new IntegrationTestHelper(this);
defaultContent = getDefaultContent();
- groupName = defaultContent.getGroup().getShortName();
doLogin();
}
@@ -26,9 +24,9 @@
public void testSaveAndRetrieve() throws Exception {
final String text = "Lorem ipsum dolor sit amet";
final int version = defaultContent.getVersion();
- final int currentVersion = contentService.save(getHash(), groupName, defaultContent.getDocumentId(), text);
+ final int currentVersion = contentService.save(getHash(), defaultContent.getStateToken(), text);
assertEquals(version + 2, currentVersion);
- final StateDTO again = contentService.getContent(getHash(), groupName, defaultContent.getStateToken());
+ final StateDTO again = contentService.getContent(getHash(), defaultContent.getStateToken());
assertEquals(text, again.getContent());
assertEquals(0, (int) again.getRateByUsers());
assertEquals(new Double(0), again.getRate());
@@ -39,9 +37,9 @@
final String text = TestDomainHelper.createBigText();
;
final int version = defaultContent.getVersion();
- final int currentVersion = contentService.save(getHash(), groupName, defaultContent.getDocumentId(), text);
+ final int currentVersion = contentService.save(getHash(), defaultContent.getStateToken(), text);
assertEquals(version + 2, currentVersion);
- final StateDTO again = contentService.getContent(getHash(), groupName, defaultContent.getStateToken());
+ final StateDTO again = contentService.getContent(getHash(), defaultContent.getStateToken());
assertEquals(text, again.getContent());
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -1,6 +1,8 @@
package org.ourproject.kune.platf.integration.content;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import java.util.List;
@@ -8,6 +10,7 @@
import org.junit.Test;
import org.ourproject.kune.docs.client.DocumentClientTool;
import org.ourproject.kune.platf.client.dto.ContainerDTO;
+import org.ourproject.kune.platf.client.dto.ContentDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.dto.TagResultDTO;
@@ -19,7 +22,6 @@
private StateDTO defaultContent;
private String groupShortName;
- private String defDocument;
@Test
public void addRemoveAuthor() throws Exception {
@@ -27,21 +29,21 @@
assertEquals(1, authors.size());
final UserSimpleDTO author = authors.get(0);
final String authorShortName = author.getShortName();
- contentService.removeAuthor(getHash(), groupShortName, defDocument, authorShortName);
+ contentService.removeAuthor(getHash(), defaultContent.getStateToken(), authorShortName);
final List<UserSimpleDTO> authors2 = getDefaultContent().getAuthors();
assertEquals(0, authors2.size());
- contentService.addAuthor(getHash(), groupShortName, defDocument, authorShortName);
+ contentService.addAuthor(getHash(), defaultContent.getStateToken(), authorShortName);
final List<UserSimpleDTO> authors3 = getDefaultContent().getAuthors();
assertEquals(1, authors3.size());
- contentService.addAuthor(getHash(), groupShortName, defDocument, authorShortName);
+ contentService.addAuthor(getHash(), defaultContent.getStateToken(), authorShortName);
final List<UserSimpleDTO> authors4 = getDefaultContent().getAuthors();
assertEquals(1, authors4.size());
}
@Test
public void contentRateAndRetrieve() throws Exception {
- contentService.rateContent(getHash(), groupShortName, defDocument, 4.5);
- final StateDTO again = contentService.getContent(getHash(), groupShortName, defaultContent.getStateToken());
+ contentService.rateContent(getHash(), defaultContent.getStateToken(), 4.5);
+ final StateDTO again = contentService.getContent(getHash(), defaultContent.getStateToken());
assertEquals(true, again.isRateable());
assertEquals(new Double(4.5), again.getCurrentUserRate());
assertEquals(new Double(4.5), again.getRate());
@@ -50,9 +52,8 @@
@Test
public void contentSetLanguage() throws Exception {
- contentService.setLanguage(getHash(), groupShortName, defDocument, "es");
- final StateDTO contentRetrieved = contentService.getContent(getHash(), groupShortName, defaultContent
- .getStateToken());
+ contentService.setLanguage(getHash(), defaultContent.getStateToken(), "es");
+ final StateDTO contentRetrieved = contentService.getContent(getHash(), defaultContent.getStateToken());
assertEquals("es", contentRetrieved.getLanguage().getCode());
}
@@ -60,11 +61,10 @@
public void folderRename() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- final ContainerDTO folder = defaultContent.getContainer();
final String oldTitle = "some title";
String newTitle = "folder new name";
- final StateDTO newState = contentService.addFolder(session.getHash(), groupShortName, folder.getId(), oldTitle,
+ final StateDTO newState = contentService.addFolder(session.getHash(), defaultContent.getStateToken(), oldTitle,
DocumentClientTool.TYPE_FOLDER);
final ContainerDTO newFolder = newState.getContainer();
@@ -73,24 +73,23 @@
final StateToken folderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(),
newFolder.getId().toString(), null);
- String result = contentService.rename(getHash(), groupShortName, folderToken.getEncoded(), newTitle);
+ String result = contentService.renameContainer(getHash(), folderToken, newTitle);
assertEquals(newTitle, result);
final StateToken newFolderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(),
newFolder.getId().toString(), null);
- StateDTO folderAgain = contentService.getContent(getHash(), groupShortName, newFolderToken);
+ StateDTO folderAgain = contentService.getContent(getHash(), newFolderToken);
assertEquals(newTitle, folderAgain.getContainer().getName());
newTitle = "folder last name";
- result = contentService.rename(getHash(), groupShortName, newFolderToken.getEncoded(), newTitle);
+ result = contentService.renameContainer(getHash(), newFolderToken, newTitle);
- folderAgain = contentService.getContent(getHash(), groupShortName, newFolderToken);
+ folderAgain = contentService.getContent(getHash(), newFolderToken);
assertEquals(newTitle, folderAgain.getContainer().getName());
-
}
@Test(expected = AccessViolationException.class)
@@ -98,11 +97,11 @@
doLogin();
defaultContent = getDefaultContent();
final ContainerDTO folder = defaultContent.getContainer();
- final StateToken folderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(), folder
+ final StateToken folderToken = new StateToken("otherGroup", defaultContent.getStateToken().getTool(), folder
.getId().toString(), null);
final String newTitle = "folder new name";
- contentService.rename(getHash(), super.getSiteAdminShortName(), folderToken.getEncoded(), newTitle);
+ contentService.renameContainer(getHash(), folderToken, newTitle);
}
@Test(expected = RuntimeException.class)
@@ -114,7 +113,7 @@
final String newTitle = "folder new name";
final StateToken folderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(), folder
.getId().toString(), null);
- final String result = contentService.rename(getHash(), groupShortName, folderToken.getEncoded(), newTitle);
+ final String result = contentService.renameContainer(getHash(), folderToken, newTitle);
assertEquals(newTitle, result);
@@ -129,13 +128,12 @@
doLogin();
defaultContent = getDefaultContent();
groupShortName = defaultContent.getStateToken().getGroup();
- defDocument = defaultContent.getStateToken().getDocument();
}
@Test
public void setTagsAndResults() throws Exception {
- contentService.setTags(getHash(), groupShortName, defDocument, "bfoo cfoa afoo2");
- final List<TagResultDTO> summaryTags = contentService.getSummaryTags(getHash(), groupShortName);
+ contentService.setTags(getHash(), defaultContent.getStateToken(), "bfoo cfoa afoo2");
+ final List<TagResultDTO> summaryTags = contentService.getSummaryTags(getHash(), defaultContent.getStateToken());
assertEquals(3, summaryTags.size());
TagResultDTO tagResultDTO = summaryTags.get(0);
@@ -153,12 +151,27 @@
@Test
public void setTagsAndRetrieve() throws Exception {
- contentService.setTags(getHash(), groupShortName, defDocument, "foo foa foo");
+ contentService.setTags(getHash(), defaultContent.getStateToken(), "foo foa foo");
final String tagsRetrieved = getDefaultContent().getTags();
assertEquals("foo foa", tagsRetrieved);
}
@Test
+ public void testSetAsDefContent() throws Exception {
+ doLogin();
+ defaultContent = getDefaultContent();
+
+ final StateDTO added = contentService.addContent(session.getHash(), defaultContent.getStateToken(),
+ "New Content Title");
+ assertNotNull(added);
+
+ final ContentDTO newDefContent = contentService.setAsDefaultContent(session.getHash(), added.getStateToken());
+
+ assertTrue(!defaultContent.getStateToken().equals(newDefContent.getStateToken()));
+ assertTrue(added.getStateToken().equals(newDefContent.getStateToken()));
+ }
+
+ @Test
public void tokenRename() throws Exception {
doLogin();
defaultContent = getDefaultContent();
@@ -166,23 +179,20 @@
final String oldTitle = "some title";
String newTitle = "folder new name";
- final StateDTO newState = contentService.addFolder(session.getHash(), groupShortName, folder.getId(), oldTitle,
+ final StateDTO newState = contentService.addFolder(session.getHash(), folder.getStateToken(), oldTitle,
DocumentClientTool.TYPE_FOLDER);
final ContainerDTO newFolder = newState.getContainer();
assertEquals(oldTitle, newFolder.getName());
- final StateToken newFolderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(),
- newFolder.getId().toString(), null);
-
newTitle = "folder last name";
- final String result = contentService.rename(getHash(), groupShortName, newFolderToken.getEncoded(), newTitle);
+ final String result = contentService.renameContainer(getHash(), newState.getStateToken(), newTitle);
assertEquals(newTitle, result);
- final StateDTO folderAgain = contentService.getContent(getHash(), groupShortName, newFolderToken);
+ final StateDTO folderAgain = contentService.getContent(getHash(), newState.getStateToken());
assertEquals(newTitle, folderAgain.getContainer().getName());
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/socialnet/SocialNetworkServiceTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/socialnet/SocialNetworkServiceTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/socialnet/SocialNetworkServiceTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -6,6 +6,7 @@
import org.junit.Test;
import org.ourproject.kune.platf.client.dto.ParticipationDataDTO;
import org.ourproject.kune.platf.client.dto.SocialNetworkDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.errors.AlreadyUserMemberException;
import org.ourproject.kune.platf.client.errors.UserMustBeLoggedException;
import org.ourproject.kune.platf.client.rpc.SocialNetworkService;
@@ -21,35 +22,35 @@
@Inject
SocialNetworkService socialNetworkService;
- private String groupShortName;
+ private StateToken groupToken;
@Before
public void init() {
new IntegrationTestHelper(this);
- groupShortName = getDefSiteGroupName();
+ groupToken = new StateToken(getDefSiteGroupName());
}
@Test
public void testGetGroupMembersNotLogged() throws Exception {
- final SocialNetworkDTO groupMembers = socialNetworkService.getGroupMembers(null, groupShortName);
+ final SocialNetworkDTO groupMembers = socialNetworkService.getGroupMembers(null, groupToken);
assertNotNull(groupMembers);
}
@Test
public void testGetParticipationNotLogged() throws Exception {
- final ParticipationDataDTO participation = socialNetworkService.getParticipation(null, groupShortName);
+ final ParticipationDataDTO participation = socialNetworkService.getParticipation(null, groupToken);
assertNotNull(participation);
}
@Test(expected = UserMustBeLoggedException.class)
public void testRequestJoinNoLogged() throws Exception {
- socialNetworkService.requestJoinGroup(session.getHash(), groupShortName);
+ socialNetworkService.requestJoinGroup(session.getHash(), groupToken);
}
@Test(expected = AlreadyUserMemberException.class)
public void testRequestJoinPersonalGroup() throws Exception {
doLogin();
- socialNetworkService.requestJoinGroup(session.getHash(), groupShortName);
+ socialNetworkService.requestJoinGroup(session.getHash(), groupToken);
}
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/auth/AuthenticatedMethodInterceptorTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/auth/AuthenticatedMethodInterceptorTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/auth/AuthenticatedMethodInterceptorTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -32,24 +32,24 @@
@Test(expected = UserMustBeLoggedException.class)
public void hashNullAndMandatoryMustDoNothing() throws Throwable {
Mockito.stub(authAnnotation.mandatory()).toReturn(true);
- final Object[] result = { null };
- Mockito.stub(invocation.getArguments()).toReturn(result);
+ final Object[] arguments = { null };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
auth.invoke(invocation);
}
@Test
public void hashNullAndNotMandatoryMustDoNothing() throws Throwable {
Mockito.stub(authAnnotation.mandatory()).toReturn(false);
- final Object[] result = { null };
- Mockito.stub(invocation.getArguments()).toReturn(result);
+ final Object[] arguments = { null };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
auth.invoke(invocation);
}
@Test
public void hashNullAsStringAndNotMandatoryMustDoNothing() throws Throwable {
Mockito.stub(authAnnotation.mandatory()).toReturn(false);
- final Object[] result = { "null" };
- Mockito.stub(invocation.getArguments()).toReturn(result);
+ final Object[] arguments = { "null" };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
auth.invoke(invocation);
}
@@ -57,8 +57,8 @@
public void otherHashAndMandatoryAndLoggedMustSessionExp() throws Throwable {
doLogin();
Mockito.stub(authAnnotation.mandatory()).toReturn(true);
- final Object[] result = { "other-hash" };
- Mockito.stub(invocation.getArguments()).toReturn(result);
+ final Object[] arguments = { "other-hash" };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
auth.invoke(invocation);
}
@@ -66,16 +66,16 @@
public void sameHashAndMandatoryAndLoggedMustSessionExp() throws Throwable {
doLogin();
Mockito.stub(authAnnotation.mandatory()).toReturn(true);
- final Object[] result = { getHash() };
- Mockito.stub(invocation.getArguments()).toReturn(result);
+ final Object[] arguments = { getHash() };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
auth.invoke(invocation);
}
@Test(expected = SessionExpiredException.class)
public void someHashAndMandatoryAndNotLoggedMustSessionExp() throws Throwable {
Mockito.stub(authAnnotation.mandatory()).toReturn(true);
- final Object[] result = { "some-hash" };
- Mockito.stub(invocation.getArguments()).toReturn(result);
+ final Object[] arguments = { "some-hash" };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
auth.invoke(invocation);
}
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptorTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptorTest.java 2008-09-15 04:12:48 UTC (rev 871)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptorTest.java 2008-09-18 00:45:41 UTC (rev 872)
@@ -4,9 +4,14 @@
import org.aopalliance.intercept.MethodInvocation;
import org.junit.Before;
+import org.junit.Test;
import org.mockito.Mockito;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.errors.AccessViolationException;
+import org.ourproject.kune.platf.client.errors.ContentNotFoundException;
import org.ourproject.kune.platf.integration.IntegrationTest;
import org.ourproject.kune.platf.integration.IntegrationTestHelper;
+import org.ourproject.kune.platf.server.access.AccessRol;
public class AuthorizatedMethodInterceptorTest extends IntegrationTest {
@@ -24,8 +29,34 @@
Mockito.stub(invocation.getStaticPart()).toReturn(accessibleObject);
authAnnotation = Mockito.mock(Authorizated.class);
Mockito.stub(accessibleObject.getAnnotation(Authorizated.class)).toReturn(authAnnotation);
- // AccessType accessType = authoAnnotation.accessTypeRequired();
- // boolean checkContent = authoAnnotation.checkContent();
+
}
+ @Test(expected = ContentNotFoundException.class)
+ public void tesHashNullContainer() throws Throwable {
+ // Mockito.stub(authAnnotation.accessRolRequired()).toReturn(AccessRol.Administrator);
+ Mockito.stub(authAnnotation.actionLevel()).toReturn(ActionLevel.content);
+ final Object[] arguments = { getHash(), new StateToken("group.docs") };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
+ auth.invoke(invocation);
+ }
+
+ @Test(expected = ContentNotFoundException.class)
+ public void testHashNullContent() throws Throwable {
+ Mockito.stub(authAnnotation.actionLevel()).toReturn(ActionLevel.content);
+ final Object[] arguments = { getHash(), new StateToken("group.docs.1") };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
+ auth.invoke(invocation);
+ }
+
+ @Test(expected = AccessViolationException.class)
+ public void wrongGroupNameThrowsExcep() throws Throwable {
+ doLogin();
+ Mockito.stub(authAnnotation.accessRolRequired()).toReturn(AccessRol.Administrator);
+ Mockito.stub(authAnnotation.actionLevel()).toReturn(ActionLevel.content);
+ final Object[] arguments = { getHash(), new StateToken("groupWRONG.docs.1.1") };
+ Mockito.stub(invocation.getArguments()).toReturn(arguments);
+ auth.invoke(invocation);
+ }
+
}
1
0
Author: vjrj
Date: 2008-09-15 06:12:48 +0200 (Mon, 15 Sep 2008)
New Revision: 871
Added:
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonSeparator.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionCollectionSet.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionEnableCondition.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionMenuDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/errors/ContainerNotPermittedException.java
Modified:
trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatContentPresenter.java
trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java
trunk/src/main/java/org/ourproject/kune/chat/server/ChatServerTool.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/server/DocumentServerTool.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/InitDataDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/StateDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/CreationService.java
trunk/src/main/java/org/ourproject/kune/platf/server/content/CreationServiceDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
trunk/src/main/java/org/ourproject/kune/platf/server/state/State.java
trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/tool/ServerTool.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceGetTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java
Log:
better context support, more complete action definitions, some server fixes
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatContentPresenter.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatContentPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -53,7 +53,7 @@
}
public void onEnterRoom() {
- final String roomName = state.getFolder().getName();
+ final String roomName = state.getContainer().getName();
emiteUIDialog.joinRoom(XmppURI.uri(roomName));
}
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -43,7 +43,7 @@
public void setState(final StateDTO state) {
final RoomsAdmin rooms = roomAdminsProvider.get();
- rooms.showRoom(state.getStateToken(), state.getFolder(), state.getFolderRights());
+ rooms.showRoom(state.getStateToken(), state.getContainer(), state.getContainerRights());
view.show(rooms.getView());
}
}
Modified: trunk/src/main/java/org/ourproject/kune/chat/server/ChatServerTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/server/ChatServerTool.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/chat/server/ChatServerTool.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -21,6 +21,7 @@
package org.ourproject.kune.chat.server;
import org.ourproject.kune.chat.client.ChatClientTool;
+import org.ourproject.kune.platf.client.errors.ContainerNotPermittedException;
import org.ourproject.kune.platf.server.content.ContainerManager;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
@@ -44,40 +45,49 @@
@Inject
public ChatServerTool(final ToolConfigurationManager configurationManager, final ContainerManager containerManager) {
- this.configurationManager = configurationManager;
- this.containerManager = containerManager;
+ this.configurationManager = configurationManager;
+ this.containerManager = containerManager;
}
public String getName() {
- return NAME;
+ return NAME;
}
- public void onCreateContainer(final Container container, final Container parent) {
- if (!parent.getTypeId().equals(TYPE_ROOT)) {
- throw new RuntimeException();
- }
- container.setTypeId(TYPE_ROOM);
+ public Group initGroup(final User user, final Group group) {
+ final ToolConfiguration config = new ToolConfiguration();
+ final Container container = containerManager.createRootFolder(group, NAME, ROOT_NAME, TYPE_ROOT);
+ config.setRoot(container);
+ group.setToolConfig(NAME, config);
+ configurationManager.persist(config);
+ return group;
}
- public void onCreateContent(final Content content, final Container parent) {
- if (parent.getTypeId().equals(TYPE_ROOM)) {
- throw new RuntimeException();
- }
- content.setTypeId(TYPE_CHAT);
+ public void onCreateContainer(final Container container, final Container parent, final String typeId) {
+ checkTypeId(parent.getTypeId(), typeId);
+ container.setTypeId(typeId);
}
- public Group initGroup(final User user, final Group group) {
- ToolConfiguration config = new ToolConfiguration();
- Container container = containerManager.createRootFolder(group, NAME, ROOT_NAME, TYPE_ROOT);
- config.setRoot(container);
- group.setToolConfig(NAME, config);
- configurationManager.persist(config);
- return group;
+ public void onCreateContent(final Content content, final Container parent) {
+ if (parent.getTypeId().equals(TYPE_ROOM)) {
+ throw new RuntimeException();
+ }
+ content.setTypeId(TYPE_CHAT);
}
@Inject
public void register(final ToolRegistry registry) {
- registry.register(this);
+ registry.register(this);
}
+ private void checkTypeId(final String parentTypeId, final String typeId) {
+ if (typeId.equals(TYPE_ROOM)) {
+ if (!parentTypeId.equals(TYPE_ROOT)) {
+ throw new ContainerNotPermittedException();
+ }
+ // ok valid container
+ } else {
+ throw new ContainerNotPermittedException();
+ }
+ }
+
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -21,9 +21,14 @@
package org.ourproject.kune.docs.client;
import org.ourproject.kune.docs.client.ctx.DocumentContext;
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.actions.ActionPosition;
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.InitDataDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
@@ -95,30 +100,17 @@
}
private void createActions() {
- final ActionDescriptor<StateToken> addFolder = new ActionDescriptor<StateToken>(AccessRolDTO.Editor,
- ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
- public void onEvent(final StateToken parameter) {
- contentServiceProvider.get().addFolder(session.getUserHash(),
- session.getCurrentState().getGroup().getShortName(), new Long(parameter.getFolder()),
- i18n.t("New folder"), new AsyncCallbackSimple<StateDTO>() {
- public void onSuccess(final StateDTO state) {
- contextNavigator.setState(state);
- stateManager.setRetrievedState(state);
- contextNavigator.editItem(state.getStateToken());
- }
- });
- }
- });
- addFolder.setTextDescription(i18n.t("New folder"));
- addFolder.setParentMenuTitle(i18n.t("New"));
- addFolder.setIconUrl("images/nav/folder_add.png");
+ final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png",
+ i18n.t("New folder"), i18n.t("File"), i18n.t("New"));
+ final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY, "images/nav/gallery.png",
+ i18n.t("New gallery"), i18n.t("File"), i18n.t("New"));
- final ActionDescriptor<StateToken> addDoc = new ActionDescriptor<StateToken>(AccessRolDTO.Editor,
+ final ActionMenuDescriptor<StateToken> addDoc = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor,
ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
public void onEvent(final StateToken token) {
contentServiceProvider.get().addContent(session.getUserHash(),
session.getCurrentState().getGroup().getShortName(),
- session.getCurrentState().getFolder().getId(), i18n.t("New document"),
+ session.getCurrentState().getContainer().getId(), i18n.t("New document"),
new AsyncCallbackSimple<StateDTO>() {
public void onSuccess(final StateDTO state) {
contextNavigator.setState(state);
@@ -130,22 +122,24 @@
}
});
addDoc.setTextDescription(i18n.t("New document"));
- addDoc.setParentMenuTitle(i18n.t("New"));
+ addDoc.setParentMenuTitle(i18n.t("File"));
+ addDoc.setParentSubMenuTitle(i18n.t("New"));
addDoc.setIconUrl("images/nav/page_add.png");
- final ActionDescriptor<StateToken> delContainer = new ActionDescriptor<StateToken>(AccessRolDTO.Administrator,
- ActionPosition.itemMenu, new Slot<StateToken>() {
+ final ActionMenuDescriptor<StateToken> delContainer = new ActionMenuDescriptor<StateToken>(
+ AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
public void onEvent(final StateToken token) {
Site.info("Sorry, in development");
}
});
- delContainer.setTextDescription(i18n.t("Delete"));
+ delContainer.setParentMenuTitle(i18n.t("File"));
+ delContainer.setTextDescription(i18n.t("Delete folder"));
delContainer.setMustBeConfirmed(true);
delContainer.setConfirmationTitle(i18n.t("Please confirm"));
delContainer.setConfirmationText(i18n.t("You will delete it and also all its contents. Are you sure?"));
- final ActionDescriptor<StateToken> delContent = new ActionDescriptor<StateToken>(AccessRolDTO.Administrator,
- ActionPosition.itemMenu, new Slot<StateToken>() {
+ final ActionMenuDescriptor<StateToken> delContent = new ActionMenuDescriptor<StateToken>(
+ AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
public void onEvent(final StateToken token) {
contentServiceProvider.get().delContent(session.getUserHash(),
session.getCurrentState().getGroup().getShortName(), token.getDocument(),
@@ -157,7 +151,8 @@
});
}
});
- delContent.setTextDescription(i18n.t("Delete"));
+ delContent.setParentMenuTitle(i18n.t("File"));
+ delContent.setTextDescription(i18n.t("Delete document"));
delContent.setMustBeConfirmed(true);
delContent.setConfirmationTitle(i18n.t("Please confirm"));
delContent.setConfirmationText(i18n.t("Are you sure?"));
@@ -179,7 +174,31 @@
});
rename.setTextDescription(i18n.t("Rename"));
- final ActionDescriptor<StateToken> refresh = new ActionDescriptor<StateToken>(AccessRolDTO.Viewer,
+ final ActionButtonDescriptor<StateToken> goGroupHome = new ActionButtonDescriptor<StateToken>(
+ AccessRolDTO.Viewer, ActionPosition.topbar, new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ stateManager.gotoToken(token.getGroup());
+ }
+ });
+ goGroupHome.setIconUrl("images/group-home.png");
+ goGroupHome.setLeftSeparator(ActionButtonSeparator.fill);
+ goGroupHome.setRightSeparator(ActionButtonSeparator.separator);
+ goGroupHome.setEnableCondition(new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken param) {
+ return !param.equals(session.getCurrentState().getStateToken());
+ }
+ });
+
+ final ActionMenuDescriptor<StateToken> setAsDefGroupContent = new ActionMenuDescriptor<StateToken>(
+ AccessRolDTO.Administrator, ActionPosition.itemMenu, new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ Site.info("In development");
+ }
+ });
+ setAsDefGroupContent.setTextDescription(i18n.t("Set this as the group default page"));
+ setAsDefGroupContent.setIconUrl("images/group-home.png");
+
+ final ActionButtonDescriptor<StateToken> refresh = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Viewer,
ActionPosition.topbar, new Slot<StateToken>() {
public void onEvent(StateToken stateToken) {
stateManager.reload();
@@ -189,38 +208,87 @@
refresh.setIconUrl("images/nav/refresh.png");
refresh.setToolTip(i18n.t("Refresh"));
- final ActionDescriptor<StateToken> uploadFile = new ActionDescriptor<StateToken>(AccessRolDTO.Editor,
- ActionPosition.bootombarAndItemMenu, new Slot<StateToken>() {
- public void onEvent(final StateToken token) {
- fileUploaderProvider.get().show();
- }
- });
- uploadFile.setTextDescription(i18n.t("Upload file"));
- uploadFile.setIconUrl("images/nav/upload.png");
- uploadFile.setToolTip(i18n.t("Upload some files (images, PDFs, etc)"));
+ final ActionDescriptor<StateToken> uploadFile = createUploadAction(i18n.t("Upload file"),
+ "images/nav/upload.png", i18n.t("Upload some files (images, PDFs, ...)"), null);
- contextNavigator.addAction(TYPE_FOLDER, go);
+ session.onInitDataReceived(new Slot<InitDataDTO>() {
+ public void onEvent(final InitDataDTO parameter) {
+ final ActionDescriptor<StateToken> uploadMedia = createUploadAction(i18n.t("Upload media"),
+ "images/nav/upload.png", i18n.t("Upload some media (images, videos)"), session
+ .getGalleryPermittedExtensions());
+ contextNavigator.addAction(TYPE_GALLERY, uploadMedia);
+ }
+ });
+
+ // contextNavigator.addAction(TYPE_FOLDER, go);
contextNavigator.addAction(TYPE_FOLDER, addDoc);
contextNavigator.addAction(TYPE_FOLDER, addFolder);
contextNavigator.addAction(TYPE_FOLDER, delContainer);
contextNavigator.addAction(TYPE_FOLDER, rename);
+ contextNavigator.addAction(TYPE_FOLDER, goGroupHome);
contextNavigator.addAction(TYPE_FOLDER, refresh);
contextNavigator.addAction(TYPE_FOLDER, uploadFile);
contextNavigator.addAction(TYPE_BLOG, uploadFile);
- contextNavigator.addAction(TYPE_GALLERY, uploadFile);
+ contextNavigator.addAction(TYPE_BLOG, setAsDefGroupContent);
+ contextNavigator.addAction(TYPE_GALLERY, goGroupHome);
+
contextNavigator.addAction(TYPE_ROOT, addDoc);
contextNavigator.addAction(TYPE_ROOT, addFolder);
+ contextNavigator.addAction(TYPE_ROOT, addGallery);
+ contextNavigator.addAction(TYPE_ROOT, goGroupHome);
contextNavigator.addAction(TYPE_ROOT, refresh);
contextNavigator.addAction(TYPE_ROOT, uploadFile);
- contextNavigator.addAction(TYPE_DOCUMENT, go);
+ // contextNavigator.addAction(TYPE_DOCUMENT, go);
contextNavigator.addAction(TYPE_DOCUMENT, delContent);
contextNavigator.addAction(TYPE_DOCUMENT, rename);
+ contextNavigator.addAction(TYPE_DOCUMENT, goGroupHome);
contextNavigator.addAction(TYPE_DOCUMENT, refresh);
+ contextNavigator.addAction(TYPE_DOCUMENT, setAsDefGroupContent);
}
+ private ActionMenuDescriptor<StateToken> createFolderAction(final String contentTypeId, final String iconUrl,
+ final String textDescription, final String parentMenuTitle, final String parentMenuSubtitle) {
+ final ActionMenuDescriptor<StateToken> addFolder;
+ addFolder = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.topbarAndItemMenu,
+ new Slot<StateToken>() {
+ public void onEvent(final StateToken parameter) {
+ contentServiceProvider.get().addFolder(session.getUserHash(),
+ session.getCurrentState().getGroup().getShortName(), new Long(parameter.getFolder()),
+ textDescription, contentTypeId, new AsyncCallbackSimple<StateDTO>() {
+ public void onSuccess(final StateDTO state) {
+ contextNavigator.setState(state);
+ stateManager.setRetrievedState(state);
+ contextNavigator.editItem(state.getStateToken());
+ }
+ });
+ }
+ });
+ addFolder.setTextDescription(textDescription);
+ addFolder.setParentMenuTitle(parentMenuTitle);
+ addFolder.setParentSubMenuTitle(parentMenuSubtitle);
+ addFolder.setIconUrl(iconUrl);
+ return addFolder;
+ }
+
+ private ActionDescriptor<StateToken> createUploadAction(final String textDescription, final String iconUrl,
+ final String toolTip, final String permitedExtensions) {
+ final ActionButtonDescriptor<StateToken> uploadFile;
+ uploadFile = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.bootombarAndItemMenu,
+ new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ fileUploaderProvider.get().setPermittedExtensions(permitedExtensions);
+ fileUploaderProvider.get().show();
+ }
+ });
+ uploadFile.setTextDescription(textDescription);
+ uploadFile.setIconUrl(iconUrl);
+ uploadFile.setToolTip(toolTip);
+ return uploadFile;
+ }
+
private void registerDragDropTypes() {
contextNavigator.registerDraggableType(TYPE_DOCUMENT);
contextNavigator.registerDraggableType(TYPE_FOLDER);
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -139,7 +139,7 @@
view.setContent(editor.getView());
} else {
final FolderEditor editor = folderEditorProvider.get();
- editor.setFolder(content.getFolder());
+ editor.setFolder(content.getContainer());
view.setContent(editor.getView());
}
onEditing.fire();
@@ -197,7 +197,7 @@
docReaderProvider.get().show();
} else {
final FolderViewer viewer = folderViewerProvider.get();
- viewer.setFolder(content.getFolder());
+ viewer.setFolder(content.getContainer());
view.setContent(viewer.getView());
}
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/server/DocumentServerTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/server/DocumentServerTool.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/docs/server/DocumentServerTool.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -20,6 +20,7 @@
package org.ourproject.kune.docs.server;
+import org.ourproject.kune.platf.client.errors.ContainerNotPermittedException;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
import org.ourproject.kune.platf.server.content.ContainerManager;
import org.ourproject.kune.platf.server.content.ContentManager;
@@ -81,8 +82,9 @@
return group;
}
- public void onCreateContainer(final Container container, final Container parent) {
- container.setTypeId(TYPE_FOLDER);
+ public void onCreateContainer(final Container container, final Container parent, final String typeId) {
+ checkTypeId(parent.getTypeId(), typeId);
+ container.setTypeId(typeId);
}
public void onCreateContent(final Content content, final Container parent) {
@@ -94,4 +96,15 @@
registry.register(this);
}
+ private void checkTypeId(final String parentTypeId, final String typeId) {
+ if (typeId.equals(TYPE_FOLDER) || typeId.equals(TYPE_GALLERY)) {
+ // ok valid container
+ if (typeId.equals(TYPE_GALLERY) && !parentTypeId.equals(TYPE_ROOT)) {
+ throw new ContainerNotPermittedException();
+ }
+ } else {
+ throw new ContainerNotPermittedException();
+ }
+ }
+
}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonDescriptor.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonDescriptor.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -0,0 +1,40 @@
+package org.ourproject.kune.platf.client.actions;
+
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+
+import com.calclab.suco.client.signal.Slot;
+
+public class ActionButtonDescriptor<T> extends ActionDescriptor<T> {
+
+ private ActionButtonSeparator leftSeparator;
+ private ActionButtonSeparator rightSeparator;
+
+ public ActionButtonDescriptor(final AccessRolDTO accessRolDTO, final ActionPosition actionPosition,
+ final Slot<T> onPerformCall) {
+ super(accessRolDTO, actionPosition, onPerformCall);
+ }
+
+ public ActionButtonSeparator getLeftSeparator() {
+ return leftSeparator;
+ }
+
+ public ActionButtonSeparator getRightSeparator() {
+ return rightSeparator;
+ }
+
+ public boolean hasLeftSeparator() {
+ return leftSeparator != null;
+ }
+
+ public boolean hasRightSeparator() {
+ return rightSeparator != null;
+ }
+
+ public void setLeftSeparator(final ActionButtonSeparator leftSeparator) {
+ this.leftSeparator = leftSeparator;
+ }
+
+ public void setRightSeparator(final ActionButtonSeparator rightSeparator) {
+ this.rightSeparator = rightSeparator;
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonSeparator.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonSeparator.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonSeparator.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.client.actions;
+
+public enum ActionButtonSeparator {
+ spacer, separator, fill
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionCollectionSet.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionCollectionSet.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionCollectionSet.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -0,0 +1,21 @@
+package org.ourproject.kune.platf.client.actions;
+
+
+public class ActionCollectionSet<T> {
+
+ private final ActionCollection<T> toolbarActions;
+ private final ActionCollection<T> itemActions;
+
+ public ActionCollectionSet() {
+ toolbarActions = new ActionCollection<T>();
+ itemActions = new ActionCollection<T>();
+ }
+
+ public ActionCollection<T> getItemActions() {
+ return itemActions;
+ }
+
+ public ActionCollection<T> getToolbarActions() {
+ return toolbarActions;
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -3,7 +3,6 @@
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import org.ourproject.kune.platf.client.services.ImageDescriptor;
-import com.allen_sauer.gwt.log.client.Log;
import com.calclab.suco.client.signal.Slot;
public class ActionDescriptor<T> {
@@ -17,11 +16,6 @@
private String confirmationTitle;
private String confirmationText;
- private boolean isMenuAction;
- private String parentMenuTitle;
- private String parentMenuIconUrl;
- private String parentSubMenuTitle;
-
private final Slot<T> onPerformCall;
private final Slot<T> onNotConfirmed;
@@ -29,6 +23,8 @@
private ActionPosition actionPosition;
+ private ActionEnableCondition<T> enableCondition;
+
public ActionDescriptor(final AccessRolDTO accessRolDTO, final ActionPosition actionPosition,
final Slot<T> onPerformCall) {
accessRol = accessRolDTO;
@@ -36,9 +32,14 @@
this.onPerformCall = onPerformCall;
mustBeConfirmed = false;
onNotConfirmed = null;
- isMenuAction = false;
}
+ public ActionDescriptor(final AccessRolDTO accessRolDTO, final ActionPosition actionPosition,
+ final Slot<T> onPerformCall, final ActionEnableCondition<T> enableCondition) {
+ this(accessRolDTO, actionPosition, onPerformCall);
+ this.enableCondition = enableCondition;
+ }
+
@SuppressWarnings("unchecked")
public void fireOnNotConfirmed(final Object parameter) {
if (onNotConfirmed != null) {
@@ -67,6 +68,10 @@
return confirmationTitle;
}
+ public ActionEnableCondition<T> getEnableCondition() {
+ return enableCondition;
+ }
+
public ImageDescriptor getIconDescriptor() {
return iconDescriptor;
}
@@ -75,18 +80,6 @@
return iconUrl;
}
- public String getParentMenuIconUrl() {
- return parentMenuIconUrl;
- }
-
- public String getParentMenuTitle() {
- return parentMenuTitle;
- }
-
- public String getParentSubMenuTitle() {
- return parentSubMenuTitle;
- }
-
public String getText() {
return textDescription;
}
@@ -95,10 +88,6 @@
return toolTip;
}
- public boolean isMenuAction() {
- return isMenuAction;
- }
-
public boolean isMustBeConfirmed() {
return mustBeConfirmed;
}
@@ -119,6 +108,10 @@
this.confirmationTitle = confirmationTitle;
}
+ public void setEnableCondition(final ActionEnableCondition<T> enableCondition) {
+ this.enableCondition = enableCondition;
+ }
+
public void setIconDescriptor(final ImageDescriptor iconDescriptor) {
this.iconDescriptor = iconDescriptor;
}
@@ -131,22 +124,6 @@
this.mustBeConfirmed = mustBeConfirmed;
}
- public void setParentMenuIconUrl(final String parentMenuIconUrl) {
- this.parentMenuIconUrl = parentMenuIconUrl;
- }
-
- public void setParentMenuTitle(final String parentMenuTitle) {
- isMenuAction = true;
- this.parentMenuTitle = parentMenuTitle;
- }
-
- public void setParentSubMenuTitle(final String parentSubMenuTitle) {
- if (parentMenuTitle == null) {
- Log.warn("Please set parentMenuTitle before");
- }
- this.parentSubMenuTitle = parentSubMenuTitle;
- }
-
public void setTextDescription(final String textDescription) {
this.textDescription = textDescription;
}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionEnableCondition.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionEnableCondition.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionEnableCondition.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.client.actions;
+
+public interface ActionEnableCondition<T> {
+ boolean mustBeEnabled(T param);
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionMenuDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionMenuDescriptor.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionMenuDescriptor.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -0,0 +1,45 @@
+package org.ourproject.kune.platf.client.actions;
+
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.suco.client.signal.Slot;
+
+public class ActionMenuDescriptor<T> extends ActionDescriptor<T> {
+
+ private String parentMenuTitle;
+ private String parentMenuIconUrl;
+ private String parentSubMenuTitle;
+
+ public ActionMenuDescriptor(final AccessRolDTO accessRolDTO, final ActionPosition actionPosition,
+ final Slot<T> onPerformCall) {
+ super(accessRolDTO, actionPosition, onPerformCall);
+ }
+
+ public String getParentMenuIconUrl() {
+ return parentMenuIconUrl;
+ }
+
+ public String getParentMenuTitle() {
+ return parentMenuTitle;
+ }
+
+ public String getParentSubMenuTitle() {
+ return parentSubMenuTitle;
+ }
+
+ public void setParentMenuIconUrl(final String parentMenuIconUrl) {
+ this.parentMenuIconUrl = parentMenuIconUrl;
+ }
+
+ public void setParentMenuTitle(final String parentMenuTitle) {
+ this.parentMenuTitle = parentMenuTitle;
+ }
+
+ public void setParentSubMenuTitle(final String parentSubMenuTitle) {
+ if (parentMenuTitle == null) {
+ Log.warn("Please set parentMenuTitle before");
+ }
+ this.parentSubMenuTitle = parentSubMenuTitle;
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/InitDataDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/InitDataDTO.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/InitDataDTO.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -36,6 +36,8 @@
private String defaultWsTheme;
private String[] wsThemes;
private String siteLogoUrl;
+ private String galleryPermittedExtensions;
+ private String maxFileSizeInMb;
public String getChatDomain() {
return chatDomain;
@@ -57,6 +59,10 @@
return defaultWsTheme;
}
+ public String getGalleryPermittedExtensions() {
+ return galleryPermittedExtensions;
+ }
+
public ArrayList<I18nLanguageSimpleDTO> getLanguages() {
return languages;
}
@@ -65,6 +71,10 @@
return licenses;
}
+ public String getMaxFileSizeInMb() {
+ return maxFileSizeInMb;
+ }
+
public String getSiteDomain() {
return siteDomain;
}
@@ -109,6 +119,10 @@
this.defaultWsTheme = defaultWsTheme;
}
+ public void setGalleryPermittedExtensions(final String galleryPermittedExtensions) {
+ this.galleryPermittedExtensions = galleryPermittedExtensions;
+ }
+
public void setLanguages(final ArrayList<I18nLanguageSimpleDTO> languages) {
this.languages = languages;
}
@@ -117,6 +131,10 @@
this.licenses = licenses;
}
+ public void setMaxFileSizeInMb(final String maxFileSizeInMb) {
+ this.maxFileSizeInMb = maxFileSizeInMb;
+ }
+
public void setSiteDomain(final String siteDomain) {
this.siteDomain = siteDomain;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/StateDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/StateDTO.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/StateDTO.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -32,11 +32,12 @@
private String title;
private String toolName;
private GroupDTO group;
- private ContainerDTO folder;
+ private ContainerDTO container;
+ private ContainerDTO rootContainer;
private SocialNetworkDTO socialNetwork;
private AccessListsDTO accessLists;
private AccessRightsDTO contentRights;
- private AccessRightsDTO folderRights;
+ private AccessRightsDTO containerRights;
private AccessRightsDTO groupRights;
private ContentStatusDTO status;
private boolean isRateable;
@@ -72,6 +73,10 @@
return authors;
}
+ public ContainerDTO getContainer() {
+ return container;
+ }
+
public String getContent() {
return content;
}
@@ -88,14 +93,10 @@
return documentId;
}
- public ContainerDTO getFolder() {
- return folder;
+ public AccessRightsDTO getContainerRights() {
+ return containerRights;
}
- public AccessRightsDTO getFolderRights() {
- return folderRights;
- }
-
public GroupDTO getGroup() {
return this.group;
}
@@ -136,6 +137,10 @@
return rateByUsers;
}
+ public ContainerDTO getRootContainer() {
+ return rootContainer;
+ }
+
public SocialNetworkDTO getSocialNetwork() {
return socialNetwork;
}
@@ -185,6 +190,14 @@
this.authors = authors;
}
+ public void setContainer(final ContainerDTO container) {
+ this.container = container;
+ }
+
+ public void setContainerRights(final AccessRightsDTO containerRights) {
+ this.containerRights = containerRights;
+ }
+
public void setContent(final String content) {
this.content = content;
}
@@ -201,14 +214,6 @@
this.documentId = docRef;
}
- public void setFolder(final ContainerDTO folder) {
- this.folder = folder;
- }
-
- public void setFolderRights(final AccessRightsDTO folderRights) {
- this.folderRights = folderRights;
- }
-
public void setGroup(final GroupDTO group) {
this.group = group;
}
@@ -253,6 +258,10 @@
this.rateByUsers = rateByUsers;
}
+ public void setRootContainer(final ContainerDTO rootContainer) {
+ this.rootContainer = rootContainer;
+ }
+
public void setSocialNetwork(final SocialNetworkDTO socialNetwork) {
this.socialNetwork = socialNetwork;
}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/errors/ContainerNotPermittedException.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/errors/ContainerNotPermittedException.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/errors/ContainerNotPermittedException.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -0,0 +1,26 @@
+/*
+ *
+ * Copyright (C) 2007-2008 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 org.ourproject.kune.platf.client.errors;
+
+
+public class ContainerNotPermittedException extends DefaultException {
+ private static final long serialVersionUID = 1L;
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentService.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -45,7 +45,8 @@
StateDTO addContent(String user, String groupShortName, Long parentFolderId, String name) throws DefaultException;
- StateDTO addFolder(String hash, String groupShortName, Long parentFolderId, String title) throws DefaultException;
+ StateDTO addFolder(String hash, String groupShortName, Long parentFolderId, String typeId, String title)
+ throws DefaultException;
StateDTO addRoom(String user, String groupShortName, Long parentFolderId, String name) throws DefaultException;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/rpc/ContentServiceAsync.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -34,19 +34,19 @@
public interface ContentServiceAsync {
void addAuthor(String userHash, String groupShortName, String documentId, String authorShortName,
- AsyncCallback<?> asyncCallback);
+ AsyncCallback<?> asyncCallback);
void addComment(String userHash, String groupShortName, String documentId, Long parentCommentId,
- String commentText, AsyncCallback<CommentDTO> asyncCallback);
+ String commentText, AsyncCallback<CommentDTO> asyncCallback);
void addComment(String userHash, String groupShortName, String documentId, String commentText,
- AsyncCallback<CommentDTO> asyncCallback);
+ AsyncCallback<CommentDTO> asyncCallback);
void addContent(String user, String groupShortName, Long parentFolderId, String name,
- AsyncCallback<StateDTO> callback);
+ AsyncCallback<StateDTO> callback);
- void addFolder(String hash, String groupShortName, Long parentFolderId, String title,
- AsyncCallback<StateDTO> callback);
+ void addFolder(String hash, String groupShortName, Long parentFolderId, String title, String typeId,
+ AsyncCallback<StateDTO> callback);
void addRoom(String user, String groupShortName, Long parentFolderId, String name, AsyncCallback<StateDTO> callback);
@@ -57,29 +57,29 @@
void getSummaryTags(String userHash, String groupShortName, AsyncCallback<List<TagResultDTO>> asyncCallback);
void markCommentAsAbuse(String userHash, String groupShortName, String documentId, Long commentId,
- AsyncCallback<CommentDTO> asyncCallback);
+ AsyncCallback<CommentDTO> asyncCallback);
void rateContent(String userHash, String groupShortName, String documentId, Double value,
- AsyncCallback<?> asyncCallback);
+ AsyncCallback<?> asyncCallback);
void removeAuthor(String userHash, String groupShortName, String documentId, String authorShortName,
- AsyncCallback<?> asyncCallback);
+ AsyncCallback<?> asyncCallback);
void rename(String userHash, String groupShortName, String token, String newName,
- AsyncCallback<String> asyncCallback);
+ AsyncCallback<String> asyncCallback);
void save(String user, String groupShortName, String documentId, String content,
- AsyncCallback<Integer> asyncCallback);
+ AsyncCallback<Integer> asyncCallback);
void setLanguage(String userHash, String groupShortName, String documentId, String languageCode,
- AsyncCallback<I18nLanguageDTO> asyncCallback);
+ AsyncCallback<I18nLanguageDTO> asyncCallback);
void setPublishedOn(String userHash, String groupShortName, String documentId, Date publishedOn,
- AsyncCallback<?> asyncCallback);
+ AsyncCallback<?> asyncCallback);
void setTags(String userHash, String groupShortName, String documentId, String tags,
- AsyncCallback<List<TagResultDTO>> asyncCallback);
+ AsyncCallback<List<TagResultDTO>> asyncCallback);
void voteComment(String userHash, String groupShortName, String documentId, Long commentId, boolean votePositive,
- AsyncCallback<CommentDTO> asyncCallback);
+ AsyncCallback<CommentDTO> asyncCallback);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -70,6 +70,8 @@
UserInfoDTO getCurrentUserInfo();
+ String getGalleryPermittedExtensions();
+
String getUserHash();
void onInitDataReceived(Slot<InitDataDTO> slot);
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -91,6 +91,10 @@
return currentUserInfo;
}
+ public String getGalleryPermittedExtensions() {
+ return initData.getGalleryPermittedExtensions();
+ }
+
public List<I18nLanguageSimpleDTO> getLanguages() {
return initData.getLanguages();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -4,7 +4,7 @@
void hide();
- void setPermittedExtensions(String[] extensions);
+ void setPermittedExtensions(String extensions);
void show();
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -1,6 +1,7 @@
package org.ourproject.kune.platf.client.ui.dialogs;
import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.platf.client.ui.KuneStringUtils;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
import org.ourproject.kune.workspace.client.site.Site;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
@@ -81,8 +82,8 @@
dialog.hide();
}
- public void setPermittedExtensions(final String[] extensions) {
- dialog.setPermittedExtensions(extensions);
+ public void setPermittedExtensions(final String extensions) {
+ dialog.setPermittedExtensions((String[]) KuneStringUtils.splitTags(extensions).toArray());
}
public void show() {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/CreationService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/CreationService.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/CreationService.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -28,10 +28,10 @@
public interface CreationService {
- Content saveContent(User editor, Content descriptor, String content);
-
Content createContent(String title, String body, User user, Container container);
- Container createFolder(Group group, Long parentFolderId, String name, I18nLanguage language);
+ Container createFolder(Group group, Long parentFolderId, String name, I18nLanguage language, String contentTypeId);
+ Content saveContent(User editor, Content descriptor, String content);
+
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/content/CreationServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/CreationServiceDefault.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/CreationServiceDefault.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -38,30 +38,30 @@
@Inject
public CreationServiceDefault(final ContainerManager containerManager, final ContentManager contentManager,
- final ToolRegistry toolRegistry) {
- this.containerManager = containerManager;
- this.contentManager = contentManager;
- this.tools = toolRegistry;
+ final ToolRegistry toolRegistry) {
+ this.containerManager = containerManager;
+ this.contentManager = contentManager;
+ this.tools = toolRegistry;
}
public Content createContent(final String title, final String body, final User user, final Container container) {
- String toolName = container.getToolName();
- Content content = contentManager.createContent(title, body, user, container);
- tools.get(toolName).onCreateContent(content, container);
- return content;
+ final String toolName = container.getToolName();
+ final Content content = contentManager.createContent(title, body, user, container);
+ tools.get(toolName).onCreateContent(content, container);
+ return content;
}
public Container createFolder(final Group group, final Long parentFolderId, final String name,
- final I18nLanguage language) {
- Container parent = containerManager.find(parentFolderId);
- String toolName = parent.getToolName();
- Container child = containerManager.createFolder(group, parent, name, language);
- tools.get(toolName).onCreateContainer(child, parent);
- return child;
+ final I18nLanguage language, final String typeId) {
+ final Container parent = containerManager.find(parentFolderId);
+ final String toolName = parent.getToolName();
+ final Container child = containerManager.createFolder(group, parent, name, language);
+ tools.get(toolName).onCreateContainer(child, parent, typeId);
+ return child;
}
public Content saveContent(final User editor, final Content descriptor, final String content) {
- return contentManager.save(editor, descriptor, content);
+ return contentManager.save(editor, descriptor, content);
}
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -25,6 +25,7 @@
import javax.persistence.NoResultException;
+import org.ourproject.kune.chat.server.ChatServerTool;
import org.ourproject.kune.chat.server.managers.ChatConnection;
import org.ourproject.kune.chat.server.managers.XmppManager;
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
@@ -162,12 +163,12 @@
@Authorizated(accessTypeRequired = AccessType.EDIT)
@Transactional(type = TransactionType.READ_WRITE)
public StateDTO addFolder(final String userHash, final String groupShortName, final Long parentFolderId,
- final String title) throws DefaultException {
+ final String title, final String contentTypeId) throws DefaultException {
final Group group = groupManager.findByShortName(groupShortName);
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
final boolean userIsLoggedIn = userSession.isUserLoggedIn();
- final State state = createFolder(groupShortName, parentFolderId, title);
+ final State state = createFolder(groupShortName, parentFolderId, title, contentTypeId);
completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
}
@@ -187,7 +188,7 @@
xmppManager.createRoom(connection, roomName, userShortName + userHash);
xmppManager.disconnect(connection);
try {
- final State state = createFolder(groupShortName, parentFolderId, roomName);
+ final State state = createFolder(groupShortName, parentFolderId, roomName, ChatServerTool.TYPE_ROOM);
completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
} catch (final ContentNotFoundException e) {
@@ -394,21 +395,17 @@
state.setParticipation(socialNetworkManager.findParticipation(user, group));
}
- private State createFolder(final String groupShortName, final Long parentFolderId, final String title)
- throws DefaultException {
+ private State createFolder(final String groupShortName, final Long parentFolderId, final String title,
+ final String typeId) throws DefaultException {
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
final Group group = groupManager.findByShortName(groupShortName);
Access access = accessService.getFolderAccess(group, parentFolderId, user, AccessType.EDIT);
- final Container container = creationService.createFolder(group, parentFolderId, title, user.getLanguage());
- final String toolName = container.getToolName();
- // Trying not to enter in new folder:
- // final StateToken token = new StateToken(group.getShortName(),
- // toolName, container.getId().toString(), null);
- final StateToken token = new StateToken(group.getShortName(), toolName, parentFolderId.toString(), null);
- access = accessService.getAccess(user, token, group, AccessType.READ);
+ final Container container = creationService.createFolder(group, parentFolderId, title, user.getLanguage(),
+ typeId);
+ access = accessService.getAccess(user, container.getStateToken(), group, AccessType.EDIT);
final State state = stateService.create(access);
return state;
}
@@ -421,14 +418,21 @@
return userSessionProvider.get();
}
+ private void mapContentRightsInstate(final User user, final AccessLists groupAccessList, final ContentDTO siblingDTO) {
+ final Content sibling = contentManager.find(siblingDTO.getId());
+ final AccessLists lists = sibling.hasAccessList() ? sibling.getAccessLists() : groupAccessList;
+ siblingDTO.setRights(mapper.map(rightsService.get(user, lists), AccessRightsDTO.class));
+ }
+
private StateDTO mapState(final State state, final User user, final Group group) {
final StateDTO stateDTO = mapper.map(state, StateDTO.class);
- final AccessLists groupAccesList = group.getSocialNetwork().getAccessLists();
- for (final ContentDTO siblingDTO : stateDTO.getFolder().getContents()) {
- final Content sibling = contentManager.find(siblingDTO.getId());
- final AccessLists lists = sibling.hasAccessList() ? sibling.getAccessLists() : groupAccesList;
- siblingDTO.setRights(mapper.map(rightsService.get(user, lists), AccessRightsDTO.class));
+ final AccessLists groupAccessList = group.getSocialNetwork().getAccessLists();
+ for (final ContentDTO siblingDTO : stateDTO.getRootContainer().getContents()) {
+ mapContentRightsInstate(user, groupAccessList, siblingDTO);
}
+ for (final ContentDTO siblingDTO : stateDTO.getContainer().getContents()) {
+ mapContentRightsInstate(user, groupAccessList, siblingDTO);
+ }
return stateDTO;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/state/State.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/state/State.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/state/State.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -43,9 +43,10 @@
private String toolName;
private Group group;
private Container container;
+ private Container rootContainer;
private AccessLists accessLists;
private AccessRights contentRights;
- private AccessRights folderRights;
+ private AccessRights containerRights;
private AccessRights groupRights;
private ContentStatus status;
private boolean isRateable;
@@ -74,6 +75,14 @@
return authors;
}
+ public Container getContainer() {
+ return container;
+ }
+
+ public AccessRights getContainerRights() {
+ return containerRights;
+ }
+
public String getContent() {
return content;
}
@@ -90,14 +99,6 @@
return documentId;
}
- public Container getFolder() {
- return container;
- }
-
- public AccessRights getFolderRights() {
- return folderRights;
- }
-
public Group getGroup() {
return group;
}
@@ -138,6 +139,10 @@
return rateByUsers;
}
+ public Container getRootContainer() {
+ return rootContainer;
+ }
+
public StateToken getStateToken() {
return stateToken;
}
@@ -174,6 +179,14 @@
this.authors = authors;
}
+ public void setContainer(final Container container) {
+ this.container = container;
+ }
+
+ public void setContainerRights(final AccessRights containerRights) {
+ this.containerRights = containerRights;
+ }
+
public void setContent(final String content) {
this.content = content;
}
@@ -190,14 +203,6 @@
this.documentId = docRef;
}
- public void setFolder(final Container container) {
- this.container = container;
- }
-
- public void setFolderRights(final AccessRights folderRights) {
- this.folderRights = folderRights;
- }
-
public void setGroup(final Group group) {
this.group = group;
}
@@ -250,6 +255,10 @@
}
}
+ public void setRootContainer(final Container rootContainer) {
+ this.rootContainer = rootContainer;
+ }
+
public void setStateToken(final StateToken stateToken) {
this.stateToken = stateToken;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -54,6 +54,11 @@
state.setLanguage(container.getLanguage());
state.setStateToken(container.getStateToken());
}
+ if (!container.isRoot()) {
+ state.setRootContainer(container.getAbsolutePath().get(0));
+ } else {
+ state.setRootContainer(container);
+ }
final Revision revision = content.getLastRevision();
final char[] text = revision.getBody();
state.setContent(text == null ? null : new String(text));
@@ -64,10 +69,10 @@
}
state.setToolName(container.getToolName());
state.setGroup(container.getOwner());
- state.setFolder(container);
+ state.setContainer(container);
state.setAccessLists(access.getContentAccessLists());
state.setContentRights(access.getContentRights());
- state.setFolderRights(access.getFolderRights());
+ state.setContainerRights(access.getFolderRights());
state.setGroupRights(access.getGroupRights());
License contentLicense = content.getLicense();
if (contentLicense == null) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/tool/ServerTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/tool/ServerTool.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/tool/ServerTool.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -33,13 +33,13 @@
*/
public interface ServerTool {
+ public void onCreateContainer(Container container, Container parent, String typeId);
+
+ public void onCreateContent(Content content, Container parent);
+
public void register(ToolRegistry registry);
String getName();
Group initGroup(User user, Group group);
-
- public void onCreateContent(Content content, Container parent);
-
- public void onCreateContainer(Container container, Container parent);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -23,8 +23,11 @@
import java.util.ArrayList;
import java.util.HashMap;
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.actions.ActionPosition;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
@@ -38,9 +41,11 @@
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.Node;
import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.layout.FitLayout;
import com.gwtext.client.widgets.menu.BaseItem;
import com.gwtext.client.widgets.menu.Item;
import com.gwtext.client.widgets.menu.Menu;
@@ -60,7 +65,7 @@
private final HashMap<String, Menu> toolbarMenus;
private final WorkspaceSkeleton ws;
private final ContextNavigatorPresenter presenter;
- private final ArrayList<ToolbarButton> buttons;
+ private final ArrayList<Widget> removableToolbarItems;
private final HashMap<String, Item> menuItems;
public ContextNavigatorPanel(final ContextNavigatorPresenter presenter, final I18nTranslationService i18n,
@@ -70,11 +75,11 @@
contextMenus = new HashMap<String, Menu>();
toolbarMenus = new HashMap<String, Menu>();
- buttons = new ArrayList<ToolbarButton>();
+ removableToolbarItems = new ArrayList<Widget>();
menuItems = new HashMap<String, Item>();
}
- public void addButtonAction(final ActionDescriptor<StateToken> action) {
+ public void addButtonAction(final ActionButtonDescriptor<StateToken> action) {
final ActionPosition pos = action.getActionPosition();
final ToolbarButton button = new ToolbarButton();
final String text = action.getText();
@@ -89,8 +94,16 @@
});
button.setIcon(action.getIconUrl());
button.setTooltip(action.getToolTip());
- getToolbar(pos).add(button);
- buttons.add(button);
+
+ final Toolbar toolbar = getToolbar(pos);
+ if (action.hasLeftSeparator()) {
+ removableToolbarItems.add(add(toolbar, action.getLeftSeparator()));
+ }
+ toolbar.add(button);
+ if (action.hasRightSeparator()) {
+ removableToolbarItems.add(add(toolbar, action.getRightSeparator()));
+ }
+ removableToolbarItems.add(button);
}
public void addItem(final ContextNavigatorItem item) {
@@ -151,18 +164,19 @@
}
- public void addMenuAction(final ActionDescriptor<StateToken> action, final boolean enable) {
+ public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) {
final String menuTitle = action.getParentMenuTitle();
final String menuSubTitle = action.getParentSubMenuTitle();
final ActionPosition pos = action.getActionPosition();
final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
Item item = menuItems.get(itemKey);
if (item == null) {
- item = createMenuItem(pos, menuTitle, menuSubTitle, action);
+ item = createToolbarMenu(pos, menuTitle, menuSubTitle, action);
menuItems.put(itemKey, item);
} else {
}
- if (enable) {
+ if (enable) { // && action.getEnableCondition().mustBeEnabled(param))
+ // ) {
item.enable();
} else {
item.disable();
@@ -179,9 +193,17 @@
contextMenus.clear();
toolbarMenus.clear();
menuItems.clear();
- buttons.clear();
+ removableToolbarItems.clear();
}
+ public void clearRemovableActions() {
+ for (final Widget widget : removableToolbarItems) {
+ widget.removeFromParent();
+ }
+ removableToolbarItems.clear();
+ doLayoutIfNeeded();
+ }
+
public void disableAllMenuItems() {
for (final Item item : menuItems.values()) {
item.disable();
@@ -193,14 +215,6 @@
treeEditor.startEdit(getNode(id));
}
- public void removeAllButtons() {
- for (final ToolbarButton button : buttons) {
- button.removeFromParent();
- }
- buttons.clear();
- doLayoutIfNeeded();
- }
-
public void selectItem(final String id) {
final TreeNode item = getNode(id);
if (item != null) {
@@ -221,9 +235,10 @@
node.setText(text);
}
- public void setRootItem(final String id, final String text, final StateToken stateToken) {
+ public void setRootItem(final String id, final String text, final StateToken stateToken,
+ final ActionCollection<StateToken> actions) {
if (treePanel == null || treePanel.getNodeById(id) == null) {
- createTreePanel(id, text, stateToken);
+ createTreePanel(id, text, stateToken, actions);
}
}
@@ -231,6 +246,18 @@
getToolbar(toolbar).add(widget);
}
+ private Widget add(final Toolbar toolbar, final ActionButtonSeparator separator) {
+ switch (separator) {
+ case fill:
+ return toolbar.addFill();
+ case separator:
+ return toolbar.addSeparator();
+ case spacer:
+ default:
+ return toolbar.addSpacer();
+ }
+ }
+
private void createItemMenu(final String nodeId, final ActionCollection<StateToken> actionCollection,
final StateToken stateToken) {
DeferredCommand.addCommand(new Command() {
@@ -259,8 +286,8 @@
});
}
- private Item createMenuItem(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
- final ActionDescriptor<StateToken> action) {
+ private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
+ final ActionMenuDescriptor<StateToken> action) {
final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
@Override
public void onClick(BaseItem item, EventObject e) {
@@ -314,7 +341,8 @@
return menu;
}
- private void createTreePanel(final String rootId, final String text, final StateToken stateToken) {
+ private void createTreePanel(final String rootId, final String text, final StateToken stateToken,
+ final ActionCollection<StateToken> actions) {
if (treePanel != null) {
clear();
}
@@ -330,10 +358,11 @@
root.setText(text);
root.setHref("#" + stateToken);
root.expand();
+ createItemMenu(rootId, actions, stateToken);
treePanel.addListener(new TreePanelListenerAdapter() {
public void onContextMenu(final TreeNode node, final EventObject e) {
final Menu menu = contextMenus.get(node.getId());
- if (menu != null) {
+ if (menu != null && menu.getItems().length != 0) {
menu.showAt(e.getXY());
} else {
Log.info("Empty item menu");
@@ -345,9 +374,12 @@
treePanel.setRootNode(root);
final TextField field = new TextField();
treeEditor = new TreeEditor(treePanel, field);
- // final Panel panel = new Panel();
- // panel.setBorder(false);
- // panel.add(treePanel);
+ final Panel panel = new Panel();
+ panel.setLayout(new FitLayout());
+ panel.setBorder(false);
+ panel.setAutoScroll(true);
+ panel.add(treePanel);
+
ws.getEntityWorkspace().setContext(treePanel);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -24,9 +24,12 @@
import java.util.HashMap;
import org.ourproject.kune.platf.client.View;
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionCollection;
+import org.ourproject.kune.platf.client.actions.ActionCollectionSet;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
import org.ourproject.kune.platf.client.dto.ContainerDTO;
import org.ourproject.kune.platf.client.dto.ContainerSimpleDTO;
@@ -177,7 +180,7 @@
public void selectItem(final StateToken stateToken) {
view.selectItem(genId(stateToken));
- view.removeAllButtons();
+ view.clearRemovableActions();
view.disableAllMenuItems();
setActions(actionsByItem.get(stateToken), true);
}
@@ -187,54 +190,55 @@
}
public void setState(final StateDTO state) {
- final ContainerDTO container = state.getFolder();
+ final ContainerDTO container = state.getContainer();
final StateToken stateToken = state.getStateToken();
- createTreePath(stateToken, container.getAbsolutePath(), state.getFolderRights());
+ final AccessRightsDTO containerRights = state.getContainerRights();
- ActionCollection<StateToken> selectedToolbarActions;
+ // If root sended (container is not a root folder) process root (add
+ // childs to view)
+ final ContainerDTO root = state.getRootContainer();
+ if (root != null) {
+ final ActionCollectionSet<StateToken> set = createItemActions(containerRights, root.getTypeId());
+ view.setRootItem(genId(root.getStateToken()), i18n.t(root.getName()), root.getStateToken(), set
+ .getItemActions());
+ setActions(set.getToolbarActions(), false);
+ createChildItems(root, containerRights);
+ actionsByItem.put(root.getStateToken(), set.getToolbarActions());
+ }
+ // Do the path to our current content
+ createTreePath(stateToken, container.getAbsolutePath(), containerRights);
+
+ // Process our current content/container
if (state.hasDocument()) {
- selectedToolbarActions = addItem(state.getTitle(), state.getTypeId(), state.getStatus(), stateToken,
- container.getStateToken(), state.getContentRights(), false);
+ addItem(state.getTitle(), state.getTypeId(), state.getStatus(), stateToken, container.getStateToken(),
+ state.getContentRights(), false);
} else {
- selectedToolbarActions = addItem(container.getName(), container.getTypeId(),
- ContentStatusDTO.publishedOnline, container.getStateToken(), container.getStateToken().clone()
- .setFolder(container.getParentFolderId()), state.getFolderRights(), false);
+ addItem(container.getName(), container.getTypeId(), ContentStatusDTO.publishedOnline, container
+ .getStateToken(), container.getStateToken().clone().setFolder(container.getParentFolderId()),
+ containerRights, false);
}
- for (final ContentDTO content : container.getContents()) {
- addItem(content.getTitle(), content.getTypeId(), content.getStatus(), content.getStateToken(), content
- .getStateToken().clone().clearDocument(), content.getRights(), false);
- }
+ // Process container childs
+ createChildItems(container, containerRights);
- for (final ContainerSimpleDTO siblingFolder : container.getChilds()) {
- addItem(siblingFolder.getName(), siblingFolder.getTypeId(), ContentStatusDTO.publishedOnline, siblingFolder
- .getStateToken(), siblingFolder.getStateToken().clone()
- .setFolder(siblingFolder.getParentFolderId()), state.getFolderRights(), false);
- }
-
- actionsByItem.put(stateToken, selectedToolbarActions);
-
+ // Finaly
selectItem(stateToken);
}
- private ActionCollection<StateToken> addItem(final String title, final String contentTypeId,
- final ContentStatusDTO status, final StateToken stateToken, final StateToken parentStateToken,
- final AccessRightsDTO rights, final boolean isNodeSelected) {
- final ActionCollection<StateToken> toolbarActions = new ActionCollection<StateToken>();
- final ActionCollection<StateToken> itemActions = new ActionCollection<StateToken>();
+ private void addItem(final String title, final String contentTypeId, final ContentStatusDTO status,
+ final StateToken stateToken, final StateToken parentStateToken, final AccessRightsDTO rights,
+ final boolean isNodeSelected) {
- createItemActions(rights, contentTypeId, toolbarActions, itemActions);
+ final ActionCollectionSet<StateToken> set = createItemActions(rights, contentTypeId);
+ setActions(set.getToolbarActions(), isNodeSelected);
- setActions(toolbarActions, isNodeSelected);
-
final ContextNavigatorItem item = new ContextNavigatorItem(genId(stateToken), genId(parentStateToken),
getContentTypeIcon(contentTypeId), title, status, stateToken, isDraggable(contentTypeId, rights
- .isAdministrable()), isDroppable(contentTypeId, rights.isAdministrable()), itemActions);
+ .isAdministrable()), isDroppable(contentTypeId, rights.isAdministrable()), set.getItemActions());
view.addItem(item);
-
- return toolbarActions;
+ actionsByItem.put(stateToken, set.getToolbarActions());
}
private void clear() {
@@ -242,8 +246,21 @@
actionsByItem.clear();
}
- private void createItemActions(final AccessRightsDTO rights, final String contentTypeId,
- final ActionCollection<StateToken> toolbarActionas, final ActionCollection<StateToken> itemActions) {
+ private void createChildItems(final ContainerDTO container, final AccessRightsDTO containerRights) {
+ for (final ContentDTO content : container.getContents()) {
+ addItem(content.getTitle(), content.getTypeId(), content.getStatus(), content.getStateToken(), content
+ .getStateToken().clone().clearDocument(), content.getRights(), false);
+ }
+
+ for (final ContainerSimpleDTO siblingFolder : container.getChilds()) {
+ addItem(siblingFolder.getName(), siblingFolder.getTypeId(), ContentStatusDTO.publishedOnline, siblingFolder
+ .getStateToken(), siblingFolder.getStateToken().clone()
+ .setFolder(siblingFolder.getParentFolderId()), containerRights, false);
+ }
+ }
+
+ private ActionCollectionSet<StateToken> createItemActions(final AccessRightsDTO rights, final String contentTypeId) {
+ final ActionCollectionSet<StateToken> set = new ActionCollectionSet<StateToken>();
boolean add = false;
for (final ActionDescriptor<StateToken> action : actions.get(contentTypeId)) {
@@ -261,21 +278,22 @@
if (add) {
switch (action.getActionPosition()) {
case topbarAndItemMenu:
- itemActions.add(action);
+ set.getItemActions().add(action);
case topbar:
- toolbarActionas.add(action);
+ set.getToolbarActions().add(action);
break;
case bootombarAndItemMenu:
- itemActions.add(action);
+ set.getItemActions().add(action);
case bottombar:
- toolbarActionas.add(action);
+ set.getToolbarActions().add(action);
break;
case itemMenu:
- itemActions.add(action);
+ set.getItemActions().add(action);
break;
}
}
}
+ return set;
}
private void createTreePath(final StateToken state, final ContainerSimpleDTO[] absolutePath,
@@ -289,8 +307,7 @@
addItem(folder.getName(), folder.getTypeId(), ContentStatusDTO.publishedOnline, folderStateToken,
parentStateToken, rights, false);
} else {
- // create root folder
- view.setRootItem(genId(folderStateToken), i18n.t(folder.getName()), folderStateToken);
+ // Root must be already created
}
}
}
@@ -314,11 +331,11 @@
private void setActions(final ActionCollection<StateToken> actions, final boolean isNodeSelected) {
for (final ActionDescriptor<StateToken> action : actions) {
- if (action.isMenuAction()) {
- view.addMenuAction(action, isNodeSelected);
+ if (action instanceof ActionMenuDescriptor) {
+ view.addMenuAction((ActionMenuDescriptor<StateToken>) action, isNodeSelected);
} else {
if (isNodeSelected) {
- view.addButtonAction(action);
+ view.addButtonAction((ActionButtonDescriptor<StateToken>) action);
}
}
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -21,16 +21,18 @@
package org.ourproject.kune.workspace.client.ctxnav;
import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionCollection;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.dto.StateToken;
public interface ContextNavigatorView extends View {
- void addButtonAction(ActionDescriptor<StateToken> action);
+ void addButtonAction(ActionButtonDescriptor<StateToken> action);
void addItem(ContextNavigatorItem contextNavigatorItem);
- void addMenuAction(ActionDescriptor<StateToken> action, boolean enable);
+ void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable);
void clear();
@@ -38,12 +40,12 @@
void editItem(String id);
- void removeAllButtons();
+ void clearRemovableActions();
void selectItem(String id);
void setItemText(String id, String text);
- void setRootItem(String id, String text, StateToken stateToken);
+ void setRootItem(String id, String text, StateToken stateToken, ActionCollection<StateToken> actions);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -118,7 +118,7 @@
setContentDateVisible(true);
setContentDate(state.getPublishedOn());
} else {
- if (state.getFolder().getParentFolderId() == null) {
+ if (state.getContainer().getParentFolderId() == null) {
// We translate root folder names (documents, chat room,
// etcetera)
setContentTitle(i18n.t(state.getTitle()), false);
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -7,6 +7,7 @@
import org.junit.Before;
import org.junit.Test;
+import org.ourproject.kune.docs.client.DocumentClientTool;
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
import org.ourproject.kune.platf.client.dto.ContainerDTO;
import org.ourproject.kune.platf.client.dto.ContainerSimpleDTO;
@@ -31,7 +32,7 @@
@Test(expected = UserMustBeLoggedException.class)
public void noLoggedInShouldThrowIllegalAccess() throws ContentNotFoundException, Exception {
defaultContent = getDefaultContent();
- final Long folderId = defaultContent.getFolder().getId();
+ final Long folderId = defaultContent.getContainer().getId();
contentService.addContent(session.getHash(), groupName, folderId, "a name");
}
@@ -39,20 +40,20 @@
public void testAddContent() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- assertEquals(1, defaultContent.getFolder().getContents().size());
+ assertEquals(1, defaultContent.getContainer().getContents().size());
final AccessRightsDTO cntRights = defaultContent.getContentRights();
- final AccessRightsDTO ctxRights = defaultContent.getFolderRights();
+ final AccessRightsDTO ctxRights = defaultContent.getContainerRights();
final AccessRightsDTO groupRights = defaultContent.getGroupRights();
final String title = "New Content Title";
- final StateDTO added = contentService.addContent(session.getHash(), groupName, defaultContent.getFolder()
+ final StateDTO added = contentService.addContent(session.getHash(), groupName, defaultContent.getContainer()
.getId(), title);
assertNotNull(added);
- final List<ContentDTO> contents = added.getFolder().getContents();
+ final List<ContentDTO> contents = added.getContainer().getContents();
assertEquals(title, added.getTitle());
assertEquals(2, contents.size());
assertEquals(cntRights, added.getContentRights());
- assertEquals(ctxRights, added.getFolderRights());
+ assertEquals(ctxRights, added.getContainerRights());
assertEquals(groupRights, added.getGroupRights());
assertNotNull(added.getGroupMembers());
assertNotNull(added.getParticipation());
@@ -61,7 +62,7 @@
final StateToken newState = added.getStateToken();
final StateDTO sameAgain = contentService.getContent(session.getHash(), groupName, newState);
assertNotNull(sameAgain);
- assertEquals(2, sameAgain.getFolder().getContents().size());
+ assertEquals(2, sameAgain.getContainer().getContents().size());
}
@@ -69,15 +70,20 @@
public void testAddFolder() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- final ContainerDTO parent = defaultContent.getFolder();
+ final ContainerDTO parent = defaultContent.getContainer();
final String title = "folder name";
- final StateDTO newState = contentService.addFolder(session.getHash(), groupName, parent.getId(), title);
+ final StateDTO newState = contentService.addFolder(session.getHash(), groupName, parent.getId(), title,
+ DocumentClientTool.TYPE_FOLDER);
assertNotNull(newState);
assertNotNull(newState.getGroupMembers());
assertNotNull(newState.getParticipation());
assertNotNull(newState.getAccessLists());
+ assertNotNull(newState.getContainerRights());
+ assertNotNull(newState.getGroupRights());
+ assertNotNull(newState.getRootContainer().getContents().get(0).getRights());
+ assertNotNull(newState.getContainer().getContents().get(0).getRights());
- final ContainerDTO parentAgain = getDefaultContent().getFolder();
+ final ContainerDTO parentAgain = getDefaultContent().getContainer();
final ContainerSimpleDTO child = parentAgain.getChilds().get(0);
assertEquals(parent.getId(), child.getParentFolderId());
@@ -89,7 +95,7 @@
public void testAddRoom() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- final ContainerDTO parent = defaultContent.getFolder();
+ final ContainerDTO parent = defaultContent.getContainer();
final String roomName = "testroom";
final StateDTO newState = contentService.addRoom(session.getHash(), groupName, parent.getId(), roomName);
assertNotNull(newState);
@@ -99,15 +105,17 @@
public void testAddTwoFolders() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- final ContainerDTO parent = defaultContent.getFolder();
+ final ContainerDTO parent = defaultContent.getContainer();
final String title = "folder name";
- final StateDTO newState = contentService.addFolder(session.getHash(), groupName, parent.getId(), title);
+ final StateDTO newState = contentService.addFolder(session.getHash(), groupName, parent.getId(), title,
+ DocumentClientTool.TYPE_FOLDER);
assertNotNull(newState);
- final StateDTO newState2 = contentService.addFolder(session.getHash(), groupName, parent.getId(), title);
+ final StateDTO newState2 = contentService.addFolder(session.getHash(), groupName, parent.getId(), title,
+ DocumentClientTool.TYPE_FOLDER);
assertNotNull(newState2);
- final ContainerDTO parentAgain = getDefaultContent().getFolder();
+ final ContainerDTO parentAgain = getDefaultContent().getContainer();
assertEquals(parent.getId(), parentAgain.getId());
assertEquals(2, parentAgain.getChilds().size());
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceGetTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceGetTest.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceGetTest.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -35,8 +35,8 @@
final StateDTO content = contentService.getContent(null, groupName, new StateToken());
assertNotNull(content);
assertNotNull(content.getGroup());
- assertNotNull(content.getFolder());
- assertNotNull(content.getFolder().getId());
+ assertNotNull(content.getContainer());
+ assertNotNull(content.getContainer().getId());
assertNotNull(content.getToolName());
assertNotNull(content.getDocumentId());
assertNotNull(content.getRateByUsers());
@@ -81,9 +81,9 @@
assertFalse(content.getContentRights().isAdministrable());
assertFalse(content.getContentRights().isEditable());
assertTrue(content.getContentRights().isVisible());
- assertFalse(content.getFolderRights().isAdministrable());
- assertFalse(content.getFolderRights().isEditable());
- assertTrue(content.getFolderRights().isVisible());
+ assertFalse(content.getContainerRights().isAdministrable());
+ assertFalse(content.getContainerRights().isEditable());
+ assertTrue(content.getContainerRights().isVisible());
}
@Test
@@ -91,8 +91,8 @@
final StateDTO content = contentService.getContent(null, groupName, new StateToken("site.docs"));
assertNotNull(content);
assertNotNull(content.getGroup());
- assertNotNull(content.getFolder());
- assertNotNull(content.getFolder().getId());
+ assertNotNull(content.getContainer());
+ assertNotNull(content.getContainer().getId());
assertNotNull(content.getToolName());
}
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java 2008-09-13 10:27:22 UTC (rev 870)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceVariousTest.java 2008-09-15 04:12:48 UTC (rev 871)
@@ -6,8 +6,8 @@
import org.junit.Before;
import org.junit.Test;
+import org.ourproject.kune.docs.client.DocumentClientTool;
import org.ourproject.kune.platf.client.dto.ContainerDTO;
-import org.ourproject.kune.platf.client.dto.ContainerSimpleDTO;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.dto.TagResultDTO;
@@ -60,13 +60,14 @@
public void folderRename() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- final ContainerDTO folder = defaultContent.getFolder();
+ final ContainerDTO folder = defaultContent.getContainer();
final String oldTitle = "some title";
String newTitle = "folder new name";
- final StateDTO newState = contentService.addFolder(session.getHash(), groupShortName, folder.getId(), oldTitle);
+ final StateDTO newState = contentService.addFolder(session.getHash(), groupShortName, folder.getId(), oldTitle,
+ DocumentClientTool.TYPE_FOLDER);
- final ContainerSimpleDTO newFolder = newState.getFolder().getChilds().get(0);
+ final ContainerDTO newFolder = newState.getContainer();
assertEquals(oldTitle, newFolder.getName());
@@ -80,7 +81,7 @@
newFolder.getId().toString(), null);
StateDTO folderAgain = contentService.getContent(getHash(), groupShortName, newFolderToken);
- assertEquals(newTitle, folderAgain.getFolder().getName());
+ assertEquals(newTitle, folderAgain.getContainer().getName());
newTitle = "folder last name";
@@ -88,7 +89,7 @@
folderAgain = contentService.getContent(getHash(), groupShortName, newFolderToken);
- assertEquals(newTitle, folderAgain.getFolder().getName());
+ assertEquals(newTitle, folderAgain.getContainer().getName());
}
@@ -96,7 +97,7 @@
public void folderRenameOtherGroupFails() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- final ContainerDTO folder = defaultContent.getFolder();
+ final ContainerDTO folder = defaultContent.getContainer();
final StateToken folderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(), folder
.getId().toString(), null);
@@ -108,7 +109,7 @@
public void folderRootRenameMustFail() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- final ContainerDTO folder = defaultContent.getFolder();
+ final ContainerDTO folder = defaultContent.getContainer();
final String newTitle = "folder new name";
final StateToken folderToken = new StateToken(groupShortName, defaultContent.getStateToken().getTool(), folder
@@ -117,7 +118,7 @@
assertEquals(newTitle, result);
- final ContainerDTO folderAgain = getDefaultContent().getFolder();
+ final ContainerDTO folderAgain = getDefaultContent().getContainer();
assertEquals(newTitle, folderAgain.getName());
}
@@ -161,13 +162,14 @@
public void tokenRename() throws Exception {
doLogin();
defaultContent = getDefaultContent();
- final ContainerDTO folder = defaultContent.getFolder();
+ final ContainerDTO folder = defaultContent.getContainer();
final String oldTitle = "some title";
String newTitle = "folder new name";
- final StateDTO newState = contentService.addFolder(session.getHash(), groupShortName, folder.getId(), oldTitle);
+ final StateDTO newState = contentService.addFolder(session.getHash(), groupShortName, folder.getId(), oldTitle,
+ DocumentClientTool.TYPE_FOLDER);
- final ContainerSimpleDTO newFolder = newState.getFolder().getChilds().get(0);
+ final ContainerDTO newFolder = newState.getContainer();
assertEquals(oldTitle, newFolder.getName());
@@ -182,7 +184,7 @@
final StateDTO folderAgain = contentService.getContent(getHash(), groupShortName, newFolderToken);
- assertEquals(newTitle, folderAgain.getFolder().getName());
+ assertEquals(newTitle, folderAgain.getContainer().getName());
}
}
1
0
Author: vjrj
Date: 2008-09-13 12:27:22 +0200 (Sat, 13 Sep 2008)
New Revision: 870
Modified:
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
trunk/src/main/java/org/ourproject/kune/platf/server/access/Access.java
trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java
Log:
some Access fixes
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-13 03:32:44 UTC (rev 869)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-13 10:27:22 UTC (rev 870)
@@ -104,7 +104,6 @@
public void onSuccess(final StateDTO state) {
contextNavigator.setState(state);
stateManager.setRetrievedState(state);
- stateManager.reload();
contextNavigator.editItem(state.getStateToken());
}
});
@@ -124,7 +123,6 @@
public void onSuccess(final StateDTO state) {
contextNavigator.setState(state);
stateManager.setRetrievedState(state);
- stateManager.reload();
contextNavigator.editItem(state.getStateToken());
}
});
@@ -186,7 +184,6 @@
public void onEvent(StateToken stateToken) {
stateManager.reload();
contextNavigator.selectItem(stateToken);
-
}
});
refresh.setIconUrl("images/nav/refresh.png");
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/access/Access.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/access/Access.java 2008-09-13 03:32:44 UTC (rev 869)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/access/Access.java 2008-09-13 10:27:22 UTC (rev 870)
@@ -40,21 +40,6 @@
setFolder(container);
}
- public Container getFolder() {
- return container;
- }
-
- public void setContent(final Content descriptor) {
- this.content = descriptor;
- contentAccessLists = descriptor != null ? getContentAccessList(descriptor) : null;
- }
-
- public void setFolder(final Container container) {
- this.container = container;
- folderAccessLists = container != null ? getFolderAccessLists(container) : null;
- groupAccessLists = folderAccessLists;
- }
-
public Content getContent() {
return content;
}
@@ -63,26 +48,47 @@
return contentAccessLists;
}
- public AccessLists getFolderAccessLists() {
- return folderAccessLists;
+ public AccessRights getContentRights() {
+ return contentRights;
}
- public AccessLists getGroupAccessLists() {
- return groupAccessLists;
+ public Container getFolder() {
+ return container;
}
- public AccessRights getContentRights() {
- return contentRights;
+ public AccessLists getFolderAccessLists() {
+ return folderAccessLists;
}
public AccessRights getFolderRights() {
return folderRights;
}
+ public AccessLists getGroupAccessLists() {
+ return groupAccessLists;
+ }
+
public AccessRights getGroupRights() {
return groupRights;
}
+ public boolean hasContentRights() {
+ return contentRights != null;
+ }
+
+ public boolean hasFolderRights() {
+ return folderRights != null;
+ }
+
+ public boolean hasGroupRights() {
+ return groupRights != null;
+ }
+
+ public void setContent(final Content descriptor) {
+ this.content = descriptor;
+ contentAccessLists = descriptor != null ? getContentAccessList(descriptor) : null;
+ }
+
public void setContentRights(final AccessRights accessRights) {
this.contentRights = accessRights;
if (equalsAccessLists()) {
@@ -90,6 +96,17 @@
}
}
+ public void setContentWidthFolderRights(final Content content) {
+ setContent(content);
+ this.contentRights = folderRights;
+ }
+
+ public void setFolder(final Container container) {
+ this.container = container;
+ folderAccessLists = container != null ? getFolderAccessLists(container) : null;
+ groupAccessLists = folderAccessLists;
+ }
+
public void setFolderRights(final AccessRights accessRights) {
this.folderRights = accessRights;
if (equalsAccessLists()) {
@@ -101,18 +118,6 @@
this.groupRights = accessRights;
}
- public boolean hasContentRights() {
- return contentRights != null;
- }
-
- public boolean hasFolderRights() {
- return folderRights != null;
- }
-
- public boolean hasGroupRights() {
- return groupRights != null;
- }
-
private boolean equalsAccessLists() {
if (contentAccessLists == folderAccessLists) {
return true;
@@ -128,7 +133,7 @@
if (descriptor.hasAccessList()) {
accessLists = descriptor.getAccessLists();
} else {
- SocialNetwork socialNetwork = descriptor.getContainer().getOwner().getSocialNetwork();
+ final SocialNetwork socialNetwork = descriptor.getContainer().getOwner().getSocialNetwork();
accessLists = socialNetwork.getAccessLists();
}
return accessLists;
@@ -138,9 +143,4 @@
return container.getOwner().getSocialNetwork().getAccessLists();
}
- public void setContentWidthFolderRights(final Content content) {
- this.content = content;
- this.contentRights = folderRights;
- }
-
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java 2008-09-13 03:32:44 UTC (rev 869)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/access/AccessServiceDefault.java 2008-09-13 10:27:22 UTC (rev 870)
@@ -79,6 +79,7 @@
}
final Access access = new Access(null, folder);
addFolderRights(access, user);
+ addGroupRights(access, user);
return check(access, access.getFolderRights(), accessType);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-13 03:32:44 UTC (rev 869)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-13 10:27:22 UTC (rev 870)
@@ -150,9 +150,11 @@
final Group group = groupManager.findByShortName(groupShortName);
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
+ final boolean userIsLoggedIn = userSession.isUserLoggedIn();
final Access access = accessService.getFolderAccess(group, parentFolderId, user, AccessType.EDIT);
access.setContentWidthFolderRights(creationService.createContent(title, "", user, access.getFolder()));
final State state = stateService.create(access);
+ completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
}
@@ -164,7 +166,10 @@
final Group group = groupManager.findByShortName(groupShortName);
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
- return mapState(createFolder(groupShortName, parentFolderId, title), user, group);
+ final boolean userIsLoggedIn = userSession.isUserLoggedIn();
+ final State state = createFolder(groupShortName, parentFolderId, title);
+ completeState(user, userIsLoggedIn, group, state);
+ return mapState(state, user, group);
}
@Authenticated
@@ -175,13 +180,16 @@
final Group group = groupManager.findByShortName(groupShortName);
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
+ final boolean userIsLoggedIn = userSession.isUserLoggedIn();
final String userShortName = user.getShortName();
final ChatConnection connection = xmppManager.login(userShortName, userSession.getUser().getPassword(),
userHash);
xmppManager.createRoom(connection, roomName, userShortName + userHash);
xmppManager.disconnect(connection);
try {
- return mapState(createFolder(groupShortName, parentFolderId, roomName), user, group);
+ final State state = createFolder(groupShortName, parentFolderId, roomName);
+ completeState(user, userIsLoggedIn, group, state);
+ return mapState(state, user, group);
} catch (final ContentNotFoundException e) {
xmppManager.destroyRoom(connection, roomName);
throw new ContentNotFoundException();
@@ -230,19 +238,8 @@
throw new ContentNotFoundException();
}
final State state = stateService.create(access);
- if (state.isRateable()) {
- final Long contentId = parseId(state.getDocumentId());
- final Content content = contentManager.find(contentId);
- if (userIsLoggedIn) {
- state.setCurrentUserRate(contentManager.getRateContent(user, content));
- }
- state.setRate(contentManager.getRateAvg(content));
- state.setRateByUsers(contentManager.getRateByUsers(content));
- }
final Group group = state.getGroup();
- state.setGroupTags(tagManager.getSummaryByGroup(group));
- state.setGroupMembers(socialNetworkManager.find(user, group));
- state.setParticipation(socialNetworkManager.findParticipation(user, group));
+ completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
}
@@ -381,6 +378,22 @@
return mapper.map(comment, CommentDTO.class);
}
+ private void completeState(final User user, final boolean userIsLoggedIn, final Group group, final State state) {
+ if (state.isRateable()) {
+ final Long contentId = parseId(state.getDocumentId());
+ final Content content = contentManager.find(contentId);
+ if (userIsLoggedIn) {
+ state.setCurrentUserRate(contentManager.getRateContent(user, content));
+ }
+ state.setRate(contentManager.getRateAvg(content));
+ state.setRateByUsers(contentManager.getRateByUsers(content));
+ }
+
+ state.setGroupTags(tagManager.getSummaryByGroup(group));
+ state.setGroupMembers(socialNetworkManager.find(user, group));
+ state.setParticipation(socialNetworkManager.findParticipation(user, group));
+ }
+
private State createFolder(final String groupShortName, final Long parentFolderId, final String title)
throws DefaultException {
final UserSession userSession = getUserSession();
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java 2008-09-13 03:32:44 UTC (rev 869)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java 2008-09-13 10:27:22 UTC (rev 870)
@@ -30,6 +30,7 @@
@Singleton
public class StateServiceDefault implements StateService {
+
public State create(final Access access) {
final Content content = access.getContent();
final Container container = content.getContainer();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-13 03:32:44 UTC (rev 869)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-13 10:27:22 UTC (rev 870)
@@ -205,7 +205,9 @@
final TreeNode item = getNode(id);
if (item != null) {
item.select();
- // Errore item.ensureVisible();
+ if (item.getParentNode() != null) {
+ item.ensureVisible();
+ }
if (item.getChildNodes().length > 0) {
item.expand();
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java 2008-09-13 03:32:44 UTC (rev 869)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/content/ContentServiceAddTest.java 2008-09-13 10:27:22 UTC (rev 870)
@@ -41,7 +41,8 @@
defaultContent = getDefaultContent();
assertEquals(1, defaultContent.getFolder().getContents().size());
final AccessRightsDTO cntRights = defaultContent.getContentRights();
- final AccessRightsDTO ctxRight = defaultContent.getFolderRights();
+ final AccessRightsDTO ctxRights = defaultContent.getFolderRights();
+ final AccessRightsDTO groupRights = defaultContent.getGroupRights();
final String title = "New Content Title";
final StateDTO added = contentService.addContent(session.getHash(), groupName, defaultContent.getFolder()
@@ -51,12 +52,17 @@
assertEquals(title, added.getTitle());
assertEquals(2, contents.size());
assertEquals(cntRights, added.getContentRights());
- assertEquals(ctxRight, added.getFolderRights());
+ assertEquals(ctxRights, added.getFolderRights());
+ assertEquals(groupRights, added.getGroupRights());
+ assertNotNull(added.getGroupMembers());
+ assertNotNull(added.getParticipation());
+ assertNotNull(added.getAccessLists());
final StateToken newState = added.getStateToken();
final StateDTO sameAgain = contentService.getContent(session.getHash(), groupName, newState);
assertNotNull(sameAgain);
assertEquals(2, sameAgain.getFolder().getContents().size());
+
}
@Test
@@ -67,6 +73,9 @@
final String title = "folder name";
final StateDTO newState = contentService.addFolder(session.getHash(), groupName, parent.getId(), title);
assertNotNull(newState);
+ assertNotNull(newState.getGroupMembers());
+ assertNotNull(newState.getParticipation());
+ assertNotNull(newState.getAccessLists());
final ContainerDTO parentAgain = getDefaultContent().getFolder();
final ContainerSimpleDTO child = parentAgain.getChilds().get(0);
1
0
r869 - in trunk/src/main/java/org/ourproject/kune: platf/client/services platf/client/state workspace/client/ctxnav workspace/client/title
by vjrj 13 Sep '08
by vjrj 13 Sep '08
13 Sep '08
Author: vjrj
Date: 2008-09-13 05:32:44 +0200 (Sat, 13 Sep 2008)
New Revision: 869
Modified:
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
Log:
context navigator dinamic toolbars and menus working (but new folder/content action buggy)
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-12 08:10:16 UTC (rev 868)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-13 03:32:44 UTC (rev 869)
@@ -450,7 +450,8 @@
register(SingletonScope.class, new Factory<EntityTitle>(EntityTitle.class) {
public EntityTitle create() {
final EntityTitlePresenter presenter = new EntityTitlePresenter(i18n, $(KuneErrorHandler.class),
- $(StateManager.class), $(Session.class), $$(ContentServiceAsync.class));
+ $(StateManager.class), $(Session.class), $$(ContentServiceAsync.class),
+ $$(ContextNavigator.class));
final EntityTitlePanel panel = new EntityTitlePanel(ws, presenter);
presenter.init(panel);
return presenter;
@@ -589,9 +590,9 @@
register(SingletonScope.class, new Factory<ContextNavigator>(ContextNavigator.class) {
public ContextNavigator create() {
final ContextNavigatorPresenter presenter = new ContextNavigatorPresenter($(StateManager.class),
- $(Session.class), $$(ContentServiceAsync.class), i18n, $(EntityTitle.class));
- final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n, $(StateManager.class),
- ws, $$(ActionManager.class));
+ $(Session.class), $$(ContentServiceAsync.class), i18n, $(EntityTitle.class),
+ $$(ActionManager.class));
+ final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n, ws);
presenter.init(panel);
return presenter;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java 2008-09-12 08:10:16 UTC (rev 868)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java 2008-09-13 03:32:44 UTC (rev 869)
@@ -48,8 +48,6 @@
void reload();
- void reloadContextAndTitles();
-
void removeSiteToken(String token);
void setRetrievedState(StateDTO content);
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java 2008-09-12 08:10:16 UTC (rev 868)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java 2008-09-13 03:32:44 UTC (rev 869)
@@ -80,7 +80,7 @@
public void gotoContainer(final Long containerId) {
final StateToken newStateToken = session.getCurrentState().getStateToken().clone();
newStateToken.clearDocument();
- newStateToken.setFolder(containerId.toString());
+ newStateToken.setFolder(containerId);
gotoToken(newStateToken);
}
@@ -135,20 +135,6 @@
onHistoryChanged(history.getToken());
}
- @Deprecated
- public void reloadContextAndTitles() {
- contentProvider.getContent(session.getUserHash(), new StateToken(history.getToken()),
- new AsyncCallbackSimple<StateDTO>() {
- public void onSuccess(final StateDTO newStateDTO) {
- loadContextOnly(newStateDTO);
- oldState = newStateDTO;
- // workspace.getContentTitleComponent().setState(oldState);
- // workspace.getContentSubTitleComponent().setState(oldState);
- Site.hideProgress();
- }
- });
- }
-
public void removeSiteToken(final String token) {
siteTokens.remove(token);
}
@@ -183,7 +169,6 @@
if (oldState == null || !oldToolName.equals(newToolName)) {
onToolChanged.fire(oldToolName, newToolName);
}
-
}
private void loadContent(final StateDTO state) {
@@ -191,15 +176,6 @@
Site.hideProgress();
}
- @Deprecated
- private void loadContextOnly(final StateDTO state) {
- session.setCurrent(state);
- // /final String toolName = state.getToolName();
- // /final ClientTool clientTool = app.getTool(toolName);
- // /clientTool.setContext(state);
- // /workspace.setContext(clientTool.getContext());
- }
-
private void onHistoryChanged(final StateToken newState) {
contentProvider.getContent(session.getUserHash(), newState, new AsyncCallbackSimple<StateDTO>() {
public void onSuccess(final StateDTO newState) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-12 08:10:16 UTC (rev 868)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-13 03:32:44 UTC (rev 869)
@@ -43,6 +43,8 @@
void selectItem(StateToken stateToken);
+ void setItemText(StateToken stateToken, String name);
+
void setState(StateDTO state);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-12 08:10:16 UTC (rev 868)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-13 03:32:44 UTC (rev 869)
@@ -20,21 +20,21 @@
package org.ourproject.kune.workspace.client.ctxnav;
+import java.util.ArrayList;
import java.util.HashMap;
import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionManager;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
-import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.workspace.client.skel.Toolbar;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.provider.Provider;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.Node;
import com.gwtext.client.widgets.Button;
@@ -59,22 +59,40 @@
private final HashMap<String, Menu> contextMenus;
private final HashMap<String, Menu> toolbarMenus;
private final WorkspaceSkeleton ws;
- private final Provider<ActionManager> actionManagerProvider;
- private final StateManager stateManager;
private final ContextNavigatorPresenter presenter;
+ private final ArrayList<ToolbarButton> buttons;
+ private final HashMap<String, Item> menuItems;
public ContextNavigatorPanel(final ContextNavigatorPresenter presenter, final I18nTranslationService i18n,
- final StateManager stateManager, final WorkspaceSkeleton ws,
- final Provider<ActionManager> actionManagerProvider) {
+ final WorkspaceSkeleton ws) {
this.presenter = presenter;
- this.stateManager = stateManager;
this.ws = ws;
- this.actionManagerProvider = actionManagerProvider;
contextMenus = new HashMap<String, Menu>();
toolbarMenus = new HashMap<String, Menu>();
+ buttons = new ArrayList<ToolbarButton>();
+ menuItems = new HashMap<String, Item>();
}
+ public void addButtonAction(final ActionDescriptor<StateToken> action) {
+ final ActionPosition pos = action.getActionPosition();
+ final ToolbarButton button = new ToolbarButton();
+ final String text = action.getText();
+ if (text != null) {
+ button.setText(text);
+ }
+ button.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(final Button button, final EventObject e) {
+ doAction(action, presenter.getCurrentStateToken());
+ }
+ });
+ button.setIcon(action.getIconUrl());
+ button.setTooltip(action.getToolTip());
+ getToolbar(pos).add(button);
+ buttons.add(button);
+ }
+
public void addItem(final ContextNavigatorItem item) {
final String nodeId = item.getId();
if (treePanel.getNodeById(nodeId) == null) {
@@ -111,14 +129,16 @@
}
});
if (!item.getStateToken().hasAll()) {
+ // is a container
child.setExpandable(true);
child.addListener(new TreeNodeListenerAdapter() {
public void onExpand(final Node node) {
treePanel.getNodeById(node.getId()).select();
- stateManager.gotoToken(getToken(node));
+ presenter.gotoToken(getToken(node));
}
});
} else {
+ // is a document
child.setLeaf(true);
}
parent.appendChild(child);
@@ -131,23 +151,61 @@
}
+ public void addMenuAction(final ActionDescriptor<StateToken> action, final boolean enable) {
+ final String menuTitle = action.getParentMenuTitle();
+ final String menuSubTitle = action.getParentSubMenuTitle();
+ final ActionPosition pos = action.getActionPosition();
+ final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
+ Item item = menuItems.get(itemKey);
+ if (item == null) {
+ item = createMenuItem(pos, menuTitle, menuSubTitle, action);
+ menuItems.put(itemKey, item);
+ } else {
+ }
+ if (enable) {
+ item.enable();
+ } else {
+ item.disable();
+ }
+ doLayoutIfNeeded(pos);
+ }
+
public void clear() {
if (treePanel != null) {
treePanel.clear();
}
+ ws.getEntityWorkspace().getContextTopBar().removeAll();
+ ws.getEntityWorkspace().getContextBottomBar().removeAll();
contextMenus.clear();
toolbarMenus.clear();
+ menuItems.clear();
+ buttons.clear();
}
+ public void disableAllMenuItems() {
+ for (final Item item : menuItems.values()) {
+ item.disable();
+ }
+ doLayoutIfNeeded();
+ }
+
public void editItem(final String id) {
treeEditor.startEdit(getNode(id));
}
+ public void removeAllButtons() {
+ for (final ToolbarButton button : buttons) {
+ button.removeFromParent();
+ }
+ buttons.clear();
+ doLayoutIfNeeded();
+ }
+
public void selectItem(final String id) {
final TreeNode item = getNode(id);
if (item != null) {
item.select();
- item.ensureVisible();
+ // Errore item.ensureVisible();
if (item.getChildNodes().length > 0) {
item.expand();
}
@@ -156,11 +214,6 @@
}
}
- public void setBottomActions(final StateToken stateToken, final ActionCollection<StateToken> actions) {
- final Toolbar toolBar = ws.getEntityWorkspace().getContextBottomBar();
- setToolbarActions(toolBar, stateToken, actions);
- }
-
public void setItemText(final String genId, final String text) {
final TreeNode node = getNode(genId);
node.setText(text);
@@ -168,13 +221,12 @@
public void setRootItem(final String id, final String text, final StateToken stateToken) {
if (treePanel == null || treePanel.getNodeById(id) == null) {
- createTreePanel(id);
+ createTreePanel(id, text, stateToken);
}
}
- public void setTopActions(final StateToken stateToken, final ActionCollection<StateToken> actions) {
- final Toolbar toolBar = ws.getEntityWorkspace().getContextTopBar();
- setToolbarActions(toolBar, stateToken, actions);
+ private void add(final ActionPosition toolbar, final Widget widget) {
+ getToolbar(toolbar).add(widget);
}
private void createItemMenu(final String nodeId, final ActionCollection<StateToken> actionCollection,
@@ -193,7 +245,7 @@
public void onClick(final BaseItem item, final EventObject e) {
DeferredCommand.addCommand(new Command() {
public void execute() {
- actionManagerProvider.get().doAction(action, stateToken);
+ doAction(action, stateToken);
}
});
}
@@ -205,7 +257,45 @@
});
}
- private Menu createToolbarMenu(final Toolbar bar, final String iconUrl, final String menuTitle) {
+ private Item createMenuItem(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
+ final ActionDescriptor<StateToken> action) {
+ final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
+ @Override
+ public void onClick(BaseItem item, EventObject e) {
+ doAction(action, presenter.getCurrentStateToken());
+ }
+ });
+ item.setIcon(action.getIconUrl());
+
+ final String menuKey = genMenuKey(toolBarPos, menuTitle, null, null);
+ final String subMenuKey = genMenuKey(toolBarPos, menuTitle, menuSubTitle, null);
+ Menu menu = toolbarMenus.get(menuKey);
+ Menu subMenu = toolbarMenus.get(subMenuKey);
+ if (menuSubTitle != null) {
+ if (subMenu == null) {
+ subMenu = new Menu();
+ final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
+ if (menu == null) {
+ menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
+ }
+ menu.addItem(subMenuItem);
+ toolbarMenus.put(subMenuKey, subMenu);
+ }
+ subMenu.addItem(item);
+
+ } else {
+ // Menu action without submenu
+ if (menu == null) {
+ menu = createToolbarMenu(toolBarPos, action.getParentMenuIconUrl(), menuTitle, menuKey);
+ }
+ menu.addItem(item);
+ }
+ doLayoutIfNeeded(toolBarPos);
+ return item;
+ }
+
+ private Menu createToolbarMenu(final ActionPosition barPosition, final String iconUrl, final String menuTitle,
+ final String menuKey) {
final Menu menu = new Menu();
final ToolbarButton toolbarMenu = new ToolbarButton(menuTitle);
if (iconUrl != null) {
@@ -217,24 +307,26 @@
menu.showAt(e.getXY());
}
});
- toolbarMenus.put(menuTitle, menu);
- bar.add(toolbarMenu);
+ toolbarMenus.put(menuKey, menu);
+ add(barPosition, toolbarMenu);
return menu;
}
- private void createTreePanel(final String rootId) {
+ private void createTreePanel(final String rootId, final String text, final StateToken stateToken) {
if (treePanel != null) {
clear();
}
treePanel = new TreePanel();
treePanel.setAnimate(true);
treePanel.setBorder(false);
- treePanel.setRootVisible(false);
+ treePanel.setRootVisible(true);
treePanel.setUseArrows(true);
final TreeNode root = new TreeNode();
root.setAllowDrag(false);
root.setExpanded(true);
root.setId(rootId);
+ root.setText(text);
+ root.setHref("#" + stateToken);
root.expand();
treePanel.addListener(new TreePanelListenerAdapter() {
public void onContextMenu(final TreeNode node, final EventObject e) {
@@ -258,9 +350,26 @@
}
private void doAction(final ActionDescriptor<StateToken> action, final StateToken stateToken) {
- actionManagerProvider.get().doAction(action, stateToken);
+ presenter.doAction(action, stateToken);
}
+ private void doLayoutIfNeeded() {
+ doLayoutIfNeeded(ActionPosition.topbar);
+ doLayoutIfNeeded(ActionPosition.bottombar);
+ }
+
+ private void doLayoutIfNeeded(final ActionPosition pos) {
+ getToolbar(pos).doLayoutIfNeeded();
+ }
+
+ private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle,
+ final String actionText) {
+ final String basePart = "km-" + pos.toString() + "-" + menuTitle;
+ final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
+ final String itemPart = actionText != null ? "-item-" + actionText : "";
+ return basePart + subMenuPart + itemPart;
+ }
+
private TreeNode getNode(final String id) {
final TreeNode node = treePanel.getNodeById(id);
if (node == null) {
@@ -273,62 +382,15 @@
return node.getAttribute("href").substring(1);
}
- private void setToolbarActions(final Toolbar toolBar, final StateToken stateToken,
- final ActionCollection<StateToken> actions) {
- toolBar.removeAll();
- for (final ActionDescriptor<StateToken> action : actions) {
- Log.info("Procesing action: " + action.getText());
- if (!action.isMenuAction()) {
- final ToolbarButton button = new ToolbarButton();
- final String text = action.getText();
- if (text != null) {
- button.setText(text);
- }
- button.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- doAction(action, stateToken);
- }
- });
- button.setIcon(action.getIconUrl());
- button.setTooltip(action.getToolTip());
- toolBar.add(button);
- } else {
- // Menu action
- final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
- @Override
- public void onClick(BaseItem item, EventObject e) {
- doAction(action, stateToken);
- }
- });
- item.setIcon(action.getIconUrl());
-
- final String menuTitle = action.getParentMenuTitle();
- final String menuSubTitle = action.getParentSubMenuTitle();
- final String subMenuKey = menuTitle + "-" + menuSubTitle;
- Menu menu = toolbarMenus.get(menuTitle);
- Menu subMenu = toolbarMenus.get(subMenuKey);
- if (menuSubTitle != null) {
- if (subMenu == null) {
- subMenu = new Menu();
- final MenuItem subMenuItem = new MenuItem(menuSubTitle, subMenu);
- if (menu == null) {
- menu = createToolbarMenu(toolBar, action.getParentMenuIconUrl(), menuTitle);
- }
- menu.addItem(subMenuItem);
- toolBar.doLayoutIfNeeded();
- toolbarMenus.put(subMenuKey, subMenu);
- }
- subMenu.addItem(item);
- } else {
- // Menu action without submenu
- if (menu == null) {
- menu = createToolbarMenu(toolBar, action.getParentMenuIconUrl(), menuTitle);
- }
- menu.addItem(item);
- toolBar.doLayoutIfNeeded();
- }
- }
+ private Toolbar getToolbar(final ActionPosition pos) {
+ switch (pos) {
+ case bootombarAndItemMenu:
+ case bottombar:
+ return ws.getEntityWorkspace().getContextBottomBar();
+ case topbar:
+ case topbarAndItemMenu:
+ default:
+ return ws.getEntityWorkspace().getContextTopBar();
}
}
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-12 08:10:16 UTC (rev 868)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-13 03:32:44 UTC (rev 869)
@@ -26,6 +26,7 @@
import org.ourproject.kune.platf.client.View;
import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionManager;
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
import org.ourproject.kune.platf.client.dto.ContainerDTO;
import org.ourproject.kune.platf.client.dto.ContainerSimpleDTO;
@@ -55,20 +56,24 @@
private final Provider<ContentServiceAsync> contentServiceProvider;
private final I18nUITranslationService i18n;
private final HashMap<String, ActionCollection<StateToken>> actions;
+ private final HashMap<StateToken, ActionCollection<StateToken>> actionsByItem;
private final ArrayList<String> draggables;
private final ArrayList<String> droppables;
private final HashMap<String, String> contentTypesIcons;
private final EntityTitle entityTitle;
+ private final Provider<ActionManager> actionManagerProvider;
public ContextNavigatorPresenter(final StateManager stateManager, final Session session,
final Provider<ContentServiceAsync> contentServiceProvider, final I18nUITranslationService i18n,
- final EntityTitle entityTitle) {
+ final EntityTitle entityTitle, final Provider<ActionManager> actionManagerProvider) {
this.stateManager = stateManager;
this.session = session;
this.contentServiceProvider = contentServiceProvider;
this.i18n = i18n;
this.entityTitle = entityTitle;
+ this.actionManagerProvider = actionManagerProvider;
actions = new HashMap<String, ActionCollection<StateToken>>();
+ actionsByItem = new HashMap<StateToken, ActionCollection<StateToken>>();
draggables = new ArrayList<String>();
droppables = new ArrayList<String>();
contentTypesIcons = new HashMap<String, String>();
@@ -83,38 +88,50 @@
actionColl.add(action);
}
+ public void doAction(final ActionDescriptor<StateToken> action, final StateToken stateToken) {
+ actionManagerProvider.get().doAction(action, stateToken);
+ }
+
public void editItem(final StateToken stateToken) {
view.editItem(genId(stateToken));
}
+ public StateToken getCurrentStateToken() {
+ return session.getCurrentState().getStateToken();
+ }
+
public View getView() {
return view;
}
+ public void gotoToken(final String token) {
+ stateManager.gotoToken(token);
+ }
+
public void init(final ContextNavigatorView view) {
this.view = view;
stateManager.onGroupChanged(new Slot2<String, String>() {
public void onEvent(final String oldGroup, final String newGroup) {
if (oldGroup != null) {
- view.clear();
+ clear();
}
}
});
stateManager.onToolChanged(new Slot2<String, String>() {
public void onEvent(final String oldTool, final String newTool) {
if (oldTool != null) {
- view.clear();
+ clear();
}
}
});
session.onUserSignIn(new Slot<UserInfoDTO>() {
public void onEvent(final UserInfoDTO parameter) {
- view.clear();
+ clear();
}
});
session.onUserSignOut(new Slot0() {
public void onEvent() {
- view.clear();
+ clear();
}
});
}
@@ -126,7 +143,7 @@
contentServiceProvider.get().rename(session.getUserHash(), currentState.getGroup().getShortName(), token,
newName, new AsyncCallback<String>() {
public void onFailure(final Throwable caught) {
- view.setItemText(genId(new StateToken(token)), oldName);
+ setItemText(new StateToken(token), oldName);
Site.error(i18n.t("Error renaming"));
Site.hideProgress();
}
@@ -160,54 +177,73 @@
public void selectItem(final StateToken stateToken) {
view.selectItem(genId(stateToken));
+ view.removeAllButtons();
+ view.disableAllMenuItems();
+ setActions(actionsByItem.get(stateToken), true);
}
+ public void setItemText(final StateToken stateToken, final String name) {
+ view.setItemText(genId(stateToken), name);
+ }
+
public void setState(final StateDTO state) {
final ContainerDTO container = state.getFolder();
- createTreePath(state.getStateToken(), container.getAbsolutePath(), state.getFolderRights());
+ final StateToken stateToken = state.getStateToken();
+ createTreePath(stateToken, container.getAbsolutePath(), state.getFolderRights());
+ ActionCollection<StateToken> selectedToolbarActions;
+
if (state.hasDocument()) {
- addItem(state.getTitle(), state.getTypeId(), state.getStatus(), state.getStateToken(), container
- .getStateToken(), state.getContentRights());
+ selectedToolbarActions = addItem(state.getTitle(), state.getTypeId(), state.getStatus(), stateToken,
+ container.getStateToken(), state.getContentRights(), false);
} else {
- addItem(container.getName(), container.getTypeId(), ContentStatusDTO.publishedOnline, container
- .getStateToken(), container.getStateToken().clone().setFolder(container.getParentFolderId()), state
- .getFolderRights());
+ selectedToolbarActions = addItem(container.getName(), container.getTypeId(),
+ ContentStatusDTO.publishedOnline, container.getStateToken(), container.getStateToken().clone()
+ .setFolder(container.getParentFolderId()), state.getFolderRights(), false);
}
for (final ContentDTO content : container.getContents()) {
addItem(content.getTitle(), content.getTypeId(), content.getStatus(), content.getStateToken(), content
- .getStateToken().clone().clearDocument(), content.getRights());
+ .getStateToken().clone().clearDocument(), content.getRights(), false);
}
for (final ContainerSimpleDTO siblingFolder : container.getChilds()) {
addItem(siblingFolder.getName(), siblingFolder.getTypeId(), ContentStatusDTO.publishedOnline, siblingFolder
.getStateToken(), siblingFolder.getStateToken().clone()
- .setFolder(siblingFolder.getParentFolderId()), state.getFolderRights());
+ .setFolder(siblingFolder.getParentFolderId()), state.getFolderRights(), false);
}
- view.selectItem(genId(state.getStateToken()));
+
+ actionsByItem.put(stateToken, selectedToolbarActions);
+
+ selectItem(stateToken);
}
- private void addItem(final String title, final String contentTypeId, final ContentStatusDTO status,
- final StateToken stateToken, final StateToken parentStateToken, final AccessRightsDTO rights) {
- final ActionCollection<StateToken> topActions = new ActionCollection<StateToken>();
+ private ActionCollection<StateToken> addItem(final String title, final String contentTypeId,
+ final ContentStatusDTO status, final StateToken stateToken, final StateToken parentStateToken,
+ final AccessRightsDTO rights, final boolean isNodeSelected) {
+ final ActionCollection<StateToken> toolbarActions = new ActionCollection<StateToken>();
final ActionCollection<StateToken> itemActions = new ActionCollection<StateToken>();
- final ActionCollection<StateToken> bottomActions = new ActionCollection<StateToken>();
- createItemActions(rights, contentTypeId, topActions, itemActions, bottomActions);
+ createItemActions(rights, contentTypeId, toolbarActions, itemActions);
- view.setTopActions(stateToken, topActions);
- view.setBottomActions(stateToken, bottomActions);
+ setActions(toolbarActions, isNodeSelected);
+
final ContextNavigatorItem item = new ContextNavigatorItem(genId(stateToken), genId(parentStateToken),
getContentTypeIcon(contentTypeId), title, status, stateToken, isDraggable(contentTypeId, rights
.isAdministrable()), isDroppable(contentTypeId, rights.isAdministrable()), itemActions);
view.addItem(item);
+
+ return toolbarActions;
}
+ private void clear() {
+ view.clear();
+ actionsByItem.clear();
+ }
+
private void createItemActions(final AccessRightsDTO rights, final String contentTypeId,
- final ActionCollection<StateToken> topActions, final ActionCollection<StateToken> itemActions,
- final ActionCollection<StateToken> bottomActions) {
+ final ActionCollection<StateToken> toolbarActionas, final ActionCollection<StateToken> itemActions) {
boolean add = false;
for (final ActionDescriptor<StateToken> action : actions.get(contentTypeId)) {
@@ -227,12 +263,12 @@
case topbarAndItemMenu:
itemActions.add(action);
case topbar:
- topActions.add(action);
+ toolbarActionas.add(action);
break;
case bootombarAndItemMenu:
itemActions.add(action);
case bottombar:
- bottomActions.add(action);
+ toolbarActionas.add(action);
break;
case itemMenu:
itemActions.add(action);
@@ -251,10 +287,10 @@
if (folder.getParentFolderId() != null) {
addItem(folder.getName(), folder.getTypeId(), ContentStatusDTO.publishedOnline, folderStateToken,
- parentStateToken, rights);
+ parentStateToken, rights, false);
} else {
// create root folder
- view.setRootItem(genId(folderStateToken), i18n.t("contents"), folderStateToken);
+ view.setRootItem(genId(folderStateToken), i18n.t(folder.getName()), folderStateToken);
}
}
}
@@ -265,7 +301,6 @@
private String getContentTypeIcon(final String typeId) {
final String icon = contentTypesIcons.get(typeId);
- // TODO Auto-generated method stub
return icon == null ? "" : icon;
}
@@ -277,4 +312,15 @@
return administrable && droppables.contains(typeId);
}
+ private void setActions(final ActionCollection<StateToken> actions, final boolean isNodeSelected) {
+ for (final ActionDescriptor<StateToken> action : actions) {
+ if (action.isMenuAction()) {
+ view.addMenuAction(action, isNodeSelected);
+ } else {
+ if (isNodeSelected) {
+ view.addButtonAction(action);
+ }
+ }
+ }
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-12 08:10:16 UTC (rev 868)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-13 03:32:44 UTC (rev 869)
@@ -21,25 +21,29 @@
package org.ourproject.kune.workspace.client.ctxnav;
import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionCollection;
+import org.ourproject.kune.platf.client.actions.ActionDescriptor;
import org.ourproject.kune.platf.client.dto.StateToken;
public interface ContextNavigatorView extends View {
+ void addButtonAction(ActionDescriptor<StateToken> action);
+
void addItem(ContextNavigatorItem contextNavigatorItem);
+ void addMenuAction(ActionDescriptor<StateToken> action, boolean enable);
+
void clear();
+ void disableAllMenuItems();
+
void editItem(String id);
+ void removeAllButtons();
+
void selectItem(String id);
- void setBottomActions(StateToken stateToken, ActionCollection<StateToken> actions);
+ void setItemText(String id, String text);
- void setItemText(String genId, String text);
-
void setRootItem(String id, String text, StateToken stateToken);
- void setTopActions(StateToken stateToken, ActionCollection<StateToken> actions);
-
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-12 08:10:16 UTC (rev 868)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-13 03:32:44 UTC (rev 869)
@@ -24,11 +24,13 @@
import org.ourproject.kune.platf.client.View;
import org.ourproject.kune.platf.client.dto.StateDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
import org.ourproject.kune.platf.client.services.KuneErrorHandler;
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
import org.ourproject.kune.workspace.client.site.Site;
import com.calclab.suco.client.provider.Provider;
@@ -41,18 +43,19 @@
private EntityTitleView view;
private final I18nTranslationService i18n;
private final KuneErrorHandler errorHandler;
- private final StateManager stateManager;
private final Provider<ContentServiceAsync> contentServiceProvider;
private final Session session;
+ private final Provider<ContextNavigator> contextNavigatorProvider;
public EntityTitlePresenter(final I18nTranslationService i18n, final KuneErrorHandler errorHandler,
final StateManager stateManager, final Session session,
- final Provider<ContentServiceAsync> contentServiceProvider) {
+ final Provider<ContentServiceAsync> contentServiceProvider,
+ final Provider<ContextNavigator> contextNavigatorProvider) {
this.i18n = i18n;
this.errorHandler = errorHandler;
- this.stateManager = stateManager;
this.session = session;
this.contentServiceProvider = contentServiceProvider;
+ this.contextNavigatorProvider = contextNavigatorProvider;
stateManager.onStateChanged(new Slot<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
@@ -88,8 +91,9 @@
protected void onTitleRename(final String newName) {
Site.showProgressSaving();
final StateDTO currentState = session.getCurrentState();
+ final StateToken stateToken = currentState.getStateToken();
contentServiceProvider.get().rename(session.getUserHash(), currentState.getGroup().getShortName(),
- currentState.getStateToken().getEncoded(), newName, new AsyncCallback<String>() {
+ stateToken.getEncoded(), newName, new AsyncCallback<String>() {
public void onFailure(final Throwable caught) {
view.restoreOldTitle();
errorHandler.process(caught);
@@ -98,7 +102,7 @@
public void onSuccess(final String result) {
Site.hideProgress();
view.setContentTitle(result);
- stateManager.reloadContextAndTitles();
+ contextNavigatorProvider.get().setItemText(stateToken, newName);
}
});
Site.hideProgress();
1
0
12 Sep '08
Author: vjrj
Date: 2008-09-12 10:10:16 +0200 (Fri, 12 Sep 2008)
New Revision: 868
Added:
trunk/debian/TODO
trunk/src/main/java/org/ourproject/kune/platf/server/domain/ContentStatus.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/FileManagerDefaultTest.java
Log:
context navigator adjusts
Added: trunk/debian/TODO
===================================================================
--- trunk/debian/TODO 2008-09-12 08:06:29 UTC (rev 867)
+++ trunk/debian/TODO 2008-09-12 08:10:16 UTC (rev 868)
@@ -0,0 +1,3 @@
+- create user kune
+- create /var/lib/kune/uploads and give permissions
+- create /var/lib/kune/lucene
Added: trunk/src/main/java/org/ourproject/kune/platf/server/domain/ContentStatus.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/ContentStatus.java 2008-09-12 08:06:29 UTC (rev 867)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/ContentStatus.java 2008-09-12 08:10:16 UTC (rev 868)
@@ -0,0 +1,5 @@
+package org.ourproject.kune.platf.server.domain;
+
+public enum ContentStatus {
+ editingInProgress, submittedForEvaluation, publishedOnline, rejected, inTheDustbin
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-12 08:06:29 UTC (rev 867)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-12 08:10:16 UTC (rev 868)
@@ -0,0 +1,9 @@
+package org.ourproject.kune.platf.server.manager;
+
+import org.ourproject.kune.platf.server.domain.Container;
+import org.ourproject.kune.platf.server.domain.Content;
+import org.ourproject.kune.platf.server.domain.User;
+
+public interface FileManager {
+
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-12 08:06:29 UTC (rev 867)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-12 08:10:16 UTC (rev 868)
@@ -0,0 +1,10 @@
+package org.ourproject.kune.platf.server.manager.impl;
+
+import org.ourproject.kune.platf.server.manager.FileManager;
+
+import com.google.inject.Singleton;
+
+@Singleton
+public class FileManagerDefault implements FileManager {
+
+}
Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/FileManagerDefaultTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/FileManagerDefaultTest.java 2008-09-12 08:06:29 UTC (rev 867)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/FileManagerDefaultTest.java 2008-09-12 08:10:16 UTC (rev 868)
@@ -0,0 +1,18 @@
+package org.ourproject.kune.platf.server.manager;
+
+import org.junit.Before;
+import org.ourproject.kune.platf.server.PersistenceTest;
+
+import com.google.inject.Inject;
+
+public class FileManagerDefaultTest extends PersistenceTest {
+
+ @Inject
+ FileManager fileManager;
+
+ @Before
+ public void start() {
+
+ }
+
+}
1
0