Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
 Sun Apr 17 11:27:20 2016
@@ -96,16 +96,12 @@
                                                <fieldset 
class="ui-widget-content">
                                                        <legend 
class="ui-widget-header"><wicket:message key="881" /></legend>
                                                        <div 
class="formelement">
+                                                               <div 
class="info-text"><wicket:message key="880" /></div>
                                                                
<label><wicket:message key="879" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="allowUserQuestions" />
                                                        </div>
                                                        <div 
class="formelement">
-                                                               <wicket:message 
key="880" />
-                                                               <br/>
-                                                               
<label><wicket:message key="1076" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="audioOnly" />
-                                                       </div>
-                                                       <div 
class="formelement">
                                                                <div 
class="info-text"><wicket:message key="1077" /></div>
-                                                               
<label><wicket:message key="1531" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="allowFontStyles" />
+                                                               
<label><wicket:message key="1076" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="audioOnly" />
                                                        </div>
                                                        <div 
class="formelement">
                                                                <div 
class="info-text"><wicket:message key="1101" /></div>
@@ -122,6 +118,9 @@
                                                        <div 
class="formelement">
                                                                
<label><wicket:message key="1355" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="allowRecording" />
                                                        </div>
+                                                       <div 
class="formelement">
+                                                               
<label><wicket:message key="1513" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="chatModerated" />
+                                                       </div>
                                                </fieldset>
                                                
                                                <!-- Room Layout options -->
@@ -152,9 +151,6 @@
                                                                
<label><wicket:message key="1442" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="showMicrophoneStatus" />
                                                        </div>
                                                        <div 
class="formelement">
-                                                               
<label><wicket:message key="1513" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="chatModerated" />
-                                                       </div>
-                                                       <div 
class="formelement">
                                                                
<label><wicket:message key="1515" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="chatOpened" />
                                                        </div>
                                                        <div 
class="formelement">

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
 Sun Apr 17 11:27:20 2016
@@ -33,32 +33,21 @@ public class KickMessageDialog extends A
 
        public KickMessageDialog(String id) {
                super(id, "");
-               add(new Label("message", Application.getString(606)));
        }
 
        @Override
        protected void onInitialize() {
                super.onInitialize();
-               add(new JQueryBehavior(JQueryWidget.getSelector(this), 
"dialog") {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-            protected String $()  {
-                return this.$(Options.asString("open"));
-            }
-        });
+               add(new Label("message", getString("606")));
        };
        
        @Override
        public void onConfigure(JQueryBehavior behavior) {
                super.onConfigure(behavior);
+               behavior.setOption("autoOpen", true);
                behavior.setOption("closeOnEscape", false);
-        behavior.setOption("dialogClass", Options.asString("no-close"));
-        behavior.setOption("resizable", false);
-       }
-
-       public String getOnClickJavaScript() {
-               return "$('#" + getButtons().get(0).getMarkupId() 
+"').click(function(e){$('#" + getMarkupId() +"').close(); })";
+               behavior.setOption("dialogClass", Options.asString("no-close"));
+               behavior.setOption("resizable", false);
        }
 
        @Override

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
 Sun Apr 17 11:27:20 2016
