You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2016/04/17 13:27:21 UTC

svn commit: r1739582 [2/2] - in /openmeetings/application: branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ branches/3.2.x/openm...

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