Author: solomax
Date: Tue May 14 11:23:17 2013
New Revision: 1482302

URL: http://svn.apache.org/r1482302
Log:
[OPENMEETINGS-626] "hand-made" url fragment processing is replaced with 
wicketstuff library

Added:
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UrlFragment.java
Modified:
    openmeetings/trunk/singlewebapp/ivy.xml
    openmeetings/trunk/singlewebapp/ivysettings.xml
    openmeetings/trunk/singlewebapp/ivysettings.xsd
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/BasePanel.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/MenuPanel.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/StartWidgetView.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/WelcomeWidgetView.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/rooms/RoomsSelectorPanel.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java
    
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.java

Modified: openmeetings/trunk/singlewebapp/ivy.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/ivy.xml?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/ivy.xml (original)
+++ openmeetings/trunk/singlewebapp/ivy.xml Tue May 14 11:23:17 2013
@@ -273,6 +273,9 @@
                        <include type="jar" />
                </dependency>
                -->
+               <dependency org="org.wicketstuff" 
name="wicketstuff-urlfragment" rev="6.0-SNAPSHOT" conf="openmeetings->*" 
transitive="false">
+                       <include type="jar" />
+               </dependency>
                
                <!-- iCal4j seems to need this JAR -->
                <dependency org="edu.emory.mathcs" 
name="backport-util-concurrent" rev="3.1" conf="openmeetings->*"/>

Modified: openmeetings/trunk/singlewebapp/ivysettings.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/ivysettings.xml?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/ivysettings.xml (original)
+++ openmeetings/trunk/singlewebapp/ivysettings.xml Tue May 14 11:23:17 2013
@@ -34,6 +34,9 @@
                        <url name="smslib" m2compatible="true">
                                <artifact 
pattern="http://smslib.org/maven2/v3/[organisation]/[artifact]/[revision]/[artifact]-[revision].[ext]";
 />
                        </url>
+                       <url name="urlfragment" m2compatible="false" 
checksums=""> <!-- FIXME need to be removed in favor of wicketstuff -->
+                               <artifact 
pattern="https://github.com/Horsed/WicketUrlFragment/raw/master/[artifact]-[revision].[ext]";
 />
+                       </url>
                </chain>
        </resolvers>
        <triggers>

Modified: openmeetings/trunk/singlewebapp/ivysettings.xsd
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/ivysettings.xsd?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/ivysettings.xsd (original)
+++ openmeetings/trunk/singlewebapp/ivysettings.xsd Tue May 14 11:23:17 2013
@@ -36,14 +36,14 @@
   <xs:element name="resolvers">
     <xs:complexType>
       <xs:sequence>
-        <xs:element ref="chain"/>
+        <xs:element ref="chain" maxOccurs="unbounded"/>
       </xs:sequence>
     </xs:complexType>
   </xs:element>
   <xs:element name="chain">
     <xs:complexType>
       <xs:sequence>
-        <xs:element maxOccurs="unbounded" ref="ibiblio"/>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ibiblio"/>
         <xs:element maxOccurs="unbounded" ref="url"/>
       </xs:sequence>
       <xs:attribute name="name" use="required" type="xs:NCName"/>
@@ -63,6 +63,7 @@
       </xs:sequence>
       <xs:attribute name="name" use="required" type="xs:NCName"/>
       <xs:attribute name="m2compatible" use="optional" type="xs:NCName"/>
+      <xs:attribute name="checksums" use="optional" type="xs:string"/>
     </xs:complexType>
   </xs:element>
   <xs:element name="artifact">

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/app/WebSession.java
 Tue May 14 11:23:17 2013
@@ -44,6 +44,7 @@ import org.apache.openmeetings.web.compo
 import 
org.apache.openmeetings.web.components.user.dashboard.RssWidgetDescriptor;
 import 
org.apache.openmeetings.web.components.user.dashboard.StartWidgetDescriptor;
 import 
org.apache.openmeetings.web.components.user.dashboard.WelcomeWidgetDescriptor;
+import org.apache.openmeetings.web.util.UrlFragment;
 import 
org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
 import org.apache.wicket.authroles.authorization.strategies.role.Roles;
 import org.apache.wicket.request.Request;
@@ -59,7 +60,7 @@ public class WebSession extends Abstract
        private long userId = -1;
        private long userLevel = -1;
        private String SID = null;
