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 2015/12/03 20:03:34 UTC

svn commit: r1717837 [2/2] - in /openmeetings: branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/ branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/ branches/3.1.x/openmeetings-web/src/main/java/org/apache/openme...

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java?rev=1717837&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/InviteUserToRoomDialog.java Thu Dec  3 19:03:33 2015
@@ -0,0 +1,103 @@
+/*
+ * 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.user;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.user.rooms.RoomListPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class InviteUserToRoomDialog extends AbstractDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(219));
+	private final RoomListPanel publicRooms;
+	private final RoomListPanel privateRooms;
+	private final InviteUserMessageDialog inviteMsg = new InviteUserMessageDialog("inviteMsg"); 
+	private Long userId;
+
+	private class InviteRoomListPanel extends RoomListPanel {
+		private static final long serialVersionUID = 1L;
+
+		public InviteRoomListPanel(String id, List<Room> rooms, final String label) {
+			super(id, rooms, label);
+		}
+		
+		@Override
+		public void onRoomEnter(AjaxRequestTarget target, Long roomId) {
+			//FIXME TODO only show message if other user is online
+			inviteMsg.open(target, roomId, userId);
+		}
+	}
+	
+	public InviteUserToRoomDialog(String id) {
+		super(id, Application.getString(1131));
+		add(publicRooms = new InviteRoomListPanel("publicRooms", new ArrayList<Room>(), Application.getString(1135)));
+		add(privateRooms = new InviteRoomListPanel("privateRooms", new ArrayList<Room>(), Application.getString(1135)));
+		add(inviteMsg);
+	}
+	
+	private List<Room> getPrivateRooms(Long userId1, Long userId2, RoomDao roomDao) {
+		List<Long> orgIds = new ArrayList<>();
+		List<Long> orgIds2 = new ArrayList<>();
+		UserDao userDao = getBean(UserDao.class);
+		for (GroupUser gu : userDao.get(userId1).getGroupUsers()) {
+			orgIds.add(gu.getGroup().getId());
+		}
+		for (GroupUser gu : userDao.get(userId2).getGroupUsers()) {
+			orgIds2.add(gu.getGroup().getId());
+		}
+		orgIds.retainAll(orgIds2);
+		List<Room> result = new ArrayList<>();
+		for (Long orgId : orgIds) {
+			result.addAll(roomDao.getGroupRooms(orgId));
+		}
+		return result;
+	}
+	
+	public void open(IPartialPageRequestHandler handler, Long userId) {
+		this.userId = userId;
+		RoomDao roomDao = getBean(RoomDao.class);
+		publicRooms.update(handler, roomDao.getPublicRooms());
+		privateRooms.update(handler, getPrivateRooms(getUserId(), userId, roomDao));
+		open(handler);
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(cancel);
+	}
+	
+	@Override
+	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+	}
+}

Copied: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java (from r1717714, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java&r1=1717714&r2=1717837&rev=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessageDialog.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/MessageDialog.java Thu Dec  3 19:03:33 2015
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.web.user.profile;
+package org.apache.openmeetings.web.user;
 
 import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
 import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;

Copied: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java (from r1717651, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java&r1=1717651&r2=1717837&rev=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/UserInfoDialog.java Thu Dec  3 19:03:33 2015
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.web.user.profile;
+package org.apache.openmeetings.web.user;
 
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
@@ -26,6 +26,7 @@ import java.util.List;
 
 import org.apache.openmeetings.db.dao.user.UserContactDao;
 import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.user.profile.UserProfilePanel;
 import org.apache.openmeetings.web.util.ContactsHelper;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.WebMarkupContainer;

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js Thu Dec  3 19:03:33 2015
@@ -17,8 +17,13 @@
  * under the License.
  */
 var chatTabs, tabTemplate = "<li><a href='#{href}'>#{label}</a></li>"
