Author: solomax
Date: Mon Aug 25 14:28:41 2014
New Revision: 1620328

URL: http://svn.apache.org/r1620328
Log:
[OPENMEETINGS-1038] widgets are better controlled using config

Added:
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
      - copied, changed from r1620327, 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
      - copied, changed from r1620300, 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
      - copied unchanged from r1620300, 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.html
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
      - copied, changed from r1620300, 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
      - copied, changed from r1620327, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
      - copied, changed from r1620300, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
      - copied unchanged from r1620300, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
      - copied, changed from r1620300, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboard.java
Removed:
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.html
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java
Modified:
    openmeetings/branches/3.0.x/ivysettings.xml
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/Application.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
    
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FormatHelper.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboardPersister.java

Modified: openmeetings/branches/3.0.x/ivysettings.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/ivysettings.xml?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/ivysettings.xml (original)
+++ openmeetings/branches/3.0.x/ivysettings.xml Mon Aug 25 14:28:41 2014
@@ -19,6 +19,7 @@
                <chain name="chain">
                        <ibiblio name="central" m2compatible="true"/>
                        <ibiblio name="apache-public" m2compatible="true" 
root="https://repository.apache.org/content/groups/public"; />
+                       <ibiblio name="apache-snapshot" m2compatible="true" 
root="https://repository.apache.org/content/groups/snapshots"; />
                        <url name="mavencentral">
                                <artifact 
pattern="http://repo1.maven.org/maven2/[organisation]/[artifact]-[revision].[ext]";
 />
                        </url>

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/Application.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/Application.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/Application.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/Application.java
 Mon Aug 25 14:28:41 2014
@@ -40,7 +40,7 @@ import org.apache.openmeetings.web.pages
 import org.apache.openmeetings.web.pages.SwfPage;
 import org.apache.openmeetings.web.pages.auth.SignInPage;
 import org.apache.openmeetings.web.pages.install.InstallWizardPage;
-import org.apache.openmeetings.web.user.dashboard.PrivateRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
@@ -112,7 +112,7 @@ public class Application extends Authent
                dashboardContext = new DashboardContext();
                dashboardContext.setDashboardPersiter(new 
UserDashboardPersister());
                WidgetRegistry widgetRegistry = 
dashboardContext.getWidgetRegistry();
-               widgetRegistry.registerWidget(new 
PrivateRoomsWidgetDescriptor());
+               widgetRegistry.registerWidget(new MyRoomsWidgetDescriptor());
                widgetRegistry.registerWidget(new WelcomeWidgetDescriptor());
                widgetRegistry.registerWidget(new StartWidgetDescriptor());
                widgetRegistry.registerWidget(new RssWidgetDescriptor());

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/app/WebSession.java
 Mon Aug 25 14:28:41 2014
@@ -33,6 +33,7 @@ import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
@@ -58,11 +59,14 @@ import org.apache.openmeetings.db.util.T
 import org.apache.openmeetings.ldap.LdapLoginManagement;
 import org.apache.openmeetings.util.OmException;
 import org.apache.openmeetings.web.pages.SwfPage;
-import org.apache.openmeetings.web.user.dashboard.PrivateRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidget;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.RssWidget;
 import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
 import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.UserDashboard;
 import org.apache.wicket.RestartResponseAtInterceptPageException;
 import org.apache.wicket.authentication.IAuthenticationStrategy;
 import 
org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
@@ -75,13 +79,13 @@ import org.apache.wicket.util.string.Str
 import org.apache.wicket.util.string.Strings;
 
 import ro.fortsoft.wicket.dashboard.Dashboard;