-       private String area = null;
+       private UrlFragment area = null;
        private TimeZone tz;
        private SimpleDateFormat ISO8601FORMAT = new 
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        private Dashboard dashboard;
@@ -158,11 +159,11 @@ public class WebSession extends Abstract
                return get().userLevel;
        }
 
-       public String getArea() {
+       public UrlFragment getArea() {
                return area;
        }
 
-       public void setArea(String area) {
+       public void setArea(UrlFragment area) {
                this.area = area;
        }
 

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/BasePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/BasePanel.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/BasePanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/BasePanel.java
 Tue May 14 11:23:17 2013
@@ -38,5 +38,4 @@ public abstract class BasePanel extends 
        public void onMenuPanelLoad(AjaxRequestTarget target) {
 
        }
-
 }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/MenuPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/MenuPanel.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/MenuPanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/MenuPanel.java
 Tue May 14 11:23:17 2013
@@ -23,26 +23,12 @@ import org.apache.openmeetings.persisten
 import org.apache.openmeetings.persistence.beans.basic.Navimain;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.components.admin.backup.BackupPanel;
-import 
org.apache.openmeetings.web.components.admin.configurations.ConfigsPanel;
-import org.apache.openmeetings.web.components.admin.groups.GroupsPanel;
-import org.apache.openmeetings.web.components.admin.labels.LangPanel;
-import org.apache.openmeetings.web.components.admin.ldaps.LdapsPanel;
-import org.apache.openmeetings.web.components.admin.rooms.RoomsPanel;
-import org.apache.openmeetings.web.components.admin.servers.ServersPanel;
-import org.apache.openmeetings.web.components.admin.users.UsersPanel;
-import org.apache.openmeetings.web.components.user.calendar.CalendarPanel;
-import org.apache.openmeetings.web.components.user.dashboard.OmDashboardPanel;
-import org.apache.openmeetings.web.components.user.rooms.RoomsSelectorPanel;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.util.UrlFragment;
+import org.apache.openmeetings.web.util.UrlFragment.MenuActions;
+import org.apache.openmeetings.web.util.UrlFragment.MenuParams;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.behavior.Behavior;
-import org.apache.wicket.core.util.string.JavaScriptUtils;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
@@ -56,32 +42,7 @@ import org.apache.wicket.markup.html.lis
 public class MenuPanel extends BasePanel {
        private static final long serialVersionUID = 6626039612808753514L;
 
-       private enum MenuActions {
-               dashboardModuleStartScreen
-               , dashboardModuleCalendar
-               , recordModule
-               , conferenceModuleRoomList
-               , eventModuleRoomList
-               , moderatorModuleUser
-               , moderatorModuleRoom
-               , adminModuleUser
-               , adminModuleConnections
-               , adminModuleOrg
-               , adminModuleRoom
-               , adminModuleConfiguration
-               , adminModuleLanguages
-               , adminModuleLDAP
-               , adminModuleBackup
-               , adminModuleServers
-       }
-
-       public enum MenuParams {
-               publicTabButton
-               , privateTabButton
-               , myTabButton
-       }
-       
-       public MenuPanel(String id, final MarkupContainer contents) {
+       public MenuPanel(String id) {
                super(id);
                setMarkupId(id);
                
@@ -104,7 +65,6 @@ public class MenuPanel extends BasePanel
                                                final String desc = 
m.getTooltip().getValue();
                                                final MenuActions action = 
MenuActions.valueOf(m.getAction());
                                                final MenuParams params = 
m.getParams() != null ? MenuParams.valueOf(m.getParams()) : 
MenuParams.publicTabButton;
-                                               final String hash = 
getHash(action, params);
                                                item.add(new 
AjaxLink<Void>("link") {
                                                        private static final 
long serialVersionUID = 5632618935550133709L;
                                                        {
@@ -113,144 +73,12 @@ public class MenuPanel extends BasePanel
                                                        }
                                                        
                                                        public void 
onClick(AjaxRequestTarget target) {
-                                                               
-                                                               BasePanel 
basePanel = null;
-                                                               
-                                                               switch(action) {
-                                                                       case 
dashboardModuleCalendar:
-                                                                               
basePanel = new CalendarPanel("child");
-                                                                               
break;
-                                                                       case 
recordModule:
-                                                                               
break;
-                                                                       case 
conferenceModuleRoomList:
-                                                                               
basePanel = new RoomsSelectorPanel("child", params);
-                                                                               
break;
-                                                                       case 
eventModuleRoomList:
-                                                                               
break;
-                                                                       case 
moderatorModuleUser:
-                                                                               
break;
-                                                                       case 
moderatorModuleRoom:
-                                                                               
break;
-                                                                       case 
adminModuleUser:
-                                                                               
basePanel = new UsersPanel("child");
-                                                                               
break;
-                                                                       case 
adminModuleConnections:
-                                                                               
break;
-                                                                       case 
adminModuleOrg:
-                                                                               
basePanel = new GroupsPanel("child");
-                                                                               
break;
-                                                                       case 
adminModuleRoom:
-                                                                               
basePanel = new RoomsPanel("child");
-                                                                               
break;
-                                                                       case 
adminModuleConfiguration:
-                                                                               
basePanel = new ConfigsPanel("child");
-                                                                               
break;
-                                                                       case 
adminModuleLanguages:
-                                                                               
basePanel = new LangPanel("child");
-                                                                               
break;
-                                                                       case 
adminModuleLDAP:
-                                                                               
basePanel = new LdapsPanel("child");
-                                                                               
break;
-                                                                       case 
adminModuleBackup:
-                                                                               
basePanel = new BackupPanel("child");
-                                                                               
break;
-                                                                       case 
adminModuleServers:
-                                                                               
basePanel = new ServersPanel("child");
-                                                                               
break;
-                                                                       case 
dashboardModuleStartScreen:
-                                                                       default:
-                                                                               
basePanel = new OmDashboardPanel("child");
-                                                                               
break;
-                                                               }
-                                                               
-                                                               if (basePanel 
!= null) {
-                                                                       
target.add(contents.replace(basePanel));
-                                                                       
basePanel.onMenuPanelLoad(target);
-                                                               }
-                                                               
-                                                               
target.appendJavaScript("location.hash = '" + 
JavaScriptUtils.escapeQuotes(hash) + "';");
-                                                       };
-                                               
}.add(AttributeModifier.replace("href", hash)));
+                                                               
((MainPage)getPage()).updateContents(new UrlFragment(action, params), target);
+                                                       }
+                                               });
                                        }
                                }.setReuseItems(true));
                        }
                }.setReuseItems(true));
