You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/07/30 15:55:49 UTC

[3/5] openmeetings git commit: [OPENMEETINGS-1677] Hazelcast is added to handle cluster

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);
-
-	}
-}