-import ro.fortsoft.wicket.dashboard.DefaultDashboard;
 import ro.fortsoft.wicket.dashboard.Widget;
 import ro.fortsoft.wicket.dashboard.WidgetFactory;
 import ro.fortsoft.wicket.dashboard.web.DashboardContext;
 
 public class WebSession extends AbstractAuthenticatedWebSession {
        private static final long serialVersionUID = 1123393236459095315L;
+       
        public static int MILLIS_IN_MINUTE = 60000;
        //private static final Map<String, Locale> LNG_TO_LOCALE_MAP = new 
HashMap<String, Locale> ();
        private long userId = -1;
@@ -94,7 +98,7 @@ public class WebSession extends Abstract
        public final static String ISO8601_FORMAT_STRING = 
"yyyy-MM-dd'T'HH:mm:ssZ";
        private DateFormat ISO8601FORMAT = new 
SimpleDateFormat(ISO8601_FORMAT_STRING); //FIXME not thread safe
        private DateFormat sdf;
-       private Dashboard dashboard;
+       private UserDashboard dashboard;
        private Locale browserLocale = null;
        private Long recordingId;
        private Long loginError = null;
@@ -441,25 +445,59 @@ public class WebSession extends Abstract
        
        private void initDashboard() {
                DashboardContext dashboardContext = getDashboardContext();
-               dashboard = dashboardContext.getDashboardPersiter().load();
+               dashboard = 
(UserDashboard)dashboardContext.getDashboardPersiter().load();
+               boolean existMyRoomWidget = false, existRssWidget = false;
+               ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+               boolean confShowMyRooms = 1 == 
cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, Integer.class, "0");
+               boolean confShowRss = 1 == 
cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_RSS_KEY, Integer.class, "0");
+               boolean save = false;
+
+               WidgetFactory widgetFactory = 
dashboardContext.getWidgetFactory();
+
                if (dashboard == null) {
-                       dashboard = new DefaultDashboard("default", "Default");
-                       
-                       WidgetFactory widgetFactory = 
dashboardContext.getWidgetFactory();
+                       dashboard = new UserDashboard("default", "Default");
+
                        dashboard.addWidget(widgetFactory.createWidget(new 
WelcomeWidgetDescriptor()));
                        dashboard.addWidget(widgetFactory.createWidget(new 
StartWidgetDescriptor()));
-                       ConfigurationDao cfgDao = 
getBean(ConfigurationDao.class);
-                       if (1 == 
cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, Integer.class, "0")) {
-                               
dashboard.addWidget(widgetFactory.createWidget(new 
PrivateRoomsWidgetDescriptor()));
+                       if (confShowMyRooms) {
+                               
dashboard.addWidget(widgetFactory.createWidget(new MyRoomsWidgetDescriptor()));
                        }
-                       if (1 == 
cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_RSS_KEY, Integer.class, "0")) {
+                       if (confShowRss) {
                                
dashboard.addWidget(widgetFactory.createWidget(new RssWidgetDescriptor()));
                        }
-                       dashboardContext.getDashboardPersiter().save(dashboard);
+                       save = true;
                } else {
-                       for (Widget w : dashboard.getWidgets()) {
-                               w.init();
+                       for (Iterator<Widget> iter = 
dashboard.getWidgets().iterator(); iter.hasNext();) {
+                               Widget w = iter.next();
+                               // PrivateRoomWidget is stored in the profile 
of user. Now, Show_MyRooms_key is disable.
+                               if (w.getClass().equals(MyRoomsWidget.class)) {
+                                       existMyRoomWidget = true;
+                                       if (!confShowMyRooms) {
+                                               iter.remove();
+                                       }
+                               } else if 
((w.getClass().equals(RssWidget.class))) {
+                                       // RssWidget is stored in the profile 
of user. Now, Show_RSS_Key is disable.
+                                       existRssWidget = true;
+                                       if (!confShowRss) {
+                                               iter.remove();
+                                       }
+                               } else {
+                                       w.init();
+                               }
+                       }
+                       // PrivateRoomWidget was deleted from profile and now 
it's enabled. It's added again to dashboard.
+                       if (!existMyRoomWidget && confShowMyRooms && 
!dashboard.isWidgetMyRoomsDeleted()) {
+                               
dashboard.addWidget(widgetFactory.createWidget(new MyRoomsWidgetDescriptor()));
+                               save = true;
+                       }
+                       // RssWidget was deleted from profile and now it's 
enabled. It's added again to dashboard.
+                       if (!existRssWidget && confShowRss && 
!dashboard.isWidgetRssDeleted()) {
+                               
dashboard.addWidget(widgetFactory.createWidget(new RssWidgetDescriptor()));
+                               save = true;
                        }
                }
+               if (save) {
+                       dashboardContext.getDashboardPersiter().save(dashboard);
+               }
        }
 }