-	, msgTemplate = "<div id='chat-msg-id-#{id}'><span class='from'>#{from}</span><span class='date'>#{sent}</span>#{msg}</div>"
-	, acceptTemplate = "<span class='tick om-icon align-right clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var e=$(this);acceptMessage(e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></span>"
+	, msgTemplate = "<div id='chat-msg-id-#{id}'><img class='profile' src='#{imgSrc}'/><span class='from' data-user-id='#{userId}'>#{from}</span><span class='date align-right'>#{sent}</span>#{msg}</div>"
+	, acceptTemplate = "<div class='tick om-icon align-right clickable' data-msgid='#{msgid}' data-roomid='#{roomid}' onclick='var e=$(this);acceptMessage(e.data(\"roomid\"),e.data(\"msgid\"));e.parent().remove();'></div>"
+	, infoTemplate = "<div class='user om-icon align-right clickable' data-user-id='#{userId}' onclick='var e=$(this);showUserInfo(e.data(\"userId\"));'></div>"
+	, addTemplate = "<div class='add om-icon align-right clickable' data-user-id='#{userId}' onclick='var e=$(this);addContact(e.data(\"userId\"));'></div>"
+	, messageTemplate = "<div class='new-email om-icon align-right clickable' data-user-id='#{userId}' onclick='var e=$(this);privateMessage(e.data(\"userId\"));'></div>"
+	, inviteTemplate = "<div class='invite om-icon align-right clickable' data-user-id='#{userId}' onclick='var e=$(this);inviteUser(e.data(\"userId\"));'></div>"
+	, clearBlock = "<div class='clear'></div>"
 	, closeBlock = "<span class='ui-icon ui-icon-close' role='presentation'></span>"
 	, closedHeight = "20px", openedHeight = "345px";
 $(function() {
@@ -86,8 +91,17 @@ function addChatMessage(m) {
 		var msg;
 		for (var i = 0; i < m.msg.length; ++i) {
 			var cm = m.msg[i];
-			//needModeration
-			msg = $(msgTemplate.replace(/#\{id\}/g, cm.id).replace(/#\{from\}/g, cm.from).replace(/#\{sent\}/g, cm.sent).replace(/#\{msg\}/g, cm.message));
+			msg = $(msgTemplate.replace(/#\{id\}/g, cm.id)
+					.replace(/#\{userId\}/g, cm.from.id)
+					.replace(/#\{imgSrc\}/g, cm.from.img)
+					.replace(/#\{from\}/g, cm.from.name)
+					.replace(/#\{sent\}/g, cm.sent)
+					.replace(/#\{msg\}/g, cm.message));
+			var date = msg.children('.date');
+			date.after(infoTemplate.replace(/#\{userId\}/g, cm.from.id));
+			date.after(addTemplate.replace(/#\{userId\}/g, cm.from.id));
+			date.after(messageTemplate.replace(/#\{userId\}/g, cm.from.id));
+			date.after(inviteTemplate.replace(/#\{userId\}/g, cm.from.id));
 			if (cm.needModeration) {
 				msg.append(acceptTemplate.replace(/#\{msgid\}/g, cm.id).replace(/#\{roomid\}/g, cm.scope.substring(9)));
 			}
@@ -97,6 +111,7 @@ function addChatMessage(m) {
 			if (m.mode == "accept") {
 				$('#chat-msg-id-' + cm.id).remove();
 			}
+			msg.append(clearBlock);
 			$('#' + cm.scope).append(msg);
 		}
 		if (msg[0]) {

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html Thu Dec  3 19:03:33 2015
@@ -56,7 +56,8 @@
 								<td wicket:id="search"></td>
 								<td style="white-space: nowrap;"><div wicket:id="add" class="add om-icon clickable" wicket:message="title:1186"
 									></div><div wicket:id="message" class="new-email om-icon clickable" wicket:message="title:1253"
-									></div><div wicket:id="view" class="user om-icon clickable" wicket:message="title:1236"></div></td>
+									></div><div wicket:id="view" class="user om-icon clickable" wicket:message="title:1236"
+									></div><div wicket:id="invite" class="invite om-icon clickable" wicket:message="title:1131"></div></td>
 							</tr>
 						</tbody>
 					</table>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java Thu Dec  3 19:03:33 2015
@@ -125,6 +125,7 @@ public class UserSearchPanel extends Use
 				item.add(new WebMarkupContainer("add").setVisible(userId != getUserId() && !contactsDao.isContact(userId, getUserId()))
 						.add(AttributeAppender.append("onclick", String.format("addContact(%s);", userId))));
 				item.add(new WebMarkupContainer("message").setVisible(userId != getUserId()).add(AttributeAppender.append("onclick", String.format("privateMessage(%s);", userId))));
+				item.add(new WebMarkupContainer("invite").setVisible(userId != getUserId()).add(AttributeAppender.append("onclick", String.format("inviteUser(%s);", userId))));
 				//item.add(new TooltipBehavior(new Options("content", "TODO:: Picture will be displayed"))); //FIXME 
 			}
 		};

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java Thu Dec  3 19:03:33 2015
@@ -27,11 +27,11 @@ import org.apache.wicket.core.request.ha
 
 public class RoomEnterBehavior extends AjaxEventBehavior {
 	private static final long serialVersionUID = 1L;
-	private final long roomid;
+	protected final long roomId;
 	
-	public RoomEnterBehavior(long roomid) {
+	public RoomEnterBehavior(long roomId) {
 		super("click");
-		this.roomid = roomid;
+		this.roomId = roomId;
 	}
 
 	public static OmUrlFragment getRoomUrlFragment(long roomId) {
@@ -44,6 +44,6 @@ public class RoomEnterBehavior extends A
 	
 	@Override
 	protected void onEvent(AjaxRequestTarget target) {
-		roomEnter((MainPage)getComponent().getPage(), target, roomid);
+		roomEnter((MainPage)getComponent().getPage(), target, roomId);
 	}
 }

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html?rev=1717837&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.html Thu Dec  3 19:03:33 2015
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<table class="room-list">
+		<tr wicket:id="list" class="room-row">
+			<td>
+				<div wicket:id="roomContainer">		
+					<span wicket:id="roomName">[room name]</span><br/>
+					<wicket:message key="398" />&nbsp;<span wicket:id="curUsers"></span>&nbsp;/&nbsp;<span
+					wicket:id="totalUsers"></span>&nbsp;&nbsp;<span wicket:id="refresh" 
+					class="ui-icon ui-icon-arrowrefresh-1-n" style="display: inline-block"></span>
+				</div>
+			</td>
+			<td><button wicket:id="btn"><span wicket:id="label"></span></button></td>
+		</tr>
+	</table>
+</wicket:panel>
+</html>

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java?rev=1717837&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomListPanel.java Thu Dec  3 19:03:33 2015
@@ -0,0 +1,110 @@
+/*
+ * 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.user.rooms;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.form.button.Button;
+
+public class RoomListPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final ListView<Room> list;
+
+	public RoomListPanel(String id, List<Room> rooms, final String label) {
+		super(id);
+		setOutputMarkupId(true);
+		add(list = new ListView<Room>("list", rooms) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<Room> item) {
+				final Room r = item.getModelObject();
+				WebMarkupContainer roomContainer;
+				item.add((roomContainer = new WebMarkupContainer("roomContainer")).add(new AjaxEventBehavior("click"){
+					private static final long serialVersionUID = 1L;
+					
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						onContainerClick(target, r);
+					}
+				}));
+				roomContainer.add(new Label("roomName", r.getName()));
+				final Label curUsers = new Label("curUsers", new Model<Integer>(Application.getBean(ISessionManager.class).getClientListByRoom(r.getId()).size()));
+				roomContainer.add(curUsers.setOutputMarkupId(true));
+				roomContainer.add(new Label("totalUsers", r.getNumberOfPartizipants()));
+				item.add(new Button("btn").add(new Label("label", label)).add(new RoomEnterBehavior(r.getId()) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						onRoomEnter(target, roomId);
+					}
+				}));
+				roomContainer.add(new AjaxLink<Void>("refresh") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public void onClick(AjaxRequestTarget target) {
+						target.add(curUsers.setDefaultModelObject(Application.getBean(ISessionManager.class).getClientListByRoom(r.getId()).size()));
+						onRefreshClick(target, r);
+					}
+				});
+			}
+		});
+	}
+	
+	public void update(IPartialPageRequestHandler handler, List<Room> rooms) {
+		list.setList(rooms);
+		handler.add(this);
+	}
+
+	/**
+	 * this method need to be overriden to perform custom actions on room container click
+	 */
+	public void onContainerClick(AjaxRequestTarget target, Room r) {
+	}
+
+	/**
+	 * this method need to be overriden to perform custom actions on room refresh click
+	 */
+	public void onRefreshClick(AjaxRequestTarget target, Room r) {
+	}
+
+	/**
+	 * this method need to be overriden to perform custom actions on room enter click
+	 */
+	public void onRoomEnter(AjaxRequestTarget target, Long roomId) {
+		RoomEnterBehavior.roomEnter((MainPage)getPage(), target, roomId);
+	}
+}

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html Thu Dec  3 19:03:33 2015
@@ -23,19 +23,7 @@
 	<table>
 		<tr>
 			<td style="vertical-align: top">
-				<table class="room-list">
-					<tr wicket:id="list" class="room-row">
-						<td>
-							<div wicket:id="roomContainer">		
-								<span wicket:id="roomName">[room name]</span><br/>
-								<wicket:message key="398" />&nbsp;<span wicket:id="curUsers"></span>&nbsp;/&nbsp;<span
-								wicket:id="totalUsers"></span>&nbsp;&nbsp;<span wicket:id="refresh" 
-								class="ui-icon ui-icon-arrowrefresh-1-n" style="display: inline-block"></span>
-							</div>
-						</td>
-						<td><button wicket:id="enter"><wicket:message key="131"/></button></td>
-					</tr>
-				</table>
+				<div wicket:id="list"></div>
 			</td>
 			<td style="vertical-align: top">
 				<!-- Users in this Room -->

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java Thu Dec  3 19:03:33 2015
@@ -32,9 +32,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
@@ -45,8 +43,6 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.request.resource.ByteArrayResource;
 import org.apache.wicket.util.io.IOUtils;
 
-import com.googlecode.wicket.jquery.ui.form.button.Button;
-
 public class RoomsPanel extends UserPanel {
 	private static final long serialVersionUID = 1L;
 	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");
@@ -60,37 +56,20 @@ public class RoomsPanel extends UserPane
 
 	public RoomsPanel(String id, List<Room> rooms) {
 		super(id);
-		add(new ListView<Room>("list", rooms) {
+		add(new RoomListPanel("list", rooms, Application.getString(131)) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void populateItem(ListItem<Room> item) {
-				final Room r = item.getModelObject();
-				WebMarkupContainer roomContainer;
-				item.add((roomContainer = new WebMarkupContainer("roomContainer")).add(new AjaxEventBehavior("click"){
-					private static final long serialVersionUID = 1L;
-					
-					@Override
-					protected void onEvent(AjaxRequestTarget target) {
-						roomId = r.getId();
-						updateRoomDetails(target);
-					}
-				}));
-				roomContainer.add(new Label("roomName", r.getName()));
-				final Label curUsers = new Label("curUsers", new Model<Integer>(Application.getBean(ISessionManager.class).getClientListByRoom(r.getId()).size()));
-				roomContainer.add(curUsers.setOutputMarkupId(true));
-				roomContainer.add(new Label("totalUsers", r.getNumberOfPartizipants()));
-				item.add(new Button("enter").add(new RoomEnterBehavior(r.getId())));
-				roomContainer.add(new AjaxLink<Void>("refresh") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					public void onClick(AjaxRequestTarget target) {
-						roomId = r.getId();
-						target.add(curUsers.setDefaultModelObject(Application.getBean(ISessionManager.class).getClientListByRoom(r.getId()).size()));
-						updateRoomDetails(target);
-					}
-				});
+			public void onContainerClick(AjaxRequestTarget target, Room r) {
+				roomId = r.getId();
+				updateRoomDetails(target);
+			}
+			
+			@Override
+			public void onRefreshClick(AjaxRequestTarget target, Room r) {
+				super.onRefreshClick(target, r);
+				roomId = r.getId();
+				updateRoomDetails(target);
 			}
 		});
 		

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html Thu Dec  3 19:03:33 2015
@@ -19,9 +19,9 @@
   
 -->
 <html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div wicket:id="title" class="rooms title"></div>
-		<div wicket:id="desc" class="rooms desc info-text"></div>
-		<div wicket:id="rooms"></div>
-	</wicket:panel>
+<wicket:panel>
+	<div wicket:id="title" class="rooms title"></div>
+	<div wicket:id="desc" class="rooms desc info-text"></div>
+	<div wicket:id="rooms"></div>
+</wicket:panel>
 </html>

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java?rev=1717837&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/ProfileImageResourceReference.java Thu Dec  3 19:03:33 2015
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URI;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.ByteArrayResource;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.io.IOUtils;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ProfileImageResourceReference extends ResourceReference {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(ProfileImageResourceReference.class, webAppRootKey);
+
+	public ProfileImageResourceReference() {
+		super(ProfileImageResourceReference.class, "profile");
+	}
+	
+	public static String getUrl(RequestCycle rc, Long userId) {
+		return getUrl(rc, getBean(UserDao.class).get(userId));
+	}
+	
+	public static String getUrl(RequestCycle rc, User u) {
+		String uri = u.getPictureuri();
+		if (!isAbsolute(uri)) {
+			uri = rc.urlFor(new ProfileImageResourceReference(), new PageParameters().add("id", u.getId())).toString();
+		}
+		return uri;
+	}
+
+	private static boolean isAbsolute(String uri) {
+		boolean absolute = false;
+		try {
+			absolute = URI.create(uri).isAbsolute();
+		} catch (Exception e) {
+			//no-op
+		}
+		return absolute;
+	}
+	
+	@Override
+	public IResource getResource() {
+		return new ByteArrayResource("image/jpeg") {
+			private static final long serialVersionUID = 1L;
+			private Long userId = null;
+
+			@Override
+			protected ResourceResponse newResourceResponse(Attributes attributes) {
+				PageParameters params = attributes.getParameters();
+				userId = params.get("id").toOptionalLong();
+				ResourceResponse rr = super.newResourceResponse(attributes);
+				rr.disableCaching();
+				return rr;
+			}
+			
+			@Override
+			protected byte[] getData(Attributes attributes) {
+				String uri = getBean(UserDao.class).get(userId).getPictureuri();
+				if (!isAbsolute(uri)) {
+					File img = OmFileHelper.getUserProfilePicture(userId, uri);
+					try (InputStream is = new FileInputStream(img)) {
+						return IOUtils.toByteArray(is);
+					} catch (Exception e) {
+						log.error("failed to get bytes from image", e);
+					}
+				}
+				return null;
+			}
+		};
+	}
+}

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java Thu Dec  3 19:03:33 2015
@@ -49,7 +49,6 @@ import org.apache.wicket.util.io.IOUtils
 import org.apache.wicket.util.resource.FileResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
-import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.time.Time;
 import org.slf4j.Logger;
 
@@ -138,16 +137,6 @@ public abstract class RecordingResourceR
 	abstract String getFileName(Recording r);
 	abstract File getFile(Recording r);
 	
-	private Long getLong(StringValue id) {
-		Long result = null;
-		try {
-			result = id.toLongObject();
-		} catch(Exception e) {
-			//no-op
-		}
-		return result;
-	}
-	
 	private Recording getRecording(Long id) {
 		Recording r = getBean(RecordingDao.class).get(id);
 		// TODO should we process public?
@@ -171,14 +160,13 @@ public abstract class RecordingResourceR
 	
 	private Recording getRecording(Attributes attributes) {
 		PageParameters params = attributes.getParameters();
-		StringValue idStr = params.get("id");
-		Long id = getLong(idStr);
+		Long id = params.get("id").toOptionalLong();
 		WebSession ws = WebSession.get();
 		if (id != null && ws.isSignedIn()) {
 			return getRecording(id);
 		} else {
 			ws.invalidate();
-			if (ws.signIn(idStr.toString())) {
+			if (ws.signIn(params.get("id").toString())) {
 				return getRecording(getRecordingId());
 			}
 		}

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/chat.css
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/chat.css?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/chat.css (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/chat.css Thu Dec  3 19:03:33 2015
@@ -60,6 +60,11 @@
     font-style: italic;
     font-size: smaller;
 }
+#chatPanel #chat .messageArea img.profile {
+	vertical-align: middle;
+    max-height: 38px;
+    max-width: 38px;
+}
 #chatPanel #chat .messageArea .from {
 	margin-left: 5px;
     margin-right: 5px;
@@ -73,4 +78,5 @@
 #chatMessage .wysiwyg-editor {
 	height: 70px;
 	max-height: 70px;
+	max-width: 500px;
 }

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css Thu Dec  3 19:03:33 2015
@@ -76,4 +76,3 @@ div.formCancelButton>div {
 	margin-left: 2px;
 	margin-top: 2px;
 }
-

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/connect.png
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/connect.png?rev=1717837&view=auto
==============================================================================
Binary file - no diff available.

Propchange: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/images/connect.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css?rev=1717837&r1=1717836&r2=1717837&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css Thu Dec  3 19:03:33 2015
@@ -377,6 +377,9 @@ html, body {
 .doc.file.om-icon {
 	background-image: url(images/report.png);
 }
+.invite.om-icon {
+	background-image: url(images/connect.png);
+}
 .selected .file.item {
 	background-color: #0099FF;
 }
@@ -629,3 +632,9 @@ form .input {
 #contents .btn-file>input {
 	transform: translate(-3000px, 0) scale(1);
 }
+.room.list.container {
+	height: 150px;
+	max-height: 150px;
+	overflow-y: auto;
+	border: 1px solid #cccccc;
+}