-
-               add(new Behavior() {
-                       private static final long serialVersionUID = 
9067610794087880297L;
-
-                       @Override
-                       public void renderHead(Component component, 
IHeaderResponse response) {
-                               String area = WebSession.get().getArea();
-                               if (area != null) { //hash passed from signin
-                                       
response.render(OnDomReadyHeaderItem.forScript("$(\"a[href='" + 
JavaScriptUtils.escapeQuotes(area) + "']\").click();"));
-                                       WebSession.get().setArea(null);
-                               } else {
-                                       
response.render(OnDomReadyHeaderItem.forScript("$(\"a[href='\" + location.hash 
+ \"']\").click();"));
-                               }
-                               super.renderHead(component, response);
-                       }
-               });
-       }
-       
-       private String getHash(MenuActions action, MenuParams params) {
-               String hash = "#";
-               switch(action) {
-                       case dashboardModuleStartScreen:
-                               break;
-                       case dashboardModuleCalendar:
-                               hash = "#calendar";
-                               break;
-                       case recordModule:
-                               break;
-                       case conferenceModuleRoomList:
-                               String zone = "public";
-                               switch (params) {
-                                       case myTabButton:
-                                               zone = "my";
-                                               break;
-                                       case privateTabButton:
-                                               zone = "group";
-                                               break;
-                                       case publicTabButton:
-                                       default:
-                                               break;
-                               }
-                               hash = "#rooms/" + zone;
-                               break;
-                       case eventModuleRoomList:
-                               break;
-                       case moderatorModuleUser:
-                               break;
-                       case moderatorModuleRoom:
-                               break;
-                       case adminModuleUser:
-                               hash = "#admin/users";
-                               break;
-                       case adminModuleConnections:
-                               break;
-                       case adminModuleOrg:
-                               hash = "#admin/groups";
-                               break;
-                       case adminModuleRoom:
-                               hash = "#admin/rooms";
-                               break;
-                       case adminModuleConfiguration:
-                               hash = "#admin/configs";
-                               break;
-                       case adminModuleLanguages:
-                               hash = "#admin/lang";
-                               break;
-                       case adminModuleLDAP:
-                               hash = "#admin/ldaps";
-                               break;
-                       case adminModuleBackup:
-                               hash = "#admin/backup";
-                               break;
-                       case adminModuleServers:
-                               hash = "#admin/servers";
-                               break;
-               }
-               return hash;
        }
 }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/StartWidgetView.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/StartWidgetView.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/StartWidgetView.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/StartWidgetView.java
 Tue May 14 11:23:17 2013