Copied: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
 (from r1620327, 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java?p2=openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java&p1=openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java&r1=1620327&r2=1620328&rev=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
 Mon Aug 25 14:28:41 2014
@@ -26,10 +26,11 @@ import ro.fortsoft.wicket.dashboard.Widg
 import ro.fortsoft.wicket.dashboard.WidgetLocation;
 import ro.fortsoft.wicket.dashboard.web.WidgetView;
 
-public class PrivateRoomsWidget extends AbstractWidget {
-       private static final long serialVersionUID = 1769428980617610979L;
+public class MyRoomsWidget extends AbstractWidget {
+       private static final long serialVersionUID = 1L;
+       public static final String WIDGET_ID_MY_ROOMS = "MyRoomsWidget";
 
-       public PrivateRoomsWidget() {
+       public MyRoomsWidget() {
                super();
                location = new WidgetLocation(0, 1);
                init();
@@ -39,9 +40,10 @@ public class PrivateRoomsWidget extends 
        public void init() {
                super.init();
                title = WebSession.getString(781L);
+               id = WIDGET_ID_MY_ROOMS;
        }
        
        public WidgetView createView(String viewId) {
-               return new PrivateRoomsWidgetView(viewId, new 
Model<Widget>(this));
+               return new MyRoomsWidgetView(viewId, new Model<Widget>(this));
        }
 }

Copied: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
 (from r1620300, 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java?p2=openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java&p1=openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java&r1=1620300&r2=1620328&rev=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
 Mon Aug 25 14:28:41 2014
@@ -22,8 +22,8 @@ import org.apache.openmeetings.web.app.W
 
 import ro.fortsoft.wicket.dashboard.WidgetDescriptor;
 
-public class PrivateRoomsWidgetDescriptor implements WidgetDescriptor {
-       private static final long serialVersionUID = 389662353299319574L;
+public class MyRoomsWidgetDescriptor implements WidgetDescriptor {
+       private static final long serialVersionUID = 1L;
 
        public String getName() {
                return WebSession.getString(781L);
@@ -38,10 +38,10 @@ public class PrivateRoomsWidgetDescripto
        }
 
        public String getWidgetClassName() {
-               return PrivateRoomsWidget.class.getName();
+               return MyRoomsWidget.class.getName();
        }
 
        public String getTypeName() {
-               return "om.widget.privaterooms";
+               return "om.widget.myrooms";
        }
 }

Copied: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
 (from r1620300, 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java?p2=openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java&p1=openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java&r1=1620300&r2=1620328&rev=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
 Mon Aug 25 14:28:41 2014
@@ -26,10 +26,10 @@ import org.apache.wicket.model.Model;
 import ro.fortsoft.wicket.dashboard.Widget;
 import ro.fortsoft.wicket.dashboard.web.WidgetView;
 
-public class PrivateRoomsWidgetView extends WidgetView {
-       private static final long serialVersionUID = 6950427893821991173L;
+public class MyRoomsWidgetView extends WidgetView {
+       private static final long serialVersionUID = 1L;
 
-       public PrivateRoomsWidgetView(String id, Model<Widget> model) {
+       public MyRoomsWidgetView(String id, Model<Widget> model) {
                super(id, model);
                
                add(new RoomsPanel("rooms", getMyRooms()));

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
 Mon Aug 25 14:28:41 2014
@@ -27,7 +27,8 @@ import ro.fortsoft.wicket.dashboard.Widg
 import ro.fortsoft.wicket.dashboard.web.WidgetView;
 
 public class RssWidget extends AbstractWidget {
-       private static final long serialVersionUID = 8866852061674736808L;
+       private static final long serialVersionUID = 1L;
+       public static final String WIDGET_ID_RSS = "RssWidget";
 
        public RssWidget() {
                super();
@@ -39,6 +40,7 @@ public class RssWidget extends AbstractW
        public void init() {
                super.init();
                title = WebSession.getString(277L);
+               id = WIDGET_ID_RSS;
        }
        
        public WidgetView createView(String viewId) {

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
 Mon Aug 25 14:28:41 2014
@@ -27,7 +27,7 @@ import ro.fortsoft.wicket.dashboard.Widg
 import ro.fortsoft.wicket.dashboard.web.WidgetView;
 
 public class StartWidget extends AbstractWidget {
-       private static final long serialVersionUID = 9060237325733825899L;
+       private static final long serialVersionUID = 1L;
 
        public StartWidget() {
                super();
@@ -39,6 +39,7 @@ public class StartWidget extends Abstrac
        public void init() {
                super.init();
                title = WebSession.getString(774L);
+               id = "StartWidget";
        }
        
        public WidgetView createView(String viewId) {

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
 Mon Aug 25 14:28:41 2014
@@ -27,7 +27,7 @@ import ro.fortsoft.wicket.dashboard.Widg
 import ro.fortsoft.wicket.dashboard.web.WidgetView;
 
 public class WelcomeWidget extends AbstractWidget {
-       private static final long serialVersionUID = 8866852061674736808L;
+       private static final long serialVersionUID = 1L;
 
        public WelcomeWidget() {
                super();
@@ -39,6 +39,7 @@ public class WelcomeWidget extends Abstr
        public void init() {
                super.init();
                title = WebSession.getString(1546L);
+               id = "WelcomeWidget";
        }
        
        public WidgetView createView(String viewId) {

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
 Mon Aug 25 14:28:41 2014
@@ -35,12 +35,11 @@ import ro.fortsoft.wicket.dashboard.Widg
 import ro.fortsoft.wicket.dashboard.web.DashboardContext;
 
 public class WidgetsPanel extends Panel {
-       private static final long serialVersionUID = -3959536582694664524L;
+       private static final long serialVersionUID = 1L;
 
        private Widget isDisplayed(WidgetDescriptor wd) {
-               //FIXME the only way to compare is By TITLE
                for (Widget w : getDashboard().getWidgets()) {
-                       if (w.getTitle().equals(wd.getName())) {
+                       if 
(w.getClass().getName().equals(wd.getWidgetClassName())) {
                                return w;
                        }
                }
@@ -59,7 +58,7 @@ public class WidgetsPanel extends Panel 
                                item.add(new Label("name", wd.getName()));
                                item.add(new Label("description", 
wd.getDescription()));
                                item.add(new AjaxCheckBox("display", 
Model.of(isDisplayed(wd) != null)) {
-                                       private static final long 
serialVersionUID = -7079665921153653164L;
+                                       private static final long 
serialVersionUID = 1L;
 
                                        @Override
                                        protected void 
onUpdate(AjaxRequestTarget target) {

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
 Mon Aug 25 14:28:41 2014
@@ -30,8 +30,12 @@ public class FormatHelper {
 
        // TODO check RIGHTS here (email might need to be hidden)
        public static String formatUser(User u, boolean isHTMLEscape) {
-               String email = u.getAdresses() == null ? "" : 
u.getAdresses().getEmail();
-               String user = u == null ? "" : String.format("\"%s %s\" <%s>", 
u.getFirstname(), u.getLastname(), email);
-               return isHTMLEscape ? escapeHtml4(user) : user;
+               String user = "";
+               if (u != null) {
+                       String email = u.getAdresses() == null ? "" : 
u.getAdresses().getEmail();
+                       user = String.format("\"%s %s\" <%s>", 
u.getFirstname(), u.getLastname(), email);
+                       user = isHTMLEscape ? escapeHtml4(user) : user;
+               }
+               return user;
        }
 }

Added: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java?rev=1620328&view=auto
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java
 (added)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java
 Mon Aug 25 14:28:41 2014
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static 
org.apache.openmeetings.web.user.dashboard.MyRoomsWidget.WIDGET_ID_MY_ROOMS;
+import static 
org.apache.openmeetings.web.user.dashboard.RssWidget.WIDGET_ID_RSS;
+import ro.fortsoft.wicket.dashboard.DefaultDashboard;
+import ro.fortsoft.wicket.dashboard.Widget;
+
+public class UserDashboard extends DefaultDashboard {
+       private static final long serialVersionUID = 1L;
+       private boolean widgetRssDeleted = false;
+       private boolean widgetMyRoomsDeleted = false;
+       
+       public UserDashboard(String id, String title) {
+               super(id, title);
+       }
+
+       public boolean isWidgetRssDeleted() {
+               return widgetRssDeleted;
+       }
+
+       public void setWidgetRssDeleted(boolean widgetRssDeleted) {
+               this.widgetRssDeleted = widgetRssDeleted;
+       }
+
+       public boolean isWidgetMyRoomsDeleted() {
+               return widgetMyRoomsDeleted;
+       }
+
+       public void setWidgetMyRoomsDeleted(boolean widgetMyRoomsDeleted) {
+               this.widgetMyRoomsDeleted = widgetMyRoomsDeleted;
+       }
+       
+       @Override
+       public void deleteWidget(String widgetId) {
+               switch (widgetId) {
+                       case WIDGET_ID_RSS:
+                               widgetRssDeleted = true;
+                               break;
+                       case WIDGET_ID_MY_ROOMS:
+                               widgetMyRoomsDeleted = true;
+                               break;
+                       default:
+                               break;
+               }
+               super.deleteWidget(widgetId);
+       }
+       
+       @Override
+       public void addWidget(Widget widget) {
+               switch (widget.getId()) {
+                       case WIDGET_ID_RSS:
+                               widgetRssDeleted = false;
+                               break;
+                       case WIDGET_ID_MY_ROOMS:
+                               widgetMyRoomsDeleted = false;
+                               break;
+                       default:
+                               break;
+               }
+               super.addWidget(widget);
+       }
+}

Modified: 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
URL: 
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
 (original)
+++ 
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
 Mon Aug 25 14:28:41 2014
@@ -19,18 +19,71 @@
 package org.apache.openmeetings.web.util;
 
 import static org.apache.openmeetings.util.OmFileHelper.getUserDashboard;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Collections;
+
+import org.slf4j.Logger;
+
 import ro.fortsoft.wicket.dashboard.Dashboard;
 import ro.fortsoft.wicket.dashboard.DashboardPersister;
-import ro.fortsoft.wicket.dashboard.XStreamDashboardPersister;
+import ro.fortsoft.wicket.dashboard.WidgetComparator;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
 
 public class UserDashboardPersister implements DashboardPersister {
+       private static final Logger log = 
getLogger(UserDashboardPersister.class, webAppRootKey);
+       
        public Dashboard load() {
-               return new 
XStreamDashboardPersister(getUserDashboard(getUserId())).load();
+               return new XStreamDashboardPersister().load();
        }
 
        public void save(Dashboard dashboard) {
-               new 
XStreamDashboardPersister(getUserDashboard(getUserId())).save(dashboard);
+               new XStreamDashboardPersister().save(dashboard);
        }
 
+       public class XStreamDashboardPersister implements DashboardPersister {
+               private File file;
+               private XStream xstream;
+               
+               public XStreamDashboardPersister() {
+                       this.file = getUserDashboard(getUserId());
+                       
+               xstream = new XStream(new DomDriver("UTF-8"));
+               xstream.setMode(XStream.NO_REFERENCES);
+               xstream.alias("dashboard", UserDashboard.class);
+               }
+               
+               @Override
+               public Dashboard load() {
+                       if (!file.exists() || !file.isFile()) {
+                               return null;
+                       }
+                       
+                       try {
+                               return (Dashboard) xstream.fromXML(new 
FileInputStream(file));
+                       } catch (Exception e) {
+                               log.error("Error while loading dashboard", e);
+                               return null;
+                       }
+               }
+
+               @Override
+               public void save(Dashboard dashboard) {
+                       // sort widgets
+                       Collections.sort(dashboard.getWidgets(), new 
WidgetComparator());
+                       
+                       try {
+                               xstream.toXML(dashboard, new 
FileOutputStream(file));
+                       } catch (Exception e) {
+                               log.error("Error while saving dashboard", e);
+                       }
+               }
+       }
 }

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 Mon Aug 25 14:28:41 2014
@@ -49,7 +49,7 @@ import org.apache.openmeetings.web.pages
 import org.apache.openmeetings.web.pages.SwfPage;
 import org.apache.openmeetings.web.pages.auth.SignInPage;
 import org.apache.openmeetings.web.pages.install.InstallWizardPage;
-import org.apache.openmeetings.web.user.dashboard.PrivateRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
@@ -124,7 +124,7 @@ public class Application extends Authent
                dashboardContext = new DashboardContext();
                dashboardContext.setDashboardPersiter(new 
UserDashboardPersister());
                WidgetRegistry widgetRegistry = 
dashboardContext.getWidgetRegistry();
-               widgetRegistry.registerWidget(new 
PrivateRoomsWidgetDescriptor());
+               widgetRegistry.registerWidget(new MyRoomsWidgetDescriptor());
                widgetRegistry.registerWidget(new WelcomeWidgetDescriptor());
                widgetRegistry.registerWidget(new StartWidgetDescriptor());
                widgetRegistry.registerWidget(new RssWidgetDescriptor());

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
 Mon Aug 25 14:28:41 2014
@@ -33,6 +33,7 @@ import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
@@ -59,11 +60,14 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.util.TimezoneUtil;
 import org.apache.openmeetings.util.OmException;
 import org.apache.openmeetings.web.pages.SwfPage;
-import org.apache.openmeetings.web.user.dashboard.PrivateRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidget;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.RssWidget;
 import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
 import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
 import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.UserDashboard;
 import org.apache.wicket.RestartResponseAtInterceptPageException;
 import org.apache.wicket.authentication.IAuthenticationStrategy;
 import 
org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
@@ -76,7 +80,6 @@ import org.apache.wicket.util.string.Str
 import org.apache.wicket.util.string.Strings;
 
 import ro.fortsoft.wicket.dashboard.Dashboard;
-import ro.fortsoft.wicket.dashboard.DefaultDashboard;
 import ro.fortsoft.wicket.dashboard.Widget;
 import ro.fortsoft.wicket.dashboard.WidgetFactory;
 import ro.fortsoft.wicket.dashboard.web.DashboardContext;
@@ -95,7 +98,7 @@ public class WebSession extends Abstract
        public final static String ISO8601_FORMAT_STRING = 
"yyyy-MM-dd'T'HH:mm:ssZ";
        private DateFormat ISO8601FORMAT = new 
SimpleDateFormat(ISO8601_FORMAT_STRING); //FIXME not thread safe
        private DateFormat sdf;
-       private Dashboard dashboard;
+       private UserDashboard dashboard;
        private Locale browserLocale = null;
        private Long recordingId;
        private Long loginError = null;
@@ -442,26 +445,60 @@ public class WebSession extends Abstract
        
        private void initDashboard() {
                DashboardContext dashboardContext = getDashboardContext();
-               dashboard = dashboardContext.getDashboardPersiter().load();
+               dashboard = 
(UserDashboard)dashboardContext.getDashboardPersiter().load();
+               boolean existMyRoomWidget = false, existRssWidget = false;
+               ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+               boolean showMyRoomConfValue = 1 == 
cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, Integer.class, "0");
+               boolean showRssConfValue = 1 == 
cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_RSS_KEY, Integer.class, "0");
+               boolean save = false;
+
+               WidgetFactory widgetFactory = 
dashboardContext.getWidgetFactory();
+
                if (dashboard == null) {
-                       dashboard = new DefaultDashboard("default", "Default");
-                       
-                       WidgetFactory widgetFactory = 
dashboardContext.getWidgetFactory();
+                       dashboard = new UserDashboard("default", "Default");
+
                        dashboard.addWidget(widgetFactory.createWidget(new 
WelcomeWidgetDescriptor()));
                        dashboard.addWidget(widgetFactory.createWidget(new 
StartWidgetDescriptor()));
-                       ConfigurationDao cfgDao = 
getBean(ConfigurationDao.class);
-                       if (1 == 
cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, Integer.class, "0")) {
-                               
dashboard.addWidget(widgetFactory.createWidget(new 
PrivateRoomsWidgetDescriptor()));
+                       if (showMyRoomConfValue) {
+                               
dashboard.addWidget(widgetFactory.createWidget(new MyRoomsWidgetDescriptor()));
                        }
-                       if (1 == 
cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_RSS_KEY, Integer.class, "0")) {
+                       if (showRssConfValue) {
                                
dashboard.addWidget(widgetFactory.createWidget(new RssWidgetDescriptor()));
                        }
-                       dashboardContext.getDashboardPersiter().save(dashboard);
+                       save = true;
                } else {
-                       for (Widget w : dashboard.getWidgets()) {
-                               w.init();
+                       for (Iterator<Widget> iter = 
dashboard.getWidgets().iterator(); iter.hasNext();) {
+                               Widget w = iter.next();
+                               // PrivateRoomWidget is stored in the profile 
of user. Now, Show_MyRooms_key is disable.
+                               if (w.getClass().equals(MyRoomsWidget.class)) {
+                                       existMyRoomWidget = true;
+                                       if (!showMyRoomConfValue) {
+                                               iter.remove();
+                                       }
+                               } else if 
((w.getClass().equals(RssWidget.class))) {
+                                       // RssWidget is stored in the profile 
of user. Now, Show_RSS_Key is disable.
+                                       existRssWidget = true;
+                                       if (!showRssConfValue) {
+                                               iter.remove();
+                                       }
+                               } else {
+                                       w.init();
+                               }
+                       }
+                       // PrivateRoomWidget was deleted from profile and now 
it's enabled. It's added again to dashboard.
+                       if (!existMyRoomWidget && showMyRoomConfValue && 
!dashboard.isWidgetMyRoomsDeleted()) {
+                               
dashboard.addWidget(widgetFactory.createWidget(new MyRoomsWidgetDescriptor()));
+                               save = true;
+                       }
+                       // RssWidget was deleted from profile and now it's 
enabled. It's added again to dashboard.
+                       if (!existRssWidget && showRssConfValue && 
!dashboard.isWidgetRssDeleted()) {
+                               
dashboard.addWidget(widgetFactory.createWidget(new RssWidgetDescriptor()));
+                               save = true;
                        }
                }
+               if (save) {
+                       dashboardContext.getDashboardPersiter().save(dashboard);
+               }
        }
 
        public String getOmString(long id) {

Copied: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
 (from r1620327, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java&r1=1620327&r2=1620328&rev=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidget.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
 Mon Aug 25 14:28:41 2014
@@ -26,10 +26,11 @@ import ro.fortsoft.wicket.dashboard.Widg
 import ro.fortsoft.wicket.dashboard.WidgetLocation;
 import ro.fortsoft.wicket.dashboard.web.WidgetView;
 
-public class PrivateRoomsWidget extends AbstractWidget {
+public class MyRoomsWidget extends AbstractWidget {
        private static final long serialVersionUID = 1L;
+       public static final String WIDGET_ID_MY_ROOMS = "MyRoomsWidget";
 
-       public PrivateRoomsWidget() {
+       public MyRoomsWidget() {
                super();
                location = new WidgetLocation(0, 1);
                init();
@@ -39,9 +40,10 @@ public class PrivateRoomsWidget extends 
        public void init() {
                super.init();
                title = WebSession.getString(781L);
+               id = WIDGET_ID_MY_ROOMS;
        }
        
        public WidgetView createView(String viewId) {
-               return new PrivateRoomsWidgetView(viewId, new 
Model<Widget>(this));
+               return new MyRoomsWidgetView(viewId, new Model<Widget>(this));
        }
 }

Copied: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
 (from r1620300, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java&r1=1620300&r2=1620328&rev=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetDescriptor.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
 Mon Aug 25 14:28:41 2014
@@ -22,7 +22,7 @@ import org.apache.openmeetings.web.app.W
 
 import ro.fortsoft.wicket.dashboard.WidgetDescriptor;
 
-public class PrivateRoomsWidgetDescriptor implements WidgetDescriptor {
+public class MyRoomsWidgetDescriptor implements WidgetDescriptor {
        private static final long serialVersionUID = 1L;
 
        public String getName() {
@@ -38,10 +38,10 @@ public class PrivateRoomsWidgetDescripto
        }
 
        public String getWidgetClassName() {
-               return PrivateRoomsWidget.class.getName();
+               return MyRoomsWidget.class.getName();
        }
 
        public String getTypeName() {
-               return "om.widget.privaterooms";
+               return "om.widget.myrooms";
        }
 }

Copied: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
 (from r1620300, 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java)
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java&r1=1620300&r2=1620328&rev=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/PrivateRoomsWidgetView.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
 Mon Aug 25 14:28:41 2014
@@ -26,10 +26,10 @@ import org.apache.wicket.model.Model;
 import ro.fortsoft.wicket.dashboard.Widget;
 import ro.fortsoft.wicket.dashboard.web.WidgetView;
 
-public class PrivateRoomsWidgetView extends WidgetView {
+public class MyRoomsWidgetView extends WidgetView {
        private static final long serialVersionUID = 1L;
 
-       public PrivateRoomsWidgetView(String id, Model<Widget> model) {
+       public MyRoomsWidgetView(String id, Model<Widget> model) {
                super(id, model);
                
                add(new RoomsPanel("rooms", getMyRooms()));

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
 Mon Aug 25 14:28:41 2014
@@ -28,6 +28,7 @@ import ro.fortsoft.wicket.dashboard.web.
 
 public class RssWidget extends AbstractWidget {
        private static final long serialVersionUID = 1L;
+       public static final String WIDGET_ID_RSS = "RssWidget";
 
        public RssWidget() {
                super();
@@ -39,6 +40,7 @@ public class RssWidget extends AbstractW
        public void init() {
                super.init();
                title = WebSession.getString(277L);
+               id = WIDGET_ID_RSS;
        }
        
        public WidgetView createView(String viewId) {

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
 Mon Aug 25 14:28:41 2014
@@ -39,6 +39,7 @@ public class StartWidget extends Abstrac
        public void init() {
                super.init();
                title = WebSession.getString(774L);
+               id = "StartWidget";
        }
        
        public WidgetView createView(String viewId) {

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
 Mon Aug 25 14:28:41 2014
@@ -39,6 +39,7 @@ public class WelcomeWidget extends Abstr
        public void init() {
                super.init();
                title = WebSession.getString(1546L);
+               id = "WelcomeWidget";
        }
        
        public WidgetView createView(String viewId) {

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
 Mon Aug 25 14:28:41 2014
@@ -38,9 +38,8 @@ public class WidgetsPanel extends Panel 
        private static final long serialVersionUID = 1L;
 
        private Widget isDisplayed(WidgetDescriptor wd) {
-               //FIXME the only way to compare is By TITLE
                for (Widget w : getDashboard().getWidgets()) {
-                       if (w.getTitle().equals(wd.getName())) {
+                       if 
(w.getClass().getName().equals(wd.getWidgetClassName())) {
                                return w;
                        }
                }

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FormatHelper.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FormatHelper.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FormatHelper.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FormatHelper.java
 Mon Aug 25 14:28:41 2014
@@ -30,8 +30,12 @@ public class FormatHelper {
 
        // TODO check RIGHTS here (email might need to be hidden)
        public static String formatUser(User u, boolean isHTMLEscape) {
-               String email = u.getAdresses() == null ? "" : 
u.getAdresses().getEmail();
-               String user = u == null ? "" : String.format("\"%s %s\" <%s>", 
u.getFirstname(), u.getLastname(), email);
-               return isHTMLEscape ? escapeHtml4(user) : user;
+               String user = "";
+               if (u != null) {
+                       String email = u.getAdresses() == null ? "" : 
u.getAdresses().getEmail();
+                       user = String.format("\"%s %s\" <%s>", 
u.getFirstname(), u.getLastname(), email);
+                       user = isHTMLEscape ? escapeHtml4(user) : user;
+               }
+               return user;
        }
 }

Added: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboard.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboard.java?rev=1620328&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboard.java
 (added)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboard.java
 Mon Aug 25 14:28:41 2014
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static 
org.apache.openmeetings.web.user.dashboard.MyRoomsWidget.WIDGET_ID_MY_ROOMS;
+import static 
org.apache.openmeetings.web.user.dashboard.RssWidget.WIDGET_ID_RSS;
+import ro.fortsoft.wicket.dashboard.DefaultDashboard;
+import ro.fortsoft.wicket.dashboard.Widget;
+
+public class UserDashboard extends DefaultDashboard {
+       private static final long serialVersionUID = 1L;
+       private boolean widgetRssDeleted = false;
+       private boolean widgetMyRoomsDeleted = false;
+       
+       public UserDashboard(String id, String title) {
+               super(id, title);
+       }
+
+       public boolean isWidgetRssDeleted() {
+               return widgetRssDeleted;
+       }
+
+       public void setWidgetRssDeleted(boolean widgetRssDeleted) {
+               this.widgetRssDeleted = widgetRssDeleted;
+       }
+
+       public boolean isWidgetMyRoomsDeleted() {
+               return widgetMyRoomsDeleted;
+       }
+
+       public void setWidgetMyRoomsDeleted(boolean widgetMyRoomsDeleted) {
+               this.widgetMyRoomsDeleted = widgetMyRoomsDeleted;
+       }
+       
+       @Override
+       public void deleteWidget(String widgetId) {
+               switch (widgetId) {
+                       case WIDGET_ID_RSS:
+                               widgetRssDeleted = true;
+                               break;
+                       case WIDGET_ID_MY_ROOMS:
+                               widgetMyRoomsDeleted = true;
+                               break;
+                       default:
+                               break;
+               }
+               super.deleteWidget(widgetId);
+       }
+       
+       @Override
+       public void addWidget(Widget widget) {
+               switch (widget.getId()) {
+                       case WIDGET_ID_RSS:
+                               widgetRssDeleted = false;
+                               break;
+                       case WIDGET_ID_MY_ROOMS:
+                               widgetMyRoomsDeleted = false;
+                               break;
+                       default:
+                               break;
+               }
+               super.addWidget(widget);
+       }
+}

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboardPersister.java?rev=1620328&r1=1620327&r2=1620328&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
 Mon Aug 25 14:28:41 2014
@@ -19,18 +19,71 @@
 package org.apache.openmeetings.web.util;
 
 import static org.apache.openmeetings.util.OmFileHelper.getUserDashboard;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Collections;
+
+import org.slf4j.Logger;
+
 import ro.fortsoft.wicket.dashboard.Dashboard;
 import ro.fortsoft.wicket.dashboard.DashboardPersister;
-import ro.fortsoft.wicket.dashboard.XStreamDashboardPersister;
+import ro.fortsoft.wicket.dashboard.WidgetComparator;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
 
 public class UserDashboardPersister implements DashboardPersister {
+       private static final Logger log = 
getLogger(UserDashboardPersister.class, webAppRootKey);
+       
        public Dashboard load() {
-               return new 
XStreamDashboardPersister(getUserDashboard(getUserId())).load();
+               return new XStreamDashboardPersister().load();
        }
 
        public void save(Dashboard dashboard) {
-               new 
XStreamDashboardPersister(getUserDashboard(getUserId())).save(dashboard);
+               new XStreamDashboardPersister().save(dashboard);
        }
 
+       public class XStreamDashboardPersister implements DashboardPersister {
+               private File file;
+               private XStream xstream;
+               
+               public XStreamDashboardPersister() {
+                       this.file = getUserDashboard(getUserId());
+                       
+               xstream = new XStream(new DomDriver("UTF-8"));
+               xstream.setMode(XStream.NO_REFERENCES);
+               xstream.alias("dashboard", UserDashboard.class);
+               }
+               
+               @Override
+               public Dashboard load() {
+                       if (!file.exists() || !file.isFile()) {
+                               return null;
+                       }
+                       
+                       try {
+                               return (Dashboard) xstream.fromXML(new 
FileInputStream(file));
+                       } catch (Exception e) {
+                               log.error("Error while loading dashboard", e);
+                               return null;
+                       }
+               }
+
+               @Override
+               public void save(Dashboard dashboard) {
+                       // sort widgets
+                       Collections.sort(dashboard.getWidgets(), new 
WidgetComparator());
+                       
+                       try {
+                               xstream.toXML(dashboard, new 
FileOutputStream(file));
+                       } catch (Exception e) {
+                               log.error("Error while saving dashboard", e);
+                       }
+               }
+       }
 }


Reply via email to