@@ -58,7 +58,7 @@ public class ResetPasswordDialog extends
        public ResetPasswordDialog(String id, final User user) {
                super(id, Application.getString(325));
                this.user = user;
-               add(form = new Form<String>("form"){
+               add(form = new Form<String>("form") {
                        private static final long serialVersionUID = 1L;
                        private TextField<String> login;
                        private PasswordTextField confirmPassword;
@@ -76,14 +76,14 @@ public class ResetPasswordDialog extends
                                
confirmPassword.setLabel(Model.of(Application.getString(329)));
                                
confirmPassword.setRequired(true).add(minimumLength(getMinPasswdLength(cfgDao)));
 
-                               add(new AjaxButton("submit") { //FAKE button so 
"submit-on-enter" works as expected
+                               add(new AjaxButton("submit") { // FAKE button 
so "submit-on-enter" works as expected
                                        private static final long 
serialVersionUID = 1L;
 
                                        @Override
                                        protected void 
onSubmit(AjaxRequestTarget target, Form<?> form) {
                                                
ResetPasswordDialog.this.onSubmit(target);
                                        }
-                                       
+
                                        @Override
                                        protected void 
onError(AjaxRequestTarget target, Form<?> form) {
                                                
ResetPasswordDialog.this.onError(target);
@@ -99,18 +99,19 @@ public class ResetPasswordDialog extends
                                }
                                super.onValidate();
                        }
-                       
+
                });
-               confirmReset = new MessageDialog("confirmReset", 
Application.getString(325), Application.getString(332), DialogButtons.OK, 
DialogIcon.INFO){
+               confirmReset = new MessageDialog("confirmReset", 
Application.getString(325), Application.getString(332), 
+                               DialogButtons.OK, DialogIcon.INFO) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
                        public void onConfigure(JQueryBehavior behavior) {
                                super.onConfigure(behavior);
-                       behavior.setOption("dialogClass", 
Options.asString("no-close"));
+                               behavior.setOption("dialogClass", 
Options.asString("no-close"));
                                behavior.setOption("closeOnEscape", false);
                        }
-                       
+
                        @Override
                        public void onClose(IPartialPageRequestHandler handler, 
DialogButton button) {
                                
setResponsePage(Application.get().getSignInPageClass());
@@ -118,11 +119,12 @@ public class ResetPasswordDialog extends
                };
                add(confirmReset);
        }
-       
+
        @Override
        public void onConfigure(JQueryBehavior behavior) {
                super.onConfigure(behavior);
-        behavior.setOption("dialogClass", Options.asString("no-close"));
+               behavior.setOption("autoOpen", true);
+               behavior.setOption("dialogClass", Options.asString("no-close"));
                behavior.setOption("closeOnEscape", false);
        }
 
@@ -130,7 +132,7 @@ public class ResetPasswordDialog extends
        protected List<DialogButton> getButtons() {
                return Arrays.asList(resetBtn);
        }
-       
+
        @Override
        public DialogButton getSubmitButton() {
                return resetBtn;
@@ -154,26 +156,13 @@ public class ResetPasswordDialog extends
                        error(e.getMessage());
                }
        }
-       
+
        @Override
        public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
-               if (resetBtn.equals(button)){
+               if (resetBtn.equals(button)) {
                        confirmReset.open(handler);
                } else {
                        setResponsePage(Application.get().getSignInPageClass());
                }
        }
-       
-       @Override
-       protected void onInitialize() {
-               super.onInitialize();
-               add(new JQueryBehavior(JQueryWidget.getSelector(this), 
"dialog") {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       protected String $() {
-                               return this.$(Options.asString("open"));
-                       }
-               });
-       }
 }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
 Sun Apr 17 11:27:20 2016
@@ -62,7 +62,6 @@ import org.apache.wicket.ajax.AjaxReques
 import org.apache.wicket.ajax.json.JSONException;
 import org.apache.wicket.ajax.json.JSONObject;
 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.cycle.RequestCycle;
 import org.apache.wicket.request.flow.RedirectToUrlException;
@@ -150,7 +149,6 @@ public class SignInPage extends BaseInit
        @Override
        public void renderHead(IHeaderResponse response) {
                super.renderHead(response);
-               
response.render(OnDomReadyHeaderItem.forScript(m.getOnClickJavaScript()));
        }
        
        @Override

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ExpiredMessageDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ExpiredMessageDialog.java?rev=1739582&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ExpiredMessageDialog.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ExpiredMessageDialog.java
 Sun Apr 17 11:27:20 2016
@@ -0,0 +1,55 @@
+/*
+ * 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.room;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.room.menu.RoomMenuPanel;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class ExpiredMessageDialog extends MessageDialog {
+       private static final long serialVersionUID = 1L;
+       private final RoomMenuPanel menu;
+
+       public ExpiredMessageDialog(String id, String message, RoomMenuPanel 
menu) {
+               super(id, Application.getString(204), message, 
DialogButtons.OK, DialogIcon.ERROR);
+               this.menu = menu;
+       }
+
+       @Override
+       public boolean isModal() {
+               return true;
+       }
+
+       @Override
+       public void onConfigure(JQueryBehavior behavior) {
+               super.onConfigure(behavior);
+               behavior.setOption("autoOpen", true);
+       }
+
+       @Override
+       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
+               menu.exit(handler);
+       }
+}

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/OmRedirectTimerBehavior.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/OmRedirectTimerBehavior.java?rev=1739582&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/OmRedirectTimerBehavior.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/OmRedirectTimerBehavior.java
 Sun Apr 17 11:27:20 2016
@@ -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.room;
+
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.util.time.Duration;
+
+public abstract class OmRedirectTimerBehavior extends 
AbstractAjaxTimerBehavior {
+       private static final long serialVersionUID = 1L;
+       private final long clock;
+       private final int delay;
+       private final String labelId;
+
+       public OmRedirectTimerBehavior(int delay, String labelId) {
+               super(Duration.ONE_SECOND);
+               clock = System.currentTimeMillis();
+               this.delay = delay;
+               this.labelId = labelId;
+       }
+       
+       protected static String getTime(int remain) {
+               return 
Duration.seconds(remain).toString(WebSession.get().getLocale());
+       }
+       
+       public static String getText(String text, int remain) {
+               return String.format("%s: %s", text, getTime(remain));
+       }
+       
+       protected String getText(int remain) {
+               return getText(getComponent().getString(labelId), remain);
+       }
+       
+       private int remain(long now) {
+               return (int)(delay - (now - clock) / 1000);
+       }
+
+       @Override
+       protected void onBind() {
+               super.onBind();
+               getComponent().setDefaultModelObject(getText(delay));
+               getComponent().setOutputMarkupId(true);
+               onTimer(delay);
+       }
+
+       protected void onTimer(int remain) {
+       }
+       
+       @Override
+       protected void onTimer(AjaxRequestTarget target) {
+               int remain = remain(System.currentTimeMillis());
+               if (remain > -1) {
+                       getComponent().setDefaultModelObject(getText(remain));
+                       onTimer(remain);
+                       target.add(getComponent());
+               } else {
+                       stop(target);
+                       onFinish(target);
+               }
+       }
+       
+       protected abstract void onFinish(AjaxRequestTarget target);
+}

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RedirectMessageDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RedirectMessageDialog.java?rev=1739582&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RedirectMessageDialog.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RedirectMessageDialog.java
 Sun Apr 17 11:27:20 2016
@@ -0,0 +1,113 @@
+/*
+ * 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.room;
+
+import java.util.ArrayList;
+
+import org.apache.directory.api.util.Strings;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.Component;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.request.flow.RedirectToUrlException;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class RedirectMessageDialog extends MessageDialog {
+       private static final long serialVersionUID = 1L;
+       private final String labelId;
+       private final String url;
+       private final int delay = 5;
+       private final boolean autoOpen;
+       private Component label; 
+       
+       public RedirectMessageDialog(String id, String labelId, boolean 
autoOpen, String url) {
+               super(id, Application.getString(204), "", new 
ArrayList<DialogButton>(), DialogIcon.ERROR);
+               this.labelId = labelId;
+               this.url = url;
+               this.autoOpen = autoOpen;
+       }
+       
+       @Override
+       protected void onInitialize() {
+               super.onInitialize();
+               if (autoOpen) {
+                       startTimer(null);
+               }
+       }
+
+       private void startTimer(IPartialPageRequestHandler handler) {
+               label.add(new OmRedirectTimerBehavior(delay, labelId) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onFinish(AjaxRequestTarget target) {
+                               if (Strings.isEmpty(url)) {
+                                       throw new 
RestartResponseException(Application.get().getHomePage());
+                               } else {
+                                       throw new RedirectToUrlException(url);
+                               }
+                       }
+               });
+               if (handler != null) {
+                       handler.add(label);
+               }
+       }
+       
+       @Override
+       protected void onOpen(IPartialPageRequestHandler handler) {
+               super.onOpen(handler);
+               startTimer(handler);
+       }
+       
+       @Override
+       public void onConfigure(JQueryBehavior behavior) {
+               super.onConfigure(behavior);
+               behavior.setOption("autoOpen", autoOpen);
+               behavior.setOption("closeOnEscape", false);
+               behavior.setOption("dialogClass", Options.asString("no-close"));
+               behavior.setOption("resizable", false);
+       }
+       
+       @Override
+       public boolean isModal() {
+               return true;
+       }
+       
+       @Override
+       public boolean isDefaultCloseEventEnabled() {
+               return false;
+       }
+       
+       @Override
+       public void onClose(IPartialPageRequestHandler handler, DialogButton 
button) {
+       }
+       
+       @Override
+       protected Component newLabel(String id, IModel<String> model) {
+               label = super.newLabel(id, model);
+               return label;
+       }
+}

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
 Sun Apr 17 11:27:20 2016
@@ -28,13 +28,15 @@
 </wicket:head>
 <wicket:panel>
        <div wicket:id="roomContainer" style="height: 100%">
-               <div class="room menu" wicket:id="roomMenu"></div>
+               <div class="room menu" wicket:id="menu"></div>
                <div class="room sidebar left" wicket:id="sidebar"></div>
                <div class="room wb area">
                        <div class="wb" wicket:id="whiteboard"></div>
                </div>
-               <div wicket:id="activitiesPanel"></div>
+               <div wicket:id="activities"></div>
        </div>
-       <div wicket:id="accessDenied"></div>
+       <div wicket:id="access-denied"></div>
+       <div wicket:id="room-closed"></div>
+       <div wicket:id="wait-for-recording"></div>
 </wicket:panel>
 </html>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 Sun Apr 17 11:27:20 2016
@@ -38,6 +38,8 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
+import org.apache.openmeetings.util.message.RoomMessage;
+import org.apache.openmeetings.util.message.TextRoomMessage;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.WebSession;
@@ -45,8 +47,6 @@ import org.apache.openmeetings.web.commo
 import org.apache.openmeetings.web.room.activities.ActivitiesPanel;
 import org.apache.openmeetings.web.room.activities.Activity;
 import org.apache.openmeetings.web.room.menu.RoomMenuPanel;
-import org.apache.openmeetings.web.room.message.RoomMessage;
-import org.apache.openmeetings.web.room.message.TextRoomMessage;
 import org.apache.openmeetings.web.room.sidebar.RoomSidebar;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
@@ -84,6 +84,7 @@ import com.googlecode.wicket.jquery.ui.w
 public class RoomPanel extends BasePanel {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
+       private static final String ACCESS_DENIED_ID = "access-denied";
        private final Room r;
        private final WebMarkupContainer room = new 
WebMarkupContainer("roomContainer");
        private final AbstractDefaultAjaxBehavior aab = new 
AbstractDefaultAjaxBehavior() {
@@ -110,13 +111,14 @@ public class RoomPanel extends BasePanel
                                                .put("labels", 
getStringLabels(448, 449, 450, 451, 758, 447, 52, 53, 1429, 1430, 775, 452, 
767, 764, 765, 918, 54, 761, 762))
                                                .toString()
                                                ));
-                               broadcast(new RoomMessage(r.getId(), 
RoomMessage.Type.roomEnter));
+                               broadcast(new RoomMessage(r.getId(), 
getUserId(), RoomMessage.Type.roomEnter));
                                getMainPage().getChat().roomEnter(r, target);
                        } catch (MalformedURLException e) {
                                log.error("Error while constructing room 
parameters", e);
                        }
                }
        };
+       private RedirectMessageDialog roomClosed;
        private RoomMenuPanel menu;
        private RoomSidebar sidebar;
        private ActivitiesPanel activities;
@@ -130,66 +132,92 @@ public class RoomPanel extends BasePanel
        protected void onInitialize() {
                getClient().setRoomId(r.getId());
                super.onInitialize();
-               Component accessDenied = new 
WebMarkupContainer("accessDenied").setVisible(false);
-               boolean allowed = false;
-               String deniedMessage = null;
-               if (r.isAppointment()) {
-                       Appointment a = 
getBean(AppointmentDao.class).getByRoom(r.getId());
-                       if (a != null && !a.isDeleted()) {
-                               allowed = 
a.getOwner().getId().equals(getUserId());
-                               log.debug("appointed room, isOwner ? " + 
allowed);
+               Component accessDenied = new 
WebMarkupContainer(ACCESS_DENIED_ID).setVisible(false);
+               add(roomClosed = new RedirectMessageDialog("room-closed", 
"1098", r.isClosed(), r.getRedirectURL()));
+               if (r.isClosed()) {
+                       room.setVisible(false);
+               } else if (r.getNumberOfPartizipants() >= 
getRoomUsers(r.getId()).size()) {
+                       accessDenied = new 
ExpiredMessageDialog(ACCESS_DENIED_ID, getString("99"), menu);
+                       room.setVisible(false);
+               } else {
+                       boolean allowed = false;
+                       String deniedMessage = null;
+                       if (r.isAppointment()) {
+                               Appointment a = 
getBean(AppointmentDao.class).getByRoom(r.getId());
+                               if (a != null && !a.isDeleted()) {
+                                       allowed = 
a.getOwner().getId().equals(getUserId());
+                                       log.debug("appointed room, isOwner ? " 
+ allowed);
+                                       if (!allowed) {
+                                               for (MeetingMember mm : 
a.getMeetingMembers()) {
+                                                       if 
(mm.getUser().getId() == getUserId()) {
+                                                               allowed = true;
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                                       /*
+                                       TODO need to be reviewed
+                                       Calendar c = WebSession.getCalendar();
+                                       if (c.getTime().after(a.getStart()) && 
c.getTime().before(a.getEnd())) {
+                                               allowed = true;
+                                       } else {
+                                               SimpleDateFormat sdf = new 
SimpleDateFormat("yyyy/MM/dd HH:mm"); //FIXME format
+                                               deniedMessage = 
getString("1271") + String.format(" %s - %s", sdf.format(a.getStart()), 
sdf.format(a.getEnd()));
+                                       }
+                                       */
+                               }
+                       } else {
+                               allowed = r.getIspublic() || (r.getOwnerId() != 
null && r.getOwnerId().equals(getUserId()));
+                               log.debug("public ? " + r.getIspublic() + ", 
ownedId ? " + r.getOwnerId() + " " + allowed);
                                if (!allowed) {
-                                       for (MeetingMember mm : 
a.getMeetingMembers()) {
-                                               if (mm.getUser().getId() == 
getUserId()) {
-                                                       allowed = true;
+                                       User u = 
getBean(UserDao.class).get(getUserId());
+                                       for (RoomGroup ro : r.getRoomGroups()) {
+                                               for (GroupUser ou : 
u.getGroupUsers()) {
+                                                       if 
(ro.getGroup().getId().equals(ou.getGroup().getId())) {
+                                                               allowed = true;
+                                                               break;
+                                                       }
+                                               }
+                                               if (allowed) {
                                                        break;
                                                }
                                        }
                                }
-                               /*
-                               TODO need to be reviewed
-                               Calendar c = WebSession.getCalendar();
-                               if (c.getTime().after(a.getStart()) && 
c.getTime().before(a.getEnd())) {
-                                       allowed = true;
-                               } else {
-                                       SimpleDateFormat sdf = new 
SimpleDateFormat("yyyy/MM/dd HH:mm"); //FIXME format
-                                       deniedMessage = getString("1271") + 
String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd()));
-                               }
-                               */
                        }
-               } else {
-                       allowed = r.getIspublic() || (r.getOwnerId() != null && 
r.getOwnerId().equals(getUserId()));
-                       log.debug("public ? " + r.getIspublic() + ", ownedId ? 
" + r.getOwnerId() + " " + allowed);
                        if (!allowed) {
-                               User u = 
getBean(UserDao.class).get(getUserId());
-                               for (RoomGroup ro : r.getRoomGroups()) {
-                                       for (GroupUser ou : u.getGroupUsers()) {
-                                               if 
(ro.getGroup().getId().equals(ou.getGroup().getId())) {
-                                                       allowed = true;
-                                                       break;
-                                               }
-                                       }
-                                       if (allowed) {
-                                               break;
-                                       }
+                               if (deniedMessage == null) {
+                                       deniedMessage = getString("1599");
                                }
+                               accessDenied = new 
ExpiredMessageDialog(ACCESS_DENIED_ID, deniedMessage, menu);
+                               room.setVisible(false);
                        }
                }
-               if (!allowed) {
-                       if (deniedMessage == null) {
-                               deniedMessage = getString("1599");
-                       }
-                       accessDenied = new ExpiredMessageDialog("accessDenied", 
deniedMessage);
-                       room.setVisible(false);
-               }
-               room.add((menu = new RoomMenuPanel("roomMenu", 
this)).setVisible(!r.getHideTopBar()));
+               room.add((menu = new RoomMenuPanel("menu", 
this)).setVisible(!r.getHideTopBar()));
                WebMarkupContainer wb = new WebMarkupContainer("whiteboard");
                room.add(wb.setOutputMarkupId(true));
                room.add(new WhiteboardBehavior("1", wb.getMarkupId(), null, 
null, null));
                room.add(aab);
                room.add(sidebar = new RoomSidebar("sidebar", this));
-               room.add((activities = new ActivitiesPanel("activitiesPanel", 
this)).setVisible(!r.isActivitiesHidden()));
+               room.add((activities = new ActivitiesPanel("activities", 
this)).setVisible(!r.isActivitiesHidden()));
                add(room, accessDenied);
+               if (r.getWaitForRecording()) {
+                       add(new MessageDialog("wait-for-recording", 
getString("1316"), getString("1315"), DialogButtons.OK, DialogIcon.INFO) 
{//DialogIcon.LIGHT
+                               private static final long serialVersionUID = 1L;
+       
+                               @Override
+                               public void onConfigure(JQueryBehavior 
behavior) {
+                                       super.onConfigure(behavior);
+                                       behavior.setOption("autoOpen", true);
+                                       behavior.setOption("resizable", false);
+                               }
+                               
+                               @Override
+                               public void onClose(IPartialPageRequestHandler 
handler, DialogButton button) {
+                               }
+                       });
+               } else {
+                       add(new 
WebMarkupContainer("wait-for-recording").setVisible(false));
+               }
        }
        
        @Override
@@ -218,6 +246,10 @@ public class RoomPanel extends BasePanel
                                                sidebar.updateUsers(handler);
                                                activities.add(new 
Activity(m.getUid(), m.getUserId(), Activity.Type.roomExit), handler);
                                                break;
+                                       case roomClosed:
+                                               
handler.add(room.setVisible(false));
+                                               roomClosed.open(handler);
+                                               break;
                                        case requestRightModerator:
                                                if (isModerator(getUserId(), 
r.getId())) {
                                                        TextRoomMessage tm = 
(TextRoomMessage)m;
@@ -347,32 +379,6 @@ public class RoomPanel extends BasePanel
                }
        }
 
-       class ExpiredMessageDialog extends MessageDialog {
-               private static final long serialVersionUID = 1L;
-               public boolean autoOpen = false;
-               
-               public ExpiredMessageDialog(String id, String message) {
-                       super(id, Application.getString(204), message, 
DialogButtons.OK, DialogIcon.ERROR);
-                       autoOpen = true;
-               }
-               
-               @Override
-               public boolean isModal() {
-                       return true;
-               }
-               
-               @Override
-               public void onConfigure(JQueryBehavior behavior) {
-                       super.onConfigure(behavior);
-                       behavior.setOption("autoOpen", autoOpen);
-               }
-               
-               @Override
-               public void onClose(IPartialPageRequestHandler handler, 
DialogButton button) {
-                       menu.exit(handler);
-               }
-       }
-       
        public Room getRoom() {
                return r;
        }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 Sun Apr 17 11:27:20 2016
@@ -35,12 +35,12 @@ import java.util.Map;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.message.RoomMessage;
+import org.apache.openmeetings.util.message.TextRoomMessage;
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.openmeetings.web.room.RoomPanel;
-import org.apache.openmeetings.web.room.message.RoomMessage;
-import org.apache.openmeetings.web.room.message.TextRoomMessage;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -94,7 +94,7 @@ public class ActivitiesPanel extends Bas
                                                        break;
                                                case decline:
                                                        if 
(isModerator(getUserId(), roomId)) {
-                                                               broadcast(new 
TextRoomMessage(room.getRoom().getId(), RoomMessage.Type.activityRemove, uid));
+                                                               broadcast(new 
TextRoomMessage(room.getRoom().getId(), getUserId(), 
RoomMessage.Type.activityRemove, uid));
                                                        }
                                                        break;
                                                case accept:
@@ -110,8 +110,8 @@ public class ActivitiesPanel extends Bas
                                                                                
}
                                                                                
if (client != null) {
                                                                                
        client.getRights().add(Right.moderator);
-                                                                               
        broadcast(new TextRoomMessage(room.getRoom().getId(), 
RoomMessage.Type.activityRemove, uid));
-                                                                               
        broadcast(new RoomMessage(room.getRoom().getId(), 
RoomMessage.Type.rightUpdated));
+                                                                               
        broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), 
RoomMessage.Type.activityRemove, uid));
+                                                                               
        broadcast(new RoomMessage(room.getRoom().getId(), getUserId(), 
RoomMessage.Type.rightUpdated));
                                                                                
}
                                                                                