@@ -18,9 +18,9 @@
  */
 package org.apache.openmeetings.web.components.user.dashboard;
 
-import org.apache.openmeetings.web.components.user.calendar.CalendarPanel;
+import static org.apache.openmeetings.web.util.UrlFragment.CALENDAR;
+
 import org.apache.openmeetings.web.pages.MainPage;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.form.Button;
@@ -39,8 +39,7 @@ public class StartWidgetView extends Wid
 
                        @Override
                        protected void onEvent(AjaxRequestTarget target) {
-                               MarkupContainer contents = 
((MainPage)getPage()).getContents();
-                               target.add(contents.replace(new 
CalendarPanel("child")));
+                               ((MainPage)getPage()).updateContents(CALENDAR, 
target);
                        }
                }));
        }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/WelcomeWidgetView.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/WelcomeWidgetView.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/WelcomeWidgetView.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/dashboard/WelcomeWidgetView.java
 Tue May 14 11:23:17 2013
@@ -20,14 +20,13 @@ package org.apache.openmeetings.web.comp
 
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static 
org.apache.openmeetings.web.components.user.profile.SettingsPanel.EDIT_PROFILE_TAB_ID;
-import static 
org.apache.openmeetings.web.components.user.profile.SettingsPanel.MESSAGES_TAB_ID;
+import static org.apache.openmeetings.web.util.UrlFragment.PROFILE_EDIT;
+import static org.apache.openmeetings.web.util.UrlFragment.PROFILE_MESSAGES;
 
 import org.apache.openmeetings.data.user.dao.PrivateMessagesDao;
 import org.apache.openmeetings.data.user.dao.UsersDao;
 import org.apache.openmeetings.persistence.beans.user.User;
 import org.apache.openmeetings.web.components.UploadableProfileImagePanel;
-import org.apache.openmeetings.web.components.user.profile.SettingsPanel;
 import org.apache.openmeetings.web.pages.MainPage;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
@@ -54,7 +53,7 @@ public class WelcomeWidgetView extends W
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               
target.add(((MainPage)getPage()).getContents().replace(new 
SettingsPanel("child", MESSAGES_TAB_ID)));
+                               
((MainPage)getPage()).updateContents(PROFILE_MESSAGES, target);
                        }
                }.add(new Label("unread", Model.of("" + 
getBean(PrivateMessagesDao.class)
                                .getNumberMessages(getUserId(), 0L, false)))));
@@ -63,7 +62,7 @@ public class WelcomeWidgetView extends W
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               
target.add(((MainPage)getPage()).getContents().replace(new 
SettingsPanel("child", EDIT_PROFILE_TAB_ID)));
+                               
((MainPage)getPage()).updateContents(PROFILE_EDIT, target);
                        }
                });
        }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/rooms/RoomsSelectorPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/rooms/RoomsSelectorPanel.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/rooms/RoomsSelectorPanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/user/rooms/RoomsSelectorPanel.java
 Tue May 14 11:23:17 2013
@@ -21,8 +21,8 @@ package org.apache.openmeetings.web.comp
 import org.apache.openmeetings.data.conference.dao.RoomDao;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.components.MenuPanel.MenuParams;
 import org.apache.openmeetings.web.components.UserPanel;
