http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
deleted file mode 100644
index 2e50de1..0000000
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
+++ /dev/null
@@ -1,916 +0,0 @@
-/*
- * 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.db.entity.room;
-
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.openmeetings.db.entity.basic.IClient;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.util.CalendarPatterns;
-import org.apache.wicket.util.string.StringValue;
-
-/**
- * Can be configured to be stored in memory or in database
- *
- * @author sebawagner
- */
-@Entity
-@NamedQueries({
-       @NamedQuery(name = "deleteAll", query = "DELETE FROM Client"),
-       @NamedQuery(name = "deletedById", query = "DELETE FROM Client c WHERE 
c.id = :id"),
-       @NamedQuery(name = "deleteClientsByServer", query = "DELETE FROM Client 
c WHERE c.server = :server"),
-       @NamedQuery(name = "deletedByServerAndStreamId", query = "DELETE FROM 
Client c WHERE c.server = :server AND c.streamid LIKE :streamid"),
-       @NamedQuery(name = "countClients", query = "SELECT count(c.id) FROM 
Client c"),
-       @NamedQuery(name = "countClientsByServer", query = "SELECT count(c.id) 
FROM Client c WHERE c.server = :server"),
-       @NamedQuery(name = "countClientsByServerAndStreamId", query = "SELECT 
count(c.id) FROM Client c WHERE c.streamid LIKE :streamid AND c.server = 
:server"),
-       @NamedQuery(name = "getClientByServerAndStreamId", query = "SELECT c 
FROM Client c WHERE c.streamid LIKE :streamid AND c.server = :server"),
-       @NamedQuery(name = "getClientsByPublicSIDAndServer", query = "SELECT c 
FROM Client c WHERE c.publicSID LIKE :publicSID AND c.server = :server"),
-       @NamedQuery(name = "getClientsByPublicSID", query = "SELECT c FROM 
Client c WHERE c.publicSID LIKE :publicSID"),
-       @NamedQuery(name = "getClientsByServer", query = "SELECT c FROM Client 
c WHERE c.server = :server"),
-       @NamedQuery(name = "getClients", query = "SELECT c FROM Client c"),
-       @NamedQuery(name = "getClientsWithServer", query = "SELECT c FROM 
Client c LEFT JOIN FETCH c.server"),
-       @NamedQuery(name = "getClientsByUserId", query = "SELECT c FROM Client 
c WHERE c.server = :server AND c.userId = :userId"),
-       @NamedQuery(name = "getClientsByRoomId", query = "SELECT c FROM Client 
c WHERE c.roomId = :roomId"),
-       @NamedQuery(name = "getRoomsIdsByServer", query = "SELECT c.roomId FROM 
Client c WHERE c.server = :server GROUP BY c.roomId")
-})
-@Table(name = "client")
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Client implements IClient {
-       private static final long serialVersionUID = 1L;
-
-       @Id
-       @GeneratedValue(strategy = GenerationType.IDENTITY)
-       @Column(name = "id")
-       private Long id;
-
-       /**
-        * @see Client#getUsername()
-        */
-       @Column(name = "username")
-       private String username = "";
-
-       /**
-        * @see Client#getStreamid()
-        */
-       @Column(name = "streamid")
-       private String streamid = "";
-
-       /**
-        * @see Client#getScope()
-        */
-       @Column(name = "scope")
-       private String scope = "";
-
-       /**
-        * @see Client#getVWidth()
-        */
-       @Column(name = "vwidth")
-       private int vWidth = 0;
-
-       /**
-        * @see Client#getVHeight()
-        */
-       @Column(name = "vheight")
-       private int vHeight = 0;
-
-       /**
-        * @see Client#getVX()
-        */
-       @Column(name = "vx")
-       private int vX = 0;
-
-       /**
-        * @see Client#getVY()
-        */
-       @Column(name = "vy")
-       private int vY = 0;
-
-       /**
-        * @see Client#getStreamPublishName()
-        */
-       @Column(name = "stream_publish_name")
-       private String streamPublishName = "";
-
-       /**
-        * @see Client#getPublicSID()
-        */
-       @Column(name = "public_sid")
-       private String publicSID = "";
-
-       /**
-        * {@link Client#getSid()} of the client who initiated the connection
-        */
-       @Column(name = "owner_sid")
-       private String ownerSid = null;
-
-       /**
-        * @see Client#getIsMod()
-        */
-       @Column(name = "is_mod", nullable = false)
-       private boolean isMod = false;
-
-       /**
-        * @see Client#getIsSuperModerator()
-        */
-       @Column(name = "is_supermoderator", nullable = false)
-       private boolean isSuperModerator = false;
-
-       /**
-        * @see Client#getCanDraw()
-        */
-       @Column(name = "can_draw", nullable = false)
-       private boolean canDraw = false;
-
-       /**
-        * @see Client#getCanShare()
-        */
-       @Column(name = "can_share", nullable = false)
-       private boolean canShare = false;
-
-       /**
-        * @see Client#getCanRemote()
-        */
-       @Column(name = "can_remote", nullable = false)
-       private boolean canRemote = false;
-
-       /**
-        * @see Client#getCanGiveAudio()
-        */
-       @Column(name = "can_giveaudio", nullable = false)
-       private boolean canGiveAudio = false;
-
-       @Column(name = "can_video", nullable = false)
-       private boolean canVideo = false;
-
-       /**
-        * @see Client#getConnectedSince()
-        */
-       @Column(name = "connected_since")
-       private Date connectedSince;
-
-       /**
-        * @see Client#getFormatedDate()
-        */
-       @Column(name = "formated_date")
-       private String formatedDate;
-
-       /**
-        * @see Client#isScreenClient()
-        */
-       @Column(name = "is_screenclient", nullable = false)
-       private boolean screenClient;
-
-       /**
-        * @see Client#getUsercolor()
-        */
-       @Column(name = "usercolor")
-       private String usercolor;
-
-       /**
-        * @see Client#getUserpos()
-        */
-       @Column(name = "userpos")
-       private Integer userpos;
-
-       /**
-        * @see Client#getUserip()
-        */
-       @Column(name = "userip")
-       private String userip;
-
-       /**
-        * @see Client#getUserport()
-        */
-       @Column(name = "userport")
-       private int userport;
-
-       /**
-        * @see Client#getRoomId()
-        */
-       @Column(name = "room_id")
-       private Long roomId;
-
-       /**
-        * @see Client#getRoomEnter()
-        */
-       @Column(name = "room_enter")
-       private Date roomEnter = null;
-
-       /**
-        * @see Client#getBroadCastID()
-        */
-       @Column(name = "broadcast_id")
-       private long broadCastID = -2;
-
-       /**
-        * @see Client#getUserId()
-        */
-       @Column(name = "user_id")
-       private Long userId = null;
-
-       /**
-        * @see Client#getFirstname()
-        */
-       @Column(name = "firstname")
-       private String firstname = "";
-
-       /**
-        * @see Client#getLastname()
-        */
-       @Column(name = "lastname")
-       private String lastname = "";
-
-       /**
-        * @see Client#getMail()
-        */
-       @Column(name = "email")
-       private String email;
-
-       /**
-        * @see Client#getLastLogin()
-        */
-       @Column(name = "last_login")
-       private String lastLogin;
-
-       /**
-        * @see Client#getSecurityCode()
-        */
-       @Column(name = "security_code")
-       private String securityCode;
-
-       /**
-        * @see Client#getPicture_uri()
-        */
-       @Column(name = "picture_uri")
-       private String picture_uri;
-
-       /**
-        * @see Client#getLanguage()
-        */
-       @Column(name = "language")
-       private String language = "";
-
-       /**
-        * @see Client#getAvsettings()
-        */
-       @Column(name = "avsettings")
-       private String avsettings = "";
-
-       /**
-        * @see Client#getSwfurl()
-        */
-       // FIXME: Move to {@link ClientSession}
-       @Column(name = "swfurl", length=2048)
-       private String swfurl;
-
-       @Column(name = "tcurl", length=2048)
-       private String tcUrl;
-
-       @Column(name = "nativeSsl", nullable = false)
-       private boolean nativeSsl = false;
-
-       /**
-        * @see Client#getIsRecording()
-        */
-       @Column(name = "is_recording", nullable = false)
-       private boolean isRecording = false;
-
-       /**
-        * @see Client#getRoomRecordingName()
-        */
-       @Column(name = "room_recording_name")
-       private String roomRecordingName;
-
-       /**
-        * @see Client#getRecordingId()
-        */
-       @Column(name = "recording_id")
-       private Long recordingId;
-
-       /**
-        * @see Client#getRecordingMetaDataId()
-        */
-       @Column(name = "recording_metadata_id")
-       private Long recordingMetaDataId;
-
-       /**
-        * @see Client#isStartRecording()
-        */
-       @Column(name = "start_recording", nullable = false)
-       private boolean startRecording = false;
-
-       /**
-        * @see Client#isStartStreaming()
-        */
-       @Column(name = "start_streaming", nullable = false)
-       private boolean startStreaming = false;
-
-       /**
-        * @see Client#isScreenPublishStarted()
-        */
-       @Column(name = "screen_publish_started", nullable = false)
-       private boolean screenPublishStarted = false;
-
-       /**
-        * @see Client#isStreamPublishStarted()
-        */
-       @Column(name = "stream_publish_started", nullable = false)
-       private boolean streamPublishStarted = false;
-
-       /**
-        * @see Client#getIsBroadcasting()
-        */
-       @Column(name = "is_broadcasting", nullable = false)
-       private boolean isBroadcasting = false;
-
-       /**
-        * @see Client#getExternalUserId()
-        */
-       @Column(name = "external_user_id")
-       private String externalUserId;
-
-       /**
-        * @see Client#getExternalUserType()
-        */
-       @Column(name = "external_user_type")
-       private String externalUserType;
-
-       /**
-        * @see Client#getInterviewPodId()
-        */
-       @Column(name = "interview_pod_id")
-       private Integer interviewPodId = null;
-
-       /**
-        * @see Client#isAllowRecording()
-        */
-       @Column(name = "allow_recording", nullable = false)
-       private boolean allowRecording = true;
-
-       /**
-        * @see Client#getZombieCheckFlag()
-        */
-       @Column(name = "zombie_check_flag", nullable = false)
-       private boolean zombieCheckFlag = false;
-
-       /**
-        * @see Client#getMicMuted()
-        */
-       @Column(name = "mic_muted", nullable = false)
-       private boolean micMuted = false;
-
-       /**
-        * @see Client#isSipTransport()
-        */
-       @Column(name = "sip_transport", nullable = false)
-       private boolean sipTransport = false;
-
-       @Column(name = "mobile", nullable = false)
-       private boolean mobile = false;
-
-       @ManyToOne(fetch = FetchType.LAZY)
-       @JoinColumn(name = "server_id")
-       private Server server;
-
-       public Client() {}
-
-       public Client(String streamid, String publicSID, Long roomId,
-                       Long userId, String firstname, String lastname,
-                       String username, String connectedSince, String scope) {
-               super();
-               this.streamid = streamid;
-               this.publicSID = publicSID;
-               this.roomId = roomId;
-               this.userId = userId;
-               this.firstname = firstname;
-               this.lastname = lastname;
-               this.username = username;
-               this.connectedSince = 
CalendarPatterns.parseDateWithHour(connectedSince);
-               this.scope = scope;
-       }
-
-       public void setUserObject(Long userId, String username, String 
firstname, String lastname) {
-               this.userId = userId;
-               this.username = username;
-               this.firstname = firstname;
-               this.lastname = lastname;
-       }
-
-       public void setUserObject(String username, String firstname, String 
lastname) {
-               this.username = username;
-               this.firstname = firstname;
-               this.lastname = lastname;
-       }
-
-       @Override
-       public Long getId() {
-               return id;
-       }
-
-       @Override
-       public void setId(Long id) {
-               this.id = id;
-       }
-
-       public Date getConnectedSince() {
-               return connectedSince;
-       }
-
-       public void setConnectedSince(Date connectedSince) {
-               this.connectedSince = connectedSince;
-       }
-
-       public boolean getIsMod() {
-               return isMod;
-       }
-
-       public void setIsMod(boolean isMod) {
-               this.isMod = isMod;
-       }
-
-       public String getUsername() {
-               return username;
-       }
-
-       public void setUsername(String username) {
-               this.username = username;
-       }
-
-       public String getStreamid() {
-               return streamid;
-       }
-
-       public void setStreamid(String streamid) {
-               this.streamid = streamid;
-       }
-
-       public String getScope() {
-               return scope;
-       }
-
-       public void setScope(String scope) {
-               this.scope = scope;
-               StringValue scn = StringValue.valueOf(scope);
-               long roomId = scn.toLong(Long.MIN_VALUE);
-               if (roomId > 0) {
-                       this.roomId = roomId;
-               }
-       }
-
-       public String getFormatedDate() {
-               return formatedDate;
-       }
-
-       public void setFormatedDate(String formatedDate) {
-               this.formatedDate = formatedDate;
-       }
-
-       public String getUsercolor() {
-               return usercolor;
-       }
-
-       public void setUsercolor(String usercolor) {
-               this.usercolor = usercolor;
-       }
-
-       public Integer getUserpos() {
-               return userpos;
-       }
-
-       public void setUserpos(Integer userpos) {
-               this.userpos = userpos;
-       }
-
-       public String getUserip() {
-               return userip;
-       }
-
-       public void setUserip(String userip) {
-               this.userip = userip;
-       }
-
-       public String getSwfurl() {
-               return swfurl;
-       }
-
-       public void setSwfurl(String swfurl) {
-               this.swfurl = swfurl;
-       }
-
-       public int getUserport() {
-               return userport;
-       }
-
-       public void setUserport(int userport) {
-               this.userport = userport;
-       }
-
-       public String getFirstname() {
-               return firstname;
-       }
-
-       public void setFirstname(String firstname) {
-               this.firstname = firstname;
-       }
-
-       public String getLanguage() {
-               return language;
-       }
-
-       public void setLanguage(String language) {
-               this.language = language;
-       }
-
-       public String getLastLogin() {
-               return lastLogin;
-       }
-
-       public void setLastLogin(String lastLogin) {
-               this.lastLogin = lastLogin;
-       }
-
-       public String getLastname() {
-               return lastname;
-       }
-
-       public void setLastname(String lastname) {
-               this.lastname = lastname;
-       }
-
-       public String getEmail() {
-               return email;
-       }
-
-       public void setEmail(String email) {
-               this.email = email;
-       }
-
-       public String getSecurityCode() {
-               return securityCode;
-       }
-
-       public void setSecurityCode(String securityCode) {
-               this.securityCode = securityCode;
-       }
-
-       public String getPicture_uri() {
-               return picture_uri;
-       }
-
-       public void setPicture_uri(String picture_uri) {
-               this.picture_uri = picture_uri;
-       }
-
-       public Long getUserId() {
-               return userId;
-       }
-
-       public void setUserId(Long userId) {
-               this.userId = userId;
-       }
-
-       public Long getRoomId() {
-               return roomId;
-       }
-
-       public void setRoomId(Long roomId) {
-               this.roomId = roomId;
-       }
-
-       public Date getRoomEnter() {
-               return roomEnter;
-       }
-
-       public void setRoomEnter(Date roomEnter) {
-               this.roomEnter = roomEnter;
-       }
-
-       public boolean getIsRecording() {
-               return isRecording;
-       }
-
-       public void setIsRecording(boolean isRecording) {
-               this.isRecording = isRecording;
-       }
-
-       public String getRoomRecordingName() {
-               return roomRecordingName;
-       }
-
-       public void setRoomRecordingName(String roomRecordingName) {
-               this.roomRecordingName = roomRecordingName;
-       }
-
-       public String getAvsettings() {
-               return avsettings;
-       }
-
-       public void setAvsettings(String avsettings) {
-               this.avsettings = avsettings;
-       }
-
-       public long getBroadCastID() {
-               return broadCastID;
-       }
-
-       public void setBroadCastID(long broadCastID) {
-               this.broadCastID = broadCastID;
-       }
-
-       public String getPublicSID() {
-               return publicSID;
-       }
-
-       public void setPublicSID(String publicSID) {
-               this.publicSID = publicSID;
-       }
-
-       public String getOwnerSid() {
-               return ownerSid;
-       }
-
-       public void setOwnerSid(String ownerSid) {
-               this.ownerSid = ownerSid;
-       }
-
-       public boolean getZombieCheckFlag() {
-               return zombieCheckFlag;
-       }
-
-       public void setZombieCheckFlag(boolean zombieCheckFlag) {
-               this.zombieCheckFlag = zombieCheckFlag;
-       }
-
-       public boolean getMicMuted() {
-               return micMuted;
-       }
-
-       public void setMicMuted(boolean micMuted) {
-               this.micMuted = micMuted;
-       }
-
-       public boolean getCanDraw() {
-               return canDraw;
-       }
-
-       public void setCanDraw(boolean canDraw) {
-               this.canDraw = canDraw;
-       }
-
-       public boolean getIsBroadcasting() {
-               return isBroadcasting;
-       }
-
-       public void setIsBroadcasting(boolean isBroadcasting) {
-               this.isBroadcasting = isBroadcasting;
-       }
-
-       public boolean getCanShare() {
-               return canShare;
-       }
-
-       public void setCanShare(boolean canShare) {
-               this.canShare = canShare;
-       }
-
-       public String getExternalUserId() {
-               return externalUserId;
-       }
-
-       public void setExternalUserId(String externalUserId) {
-               this.externalUserId = externalUserId;
-       }
-
-       public String getExternalUserType() {
-               return externalUserType;
-       }
-
-       public void setExternalUserType(String externalUserType) {
-               this.externalUserType = externalUserType;
-       }
-
-       public boolean getIsSuperModerator() {
-               return isSuperModerator;
-       }
-
-       public void setIsSuperModerator(boolean isSuperModerator) {
-               this.isSuperModerator = isSuperModerator;
-       }
-
-       public boolean isScreenClient() {
-               return screenClient;
-       }
-
-       public void setScreenClient(boolean screenClient) {
-               this.screenClient = screenClient;
-       }
-
-       public int getVWidth() {
-               return vWidth;
-       }
-
-       public void setVWidth(int width) {
-               vWidth = width;
-       }
-
-       public int getVHeight() {
-               return vHeight;
-       }
-
-       public void setVHeight(int height) {
-               vHeight = height;
-       }
-
-       public int getVX() {
-               return vX;
-       }
-
-       public void setVX(int vx) {
-               vX = vx;
-       }
-
-       public int getVY() {
-               return vY;
-       }
-
-       public void setVY(int vy) {
-               vY = vy;
-       }
-
-       public String getStreamPublishName() {
-               return streamPublishName;
-       }
-
-       public void setStreamPublishName(String streamPublishName) {
-               this.streamPublishName = streamPublishName;
-       }
-
-       public Long getRecordingId() {
-               return recordingId;
-       }
-
-       public void setRecordingId(Long recordingId) {
-               this.recordingId = recordingId;
-       }
-
-       public Long getRecordingMetaDataId() {
-               return recordingMetaDataId;
-       }
-
-       public void setRecordingMetaDataId(Long recordingMetaDataId) {
-               this.recordingMetaDataId = recordingMetaDataId;
-       }
-
-       public boolean isScreenPublishStarted() {
-               return screenPublishStarted;
-       }
-
-       public void setScreenPublishStarted(boolean screenPublishStarted) {
-               this.screenPublishStarted = screenPublishStarted;
-       }
-
-       public boolean isStartRecording() {
-               return startRecording;
-       }
-
-       public void setStartRecording(boolean startRecording) {
-               this.startRecording = startRecording;
-       }
-
-       public boolean isStartStreaming() {
-               return startStreaming;
-       }
-
-       public void setStartStreaming(boolean startStreaming) {
-               this.startStreaming = startStreaming;
-       }
-
-       public Integer getInterviewPodId() {
-               return interviewPodId;
-       }
-
-       public void setInterviewPodId(Integer interviewPodId) {
-               this.interviewPodId = interviewPodId;
-       }
-
-       public boolean getCanRemote() {
-               return canRemote;
-       }
-
-       public void setCanRemote(boolean canRemote) {
-               this.canRemote = canRemote;
-       }
-
-       public boolean getCanGiveAudio() {
-               return canGiveAudio;
-       }
-
-       public void setCanGiveAudio(boolean canGiveAudio) {
-               this.canGiveAudio = canGiveAudio;
-       }
-
-       public boolean getCanVideo() {
-               return canVideo;
-       }
-
-       public void setCanVideo(boolean canVideo) {
-               this.canVideo = canVideo;
-       }
-
-       public boolean isAllowRecording() {
-               return allowRecording;
-       }
-
-       public void setAllowRecording(boolean allowRecording) {
-               this.allowRecording = allowRecording;
-       }
-
-       public boolean isStreamPublishStarted() {
-               return streamPublishStarted;
-       }
-
-       public void setStreamPublishStarted(boolean streamPublishStarted) {
-               this.streamPublishStarted = streamPublishStarted;
-       }
-
-       public boolean isSipTransport() {
-               return sipTransport;
-       }
-
-       public void setSipTransport(boolean sipTransport) {
-               this.sipTransport = sipTransport;
-       }
-
-       public Server getServer() {
-               return server;
-       }
-
-       public void setServer(Server server) {
-               this.server = server;
-       }
-
-       public boolean isMobile() {
-               return mobile;
-       }
-
-       public void setMobile(boolean mobile) {
-               this.mobile = mobile;
-       }
-
-       public String getTcUrl() {
-               return tcUrl;
-       }
-
-       public void setTcUrl(String tcUrl) {
-               this.tcUrl = tcUrl;
-       }
-
-       public boolean isNativeSsl() {
-               return nativeSsl;
-       }
-
-       public void setNativeSsl(boolean nativeSsl) {
-               this.nativeSsl = nativeSsl;
-       }
-
-       @Override
-       public String toString() {
-               return "Client [streamid=" + streamid + ", publicSID=" + 
publicSID + ", isScreenClient=" + screenClient
-                               + ", isMobile = " + mobile + ", roomId=" + 
roomId + ", broadCastID=" + broadCastID + ", userId="
-                               + userId + ", avsettings=" + avsettings + ", 
isRecording=" + isRecording + ", recordingId="
-                               + recordingId + ", recordingMetaDataId=" + 
recordingMetaDataId + ", screenPublishStarted="
-                               + screenPublishStarted + ", interviewPodId=" + 
interviewPodId + ", server=" + server + "]";
-       }
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
index becb29f..cdaa898 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -302,7 +302,7 @@ public class Room implements IDataProviderEntity {
        private List<RoomGroup> roomGroups = new ArrayList<>();
 
        @Transient
-       private List<Client> currentusers;
+       private List<StreamClient> currentusers;
 
        public String getComment() {
                return comment;
@@ -370,11 +370,11 @@ public class Room implements IDataProviderEntity {
                this.ispublic = ispublic;
        }
 
-       public List<Client> getCurrentusers() {
+       public List<StreamClient> getCurrentusers() {
                return currentusers;
        }
 
-       public void setCurrentusers(List<Client> currentusers) {
+       public void setCurrentusers(List<StreamClient> currentusers) {
                this.currentusers = currentusers;
        }
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
new file mode 100644
index 0000000..a532a73
--- /dev/null
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/StreamClient.java
@@ -0,0 +1,607 @@
+/*
+ * 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.db.entity.room;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.entity.basic.IClient;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.wicket.util.string.StringValue;
+
+/**
+ * Can be configured to be stored in memory or in database
+ *
+ * @author sebawagner
+ */
+public class StreamClient implements IClient {
+       private static final long serialVersionUID = 1L;
+
+       private String username = "";
+       private String streamid = "";
+       private String scope = "";
+       private int vWidth = 0;
+       private int vHeight = 0;
+       private int vX = 0;
+       private int vY = 0;
+       private String streamPublishName = "";
+       private String publicSID = "";
+       private String ownerSid = null;
+       private boolean isMod = false;
+       private boolean isSuperModerator = false;
+       private boolean canDraw = false;
+       private boolean canShare = false;
+       private boolean canRemote = false;
+       private boolean canGiveAudio = false;
+       private boolean canVideo = false;
+       private Date connectedSince;
+       private String formatedDate;
+       private boolean screenClient;
+       private String usercolor;
+       private Integer userpos;
+       private String userip;
+       private int userport;
+       private Long roomId;
+       private Date roomEnter = null;
+       private long broadCastID = -2;
+       private Long userId = null;
+       private String firstname = "";
+       private String lastname = "";
+       private String email;
+       private String lastLogin;
+       private String securityCode;
+       private String picture_uri;
+       private String language = "";
+       private String avsettings = "";
+       private String swfurl;
+       private String tcUrl;
+       private boolean nativeSsl = false;
+       private boolean isRecording = false;
+       private String roomRecordingName;
+       private Long recordingId;
+       private Long recordingMetaDataId;
+       private boolean startRecording = false;
+       private boolean startStreaming = false;
+       private boolean screenPublishStarted = false;
+       private boolean streamPublishStarted = false;
+       private boolean isBroadcasting = false;
+       private String externalUserId;
+       private String externalUserType;
+       private Integer interviewPodId = null;
+       private boolean allowRecording = true;
+       private boolean zombieCheckFlag = false;
+       private boolean micMuted = false;
+       private boolean sipTransport = false;
+       private boolean mobile = false;
+       private String serverId = null;
+
+       public StreamClient() {}
+
+       public StreamClient(String streamid, String publicSID, Long roomId,
+                       Long userId, String firstname, String lastname,
+                       String username, String connectedSince, String scope) {
+               super();
+               this.streamid = streamid;
+               this.publicSID = publicSID;
+               this.roomId = roomId;
+               this.userId = userId;
+               this.firstname = firstname;
+               this.lastname = lastname;
+               this.username = username;
+               this.connectedSince = 
CalendarPatterns.parseDateWithHour(connectedSince);
+               this.scope = scope;
+       }
+
+       public void setUserObject(Long userId, String username, String 
firstname, String lastname) {
+               this.userId = userId;
+               this.username = username;
+               this.firstname = firstname;
+               this.lastname = lastname;
+       }
+
+       public void setUserObject(String username, String firstname, String 
lastname) {
+               this.username = username;
+               this.firstname = firstname;
+               this.lastname = lastname;
+       }
+
+       @Override
+       public Long getId() {
+               return null;
+       }
+
+       @Override
+       public void setId(Long id) {
+       }
+
+       @Override
+       public String getUid() {
+               return publicSID;
+       }
+
+       public Date getConnectedSince() {
+               return connectedSince;
+       }
+
+       public void setConnectedSince(Date connectedSince) {
+               this.connectedSince = connectedSince;
+       }
+
+       public boolean getIsMod() {
+               return isMod;
+       }
+
+       public void setIsMod(boolean isMod) {
+               this.isMod = isMod;
+       }
+
+       public String getUsername() {
+               return username;
+       }
+
+       public void setUsername(String username) {
+               this.username = username;
+       }
+
+       public String getStreamid() {
+               return streamid;
+       }
+
+       public void setStreamid(String streamid) {
+               this.streamid = streamid;
+       }
+
+       public String getScope() {
+               return scope;
+       }
+
+       public void setScope(String scope) {
+               this.scope = scope;
+               StringValue scn = StringValue.valueOf(scope);
+               long roomId = scn.toLong(Long.MIN_VALUE);
+               if (roomId > 0) {
+                       this.roomId = roomId;
+               }
+       }
+
+       public String getFormatedDate() {
+               return formatedDate;
+       }
+
+       public void setFormatedDate(String formatedDate) {
+               this.formatedDate = formatedDate;
+       }
+
+       public String getUsercolor() {
+               return usercolor;
+       }
+
+       public void setUsercolor(String usercolor) {
+               this.usercolor = usercolor;
+       }
+
+       public Integer getUserpos() {
+               return userpos;
+       }
+
+       public void setUserpos(Integer userpos) {
+               this.userpos = userpos;
+       }
+
+       public String getUserip() {
+               return userip;
+       }
+
+       public void setUserip(String userip) {
+               this.userip = userip;
+       }
+
+       public String getSwfurl() {
+               return swfurl;
+       }
+
+       public void setSwfurl(String swfurl) {
+               this.swfurl = swfurl;
+       }
+
+       public int getUserport() {
+               return userport;
+       }
+
+       public void setUserport(int userport) {
+               this.userport = userport;
+       }
+
+       public String getFirstname() {
+               return firstname;
+       }
+
+       public void setFirstname(String firstname) {
+               this.firstname = firstname;
+       }
+
+       public String getLanguage() {
+               return language;
+       }
+
+       public void setLanguage(String language) {
+               this.language = language;
+       }
+
+       public String getLastLogin() {
+               return lastLogin;
+       }
+
+       public void setLastLogin(String lastLogin) {
+               this.lastLogin = lastLogin;
+       }
+
+       public String getLastname() {
+               return lastname;
+       }
+
+       public void setLastname(String lastname) {
+               this.lastname = lastname;
+       }
+
+       public String getEmail() {
+               return email;
+       }
+
+       public void setEmail(String email) {
+               this.email = email;
+       }
+
+       public String getSecurityCode() {
+               return securityCode;
+       }
+
+       public void setSecurityCode(String securityCode) {
+               this.securityCode = securityCode;
+       }
+
+       public String getPicture_uri() {
+               return picture_uri;
+       }
+
+       public void setPicture_uri(String picture_uri) {
+               this.picture_uri = picture_uri;
+       }
+
+       public Long getUserId() {
+               return userId;
+       }
+
+       public void setUserId(Long userId) {
+               this.userId = userId;
+       }
+
+       public Long getRoomId() {
+               return roomId;
+       }
+
+       public void setRoomId(Long roomId) {
+               this.roomId = roomId;
+       }
+
+       public Date getRoomEnter() {
+               return roomEnter;
+       }
+
+       public void setRoomEnter(Date roomEnter) {
+               this.roomEnter = roomEnter;
+       }
+
+       public boolean getIsRecording() {
+               return isRecording;
+       }
+
+       public void setIsRecording(boolean isRecording) {
+               this.isRecording = isRecording;
+       }
+
+       public String getRoomRecordingName() {
+               return roomRecordingName;
+       }
+
+       public void setRoomRecordingName(String roomRecordingName) {
+               this.roomRecordingName = roomRecordingName;
+       }
+
+       public String getAvsettings() {
+               return avsettings;
+       }
+
+       public void setAvsettings(String avsettings) {
+               this.avsettings = avsettings;
+       }
+
+       public long getBroadCastID() {
+               return broadCastID;
+       }
+
+       public void setBroadCastID(long broadCastID) {
+               this.broadCastID = broadCastID;
+       }
+
+       public String getPublicSID() {
+               return publicSID;
+       }
+
+       public void setPublicSID(String publicSID) {
+               this.publicSID = publicSID;
+       }
+
+       public String getOwnerSid() {
+               return ownerSid;
+       }
+
+       public void setOwnerSid(String ownerSid) {
+               this.ownerSid = ownerSid;
+       }
+
+       public boolean getZombieCheckFlag() {
+               return zombieCheckFlag;
+       }
+
+       public void setZombieCheckFlag(boolean zombieCheckFlag) {
+               this.zombieCheckFlag = zombieCheckFlag;
+       }
+
+       public boolean getMicMuted() {
+               return micMuted;
+       }
+
+       public void setMicMuted(boolean micMuted) {
+               this.micMuted = micMuted;
+       }
+
+       public boolean getCanDraw() {
+               return canDraw;
+       }
+
+       public void setCanDraw(boolean canDraw) {
+               this.canDraw = canDraw;
+       }
+
+       public boolean getIsBroadcasting() {
+               return isBroadcasting;
+       }
+
+       public void setIsBroadcasting(boolean isBroadcasting) {
+               this.isBroadcasting = isBroadcasting;
+       }
+
+       public boolean getCanShare() {
+               return canShare;
+       }
+
+       public void setCanShare(boolean canShare) {
+               this.canShare = canShare;
+       }
+
+       public String getExternalUserId() {
+               return externalUserId;
+       }
+
+       public void setExternalUserId(String externalUserId) {
+               this.externalUserId = externalUserId;
+       }
+
+       public String getExternalUserType() {
+               return externalUserType;
+       }
+
+       public void setExternalUserType(String externalUserType) {
+               this.externalUserType = externalUserType;
+       }
+
+       public boolean getIsSuperModerator() {
+               return isSuperModerator;
+       }
+
+       public void setIsSuperModerator(boolean isSuperModerator) {
+               this.isSuperModerator = isSuperModerator;
+       }
+
+       public boolean isScreenClient() {
+               return screenClient;
+       }
+
+       public void setScreenClient(boolean screenClient) {
+               this.screenClient = screenClient;
+       }
+
+       public int getVWidth() {
+               return vWidth;
+       }
+
+       public void setVWidth(int width) {
+               vWidth = width;
+       }
+
+       public int getVHeight() {
+               return vHeight;
+       }
+
+       public void setVHeight(int height) {
+               vHeight = height;
+       }
+
+       public int getVX() {
+               return vX;
+       }
+
+       public void setVX(int vx) {
+               vX = vx;
+       }
+
+       public int getVY() {
+               return vY;
+       }
+
+       public void setVY(int vy) {
+               vY = vy;
+       }
+
+       public String getStreamPublishName() {
+               return streamPublishName;
+       }
+
+       public void setStreamPublishName(String streamPublishName) {
+               this.streamPublishName = streamPublishName;
+       }
+
+       public Long getRecordingId() {
+               return recordingId;
+       }
+
+       public void setRecordingId(Long recordingId) {
+               this.recordingId = recordingId;
+       }
+
+       public Long getRecordingMetaDataId() {
+               return recordingMetaDataId;
+       }
+
+       public void setRecordingMetaDataId(Long recordingMetaDataId) {
+               this.recordingMetaDataId = recordingMetaDataId;
+       }
+
+       public boolean isScreenPublishStarted() {
+               return screenPublishStarted;
+       }
+
+       public void setScreenPublishStarted(boolean screenPublishStarted) {
+               this.screenPublishStarted = screenPublishStarted;
+       }
+
+       public boolean isStartRecording() {
+               return startRecording;
+       }
+
+       public void setStartRecording(boolean startRecording) {
+               this.startRecording = startRecording;
+       }
+
+       public boolean isStartStreaming() {
+               return startStreaming;
+       }
+
+       public void setStartStreaming(boolean startStreaming) {
+               this.startStreaming = startStreaming;
+       }
+
+       public Integer getInterviewPodId() {
+               return interviewPodId;
+       }
+
+       public void setInterviewPodId(Integer interviewPodId) {
+               this.interviewPodId = interviewPodId;
+       }
+
+       public boolean getCanRemote() {
+               return canRemote;
+       }
+
+       public void setCanRemote(boolean canRemote) {
+               this.canRemote = canRemote;
+       }
+
+       public boolean getCanGiveAudio() {
+               return canGiveAudio;
+       }
+
+       public void setCanGiveAudio(boolean canGiveAudio) {
+               this.canGiveAudio = canGiveAudio;
+       }
+
+       public boolean getCanVideo() {
+               return canVideo;
+       }
+
+       public void setCanVideo(boolean canVideo) {
+               this.canVideo = canVideo;
+       }
+
+       public boolean isAllowRecording() {
+               return allowRecording;
+       }
+
+       public void setAllowRecording(boolean allowRecording) {
+               this.allowRecording = allowRecording;
+       }
+
+       public boolean isStreamPublishStarted() {
+               return streamPublishStarted;
+       }
+
+       public void setStreamPublishStarted(boolean streamPublishStarted) {
+               this.streamPublishStarted = streamPublishStarted;
+       }
+
+       public boolean isSipTransport() {
+               return sipTransport;
+       }
+
+       public void setSipTransport(boolean sipTransport) {
+               this.sipTransport = sipTransport;
+       }
+
+       @Override
+       public String getServerId() {
+               return serverId;
+       }
+
+       public void setServerId(String serverId) {
+               this.serverId = serverId;
+       }
+
+       public boolean isMobile() {
+               return mobile;
+       }
+
+       public void setMobile(boolean mobile) {
+               this.mobile = mobile;
+       }
+
+       public String getTcUrl() {
+               return tcUrl;
+       }
+
+       public void setTcUrl(String tcUrl) {
+               this.tcUrl = tcUrl;
+       }
+
+       public boolean isNativeSsl() {
+               return nativeSsl;
+       }
+
+       public void setNativeSsl(boolean nativeSsl) {
+               this.nativeSsl = nativeSsl;
+       }
+
+       @Override
+       public String toString() {
+               return "Client [streamid=" + streamid + ", publicSID=" + 
publicSID + ", isScreenClient=" + screenClient
+                               + ", isMobile = " + mobile + ", roomId=" + 
roomId + ", broadCastID=" + broadCastID + ", userId="
+                               + userId + ", avsettings=" + avsettings + ", 
isRecording=" + isRecording + ", recordingId="
+                               + recordingId + ", recordingMetaDataId=" + 
recordingMetaDataId + ", screenPublishStarted="
+                               + screenPublishStarted + ", interviewPodId=" + 
interviewPodId + ", server=" + serverId + "]";
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java
deleted file mode 100644
index 046bc92..0000000
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/server/Server.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * 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.db.entity.server;
-
-import java.util.Calendar;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.Lob;
-import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.openjpa.persistence.jdbc.ForeignKey;
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.apache.openmeetings.db.entity.user.User;
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
-
-@Entity
-@NamedQueries({
-               @NamedQuery(name = "getAllServers", query = "SELECT s FROM 
Server s WHERE s.deleted = false ORDER BY s.id"),
-               @NamedQuery(name = "getServerCount", query = "SELECT COUNT(s) 
FROM Server s WHERE s.deleted = false"),
-               @NamedQuery(name = "getServerById", query = "SELECT s FROM 
Server s LEFT JOIN FETCH s.insertedby LEFT JOIN FETCH s.updatedby WHERE 
s.deleted = false AND s.id = :id"),
-               @NamedQuery(name = "getServerByName", query = "SELECT s FROM 
Server s WHERE s.deleted = false AND s.name LIKE :name"),
-               @NamedQuery(name = "getServerByAddress", query = "SELECT s FROM 
Server s WHERE s.deleted = false AND s.address LIKE :address"),
-               @NamedQuery(name = "getServersWithNoUsers", query = "SELECT s 
FROM Server s WHERE s.deleted = false AND s.id NOT IN (SELECT u.server.id FROM 
User u where u.server.id IS NOT NULL)"),
-               @NamedQuery(name = "getServerWithMinimumUsers", query = "SELECT 
s.id, COUNT(u) AS cnt FROM User u JOIN u.server s WHERE s.deleted = false GROUP 
BY s.id ORDER BY cnt"),
-               @NamedQuery(name = "getActiveServers", query = "SELECT s FROM 
Server s WHERE s.deleted = false AND s.active = true") //
-})
-@Table(name = "server")
-@Root
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Server implements IDataProviderEntity {
-       private static final long serialVersionUID = 1L;
-
-       @Id
-       @GeneratedValue(strategy = GenerationType.IDENTITY)
-       @Column(name = "id")
-       @Element(data = true)
-       private Long id;
-
-       @Column(name = "name")
-       @Element(data = true)
-       private String name;
-
-       @Column(name = "address")
-       @Element(data = true)
-       private String address;
-
-       @Column(name = "inserted")
-       public Date inserted;
-
-       @Column(name = "updated")
-       public Date updated;
-
-       @ManyToOne(fetch = FetchType.LAZY)
-       @JoinColumn(name = "insertedby_id", updatable = true, insertable = true)
-       @ForeignKey(enabled = true)
-       public User insertedby;
-
-       @ManyToOne(fetch = FetchType.LAZY)
-       @JoinColumn(name = "updatedby_id", updatable = true, insertable = true)
-       @ForeignKey(enabled = true)
-       public User updatedby;
-
-       @Lob
-       @Column(name = "comment", length = 2048)
-       @Element(data = true, required = false)
-       private String comment;
-
-       @Column(name = "last_ping", nullable = true)
-       @Element(data = true, required = false)
-       private Calendar lastPing;
-       
-       @Column(name = "port", nullable = true)
-       @Element(data = true, required = false)
-       private int port;
-
-       @Column(name = "protocol", nullable = true)
-       @Element(data = true, required = false)
-       private String protocol;
-
-       @Column(name = "webapp", nullable = true)
-       @Element(data = true, required = false)
-       private String webapp;
-
-       @Column(name = "login", nullable = true)
-       @Element(data = true, required = false)
-       private String user;
-
-       @Column(name = "pass", nullable = true)
-       @Element(data = true, required = false)
-       private String pass;
-
-       @Column(name = "active", nullable = false)
-       @Element(data = true, required = false)
-       private boolean active;
-       
-       @Column(name = "deleted", nullable = false)
-       @Element(data = true)
-       private boolean deleted = false;
-
-       @Override
-       public Long getId() {
-               return id;
-       }
-
-       @Override
-       public void setId(Long id) {
-               this.id = id;
-       }
-
-       public String getName() {
-               return name;
-       }
-
-       public void setName(String name) {
-               this.name = name;
-       }
-
-       public String getAddress() {
-               return address;
-       }
-
-       public void setAddress(String address) {
-               this.address = address;
-       }
-
-       public boolean isDeleted() {
-               return deleted;
-       }
-
-       public void setDeleted(boolean deleted) {
-               this.deleted = deleted;
-       }
-
-       public Date getInserted() {
-               return inserted;
-       }
-
-       public void setInserted(Date inserted) {
-               this.inserted = inserted;
-       }
-
-       public Date getUpdated() {
-               return updated;
-       }
-
-       public void setUpdated(Date updated) {
-               this.updated = updated;
-       }
-
-       public User getInsertedby() {
-               return insertedby;
-       }
-
-       public void setInsertedby(User insertedby) {
-               this.insertedby = insertedby;
-       }
-
-       public User getUpdatedby() {
-               return updatedby;
-       }
-
-       public void setUpdatedby(User updatedby) {
-               this.updatedby = updatedby;
-       }
-
-       public String getComment() {
-               return comment;
-       }
-
-       public void setComment(String comment) {
-               this.comment = comment;
-       }
-       
-       public Calendar getLastPing() {
-               return lastPing;
-       }
-
-       public void setLastPing(Calendar lastPing) {
-               this.lastPing = lastPing;
-       }
-
-       public int getPort() {
-               return port;
-       }
-
-       public void setPort(int port) {
-               this.port = port;
-       }
-
-       public String getProtocol() {
-               return protocol;
-       }
-
-       public void setProtocol(String protocol) {
-               this.protocol = protocol;
-       }
-
-       public String getWebapp() {
-               return webapp;
-       }
-
-       public void setWebapp(String webapp) {
-               this.webapp = webapp;
-       }
-
-       public String getUser() {
-               return user;
-       }
-
-       public void setUser(String user) {
-               this.user = user;
-       }
-
-       public String getPass() {
-               return pass;
-       }
-
-       public void setPass(String pass) {
-               this.pass = pass;
-       }
-
-       public void setId(long id) {
-               this.id = id;
-       }
-
-       public boolean isActive() {
-               return active;
-       }
-
-       public void setActive(boolean active) {
-               this.active = active;
-       }
-
-       @Override
-       public String toString() {
-               return "Server [id=" + id + ", name=" + name + ", address=" + 
address
-                               + ", port=" + port + ", user=" + user + ", 
pass=" + pass
-                               + ", protocol=" + protocol 
-                               + ", active=" + active + ", webapp=" + webapp + 
", deleted="
-                               + deleted + "]";
-       }
-
-       @Override
-       public int hashCode() {
-               final int prime = 31;
-               int result = 1;
-               result = prime * result + ((address == null) ? 0 : 
address.hashCode());
-               result = prime * result + ((id == null) ? 0 : id.hashCode());
-               return result;
-       }
-
-       @Override
-       public boolean equals(Object obj) {
-               if (this == obj)
-                       return true;
-               if (obj == null)
-                       return false;
-               if (getClass() != obj.getClass())
-                       return false;
-               Server other = (Server) obj;
-               if (address == null) {
-                       if (other.address != null)
-                               return false;
-               } else if (!address.equals(other.address))
-                       return false;
-               if (id == null) {
-                       if (other.id != null)
-                               return false;
-               } else if (!id.equals(other.id))
-                       return false;
-               return true;
-       }
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
----------------------------------------------------------------------
diff --git 
a/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx 
b/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
index cf77111..d0ec07a 100644
--- a/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
+++ b/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
@@ -249,14 +249,6 @@
                </handler>
        </netRemoteCallHib>
 
-       <netRemoteCallHib name="overwritePublicSID" 
funcname="overwritePublicSID" >
-               <netparam><method name="getValue"> return 
canvas.publicSID;</method></netparam>
-               <handler name="ondata" args="value">
-                       //The onResult-Handler will be called be the 
rtmpconnection
-                       if ($debug) Debug.write("overwritePublicSID: ",value);
-               </handler>
-       </netRemoteCallHib>
-
        <method name="setDefaultUserLanguage">
                <![CDATA[
                        if (userlang == -1 && canvas.language_id != 0) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
index 267d178..17bf2e7 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
@@ -49,7 +49,6 @@ import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.room.RoomGroupDao;
 import org.apache.openmeetings.db.dao.server.LdapConfigDao;
 import org.apache.openmeetings.db.dao.server.OAuth2Dao;
-import org.apache.openmeetings.db.dao.server.ServerDao;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.PrivateMessageDao;
 import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
@@ -124,8 +123,6 @@ public class BackupExport {
        @Autowired
        private OAuth2Dao auth2Dao;
        @Autowired
-       private ServerDao serverDao;
-       @Autowired
        private GroupDao groupDao;
        @Autowired
        private RoomDao roomDao;
@@ -249,12 +246,6 @@ public class BackupExport {
                        progressHolder.setProgress(35);
 
                        /*
-                        * ##################### Cluster servers
-                        */
-                       writeList(ser, zos, "servers.xml", "servers", 
serverDao.get(0, Integer.MAX_VALUE));
-                       progressHolder.setProgress(40);
-
-                       /*
                         * ##################### OAuth2 servers
                         */
                        writeList(ser, zos, "oauth2servers.xml", 
"oauth2servers", auth2Dao.get(0, Integer.MAX_VALUE));

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index c4660c7..fad26ab 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -81,7 +81,6 @@ import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.room.RoomGroupDao;
 import org.apache.openmeetings.db.dao.server.LdapConfigDao;
 import org.apache.openmeetings.db.dao.server.OAuth2Dao;
-import org.apache.openmeetings.db.dao.server.ServerDao;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.PrivateMessageDao;
 import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
@@ -104,7 +103,6 @@ import org.apache.openmeetings.db.entity.room.RoomPoll;
 import org.apache.openmeetings.db.entity.room.RoomPollAnswer;
 import org.apache.openmeetings.db.entity.server.LdapConfig;
 import org.apache.openmeetings.db.entity.server.OAuthServer;
-import org.apache.openmeetings.db.entity.server.Server;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.GroupUser;
@@ -172,8 +170,6 @@ public class BackupImport {
        @Autowired
        private ChatDao chatDao;
        @Autowired
-       private ServerDao serverDao;
-       @Autowired
        private OAuth2Dao auth2Dao;
        @Autowired
        private GroupDao groupDao;
@@ -519,19 +515,7 @@ public class BackupImport {
                        }
                }
 
-               log.info("Meeting members import complete, starting cluster 
server import");
-               /*
-                * ##################### Cluster servers
-                */
-               {
-                       List<Server> list = readList(simpleSerializer, f, 
"servers.xml", "servers", Server.class, true);
-                       for (Server s : list) {
-                               s.setId(null);
-                               serverDao.update(s, null);
-                       }
-               }
-
-               log.info("Cluster servers import complete, starting recordings 
import");
+               log.info("Meeting members import complete, starting recordings 
server import");
                /*
                 * ##################### Import Recordings
                 */

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 336c91f..3c1212f 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -159,8 +159,7 @@ public class ImportInitvalues {
                navimanagement.addMainStructure("adminModuleLDAP", null, 20, 
"1103", LEVEL_ADMIN, "Administration of LDAP Configs", admin.getId(), "1460");
                navimanagement.addMainStructure("adminModuleOAuth", null, 21, 
"1571", LEVEL_ADMIN, "Administration of OAuth2 servers", admin.getId(), "1572");
                navimanagement.addMainStructure("adminModuleBackup", null, 22, 
"367", LEVEL_ADMIN, "Administration of Backups", admin.getId(), "1461");
-               navimanagement.addMainStructure("adminModuleServers", null, 23, 
"1498", LEVEL_ADMIN, "Administration of Servers", admin.getId(), "1499");
-               navimanagement.addMainStructure("adminModuleEmail", null, 24, 
"main.menu.admin.email", LEVEL_ADMIN, "Administration of Emails", 
admin.getId(), "main.menu.admin.email.desc");
+               navimanagement.addMainStructure("adminModuleEmail", null, 23, 
"main.menu.admin.email", LEVEL_ADMIN, "Administration of Emails", 
admin.getId(), "main.menu.admin.email.desc");
                log.debug("MainMenu ADDED");
        }
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-server/src/site/xdoc/Clustering.xml
----------------------------------------------------------------------
diff --git a/openmeetings-server/src/site/xdoc/Clustering.xml 
b/openmeetings-server/src/site/xdoc/Clustering.xml
index e791f6e..a76ac5f 100644
--- a/openmeetings-server/src/site/xdoc/Clustering.xml
+++ b/openmeetings-server/src/site/xdoc/Clustering.xml
@@ -132,22 +132,12 @@
                                                ]]></source>
                                        </li>
                                        <li>
-                                               <p>In the file 
<tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/applicationContext.xml</tt>:</p>
+                                               <p>In the file 
<tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/hazelcast.xml</tt>:</p>
                                                <ul>
+                                                       <li>Set 
<tt>instance-name</tt> for each server to unique value</li>
                                                        <li>
-                                                               For each node 
uncomment line:
-                                                               <source>
-<![CDATA[
-<!-- Need to be uncommented and set to the real ID if in cluster mode-->
-<property name="serverId" value="1" />
-]]>
-                                                               </source>
-                                                               and input the 
unique value for each node.
-                                                       </li>
-                                                       <li>
-                                                               Replace 
<tt>&lt;ref bean="openmeetings.HashMapStore" /&gt;  &lt;!-- Memory based 
session cache by default --&gt;</tt><br/>
-                                                               with 
<tt>&lt;ref bean="openmeetings.DatabaseStore" /&gt;</tt>
-                                                               (Currently 
commented out with following comment: <tt>"The following section should be used 
in clustering mode"</tt>)
+                                                               In case there 
are more than one network interface with multicast support and/or additional 
hazelcast configuration is required
+                                                               Based on the 
following documentation: <a 
href="http://docs.hazelcast.org/docs/3.8.3/manual/html-single/index.html";>http://docs.hazelcast.org/docs/3.8.3/manual/html-single/index.html</a>
                                                        </li>
                                                </ul>
                                        </li>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
index bcef9cf..489751d 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/quartz/scheduler/CleanupJob.java
@@ -31,7 +31,7 @@ import java.util.Map;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.apache.openmeetings.core.data.whiteboard.WhiteboardCache;
-import org.apache.openmeetings.core.session.SessionManager;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.room.Whiteboard;
@@ -52,7 +52,7 @@ public class CleanupJob extends AbstractJob {
        @Autowired
        private SessiondataDao sessionDao;
        @Autowired
-       private SessionManager sessionManager;
+       private ISessionManager sessionManager;
        @Autowired
        private WhiteboardCache wbManager;
        @Autowired
@@ -128,7 +128,7 @@ public class CleanupJob extends AbstractJob {
                                                        }
                                                }
                                        }
-                                       if (folder.isDirectory() && roomId != 
null && sessionManager.getClientListByRoom(roomId).isEmpty()) {
+                                       if (folder.isDirectory() && roomId != 
null && sessionManager.listByRoom(roomId).isEmpty()) {
                                                File[] files = 
folder.listFiles();
                                                //TODO need to rework this and 
remove hardcodings
                                                if (files != null) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
index d09f748..6e8361a 100644
--- 
a/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
+++ 
b/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
@@ -52,7 +52,7 @@ import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.basic.SearchResult;
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.GroupUser;
@@ -410,7 +410,7 @@ public class UserManager implements IUserManager {
         * @return
         */
        @Override
-       public boolean kickUserByStreamId(String sid, Long room_id) {
+       public boolean kickUsersByRoomId(String sid, Long room_id) {
                try {
                        Sessiondata sd = sessionDao.check(sid);
                        // admins only
@@ -418,7 +418,7 @@ public class UserManager implements IUserManager {
 
                                sessionDao.clearSessionByRoomId(room_id);
 
-                               for (Client rcl : 
sessionManager.getClientListByRoom(room_id)) {
+                               for (StreamClient rcl : 
sessionManager.listByRoom(room_id)) {
                                        if (rcl == null) {
                                                return true;
                                        }
@@ -442,12 +442,12 @@ public class UserManager implements IUserManager {
        }
 
        @Override
-       public boolean kickUserByPublicSID(String sid, String publicSID) {
+       public boolean kickClient(String sid, String uid) {
                try {
                        Sessiondata sd = sessionDao.check(sid);
                        // admins only
                        if 
(AuthLevelUtil.hasWebServiceLevel(userDao.getRights(sd.getUserId()))) {
-                               Client rcl = 
sessionManager.getClientByPublicSID(publicSID, null);
+                               StreamClient rcl = sessionManager.get(uid);
 
                                if (rcl == null) {
                                        return true;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-web/pom.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index 89db6ea..25c975f 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -407,6 +407,11 @@
                        <version>${wickets.version}</version>
                </dependency>
                <dependency>
+                       <groupId>org.wicketstuff</groupId>
+                       <artifactId>wicketstuff-datastore-hazelcast</artifactId>
+                       <version>${wickets.version}</version>
+               </dependency>
+               <dependency>
                        <groupId>org.apache.wicket</groupId>
                        <artifactId>wicket-auth-roles</artifactId>
                        <version>${wicket.version}</version>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
index b213480..b23baab 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
@@ -28,9 +28,10 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.openmeetings.db.dao.server.ISessionManager;
-import org.apache.openmeetings.db.dao.user.IUserService;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.basic.IClient;
-import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.web.admin.AdminPanel;
 import org.apache.openmeetings.web.admin.SearchableDataView;
 import org.apache.openmeetings.web.app.Application;
@@ -58,7 +59,7 @@ public class ConnectionsPanel extends AdminPanel {
 
                        private List<IClient> list() {
                                List<IClient> l = new ArrayList<>();
-                               
l.addAll(getBean(ISessionManager.class).getClientsWithServer());
+                               l.addAll(getBean(ISessionManager.class).list());
                                l.addAll(Application.getClients());
                                return l;
                        }
@@ -89,33 +90,25 @@ public class ConnectionsPanel extends AdminPanel {
                                        @Override
                                        protected void 
onSubmit(AjaxRequestTarget target) {
                                                IClient _c = 
item.getModelObject();
-                                               if (_c instanceof Client) {
-                                                       Client c = (Client)_c;
-                                                       
getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
-                                                                       , 
c.getServer() == null ? 0 : c.getServer().getId());
-                                               } else {
-                                                       
org.apache.openmeetings.db.entity.basic.Client c = 
(org.apache.openmeetings.db.entity.basic.Client)_c;
-                                                       
getBean(IUserService.class).kickUserBySessionId(getSid(), c.getUserId(), 
c.getSessionId());
-                                               }
+                                               
getBean(IUserManager.class).kickClient(getSid(), _c.getUid());
                                                target.add(container, 
details.setVisible(false));
                                        }
                                };
-                               if (_c instanceof Client) {
-                                       Client c = (Client)_c;
+                               if (_c instanceof StreamClient) {
+                                       StreamClient c = (StreamClient)_c;
                                        item.add(new Label("streamid"));
                                        item.add(new Label("login", 
c.getUsername()));
                                        item.add(new Label("since", 
c.getConnectedSince()));
                                        item.add(new Label("scope"));
-                                       item.add(new Label("server", 
c.getServer() == null ? "no cluster" : c.getServer().getAddress())); //FIXME 
localization
                                        confirm.setEnabled(!c.isScreenClient());
                                } else {
-                                       
org.apache.openmeetings.db.entity.basic.Client c = 
(org.apache.openmeetings.db.entity.basic.Client)_c;
+                                       Client c = (Client)_c;
                                        item.add(new Label("streamid", ""));
                                        item.add(new Label("login", 
c.getUser().getLogin()));
                                        item.add(new Label("since", 
c.getConnectedSince()));
                                        item.add(new Label("scope", 
c.getRoomId() == null ? "html5" : "" + c.getRoomId()));
-                                       item.add(new Label("server", ""));
                                }
+                               item.add(new Label("server", _c.getServerId()));
                                item.add(confirm);
                                item.add(new AjaxEventBehavior("click") {
                                        private static final long 
serialVersionUID = 1L;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index 712dbbc..f87cf91 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -32,13 +32,13 @@ import java.util.List;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.user.GroupDao;
-import org.apache.openmeetings.db.dao.user.IUserService;
+import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
 import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.User;
@@ -83,12 +83,12 @@ public class RoomForm extends AdminBaseForm<Room> {
        private final TextField<String> pin = new TextField<>("pin");
        private final WebMarkupContainer moderatorContainer = new 
WebMarkupContainer("moderatorContainer");
        private final WebMarkupContainer clientsContainer = new 
WebMarkupContainer("clientsContainer");
-       private final ListView<Client> clients = new 
ListView<Client>("clients", new ArrayList<>()) {
+       private final ListView<StreamClient> clients = new 
ListView<StreamClient>("clients", new ArrayList<>()) {
                private static final long serialVersionUID = 1L;
 
                @Override
-               protected void populateItem(final ListItem<Client> item) {
-                       Client client = item.getModelObject();
+               protected void populateItem(final ListItem<StreamClient> item) {
+                       StreamClient client = item.getModelObject();
                        item.add(new Label("clientId", "" + client.getId()))
                                .add(new Label("clientLogin", "" + 
client.getUsername()))
                                .add(new ConfirmableAjaxBorder("clientDelete", 
getString("80"), getString("833")) {
@@ -96,9 +96,8 @@ public class RoomForm extends AdminBaseForm<Room> {
 
                                        @Override
                                        protected void 
onSubmit(AjaxRequestTarget target) {
-                                               Client c = 
item.getModelObject();
-                                               
getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
-                                                               , c.getServer() 
== null ? 0 : c.getServer().getId());
+                                               StreamClient c = 
item.getModelObject();
+                                               
getBean(IUserManager.class).kickClient(getSid(), c.getUid());
 
                                                updateClients(target);
                                        }
@@ -324,7 +323,7 @@ public class RoomForm extends AdminBaseForm<Room> {
 
        void updateClients(AjaxRequestTarget target) {
                long roomId = (getModelObject().getId() != null ? 
getModelObject().getId() : 0);
-               final List<Client> clientsInRoom = 
getBean(ISessionManager.class).getClientListByRoom(roomId);
+               final List<StreamClient> clientsInRoom = 
getBean(ISessionManager.class).listByRoom(roomId);
                clients.setDefaultModelObject(clientsInRoom);
                target.add(clientsContainer);
        }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
deleted file mode 100644
index c40315e..0000000
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.admin.servers;
-
-import static 
org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;
-import static 
org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;
-
-import org.apache.openmeetings.db.dao.server.ServerDao;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.web.admin.AdminBaseForm;
-import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextArea;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.util.time.Duration;
-
-/**
- * Form component to insert/update/delete {@link Server}
- *
- * @author swagner
- *
- */
-public class ServerForm extends AdminBaseForm<Server> {
-       private final WebMarkupContainer listContainer;
-       private static final long serialVersionUID = 1L;
-
-       public ServerForm(String id, WebMarkupContainer listContainer, final 
Server server) {
-               super(id, new CompoundPropertyModel<>(server));
-               setOutputMarkupId(true);
-               this.listContainer = listContainer;
-
-               add(new 
RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1500))));
-               add(new CheckBox("active"));
-               add(new 
RequiredTextField<String>("address").setLabel(Model.of(Application.getString(1501))));
-               add(new TextField<Integer>("port"));
-               add(new TextField<String>("user"));
-               add(new TextField<String>("pass"));
-               add(new TextField<String>("webapp"));
-               add(new TextField<String>("protocol"));
-               add(forDatePattern("lastPing", WEB_DATE_PATTERN));
-               //add(new Label("pingRunning"));
-               add(forDatePattern("inserted", WEB_DATE_PATTERN));
-               add(new Label("insertedby.login"));
-               add(forDatePattern("updated", WEB_DATE_PATTERN));
-               add(new Label("updatedby.login"));
-               add(new TextArea<String>("comment"));
-
-               // attach an ajax validation behavior to all form component's 
keydown
-               // event and throttle it down to once per second
-               add(new AjaxFormValidatingBehavior("keydown", 
Duration.ONE_SECOND));
-       }
-
-       @Override
-       protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
-               Application.getBean(ServerDao.class).update(getModelObject(), 
WebSession.getUserId());
-               Server server = 
Application.getBean(ServerDao.class).get(getModelObject().getId());
-               setModelObject(server);
-               hideNewRecord();
-               target.add(this);
-               target.add(listContainer);
-               target.appendJavaScript("adminPanelInit();");
-       }
-
-       @Override
-       protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
-               Server s = new Server();
-               s.setWebapp("openmeetings");
-               s.setProtocol("http");
-               setModelObject(s);
-               target.add(this);
-               target.appendJavaScript("adminPanelInit();");
-       }
-
-       @Override
-       protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
-               Server server = getModelObject();
-               if (server.getId() != null) {
-                       server = 
Application.getBean(ServerDao.class).get(server.getId());
-               } else {
-                       server = new Server();
-               }
-               setModelObject(server);
-               target.add(this);
-               target.appendJavaScript("adminPanelInit();");
-       }
-
-       @Override
-       protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
-               Application.getBean(ServerDao.class).delete(getModelObject(), 
WebSession.getUserId());
-               this.setModelObject(new Server());
-               target.add(listContainer);
-               target.add(this);
-               target.appendJavaScript("adminPanelInit();");
-       }
-
-       @Override
-       protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
-               // TODO Auto-generated method stub
-       }
-
-       @Override
-       protected void onNewError(AjaxRequestTarget target, Form<?> form) {
-               // TODO Auto-generated method stub
-       }
-
-       @Override
-       protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
-               // TODO Auto-generated method stub
-       }
-
-       @Override
-       protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
-               // TODO Auto-generated method stub
-       }
-}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html
deleted file mode 100644
index 187b748..0000000
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<?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:extend>
-       <div class="adminPanelColumnTable">
-               <span wicket:id="navigator">[dataview navigator]</span>
-               <table class="adminListTable">
-                       <thead>
-                               <tr>
-                                       <th class="three_column_layout_column1 
ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="188" 
/></th>
-                                       <th class="three_column_layout_column2 
ui-widget-header"><span wicket:id="orderByName"></span><wicket:message 
key="1500" /></th>
-                                       <th class="three_column_layout_column3 
ui-widget-header"><span wicket:id="orderByAddress"></span><wicket:message 
key="1501" /></th>
-                               </tr>
-                       </thead>
-               </table>
-               <div class="tableWrapper" id="adminTable">
-                       <table class="adminListTable">
-                               <tbody wicket:id="listContainer">
-                                       <tr wicket:id="serverList">
-                                               <td 
class="three_column_layout_column1"><div 
class="three_column_layout_divcolumn1"><span wicket:id="id"></span></div></td>
-                                               <td 
class="three_column_layout_column2"><div 
class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
-                                               <td 
class="three_column_layout_column3"><div 
class="three_column_layout_divcolumn3"><span 
wicket:id="address"></span></div></td>
-                                       </tr>
-                               </tbody>
-                       </table>
-               </div>
-       </div>
-       <div class="adminPanelColumnForm">
-               <form wicket:id="form" class="adminForm">
-                       <div wicket:id="buttons"></div>
-                       <div class="scrollcontent" id="adminForm">
-                               <fieldset class="ui-widget-content">
-                                       <legend 
class="ui-widget-header"><wicket:message key="1502" /></legend>
-                                       <div class="formelement">
-                                               <label 
wicket:for="name"><wicket:message key="1500" /></label><input type="text" 
wicket:id="name"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label 
wicket:for="active"><wicket:message key="1525" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="active" />
-                                       </div>
-                                       <div class="formelement">
-                                               <label 
wicket:for="address"><wicket:message key="1501" /></label><input type="text" 
wicket:id="address"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label 
wicket:for="port"><wicket:message key="1519" /></label><input type="text" 
wicket:id="port"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label 
wicket:for="user"><wicket:message key="1520" /></label><input type="text" 
wicket:id="user"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label 
wicket:for="pass"><wicket:message key="1521" /></label><input type="text" 
wicket:id="pass"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label 
wicket:for="webapp"><wicket:message key="1522" /></label><input type="text" 
wicket:id="webapp"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label 
wicket:for="protocol"><wicket:message key="1523" /></label><input type="text" 
wicket:id="protocol"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <div 
class="info-text"><wicket:message key="1518" /></div>
-                                                       <br/>
-                                               <label><wicket:message 
key="1517" /></label><span wicket:id="lastPing"/>
-                                               <!-- br/>
-                                               <label 
wicket:for="pingRunning"><wicket:message key="1524" /></label><span 
wicket:id="pingRunning"/-->
-                                       </div>
-                                       <div class="formelement">
-                                               <label><wicket:message 
key="1110" /></label><span wicket:id="inserted"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label><wicket:message 
key="1111" /></label><span wicket:id="insertedby.login"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label><wicket:message 
key="1112" /></label><span wicket:id="updated"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label><wicket:message 
key="1113" /></label><span wicket:id="updatedby.login"/>
-                                       </div>
-                                       <div class="formelement">
-                                               <label 
wicket:for="comment"><wicket:message key="270" /></label><textarea 
wicket:id="comment"/>
-                                       </div>
-                               </fieldset>
-                       </div>
-               </form>
-       </div>
-</wicket:extend>
-</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/ca559564/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
deleted file mode 100644
index 1a60552..0000000
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.admin.servers;
-
-import org.apache.openmeetings.db.dao.server.ServerDao;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.web.admin.AdminPanel;
-import org.apache.openmeetings.web.admin.SearchableDataView;
-import org.apache.openmeetings.web.common.PagedEntityListPanel;
-import org.apache.openmeetings.web.data.DataViewContainer;
-import org.apache.openmeetings.web.data.OmOrderByBorder;
-import org.apache.openmeetings.web.data.SearchableDataProvider;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
-
-/**
- * Form component with list and form to manipulate {@link Server}
- *
- * @author swagner
- *
- */
-public class ServersPanel extends AdminPanel {
-       private static final long serialVersionUID = 1L;
-       final WebMarkupContainer listContainer = new 
WebMarkupContainer("listContainer");
-       private ServerForm form;
-
-       public ServersPanel(String id) {
-               super(id);
-               SearchableDataView<Server> dataView = new 
SearchableDataView<Server>("serverList",
-                               new SearchableDataProvider<>(ServerDao.class)) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       protected void populateItem(final Item<Server> item) {
-                               final Server server = item.getModelObject();
-                               item.add(new Label("id"));
-                               item.add(new Label("name"));
-                               item.add(new Label("address"));
-                               item.add(new AjaxEventBehavior("click") {
-                                       private static final long 
serialVersionUID = 1L;
-
-                                       @Override
-                                       protected void 
onEvent(AjaxRequestTarget target) {
-                                               form.setModelObject(server);
-                                               form.hideNewRecord();
-                                               target.add(form, listContainer);
-                                               
target.appendJavaScript("adminPanelInit();");
-                                       }
-                               });
-                               item.add(AttributeModifier.replace("class", 
getRowClass(server.getId(), form.getModelObject().getId())));
-                       }
-               };
-
-               add(listContainer.add(dataView).setOutputMarkupId(true));
-               PagedEntityListPanel navigator = new 
PagedEntityListPanel("navigator", dataView) {
-                       private static final long serialVersionUID = 1L;
-
-                       @Override
-                       protected void onEvent(AjaxRequestTarget target) {
-                               target.add(listContainer);
-                       }
-               };
-               DataViewContainer<Server> container = new 
DataViewContainer<>(listContainer, dataView, navigator);
-               container.addLink(new OmOrderByBorder<>("orderById", "id", 
container))
-                       .addLink(new OmOrderByBorder<>("orderByName", "name", 
container))
-                       .addLink(new OmOrderByBorder<>("orderByAddress", 
"address", container));
-               add(container.getLinks());
-               add(navigator);
-
-               form = new ServerForm("form", listContainer, new Server());
-               form.showNewRecord();
-               add(form);
-
-       }
-}

Reply via email to