break;
                                                                        default:

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 Sun Apr 17 11:27:20 2016
@@ -34,19 +34,19 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.message.RoomMessage;
+import org.apache.openmeetings.util.message.TextRoomMessage;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.OmButton;
 import org.apache.openmeetings.web.common.menu.MenuPanel;
 import org.apache.openmeetings.web.common.menu.RoomMenuItem;
+import org.apache.openmeetings.web.room.OmRedirectTimerBehavior;
 import org.apache.openmeetings.web.room.RoomPanel;
-import org.apache.openmeetings.web.room.message.RoomMessage;
-import org.apache.openmeetings.web.room.message.TextRoomMessage;
 import org.apache.openmeetings.web.room.poll.CreatePollDialog;
 import org.apache.openmeetings.web.room.poll.PollResultsDialog;
 import org.apache.openmeetings.web.room.poll.VoteDialog;
-import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
@@ -55,7 +55,6 @@ import org.apache.wicket.markup.html.pan
 import org.apache.wicket.model.Model;
 import org.apache.wicket.request.flow.RedirectToUrlException;
 import org.apache.wicket.util.string.Strings;
-import org.apache.wicket.util.time.Duration;
 
 import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
 
@@ -75,7 +74,7 @@ public class RoomMenuPanel extends Panel
                }
                @Override
                protected void onClick(AjaxRequestTarget target) {
-                       RoomPanel.broadcast(new 
TextRoomMessage(room.getRoom().getId(), RoomMessage.Type.requestRightModerator, 
room.getClient().getUid()));
+                       RoomPanel.broadcast(new 
TextRoomMessage(room.getRoom().getId(), getUserId(), 
RoomMessage.Type.requestRightModerator, room.getClient().getUid()));
                }
        };
        private final RoomPanel room;