+import org.apache.openmeetings.web.util.UrlFragment.MenuParams;
 import org.apache.wicket.markup.html.basic.Label;
 
 public class RoomsSelectorPanel extends UserPanel {

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/BasePage.java
 Tue May 14 11:23:17 2013
@@ -18,22 +18,33 @@
  */
 package org.apache.openmeetings.web.pages;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
 import org.apache.openmeetings.persistence.beans.lang.FieldLanguage;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.components.HeaderPanel;
+import org.apache.openmeetings.web.util.UrlFragment;
+import org.apache.openmeetings.web.util.UrlFragment.AreaKeys;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.util.string.StringValue;
+import org.wicketstuff.urlfragment.AsyncUrlFragmentAwarePage;
 
-public abstract class BasePage extends WebPage {
+public abstract class BasePage extends AsyncUrlFragmentAwarePage {
        private static final long serialVersionUID = -6237917782433412496L;
+       private final Map<String, String> options;
 
        public BasePage() {
+               options = new HashMap<String, String>();
+               options.put("fragmentIdentifierSuffix", "");
+               options.put("keyValueDelimiter", "/");
                String appName = 
Application.getBean(ConfigurationDao.class).getAppName();
 
                FieldLanguage lang = WebSession.getLanguageObj();
@@ -46,6 +57,21 @@ public abstract class BasePage extends W
                add(new HeaderPanel("header", appName));
        }
        
+       protected UrlFragment getUrlFragment(IRequestParameters params) {
+               for (AreaKeys key : AreaKeys.values()) {
+                       StringValue type = params.getParameterValue(key.name());
+                       if (!type.isEmpty()) {
+                               return new UrlFragment(key, type.toString());
+                       }
+               }
+               return null;
+       }
+       
+       @Override
+       protected Map<String, String> getOptions() {
+               return options;
+       }
+       
        @Override
        public void renderHead(IHeaderResponse response) {
                
response.render(JavaScriptHeaderItem.forReference(Application.get()

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/MainPage.java
 Tue May 14 11:23:17 2013
@@ -19,17 +19,22 @@
 package org.apache.openmeetings.web.pages;
 
 import static org.apache.openmeetings.OpenmeetingsVariables.webAppRootKey;
-import static 
org.apache.openmeetings.web.components.user.profile.SettingsPanel.MESSAGES_TAB_ID;
-import static 
org.apache.openmeetings.web.components.user.profile.SettingsPanel.PROFILE_TAB_ID;
+import static org.apache.openmeetings.web.util.UrlFragment.CHILD_ID;
+import static org.apache.openmeetings.web.util.UrlFragment.DASHBOARD;
+import static org.apache.openmeetings.web.util.UrlFragment.PROFILE_EDIT;
+import static org.apache.openmeetings.web.util.UrlFragment.PROFILE_MESSAGES;
+import static org.apache.openmeetings.web.util.UrlFragment.getPanel;
 
 import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.components.BasePanel;
 import org.apache.openmeetings.web.components.ConfirmableAjaxLink;
 import org.apache.openmeetings.web.components.MenuPanel;
 import org.apache.openmeetings.web.components.user.AboutDialog;
 import org.apache.openmeetings.web.components.user.ChatPanel;
-import org.apache.openmeetings.web.components.user.dashboard.OmDashboardPanel;
-import org.apache.openmeetings.web.components.user.profile.SettingsPanel;
+import org.apache.openmeetings.web.util.UrlFragment;
 import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import 
org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
@@ -38,8 +43,11 @@ import org.apache.wicket.markup.html.lin
 import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
 import org.apache.wicket.protocol.ws.api.message.ClosedMessage;
 import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.util.time.Duration;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
+import org.wicketstuff.urlfragment.UrlParametersReceivingBehavior;
 
 @AuthorizeInstantiation("USER")
 public class MainPage extends BasePage {
@@ -50,17 +58,15 @@ public class MainPage extends BasePage {
        
        public MainPage() {
                contents = new WebMarkupContainer("contents");
-               //FIXME need to be generalized with MenuPanel
-               contents.add(new 
OmDashboardPanel("child")).setOutputMarkupId(true).setMarkupId("contents");
-               add(contents);
-               menu = new MenuPanel("menu", contents);
+               add(contents.add(new 
WebMarkupContainer(CHILD_ID)).setOutputMarkupId(true).setMarkupId("contents"));
+               menu = new MenuPanel("menu");
                add(menu);
                add(new AjaxLink<Void>("messages") {
                        private static final long serialVersionUID = 
4065339709905366840L;
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               target.add(contents.replace(new 
SettingsPanel("child", MESSAGES_TAB_ID)));
+                               updateContents(PROFILE_EDIT, target);
                        }
                });
                add(new ConfirmableAjaxLink("logout", 634L) {
@@ -77,7 +83,7 @@ public class MainPage extends BasePage {
 
                        @Override
                        public void onClick(AjaxRequestTarget target) {
-                               target.add(contents.replace(new 
SettingsPanel("child", PROFILE_TAB_ID)));
+                               updateContents(PROFILE_MESSAGES, target);
                        }
                });
                final AboutDialog about = new AboutDialog("aboutDialog");
@@ -108,9 +114,34 @@ public class MainPage extends BasePage {
                                log.debug("WebSocketBehavior::onClose");
                        }
                });
+               //load preselected content
+               add(new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+                       private static final long serialVersionUID = 
-1551197896975384329L;
+
+                       @Override
+                       protected void onTimer(AjaxRequestTarget target) {
+                               UrlFragment area = WebSession.get().getArea();
+                               updateContents(area == null ? DASHBOARD : area, 
target);
+                               stop(target);
+                       }
+               });
+       }
+       
+       public void updateContents(UrlFragment f, AjaxRequestTarget target) {
+               BasePanel panel = getPanel(f.getArea(), f.getType());
+               if (panel != null) {
+                       target.add(contents.replace(panel));
+                       //FIXME need to be uncommented later 
UrlParametersReceivingBehavior.setFragment(target, f.getArea().name(), 
f.getType());
+                       
UrlParametersReceivingBehavior.setFragmentParameter(target, f.getArea().name(), 
f.getType());
+                       panel.onMenuPanelLoad(target);
+               }
        }
        
-       public MarkupContainer getContents() {
-               return contents;
+       @Override
+       protected void onParameterArrival(IRequestParameters params, 
AjaxRequestTarget target) {
+               UrlFragment uf = getUrlFragment(params);
+               if (uf != null) {
+                       updateContents(uf, target);
+               }
        }
 }

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.html
 Tue May 14 11:23:17 2013
@@ -45,7 +45,6 @@
                        </tr>
                </table>
                <span wicket:id="feedback"></span>
-               <input wicket:id="area" type="hidden" value="" />
                <input type="submit" wicket:id="submit" style="position: 
absolute; top: -9999px; width: 1px; height: 1px;"/>
        </form>
 </wicket:panel>

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInDialog.java
 Tue May 14 11:23:17 2013
@@ -40,7 +40,6 @@ import org.apache.wicket.markup.html.for
 import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.HiddenField;
 import org.apache.wicket.markup.html.form.PasswordTextField;
 import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.markup.html.form.StatelessForm;
@@ -59,7 +58,6 @@ public class SignInDialog extends Abstra
        private DialogButton registerBtn = new 
DialogButton(WebSession.getString(123));
     private String password;
     private String login;
-    private String area = "";
     private boolean rememberMe = false;
     private RegisterDialog r;
     private ForgetPasswordDialog f;
@@ -149,7 +147,6 @@ public class SignInDialog extends Abstra
                ldapConfigFileName = domain.getConfigFileName() == null ? "" : 
domain.getConfigFileName();
                OmAuthenticationStrategy strategy = getAuthenticationStrategy();
                if (WebSession.get().signIn(login, password, 
ldapConfigFileName)) {
-                       WebSession.get().setArea(area);
                        setResponsePage(Application.get().getHomePage());
                        if (rememberMe) {
                                strategy.save(login, password, 
ldapConfigFileName);
@@ -198,9 +195,6 @@ public class SignInDialog extends Abstra
                                .add(new DropDownChoice<LdapConfig>("domain", 
new PropertyModel<LdapConfig>(SignInDialog.this, "domain")
                                                , ldaps, new 
ChoiceRenderer<LdapConfig>("name", "ldapConfigId"))).setVisible(ldaps.size() > 
1));
                        add(new CheckBox("rememberMe", new 
PropertyModel<Boolean>(SignInDialog.this, 
"rememberMe")).setOutputMarkupId(true));
-                       add(new HiddenField<String>("area", new 
PropertyModel<String>(SignInDialog.this, "area"))
-                                       .setMarkupId("area")
-                                       .setOutputMarkupId(true));
                        add(new AjaxButton("submit") { //FAKE button so 
"submit-on-enter" works as expected
                                private static final long serialVersionUID = 
-3612671587183668912L;
 

Modified: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.java?rev=1482302&r1=1482301&r2=1482302&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/pages/auth/SignInPage.java
 Tue May 14 11:23:17 2013
@@ -22,9 +22,12 @@ import static org.apache.openmeetings.pe
 import static org.apache.openmeetings.web.app.Application.getBean;
 
 import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
+import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.pages.BasePage;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.request.IRequestParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 public class SignInPage extends BasePage {
@@ -56,4 +59,9 @@ public class SignInPage extends BasePage
                //TODO need to be removed if autoOen will be enabled
                response.render(OnDomReadyHeaderItem.forScript("$('#" + 
d.getMarkupId() + "').dialog('open');"));
        }
+
+       @Override
+       protected void onParameterArrival(IRequestParameters params, 
AjaxRequestTarget arg1) {
+               WebSession.get().setArea(getUrlFragment(params));
+       }
 }

Added: 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UrlFragment.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UrlFragment.java?rev=1482302&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UrlFragment.java
 (added)
+++ 
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/UrlFragment.java
 Tue May 14 11:23:17 2013
@@ -0,0 +1,249 @@
+/*
+ * 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.components.user.profile.SettingsPanel.EDIT_PROFILE_TAB_ID;
+import static 
org.apache.openmeetings.web.components.user.profile.SettingsPanel.MESSAGES_TAB_ID;
+
+import java.io.Serializable;
+
+import org.apache.openmeetings.web.components.BasePanel;
+import org.apache.openmeetings.web.components.admin.backup.BackupPanel;
+import 
org.apache.openmeetings.web.components.admin.configurations.ConfigsPanel;
+import org.apache.openmeetings.web.components.admin.groups.GroupsPanel;
+import org.apache.openmeetings.web.components.admin.labels.LangPanel;
+import org.apache.openmeetings.web.components.admin.ldaps.LdapsPanel;
+import org.apache.openmeetings.web.components.admin.rooms.RoomsPanel;
+import org.apache.openmeetings.web.components.admin.servers.ServersPanel;
+import org.apache.openmeetings.web.components.admin.users.UsersPanel;
+import org.apache.openmeetings.web.components.user.calendar.CalendarPanel;
+import org.apache.openmeetings.web.components.user.dashboard.OmDashboardPanel;
+import org.apache.openmeetings.web.components.user.profile.SettingsPanel;
+import org.apache.openmeetings.web.components.user.rooms.RoomsSelectorPanel;
+
+public class UrlFragment implements Serializable {
+       private static final long serialVersionUID = 7382435810352033914L;
+       private AreaKeys area = AreaKeys.user;
+       private String type = "";
+       public static final String CHILD_ID = "child";
+       public static final String TYPE_CALENDAR = "calendar";
+       public static final String TYPE_MESSAGES = "messages";
+       public static final String TYPE_EDIT = "edit";
+       public static final String TYPE_RECORDINGS = "record";
+       public static final String TYPE_MY = "my";
+       public static final String TYPE_GROUP = "group";
+       public static final String TYPE_PUBLIC = "public";
+       public static final String TYPE_USER = "user";
+       public static final String TYPE_CONNECTION = "connection";
+       public static final String TYPE_ROOM = "room";
+       public static final String TYPE_CONFIG = "config";
+       public static final String TYPE_LANG = "lang";
+       public static final String TYPE_LDAP = "ldap";
+       public static final String TYPE_BACKUP = "backup";
+       public static final String TYPE_SERVER = "server";
+       public static final UrlFragment DASHBOARD = new 
UrlFragment(AreaKeys.user, "");
+       public static final UrlFragment PROFILE_EDIT = new 
UrlFragment(AreaKeys.profile, TYPE_EDIT);
+       public static final UrlFragment PROFILE_MESSAGES = new 
UrlFragment(AreaKeys.profile, TYPE_MESSAGES);
+       public static final UrlFragment CALENDAR = new 
UrlFragment(AreaKeys.user, TYPE_CALENDAR);
+       
+       public enum AreaKeys {
+               user
+               , admin
+               , profile
+               , room
+               , rooms
+       }
+       
+       public enum MenuActions {
+               dashboardModuleStartScreen
+               , dashboardModuleCalendar
+               , recordModule
+               , conferenceModuleRoomList
+               , eventModuleRoomList
+               , moderatorModuleUser
+               , moderatorModuleRoom
+               , adminModuleUser
+               , adminModuleConnections
+               , adminModuleOrg
+               , adminModuleRoom
+               , adminModuleConfiguration
+               , adminModuleLanguages
+               , adminModuleLDAP
+               , adminModuleBackup
+               , adminModuleServers
+       }
+       
+       public enum MenuParams {
+               publicTabButton
+               , privateTabButton
+               , myTabButton
+       }
+       
+       public UrlFragment(AreaKeys area, String type) {
+               this.setArea(area);
+               this.setType(type);
+       }
+       
+       public UrlFragment(MenuActions action) {
+               this(action, MenuParams.myTabButton);
+       }
+       
+       public UrlFragment(MenuActions action, MenuParams params) {
+               switch(action) {
+                       case dashboardModuleStartScreen:
+                               break;
+                       case dashboardModuleCalendar:
+                               setArea(AreaKeys.user);
+                               setType(TYPE_CALENDAR);
+                               break;
+                       case recordModule:
+                               setArea(AreaKeys.user);
+                               setType(TYPE_RECORDINGS);
+                               break;
+                       case conferenceModuleRoomList:
+                               setArea(AreaKeys.rooms);
+                               switch (params) {
+                                       case myTabButton:
+                                               setType(TYPE_MY);
+                                               break;
+                                       case privateTabButton:
+                                               setType(TYPE_GROUP);
+                                               break;
+                                       case publicTabButton:
+                                               setType(TYPE_PUBLIC);
+                                               break;
+                               }
+                               break;
+                       case eventModuleRoomList:
+                               break;
+                       case moderatorModuleUser:
+                               break;
+                       case moderatorModuleRoom:
+                               break;
+                       case adminModuleUser:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_USER);
+                               break;
+                       case adminModuleConnections:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_CONNECTION);
+                               break;
+                       case adminModuleOrg:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_GROUP);
+                               break;
+                       case adminModuleRoom:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_ROOM);
+                               break;
+                       case adminModuleConfiguration:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_CONFIG);
+                               break;
+                       case adminModuleLanguages:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_LANG);
+                               break;
+                       case adminModuleLDAP:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_LDAP);
+                               break;
+                       case adminModuleBackup:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_BACKUP);
+                               break;
+                       case adminModuleServers:
+                               setArea(AreaKeys.admin);
+                               setType(TYPE_SERVER);
+                               break;
+               }
+       }
+
+       public AreaKeys getArea() {
+               return area;
+       }
+
+       public void setArea(AreaKeys area) {
+               this.area = area;
+       }
+
+       public String getType() {
+               return type;
+       }
+
+       public void setType(String type) {
+               this.type = type;
+       }
+       
+       public static BasePanel getPanel(AreaKeys area, String type) {
+               BasePanel basePanel = null;
+               switch(area) {
+                       case admin:
+                               if (TYPE_USER.equals(type)) {
+                                       basePanel = new UsersPanel(CHILD_ID);
+                               } else if (TYPE_CONNECTION.equals(type)) {
+                               } else if (TYPE_GROUP.equals(type)) {
+                                       basePanel = new GroupsPanel(CHILD_ID);
+                               } else if (TYPE_ROOM.equals(type)) {
+                                       basePanel = new RoomsPanel(CHILD_ID);
+                               } else if (TYPE_CONFIG.equals(type)) {
+                                       basePanel = new ConfigsPanel(CHILD_ID);
+                               } else if (TYPE_LANG.equals(type)) {
+                                       basePanel = new LangPanel(CHILD_ID);
+                               } else if (TYPE_LDAP.equals(type)) {
+                                       basePanel = new LdapsPanel(CHILD_ID);
+                               } else if (TYPE_BACKUP.equals(type)) {
+                                       basePanel = new BackupPanel(CHILD_ID);
+                               } else if (TYPE_SERVER.equals(type)) {
+                                       basePanel = new ServersPanel(CHILD_ID);
+                               }
+                               break;
+                       case profile:
+                               if (TYPE_MESSAGES.equals(type)) {
+                                       basePanel = new SettingsPanel(CHILD_ID, 
MESSAGES_TAB_ID);
+                               } else if (TYPE_EDIT.equals(type)) {
+                                       basePanel = new SettingsPanel(CHILD_ID, 
EDIT_PROFILE_TAB_ID);
+                               }
+                               break;
+                       case room:
+                               break;
+                       case rooms:
+                               MenuParams params = MenuParams.publicTabButton;
+                               if (TYPE_GROUP.equals(type)) {
+                                       params = MenuParams.privateTabButton;
+                               } else if (TYPE_MY.equals(type)) {
+                                       params = MenuParams.myTabButton;
+                               }
+                               basePanel = new RoomsSelectorPanel(CHILD_ID, 
params);
+                               break;
+                       case user:
+                               if (TYPE_CALENDAR.equals(type)) {
+                                       basePanel = new CalendarPanel(CHILD_ID);
+                               } else if (TYPE_RECORDINGS.equals(type)) {
+                                       //
+                               } else {
+                                       basePanel = new 
OmDashboardPanel(CHILD_ID);
+                               }
+                               break;
+                       default:
+                               break;
+               }
+               return basePanel;
+       }
+}


Reply via email to