@@ -155,18 +154,6 @@ public class RoomMenuPanel extends Panel
        }
        
        
-       private static String getDemoTime(int remain) {
-               return 
Duration.seconds(remain).toString(WebSession.get().getLocale());
-       }
-       
-       private String getDemoText(int remain) {
-               return String.format("%s: %s", getString("637"), 
getDemoTime(remain));
-       }
-       
-       private String getDemoTitle(int remain) {
-               return String.format("%s: %s", getString("639"), 
getDemoTime(remain));
-       }
-       
        @Override
        protected void onInitialize() {
                super.onInitialize();
@@ -175,31 +162,17 @@ public class RoomMenuPanel extends Panel
                Room r = room.getRoom();
                add(demo.setVisible(r.isDemoRoom() && r.getDemoTime() != null 
&& room.getRoom().getDemoTime().intValue() > 0));
                if (demo.isVisible()) {
-                       demo.setOutputMarkupId(true);
-                       
demo.setDefaultModelObject(getDemoText(r.getDemoTime().intValue()));
-                       demo.add(AttributeAppender.replace("title", 
getDemoTitle(r.getDemoTime().intValue())));
-                       demo.add(new 
AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+                       demo.add(new 
OmRedirectTimerBehavior(room.getRoom().getDemoTime().intValue(), "637") {
                                private static final long serialVersionUID = 1L;
-                               private final long clock;
-                               {
-                                       clock = System.currentTimeMillis();
-                               }
 
-                               private int remain(long now) {
-                                       return 
(int)(room.getRoom().getDemoTime().longValue() - (now - clock) / 1000);
+                               @Override
+                               protected void onTimer(int remain) {
+                                       
getComponent().add(AttributeAppender.replace("title", getText("639", remain)));
                                }
-
+                               
                                @Override
-                               protected void onTimer(AjaxRequestTarget 
target) {
-                                       int remain = 
remain(System.currentTimeMillis());
-                                       if (remain > -1) {
-                                               
getComponent().setDefaultModelObject(getDemoText(remain));
-                                               
getComponent().add(AttributeAppender.replace("title", getDemoTitle(remain)));
-                                               target.add(getComponent());
-                                       } else {
-                                               stop(target);
-                                               exit(target);
-                                       }
+                               protected void onFinish(AjaxRequestTarget 
target) {
+                                       exit(target);
                                }
                        });
                }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java
 Sun Apr 17 11:27:20 2016
@@ -193,7 +193,6 @@ public class MessageDialog extends Abstr
                        r.setNumberOfPartizipants(100L);
                        r.setAppointment(true);
                        r.setAllowUserQuestions(true);
-                       r.setAllowFontStyles(true);
                        r = getBean(RoomDao.class).update(r, getUserId());
                        Appointment a = new Appointment();
                        a.setTitle(m.getSubject());

Modified: 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java?rev=1739582&r1=1739581&r2=1739582&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
 Sun Apr 17 11:27:20 2016
@@ -22,9 +22,7 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.webservice.Constants.TNS;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import javax.jws.WebMethod;
 import javax.jws.WebParam;
@@ -40,7 +38,6 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.cxf.feature.Features;
-import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.db.dao.room.IInvitationManager;
 import org.apache.openmeetings.db.dao.room.InvitationDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -57,7 +54,13 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Invitation.MessageType;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.message.RoomMessage;
 import org.apache.openmeetings.webservice.error.ServiceException;
+import org.apache.wicket.Application;
+import org.apache.wicket.protocol.ws.WebSocketSettings;
+import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
+import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -86,8 +89,6 @@ public class RoomWebService {
        @Autowired
        private IInvitationManager invitationManager;
        @Autowired
-       private ScopeApplicationAdapter scopeApplicationAdapter;
-       @Autowired
        private ISessionManager sessionManager;
        @Autowired
        private RoomDao roomDao;
@@ -317,10 +318,16 @@ public class RoomWebService {
 
                                roomDao.update(room, userId);
 
-                               Map<String, String> message = new 
HashMap<String, String>();
-                               message.put("message", "roomClosed");
-                               
scopeApplicationAdapter.sendMessageByRoomAndDomain(id, message);
-                               
+                               Application app = 
Application.get(OpenmeetingsVariables.wicketApplicationName);
+                               WebSocketSettings settings = 
WebSocketSettings.Holder.get(app);
+                               IWebSocketConnectionRegistry registry = 
settings.getConnectionRegistry();
+                               RoomMessage cm = new RoomMessage(room.getId(),  
userId,  RoomMessage.Type.roomClosed);
+                               for (IWebSocketConnection wc : 
registry.getConnections(app)) {
+                                       if (wc != null && wc.isOpen()) {
+                                               wc.sendMessage(cm);
+                                       }
+                               }
+
                                return new ServiceResult(1L, "Closed", 
Type.SUCCESS);
                        } else {
                                throw new ServiceException("Insufficient 
permissions"); //TODO code -26



Reply via email to