http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java
index c6f2d18..140c719 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/SipDao.java
@@ -1,191 +1,191 @@
-/*
- * 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.dao.room;
-
-import org.apache.openmeetings.db.entity.room.Room;
-import org.asteriskjava.manager.DefaultManagerConnection;
-import org.asteriskjava.manager.ManagerConnection;
-import org.asteriskjava.manager.ManagerConnectionFactory;
-import org.asteriskjava.manager.ResponseEvents;
-import org.asteriskjava.manager.action.ConfbridgeListAction;
-import org.asteriskjava.manager.action.DbDelAction;
-import org.asteriskjava.manager.action.DbDelTreeAction;
-import org.asteriskjava.manager.action.DbGetAction;
-import org.asteriskjava.manager.action.DbPutAction;
-import org.asteriskjava.manager.action.EventGeneratingAction;
-import org.asteriskjava.manager.action.ManagerAction;
-import org.asteriskjava.manager.action.OriginateAction;
-import org.asteriskjava.manager.response.ManagerError;
-import org.asteriskjava.manager.response.ManagerResponse;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-
-public class SipDao {
-       private static final Logger log = 
Red5LoggerFactory.getLogger(SipDao.class);
-       public static final String ASTERISK_OM_FAMILY = "openmeetings";
-       public static final String ASTERISK_OM_KEY = "rooms";
-       private String sipHostname;
-       private int sipPort;
-       private String sipUsername;
-       private String sipPassword;
-       private long timeout;
-       private ManagerConnectionFactory factory;
-
-       @SuppressWarnings("unused")
-       private SipDao() {
-               // prohibited default constructor
-       }
-
-       public SipDao(String sipHostname, int sipPort, String sipUsername, 
String sipPassword, long timeout) {
-               this.sipHostname = sipHostname;
-               this.sipPort = sipPort;
-               this.sipUsername = sipUsername;
-               this.sipPassword = sipPassword;
-               this.timeout = timeout;
-               factory = new ManagerConnectionFactory(this.sipHostname, 
this.sipPort, this.sipUsername, this.sipPassword);
-       }
-
-       private ManagerConnection getConnection() {
-               DefaultManagerConnection con = 
(DefaultManagerConnection)factory.createManagerConnection(); // TODO secure
-               con.setDefaultEventTimeout(timeout);
-               con.setDefaultResponseTimeout(timeout);
-               con.setSocketReadTimeout((int)timeout);
-               con.setSocketTimeout((int)timeout);
-               return con;
-       }
-       
-       private ManagerResponse exec(ManagerAction action) {
-               if (factory == null) {
-                       log.warn("There is no Asterisk configured");
-                       return null;
-               }
-               ManagerConnection con = getConnection();
-               try {
-                       con.login();
-                       ManagerResponse r = con.sendAction(action);
-                       if (r != null) {
-                               log.debug(r.toString());
-                       }
-                       return (r instanceof ManagerError) ? null : r;
-               } catch (Exception e) {
-                       log.error("Error while executing ManagerAction: " + 
action, e);
-               } finally {
-                       try {
-                               con.logoff();
-                       } catch (Exception e) {
-                               // no-op
-                       }
-               }
-               return null;
-       }
-
-       private ResponseEvents execEvent(EventGeneratingAction action) {
-               if (factory == null) {
-                       log.warn("There is no Asterisk configured");
-                       return null;
-               }
-               ManagerConnection con = getConnection();
-               try {
-                       con.login("on");
-                       ResponseEvents r = 
con.sendEventGeneratingAction(action);
-                       if (r != null) {
-                               log.debug(r.getResponse().toString());
-                       }
-                       return (r == null || r.getResponse() instanceof 
ManagerError) ? null : r;
-               } catch (Exception e) {
-                       log.error("Error while executing EventGeneratingAction: 
" + action, e);
-               } finally {
-                       try {
-                               con.logoff();
-                       } catch (Exception e) {
-                               // no-op
-                       }
-               }
-               return null;
-       }
-
-       private static String getKey(String confno) {
-               return ASTERISK_OM_KEY + "/" + confno;
-       }
-
-       public String get(String confno) {
-               String pin = null;
-               DbGetAction da = new DbGetAction(ASTERISK_OM_FAMILY, 
getKey(confno));
-               ManagerResponse r = exec(da);
-               if (r != null) {
-                       pin = r.getResponse();
-               }
-               return pin;
-       }
-
-       public void update(String confno, String pin) {
-               delete(confno);
-               DbPutAction da = new DbPutAction(ASTERISK_OM_FAMILY, 
getKey(confno), pin);
-               exec(da);
-       }
-
-       public void delete() {
-               DbDelTreeAction da = new DbDelTreeAction(ASTERISK_OM_FAMILY, 
ASTERISK_OM_KEY);
-               exec(da);
-       }
-
-       public void delete(String confno) {
-               DbDelAction da = new DbDelAction(ASTERISK_OM_FAMILY, 
getKey(confno));
-               exec(da);
-       }
-
-       public Integer countUsers(String confno) {
-               if (confno == null) {
-                       return null;
-               }
-               ConfbridgeListAction da = new ConfbridgeListAction(confno);
-               ResponseEvents r = execEvent(da);
-               if (r != null) {
-                       log.debug("SipDao::countUsers size == " + 
r.getEvents().size());
-                       // "- 1" here means: ListComplete event 
-                       return r.getEvents().size() - 1; // TODO check if was 
successfull
-               }
-               return 0;
-       }
-       
-       /**
-        * Perform call to specified phone number and join to conference
-        * 
-        * @param number
-        *            number to call
-        * @param r
-        *            room to be connected to the call
-        */
-       public void joinToConfCall(String number, Room r) {
-               String sipNumber = (r != null && r.getConfno() != null) ? 
r.getConfno() : null;
-               if (sipNumber == null) {
-                       log.warn("Failed to get SIP number for room: {}", r);
-                       return;
-               }
-
-               OriginateAction oa = new OriginateAction();
-               oa.setChannel(String.format("Local/%s@rooms-originate", 
sipNumber));
-               oa.setContext("rooms-out");
-               oa.setExten(number);
-               oa.setPriority(1);
-               oa.setTimeout(timeout);
-
-               exec(oa); //TODO handle response
-       }
-}
+/*
+ * 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.dao.room;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.asteriskjava.manager.DefaultManagerConnection;
+import org.asteriskjava.manager.ManagerConnection;
+import org.asteriskjava.manager.ManagerConnectionFactory;
+import org.asteriskjava.manager.ResponseEvents;
+import org.asteriskjava.manager.action.ConfbridgeListAction;
+import org.asteriskjava.manager.action.DbDelAction;
+import org.asteriskjava.manager.action.DbDelTreeAction;
+import org.asteriskjava.manager.action.DbGetAction;
+import org.asteriskjava.manager.action.DbPutAction;
+import org.asteriskjava.manager.action.EventGeneratingAction;
+import org.asteriskjava.manager.action.ManagerAction;
+import org.asteriskjava.manager.action.OriginateAction;
+import org.asteriskjava.manager.response.ManagerError;
+import org.asteriskjava.manager.response.ManagerResponse;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class SipDao {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(SipDao.class);
+       public static final String ASTERISK_OM_FAMILY = "openmeetings";
+       public static final String ASTERISK_OM_KEY = "rooms";
+       private String sipHostname;
+       private int sipPort;
+       private String sipUsername;
+       private String sipPassword;
+       private long timeout;
+       private ManagerConnectionFactory factory;
+
+       @SuppressWarnings("unused")
+       private SipDao() {
+               // prohibited default constructor
+       }
+
+       public SipDao(String sipHostname, int sipPort, String sipUsername, 
String sipPassword, long timeout) {
+               this.sipHostname = sipHostname;
+               this.sipPort = sipPort;
+               this.sipUsername = sipUsername;
+               this.sipPassword = sipPassword;
+               this.timeout = timeout;
+               factory = new ManagerConnectionFactory(this.sipHostname, 
this.sipPort, this.sipUsername, this.sipPassword);
+       }
+
+       private ManagerConnection getConnection() {
+               DefaultManagerConnection con = 
(DefaultManagerConnection)factory.createManagerConnection(); // TODO secure
+               con.setDefaultEventTimeout(timeout);
+               con.setDefaultResponseTimeout(timeout);
+               con.setSocketReadTimeout((int)timeout);
+               con.setSocketTimeout((int)timeout);
+               return con;
+       }
+       
+       private ManagerResponse exec(ManagerAction action) {
+               if (factory == null) {
+                       log.warn("There is no Asterisk configured");
+                       return null;
+               }
+               ManagerConnection con = getConnection();
+               try {
+                       con.login();
+                       ManagerResponse r = con.sendAction(action);
+                       if (r != null) {
+                               log.debug(r.toString());
+                       }
+                       return (r instanceof ManagerError) ? null : r;
+               } catch (Exception e) {
+                       log.error("Error while executing ManagerAction: " + 
action, e);
+               } finally {
+                       try {
+                               con.logoff();
+                       } catch (Exception e) {
+                               // no-op
+                       }
+               }
+               return null;
+       }
+
+       private ResponseEvents execEvent(EventGeneratingAction action) {
+               if (factory == null) {
+                       log.warn("There is no Asterisk configured");
+                       return null;
+               }
+               ManagerConnection con = getConnection();
+               try {
+                       con.login("on");
+                       ResponseEvents r = 
con.sendEventGeneratingAction(action);
+                       if (r != null) {
+                               log.debug(r.getResponse().toString());
+                       }
+                       return (r == null || r.getResponse() instanceof 
ManagerError) ? null : r;
+               } catch (Exception e) {
+                       log.error("Error while executing EventGeneratingAction: 
" + action, e);
+               } finally {
+                       try {
+                               con.logoff();
+                       } catch (Exception e) {
+                               // no-op
+                       }
+               }
+               return null;
+       }
+
+       private static String getKey(String confno) {
+               return ASTERISK_OM_KEY + "/" + confno;
+       }
+
+       public String get(String confno) {
+               String pin = null;
+               DbGetAction da = new DbGetAction(ASTERISK_OM_FAMILY, 
getKey(confno));
+               ManagerResponse r = exec(da);
+               if (r != null) {
+                       pin = r.getResponse();
+               }
+               return pin;
+       }
+
+       public void update(String confno, String pin) {
+               delete(confno);
+               DbPutAction da = new DbPutAction(ASTERISK_OM_FAMILY, 
getKey(confno), pin);
+               exec(da);
+       }
+
+       public void delete() {
+               DbDelTreeAction da = new DbDelTreeAction(ASTERISK_OM_FAMILY, 
ASTERISK_OM_KEY);
+               exec(da);
+       }
+
+       public void delete(String confno) {
+               DbDelAction da = new DbDelAction(ASTERISK_OM_FAMILY, 
getKey(confno));
+               exec(da);
+       }
+
+       public Integer countUsers(String confno) {
+               if (confno == null) {
+                       return null;
+               }
+               ConfbridgeListAction da = new ConfbridgeListAction(confno);
+               ResponseEvents r = execEvent(da);
+               if (r != null) {
+                       log.debug("SipDao::countUsers size == " + 
r.getEvents().size());
+                       // "- 1" here means: ListComplete event 
+                       return r.getEvents().size() - 1; // TODO check if was 
successfull
+               }
+               return 0;
+       }
+       
+       /**
+        * Perform call to specified phone number and join to conference
+        * 
+        * @param number
+        *            number to call
+        * @param r
+        *            room to be connected to the call
+        */
+       public void joinToConfCall(String number, Room r) {
+               String sipNumber = (r != null && r.getConfno() != null) ? 
r.getConfno() : null;
+               if (sipNumber == null) {
+                       log.warn("Failed to get SIP number for room: {}", r);
+                       return;
+               }
+
+               OriginateAction oa = new OriginateAction();
+               oa.setChannel(String.format("Local/%s@rooms-originate", 
sipNumber));
+               oa.setContext("rooms-out");
+               oa.setExten(number);
+               oa.setPriority(1);
+               oa.setTimeout(timeout);
+
+               exec(oa); //TODO handle response
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
index 5bd1be2..3ebd6fb 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
@@ -1,206 +1,206 @@
-/*
- * 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.dao.server;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.openmeetings.db.dto.basic.SearchResult;
-import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
-import org.apache.openmeetings.db.entity.room.StreamClient;
-import org.apache.openmeetings.db.entity.server.Server;
-
-/**
- * Methods to add/get/remove {@link StreamClient}s to the session
- *
- *
- * @author sebawagner
- *
- */
-public interface ISessionManager {
-       void clearCache();
-
-       /**
-        * Notified on server start, when the session manager should be started 
and
-        * eventually caches cleared/setup
-        */
-       void sessionStart();
-
-       StreamClient add(StreamClient c, Server server);
-       /**
-        * add a new client item
-        *
-        * @param streamId
-        * @param scopeName
-        * @param remotePort
-        * @param remoteAddress
-        * @param swfUrl
-        * @param server
-        * @return
-        */
-       StreamClient addClientListItem(String streamId, String scopeName, int 
remotePort, String remoteAddress, String swfUrl, Server server);
-
-       Collection<StreamClient> getClients();
-
-       /**
-        * loads the server into the client (only if database cache is used)
-        *
-        * @return
-        */
-       Collection<StreamClient> getClientsWithServer();
-
-       /**
-        * Get a client by its streamId
-        *
-        * @param streamId
-        * @param server
-        * @return
-        */
-       StreamClient getClientByStreamId(String streamId, Server server);
-
-       /**
-        * get a client by its publicSID and the server,
-        *
-        * @param publicSID
-        * @param server
-        * @return
-        */
-       StreamClient getClientByPublicSID(String publicSID, Server server);
-
-       /**
-        * same as {@link #getClientByPublicSID(String, boolean, Server)} but 
it ignores
-        * if the server part, so it will deliver any client just by its 
publicSID.<br/>
-        * <br/>
-        * <b>Note:</b>
-        * This method requires more time to find the user, so under normal 
circumstances
-        * you should use {@link #getClientByPublicSID(String, boolean, 
Server)}!
-        *
-        * @param publicSID
-        * @return
-        */
-       ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID);
-
-       /**
-        *
-        * @param userId
-        * @return
-        *
-        * @deprecated There could be multiple users logged in with the same 
userid,
-        *             then this call would return a list not a single user
-        */
-       @Deprecated
-       StreamClient getClientByUserId(Long userId);
-
-       /**
-        * Update the session object of the audio/video-connection and 
additionally
-        * swap the values to the session object of the user that holds the full
-        * session object
-        *
-        * @param streamId
-        * @param rcm
-        * @return
-        */
-       boolean updateAVClientByStreamId(String streamId, StreamClient rcm, 
Server server);
-
-       /**
-        * Update the session object
-        *
-        * updateRoomCount is only <i>one</i> time true, in
-        * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, String)
-        * .
-        *
-        * @param streamId
-        * @param rcm
-        * @param updateRoomCount
-        *            true means the count for the room has to be updated
-        * @return
-        */
-       boolean updateClientByStreamId(String streamId, StreamClient rcm, 
boolean updateRoomCount, Server server);
-
-       /**
-        * Remove a client from the session store
-        *
-        * @param streamId
-        * @return
-        */
-       boolean removeClient(String streamId, Server server);
-
-       /**
-        * Get all ClientList Objects of that room and domain This Function is
-        * needed cause it is invoked internally AFTER the current user has been
-        * already removed from the ClientList to see if the Room is empty 
again and
-        * the PollList can be removed
-        * @param roomId
-        * @return
-        */
-       List<StreamClient> getClientListByRoom(Long roomId);
-
-       Collection<StreamClient> getClientListByRoomAll(Long roomId);
-
-       /**
-        * get the current Moderator in this room
-        *
-        * @param roomname
-        * @return
-        */
-       List<StreamClient> getCurrentModeratorByRoom(Long roomId);
-
-       /**
-        * Get list of current client sessions
-        *
-        * @param start
-        * @param max
-        * @param orderby
-        * @param asc
-        * @return
-        */
-       SearchResult<StreamClient> getListByStartAndMax(int start, int max, 
String orderby, boolean asc);
-
-       /**
-        * returns number of current users recording
-        *
-        * @param roomId
-        * @return
-        */
-       long getRecordingCount(long roomId);
-
-       /**
-        * returns a number of current users publishing screensharing
-        *
-        * @param roomId
-        * @return
-        */
-       long getPublishingCount(long roomId);
-
-       /**
-        * Get a list of all servers of all rooms on that server, serverId = 
null
-        * means it is a local session on the master.
-        *
-        * @param server
-        * @return a set, a roomId can be only one time in this list
-        */
-       List<Long> getActiveRoomIdsByServer(Server server);
-
-       /**
-        * Get some statistics about the current sessions
-        *
-        * @return
-        */
-       String getSessionStatistics();
-}
+/*
+ * 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.dao.server;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
+import org.apache.openmeetings.db.entity.room.StreamClient;
+import org.apache.openmeetings.db.entity.server.Server;
+
+/**
+ * Methods to add/get/remove {@link StreamClient}s to the session
+ *
+ *
+ * @author sebawagner
+ *
+ */
+public interface ISessionManager {
+       void clearCache();
+
+       /**
+        * Notified on server start, when the session manager should be started 
and
+        * eventually caches cleared/setup
+        */
+       void sessionStart();
+
+       StreamClient add(StreamClient c, Server server);
+       /**
+        * add a new client item
+        *
+        * @param streamId
+        * @param scopeName
+        * @param remotePort
+        * @param remoteAddress
+        * @param swfUrl
+        * @param server
+        * @return
+        */
+       StreamClient addClientListItem(String streamId, String scopeName, int 
remotePort, String remoteAddress, String swfUrl, Server server);
+
+       Collection<StreamClient> getClients();
+
+       /**
+        * loads the server into the client (only if database cache is used)
+        *
+        * @return
+        */
+       Collection<StreamClient> getClientsWithServer();
+
+       /**
+        * Get a client by its streamId
+        *
+        * @param streamId
+        * @param server
+        * @return
+        */
+       StreamClient getClientByStreamId(String streamId, Server server);
+
+       /**
+        * get a client by its publicSID and the server,
+        *
+        * @param publicSID
+        * @param server
+        * @return
+        */
+       StreamClient getClientByPublicSID(String publicSID, Server server);
+
+       /**
+        * same as {@link #getClientByPublicSID(String, boolean, Server)} but 
it ignores
+        * if the server part, so it will deliver any client just by its 
publicSID.<br/>
+        * <br/>
+        * <b>Note:</b>
+        * This method requires more time to find the user, so under normal 
circumstances
+        * you should use {@link #getClientByPublicSID(String, boolean, 
Server)}!
+        *
+        * @param publicSID
+        * @return
+        */
+       ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID);
+
+       /**
+        *
+        * @param userId
+        * @return
+        *
+        * @deprecated There could be multiple users logged in with the same 
userid,
+        *             then this call would return a list not a single user
+        */
+       @Deprecated
+       StreamClient getClientByUserId(Long userId);
+
+       /**
+        * Update the session object of the audio/video-connection and 
additionally
+        * swap the values to the session object of the user that holds the full
+        * session object
+        *
+        * @param streamId
+        * @param rcm
+        * @return
+        */
+       boolean updateAVClientByStreamId(String streamId, StreamClient rcm, 
Server server);
+
+       /**
+        * Update the session object
+        *
+        * updateRoomCount is only <i>one</i> time true, in
+        * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, String)
+        * .
+        *
+        * @param streamId
+        * @param rcm
+        * @param updateRoomCount
+        *            true means the count for the room has to be updated
+        * @return
+        */
+       boolean updateClientByStreamId(String streamId, StreamClient rcm, 
boolean updateRoomCount, Server server);
+
+       /**
+        * Remove a client from the session store
+        *
+        * @param streamId
+        * @return
+        */
+       boolean removeClient(String streamId, Server server);
+
+       /**
+        * Get all ClientList Objects of that room and domain This Function is
+        * needed cause it is invoked internally AFTER the current user has been
+        * already removed from the ClientList to see if the Room is empty 
again and
+        * the PollList can be removed
+        * @param roomId
+        * @return
+        */
+       List<StreamClient> getClientListByRoom(Long roomId);
+
+       Collection<StreamClient> getClientListByRoomAll(Long roomId);
+
+       /**
+        * get the current Moderator in this room
+        *
+        * @param roomname
+        * @return
+        */
+       List<StreamClient> getCurrentModeratorByRoom(Long roomId);
+
+       /**
+        * Get list of current client sessions
+        *
+        * @param start
+        * @param max
+        * @param orderby
+        * @param asc
+        * @return
+        */
+       SearchResult<StreamClient> getListByStartAndMax(int start, int max, 
String orderby, boolean asc);
+
+       /**
+        * returns number of current users recording
+        *
+        * @param roomId
+        * @return
+        */
+       long getRecordingCount(long roomId);
+
+       /**
+        * returns a number of current users publishing screensharing
+        *
+        * @param roomId
+        * @return
+        */
+       long getPublishingCount(long roomId);
+
+       /**
+        * Get a list of all servers of all rooms on that server, serverId = 
null
+        * means it is a local session on the master.
+        *
+        * @param server
+        * @return a set, a roomId can be only one time in this list
+        */
+       List<Long> getActiveRoomIdsByServer(Server server);
+
+       /**
+        * Get some statistics about the current sessions
+        *
+        * @return
+        */
+       String getSessionStatistics();
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
index ed612eb..dad22cf 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ServerDao.java
@@ -1,222 +1,222 @@
-/*
- * 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.dao.server;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.dao.IDataProviderDao;
-import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.util.DaoHelper;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * 
- * CRUD for {@link Server}
- * 
- * @author solomax, sebawagner
- * 
- */
-@Transactional
-public class ServerDao implements IDataProviderDao<Server> {
-       private static final Logger log = 
Red5LoggerFactory.getLogger(ServerDao.class, webAppRootKey);
-       public final static String[] searchFields = { "name", "address", 
"comment" };
-
-       @PersistenceContext
-       private EntityManager em;
-
-       @Autowired
-       private UserDao userDao;
-       
-       /**
-        * Get a list of all available servers
-        * 
-        * @return
-        */
-       public List<Server> getServerList() {
-               log.debug("getServerList enter");
-               TypedQuery<Server> q = em.createNamedQuery("getAllServers",
-                               Server.class);
-               return q.getResultList();
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.apache.openmeetings.data.OmDAO#get(int, int)
-        */
-       @Override
-       public List<Server> get(int start, int max) {
-               TypedQuery<Server> q = em.createNamedQuery("getAllServers", 
Server.class);
-               q.setFirstResult(start);
-               q.setMaxResults(max);
-               return q.getResultList();
-       }
-
-       @Override
-       public List<Server> get(String search, int start, int count, String 
order) {
-               TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery(
-                               "Server", "s", search, true, false, order, 
searchFields),
-                               Server.class);
-               q.setFirstResult(start);
-               q.setMaxResults(count);
-               return q.getResultList();
-       }
-
-       /**
-        * get the list of all servers in the cluster that are ready to receive 
a
-        * ping (active = true)
-        * 
-        * @return
-        */
-       public List<Server> getActiveServers() {
-               return em.createNamedQuery("getActiveServers", Server.class)
-                               .getResultList();
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.apache.openmeetings.data.OmDAO#count()
-        */
-       @Override
-       public long count() {
-               log.debug("getServerCount enter");
-               TypedQuery<Long> q = em.createNamedQuery("getServerCount", 
Long.class);
-
-               return q.getSingleResult();
-       }
-
-       @Override
-       public long count(String search) {
-               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery("Server",
-                               "s", search, true, true, null, searchFields), 
Long.class);
-               return q.getSingleResult();
-       }
-
-       @Override
-       public Server get(long id) {
-               return get(Long.valueOf(id));
-       }
-       
-       /*
-        * (non-Javadoc)
-        * 
-        * @see org.apache.openmeetings.data.OmDAO#get(long)
-        */
-       @Override
-       public Server get(Long id) {
-               Server result = null;
-               log.debug("getServer enter, id = " + id);
-               TypedQuery<Server> q = em.createNamedQuery("getServerById",
-                               Server.class);
-               q.setParameter("id", id);
-               try {
-                       result = q.getSingleResult();
-               } catch (NoResultException e) {
-                       // noop
-               }
-               return result;
-       }
-
-       /**
-        * Get server by its address
-        * 
-        * @param address
-        * @return
-        */
-       public Server getServerByAddress(String address) {
-               log.debug("getServer enter, address = " + address);
-               TypedQuery<Server> q = em.createNamedQuery("getServerByAddress",
-                               Server.class);
-               q.setParameter("address", address);
-               List<Server> list = q.getResultList();
-               return list.size() > 0 ? list.get(0) : null;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.openmeetings.data.OmDAO#update(org.apache.openmeetings.persistence
-        * .beans.OmEntity, long)
-        */
-       @Override
-       public Server update(Server entity, Long userId) {
-               entity.setDeleted(false);
-               if (entity.getId() == null) {
-                       entity.setInserted(new Date());
-                       if (userId != null) {
-                               entity.setInsertedby(userDao.get(userId));
-                       }
-                       em.persist(entity);
-               } else {
-                       entity.setUpdated(new Date());
-                       if (userId != null) {
-                               entity.setUpdatedby(userDao.get(userId));
-                       }
-                       em.merge(entity);
-               }
-               return entity;
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see
-        * 
org.apache.openmeetings.data.OmDAO#delete(org.apache.openmeetings.persistence
-        * .beans.OmEntity, long)
-        */
-       @Override
-       public void delete(Server entity, Long userId) {
-               if (entity.getId() != null) {
-                       entity.setUpdated(new Date());
-                       if (userId != null) {
-                               entity.setUpdatedby(userDao.get(userId));
-                       }
-                       entity.setDeleted(true);
-                       em.merge(entity);
-               }
-       }
-
-       /**
-        * get {@link Server} by name
-        * 
-        * @param name
-        * @return
-        */
-       public List<Server> getServersByName(String name) {
-               TypedQuery<Server> q = em.createNamedQuery("getServerByName",
-                               Server.class);
-               q.setParameter("name", name);
-               return q.getResultList();
-       }
-
-}
+/*
+ * 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.dao.server;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.DaoHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * CRUD for {@link Server}
+ * 
+ * @author solomax, sebawagner
+ * 
+ */
+@Transactional
+public class ServerDao implements IDataProviderDao<Server> {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(ServerDao.class, webAppRootKey);
+       public final static String[] searchFields = { "name", "address", 
"comment" };
+
+       @PersistenceContext
+       private EntityManager em;
+
+       @Autowired
+       private UserDao userDao;
+       
+       /**
+        * Get a list of all available servers
+        * 
+        * @return
+        */
+       public List<Server> getServerList() {
+               log.debug("getServerList enter");
+               TypedQuery<Server> q = em.createNamedQuery("getAllServers",
+                               Server.class);
+               return q.getResultList();
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.apache.openmeetings.data.OmDAO#get(int, int)
+        */
+       @Override
+       public List<Server> get(int start, int max) {
+               TypedQuery<Server> q = em.createNamedQuery("getAllServers", 
Server.class);
+               q.setFirstResult(start);
+               q.setMaxResults(max);
+               return q.getResultList();
+       }
+
+       @Override
+       public List<Server> get(String search, int start, int count, String 
order) {
+               TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery(
+                               "Server", "s", search, true, false, order, 
searchFields),
+                               Server.class);
+               q.setFirstResult(start);
+               q.setMaxResults(count);
+               return q.getResultList();
+       }
+
+       /**
+        * get the list of all servers in the cluster that are ready to receive 
a
+        * ping (active = true)
+        * 
+        * @return
+        */
+       public List<Server> getActiveServers() {
+               return em.createNamedQuery("getActiveServers", Server.class)
+                               .getResultList();
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.apache.openmeetings.data.OmDAO#count()
+        */
+       @Override
+       public long count() {
+               log.debug("getServerCount enter");
+               TypedQuery<Long> q = em.createNamedQuery("getServerCount", 
Long.class);
+
+               return q.getSingleResult();
+       }
+
+       @Override
+       public long count(String search) {
+               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery("Server",
+                               "s", search, true, true, null, searchFields), 
Long.class);
+               return q.getSingleResult();
+       }
+
+       @Override
+       public Server get(long id) {
+               return get(Long.valueOf(id));
+       }
+       
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.apache.openmeetings.data.OmDAO#get(long)
+        */
+       @Override
+       public Server get(Long id) {
+               Server result = null;
+               log.debug("getServer enter, id = " + id);
+               TypedQuery<Server> q = em.createNamedQuery("getServerById",
+                               Server.class);
+               q.setParameter("id", id);
+               try {
+                       result = q.getSingleResult();
+               } catch (NoResultException e) {
+                       // noop
+               }
+               return result;
+       }
+
+       /**
+        * Get server by its address
+        * 
+        * @param address
+        * @return
+        */
+       public Server getServerByAddress(String address) {
+               log.debug("getServer enter, address = " + address);
+               TypedQuery<Server> q = em.createNamedQuery("getServerByAddress",
+                               Server.class);
+               q.setParameter("address", address);
+               List<Server> list = q.getResultList();
+               return list.size() > 0 ? list.get(0) : null;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.data.OmDAO#update(org.apache.openmeetings.persistence
+        * .beans.OmEntity, long)
+        */
+       @Override
+       public Server update(Server entity, Long userId) {
+               entity.setDeleted(false);
+               if (entity.getId() == null) {
+                       entity.setInserted(new Date());
+                       if (userId != null) {
+                               entity.setInsertedby(userDao.get(userId));
+                       }
+                       em.persist(entity);
+               } else {
+                       entity.setUpdated(new Date());
+                       if (userId != null) {
+                               entity.setUpdatedby(userDao.get(userId));
+                       }
+                       em.merge(entity);
+               }
+               return entity;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see
+        * 
org.apache.openmeetings.data.OmDAO#delete(org.apache.openmeetings.persistence
+        * .beans.OmEntity, long)
+        */
+       @Override
+       public void delete(Server entity, Long userId) {
+               if (entity.getId() != null) {
+                       entity.setUpdated(new Date());
+                       if (userId != null) {
+                               entity.setUpdatedby(userDao.get(userId));
+                       }
+                       entity.setDeleted(true);
+                       em.merge(entity);
+               }
+       }
+
+       /**
+        * get {@link Server} by name
+        * 
+        * @param name
+        * @return
+        */
+       public List<Server> getServersByName(String name) {
+               TypedQuery<Server> q = em.createNamedQuery("getServerByName",
+                               Server.class);
+               q.setParameter("name", name);
+               return q.getResultList();
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
index 423b05c..d74064e 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupDao.java
@@ -1,146 +1,146 @@
-/*
- * 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.dao.user;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.util.DaoHelper;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional
-public class GroupDao implements IGroupAdminDataProviderDao<Group> {
-       public final static String[] searchFields = {"name"};
-       @PersistenceContext
-       private EntityManager em;
-
-       @Override
-       public Group get(long id) {
-               return get(Long.valueOf(id));
-       }
-       
-       @Override
-       public Group get(Long id) {
-               TypedQuery<Group> query = em.createNamedQuery("getGroupById", 
Group.class);
-               query.setParameter("id", id);
-               Group o = null;
-               try {
-                       o = query.getSingleResult();
-               } catch (NoResultException e) {
-                       // o = null;
-               }
-               return o;
-       }
-
-       public Group get(String name) {
-               List<Group> groups = em.createNamedQuery("getGroupByName", 
Group.class).setParameter("name", name).getResultList();
-               return groups == null || groups.isEmpty() ? null : 
groups.get(0);
-       }
-
-       @Override
-       public List<Group> get(int start, int count) {
-               TypedQuery<Group> q = 
em.createNamedQuery("getNondeletedGroups", Group.class);
-               q.setFirstResult(start);
-               q.setMaxResults(count);
-               return q.getResultList();
-       }
-
-       @Override
-       public List<Group> get(String search, int start, int count, String 
sort) {
-               TypedQuery<Group> q = 
em.createQuery(DaoHelper.getSearchQuery("Group", "g", search, true, false, 
sort, searchFields), Group.class);
-               q.setFirstResult(start);
-               q.setMaxResults(count);
-               return q.getResultList();
-       }
-
-       @Override
-       public List<Group> get(String search, Long adminId, int start, int 
count, String order) {
-               TypedQuery<Group> q = 
em.createQuery(DaoHelper.getSearchQuery("GroupUser gu, IN(gu.group)", "g", 
null, search, true, true, false
-                               , "gu.user.id = :adminId AND gu.moderator = 
true", order, searchFields), Group.class);
-               q.setParameter("adminId", adminId);
-               q.setFirstResult(start);
-               q.setMaxResults(count);
-               return q.getResultList();
-       }
-
-       @Override
-       public long count() {
-               TypedQuery<Long> q = em.createNamedQuery("countGroups", 
Long.class);
-               return q.getSingleResult();
-       }
-
-       @Override
-       public long count(String search) {
-               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery("Group", "o", search, true, true, null, 
searchFields), Long.class);
-               return q.getSingleResult();
-       }
-
-       @Override
-       public long count(String search, Long adminId) {
-               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery("GroupUser gu, IN(gu.group)", "g", 
null, search, true, true, true
-                               , "gu.user.id = :adminId AND gu.moderator = 
true", null, searchFields), Long.class);
-               q.setParameter("adminId", adminId);
-               return q.getSingleResult();
-       }
-
-       public List<Group> get(Collection<Long> ids) {
-               return em.createNamedQuery("getGroupsByIds", 
Group.class).setParameter("ids", ids).getResultList();
-       }
-
-       public List<Group> getLimited() {
-               return em.createNamedQuery("getLimitedGroups", 
Group.class).getResultList();
-       }
-
-       @Override
-       public Group update(Group entity, Long userId) {
-               if (entity.getId() == null) {
-                       if (userId != null) {
-                               entity.setInsertedby(userId);
-                       }
-                       entity.setInserted(new Date());
-                       em.persist(entity);
-               } else {
-                       if (userId != null) {
-                               entity.setUpdatedby(userId);
-                       }
-                       entity.setUpdated(new Date());
-                       em.merge(entity);
-               }
-               return entity;
-       }
-
-       @Override
-       public void delete(Group g, Long userId) {
-               
em.createNamedQuery("deleteGroupUsersByGroup").setParameter("id", 
g.getId()).executeUpdate();
-
-               g.setDeleted(true);
-               if (userId != null) {
-                       g.setUpdatedby(userId);
-               }
-               em.merge(g);
-       }
-}
+/*
+ * 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.dao.user;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IGroupAdminDataProviderDao;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class GroupDao implements IGroupAdminDataProviderDao<Group> {
+       public final static String[] searchFields = {"name"};
+       @PersistenceContext
+       private EntityManager em;
+
+       @Override
+       public Group get(long id) {
+               return get(Long.valueOf(id));
+       }
+       
+       @Override
+       public Group get(Long id) {
+               TypedQuery<Group> query = em.createNamedQuery("getGroupById", 
Group.class);
+               query.setParameter("id", id);
+               Group o = null;
+               try {
+                       o = query.getSingleResult();
+               } catch (NoResultException e) {
+                       // o = null;
+               }
+               return o;
+       }
+
+       public Group get(String name) {
+               List<Group> groups = em.createNamedQuery("getGroupByName", 
Group.class).setParameter("name", name).getResultList();
+               return groups == null || groups.isEmpty() ? null : 
groups.get(0);
+       }
+
+       @Override
+       public List<Group> get(int start, int count) {
+               TypedQuery<Group> q = 
em.createNamedQuery("getNondeletedGroups", Group.class);
+               q.setFirstResult(start);
+               q.setMaxResults(count);
+               return q.getResultList();
+       }
+
+       @Override
+       public List<Group> get(String search, int start, int count, String 
sort) {
+               TypedQuery<Group> q = 
em.createQuery(DaoHelper.getSearchQuery("Group", "g", search, true, false, 
sort, searchFields), Group.class);
+               q.setFirstResult(start);
+               q.setMaxResults(count);
+               return q.getResultList();
+       }
+
+       @Override
+       public List<Group> get(String search, Long adminId, int start, int 
count, String order) {
+               TypedQuery<Group> q = 
em.createQuery(DaoHelper.getSearchQuery("GroupUser gu, IN(gu.group)", "g", 
null, search, true, true, false
+                               , "gu.user.id = :adminId AND gu.moderator = 
true", order, searchFields), Group.class);
+               q.setParameter("adminId", adminId);
+               q.setFirstResult(start);
+               q.setMaxResults(count);
+               return q.getResultList();
+       }
+
+       @Override
+       public long count() {
+               TypedQuery<Long> q = em.createNamedQuery("countGroups", 
Long.class);
+               return q.getSingleResult();
+       }
+
+       @Override
+       public long count(String search) {
+               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery("Group", "o", search, true, true, null, 
searchFields), Long.class);
+               return q.getSingleResult();
+       }
+
+       @Override
+       public long count(String search, Long adminId) {
+               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery("GroupUser gu, IN(gu.group)", "g", 
null, search, true, true, true
+                               , "gu.user.id = :adminId AND gu.moderator = 
true", null, searchFields), Long.class);
+               q.setParameter("adminId", adminId);
+               return q.getSingleResult();
+       }
+
+       public List<Group> get(Collection<Long> ids) {
+               return em.createNamedQuery("getGroupsByIds", 
Group.class).setParameter("ids", ids).getResultList();
+       }
+
+       public List<Group> getLimited() {
+               return em.createNamedQuery("getLimitedGroups", 
Group.class).getResultList();
+       }
+
+       @Override
+       public Group update(Group entity, Long userId) {
+               if (entity.getId() == null) {
+                       if (userId != null) {
+                               entity.setInsertedby(userId);
+                       }
+                       entity.setInserted(new Date());
+                       em.persist(entity);
+               } else {
+                       if (userId != null) {
+                               entity.setUpdatedby(userId);
+                       }
+                       entity.setUpdated(new Date());
+                       em.merge(entity);
+               }
+               return entity;
+       }
+
+       @Override
+       public void delete(Group g, Long userId) {
+               
em.createNamedQuery("deleteGroupUsersByGroup").setParameter("id", 
g.getId()).executeUpdate();
+
+               g.setDeleted(true);
+               if (userId != null) {
+                       g.setUpdatedby(userId);
+               }
+               em.merge(g);
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
index 53d85a7..bcc6d5c 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/GroupUserDao.java
@@ -1,124 +1,124 @@
-/*
- * 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.dao.user;
-
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.apache.openmeetings.db.dao.IDataProviderDao;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.util.DaoHelper;
-import org.springframework.transaction.annotation.Transactional;
-
-@Transactional
-public class GroupUserDao implements IDataProviderDao<GroupUser> {
-       @PersistenceContext
-       private EntityManager em;
-       public final static String[] searchFields = {"user.lastname", 
"user.firstname", "user.login", "user.address.email"};
-
-       @Override
-       public GroupUser get(long id) {
-               return get(Long.valueOf(id));
-       }
-       
-       @Override
-       public GroupUser get(Long id) {
-               TypedQuery<GroupUser> q = 
em.createNamedQuery("getGroupUsersById", GroupUser.class);
-               q.setParameter("id", id);
-               return q.getSingleResult();
-       }
-
-       @Override
-       public List<GroupUser> get(int start, int count) {
-               throw new RuntimeException("Should not be used");
-       }
-
-       @Override
-       public List<GroupUser> get(String search, int start, int count, String 
sort) {
-               throw new RuntimeException("Should not be used");
-       }
-       
-       public List<GroupUser> get(long groupId, String search, int start, int 
count, String sort) {
-               TypedQuery<GroupUser> q = 
em.createQuery(DaoHelper.getSearchQuery(GroupUser.class.getSimpleName(), "ou", 
null, search, false, false, "ou.group.id = :groupId", sort, searchFields), 
GroupUser.class);
-               q.setParameter("groupId", groupId);
-               q.setFirstResult(start);
-               q.setMaxResults(count);
-               return q.getResultList();
-       }
-       
-       public List<GroupUser> get(long groupId, int start, int count) {
-               TypedQuery<GroupUser> q = 
em.createNamedQuery("getGroupUsersByGroupId", GroupUser.class);
-               q.setParameter("id", groupId);
-               q.setFirstResult(start);
-               q.setMaxResults(count);
-               return q.getResultList();
-       }
-
-       public GroupUser getByGroupAndUser(long groupId, long userId) {
-               try {
-                       List<GroupUser> list = 
em.createNamedQuery("isUserInGroup", GroupUser.class)
-                                       .setParameter("groupId", 
groupId).setParameter("userId", userId).getResultList();
-                       if (list != null && !list.isEmpty()) {
-                               return list.get(0);
-                       }
-               } catch (Exception e) {
-                       //no-op
-               }
-               return null;
-       }
-       
-       public boolean isUserInGroup(long groupId, long userId) {
-               return em.createNamedQuery("isUserInGroup", GroupUser.class)
-                               .setParameter("groupId", 
groupId).setParameter("userId", userId).getResultList().size() > 0;
-       }
-       
-       @Override
-       public long count() {
-               throw new RuntimeException("Should not be used");
-       }
-
-       @Override
-       public long count(String search) {
-               throw new RuntimeException("Should not be used");
-       }
-       
-       public long count(long groupId, String search) {
-               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery(GroupUser.class.getSimpleName(), "ou", 
search, false, true, null, searchFields), Long.class);
-               return q.getSingleResult();
-       }
-       
-       public long count(long groupId) {
-               TypedQuery<Long> q = em.createNamedQuery("countGroupUsers", 
Long.class);
-               q.setParameter("id", groupId);
-               return q.getSingleResult();
-       }
-
-       @Override
-       public GroupUser update(GroupUser entity, Long userId) {
-               throw new RuntimeException("Should not be used");
-       }
-
-       @Override
-       public void delete(GroupUser entity, Long userId) {
-               throw new RuntimeException("Should not be used");
-       }
-}
+/*
+ * 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.dao.user;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class GroupUserDao implements IDataProviderDao<GroupUser> {
+       @PersistenceContext
+       private EntityManager em;
+       public final static String[] searchFields = {"user.lastname", 
"user.firstname", "user.login", "user.address.email"};
+
+       @Override
+       public GroupUser get(long id) {
+               return get(Long.valueOf(id));
+       }
+       
+       @Override
+       public GroupUser get(Long id) {
+               TypedQuery<GroupUser> q = 
em.createNamedQuery("getGroupUsersById", GroupUser.class);
+               q.setParameter("id", id);
+               return q.getSingleResult();
+       }
+
+       @Override
+       public List<GroupUser> get(int start, int count) {
+               throw new RuntimeException("Should not be used");
+       }
+
+       @Override
+       public List<GroupUser> get(String search, int start, int count, String 
sort) {
+               throw new RuntimeException("Should not be used");
+       }
+       
+       public List<GroupUser> get(long groupId, String search, int start, int 
count, String sort) {
+               TypedQuery<GroupUser> q = 
em.createQuery(DaoHelper.getSearchQuery(GroupUser.class.getSimpleName(), "ou", 
null, search, false, false, "ou.group.id = :groupId", sort, searchFields), 
GroupUser.class);
+               q.setParameter("groupId", groupId);
+               q.setFirstResult(start);
+               q.setMaxResults(count);
+               return q.getResultList();
+       }
+       
+       public List<GroupUser> get(long groupId, int start, int count) {
+               TypedQuery<GroupUser> q = 
em.createNamedQuery("getGroupUsersByGroupId", GroupUser.class);
+               q.setParameter("id", groupId);
+               q.setFirstResult(start);
+               q.setMaxResults(count);
+               return q.getResultList();
+       }
+
+       public GroupUser getByGroupAndUser(long groupId, long userId) {
+               try {
+                       List<GroupUser> list = 
em.createNamedQuery("isUserInGroup", GroupUser.class)
+                                       .setParameter("groupId", 
groupId).setParameter("userId", userId).getResultList();
+                       if (list != null && !list.isEmpty()) {
+                               return list.get(0);
+                       }
+               } catch (Exception e) {
+                       //no-op
+               }
+               return null;
+       }
+       
+       public boolean isUserInGroup(long groupId, long userId) {
+               return em.createNamedQuery("isUserInGroup", GroupUser.class)
+                               .setParameter("groupId", 
groupId).setParameter("userId", userId).getResultList().size() > 0;
+       }
+       
+       @Override
+       public long count() {
+               throw new RuntimeException("Should not be used");
+       }
+
+       @Override
+       public long count(String search) {
+               throw new RuntimeException("Should not be used");
+       }
+       
+       public long count(long groupId, String search) {
+               TypedQuery<Long> q = 
em.createQuery(DaoHelper.getSearchQuery(GroupUser.class.getSimpleName(), "ou", 
search, false, true, null, searchFields), Long.class);
+               return q.getSingleResult();
+       }
+       
+       public long count(long groupId) {
+               TypedQuery<Long> q = em.createNamedQuery("countGroupUsers", 
Long.class);
+               q.setParameter("id", groupId);
+               return q.getSingleResult();
+       }
+
+       @Override
+       public GroupUser update(GroupUser entity, Long userId) {
+               throw new RuntimeException("Should not be used");
+       }
+
+       @Override
+       public void delete(GroupUser entity, Long userId) {
+               throw new RuntimeException("Should not be used");
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
index 5562c37..dc14f03 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
@@ -1,199 +1,199 @@
-/*
- * 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.basic;
-
-import java.util.Calendar;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-
-@Entity
-@NamedQueries({
-       @NamedQuery(name = "getMailMessageById", query = "SELECT m FROM 
MailMessage m WHERE m.id = :id")
-       , @NamedQuery(name = "getMailMessages", query = "SELECT m FROM 
MailMessage m ORDER BY m.updated, m.inserted")
-       , @NamedQuery(name = "getMailMessagesByStatus", query = "SELECT m FROM 
MailMessage m WHERE m.status = :status ORDER BY m.updated, m.inserted")
-       , @NamedQuery(name = "countMailMessages", query = "SELECT COUNT(m) FROM 
MailMessage m")
-       , @NamedQuery(name = "resetMailStatusByDate", query = "UPDATE 
MailMessage m SET m.status = :noneStatus WHERE m.status = :sendingStatus AND 
m.updated < :date")
-       , @NamedQuery(name = "resetMailStatusById", query = "UPDATE MailMessage 
m SET m.errorCount = 0, m.status = :noneStatus WHERE m.id = :id")
-})
-@Table(name = "email_queue")
-public class MailMessage implements IDataProviderEntity {
-       private static final long serialVersionUID = 1L;
-
-       public enum Status {
-               NONE, SENDING, ERROR, DONE
-       }
-
-       @Id
-       @GeneratedValue(strategy = GenerationType.IDENTITY)
-       @Column(name = "id")
-       private Long id;
-
-       @Lob
-       @Column(name = "recipients")
-       private String recipients;
-
-       @Column(name = "replyTo")
-       private String replyTo;
-
-       @Column(name = "subject")
-       private String subject;
-
-       @Lob
-       @Column(name = "body")
-       private String body;
-
-       @Lob
-       @Column(name = "ics")
-       private byte[] ics;
-
-       @Column(name = "status", nullable = false)
-       @Enumerated(EnumType.STRING)
-       private Status status = Status.NONE;
-
-       @Column(name = "inserted")
-       private Calendar inserted;
-
-       @Column(name = "updated")
-       private Calendar updated;
-
-       @Column(name = "error_count", nullable = false)
-       private int errorCount = 0;
-
-       @Lob
-       @Column(name = "last_error")
-       private String lastError;
-
-       public MailMessage() {
-               this(null, null, null, null, null);
-       }
-       
-       public MailMessage(String recipients, String replyTo, String subject, 
String body) {
-               this(recipients, replyTo, subject, body, null);
-       }
-       
-       public MailMessage(String recipients, String replyTo, String subject, 
String body, byte[] ics) {
-               this.recipients = recipients;
-               this.replyTo = replyTo;
-               this.subject = subject;
-               this.body = body;
-               this.ics = ics;
-       }
-       
-       @Override
-       public Long getId() {
-               return id;
-       }
-
-       @Override
-       public void setId(Long id) {
-               this.id = id;
-       }
-
-       public String getRecipients() {
-               return recipients;
-       }
-
-       public void setRecipients(String recipients) {
-               this.recipients = recipients;
-       }
-
-       public String getReplyTo() {
-               return replyTo;
-       }
-
-       public void setReplyTo(String replyTo) {
-               this.replyTo = replyTo;
-       }
-
-       public String getSubject() {
-               return subject;
-       }
-
-       public void setSubject(String subject) {
-               this.subject = subject;
-       }
-
-       public String getBody() {
-               return body;
-       }
-
-       public void setBody(String body) {
-               this.body = body;
-       }
-
-       public Status getStatus() {
-               return status;
-       }
-
-       public void setStatus(Status status) {
-               this.status = status;
-       }
-
-       public Calendar getInserted() {
-               return inserted;
-       }
-
-       public void setInserted(Calendar inserted) {
-               this.inserted = inserted;
-       }
-
-       public Calendar getUpdated() {
-               return updated;
-       }
-
-       public void setUpdated(Calendar updated) {
-               this.updated = updated;
-       }
-
-       public byte[] getIcs() {
-               return ics;
-       }
-
-       public void setIcs(byte[] ics) {
-               this.ics = ics;
-       }
-
-       public int getErrorCount() {
-               return errorCount;
-       }
-
-       public void setErrorCount(int errorCount) {
-               this.errorCount = errorCount;
-       }
-
-       public String getLastError() {
-               return lastError;
-       }
-
-       public void setLastError(String lastError) {
-               this.lastError = lastError;
-       }
-}
+/*
+ * 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.basic;
+
+import java.util.Calendar;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+
+@Entity
+@NamedQueries({
+       @NamedQuery(name = "getMailMessageById", query = "SELECT m FROM 
MailMessage m WHERE m.id = :id")
+       , @NamedQuery(name = "getMailMessages", query = "SELECT m FROM 
MailMessage m ORDER BY m.updated, m.inserted")
+       , @NamedQuery(name = "getMailMessagesByStatus", query = "SELECT m FROM 
MailMessage m WHERE m.status = :status ORDER BY m.updated, m.inserted")
+       , @NamedQuery(name = "countMailMessages", query = "SELECT COUNT(m) FROM 
MailMessage m")
+       , @NamedQuery(name = "resetMailStatusByDate", query = "UPDATE 
MailMessage m SET m.status = :noneStatus WHERE m.status = :sendingStatus AND 
m.updated < :date")
+       , @NamedQuery(name = "resetMailStatusById", query = "UPDATE MailMessage 
m SET m.errorCount = 0, m.status = :noneStatus WHERE m.id = :id")
+})
+@Table(name = "email_queue")
+public class MailMessage implements IDataProviderEntity {
+       private static final long serialVersionUID = 1L;
+
+       public enum Status {
+               NONE, SENDING, ERROR, DONE
+       }
+
+       @Id
+       @GeneratedValue(strategy = GenerationType.IDENTITY)
+       @Column(name = "id")
+       private Long id;
+
+       @Lob
+       @Column(name = "recipients")
+       private String recipients;
+
+       @Column(name = "replyTo")
+       private String replyTo;
+
+       @Column(name = "subject")
+       private String subject;
+
+       @Lob
+       @Column(name = "body")
+       private String body;
+
+       @Lob
+       @Column(name = "ics")
+       private byte[] ics;
+
+       @Column(name = "status", nullable = false)
+       @Enumerated(EnumType.STRING)
+       private Status status = Status.NONE;
+
+       @Column(name = "inserted")
+       private Calendar inserted;
+
+       @Column(name = "updated")
+       private Calendar updated;
+
+       @Column(name = "error_count", nullable = false)
+       private int errorCount = 0;
+
+       @Lob
+       @Column(name = "last_error")
+       private String lastError;
+
+       public MailMessage() {
+               this(null, null, null, null, null);
+       }
+       
+       public MailMessage(String recipients, String replyTo, String subject, 
String body) {
+               this(recipients, replyTo, subject, body, null);
+       }
+       
+       public MailMessage(String recipients, String replyTo, String subject, 
String body, byte[] ics) {
+               this.recipients = recipients;
+               this.replyTo = replyTo;
+               this.subject = subject;
+               this.body = body;
+               this.ics = ics;
+       }
+       
+       @Override
+       public Long getId() {
+               return id;
+       }
+
+       @Override
+       public void setId(Long id) {
+               this.id = id;
+       }
+
+       public String getRecipients() {
+               return recipients;
+       }
+
+       public void setRecipients(String recipients) {
+               this.recipients = recipients;
+       }
+
+       public String getReplyTo() {
+               return replyTo;
+       }
+
+       public void setReplyTo(String replyTo) {
+               this.replyTo = replyTo;
+       }
+
+       public String getSubject() {
+               return subject;
+       }
+
+       public void setSubject(String subject) {
+               this.subject = subject;
+       }
+
+       public String getBody() {
+               return body;
+       }
+
+       public void setBody(String body) {
+               this.body = body;
+       }
+
+       public Status getStatus() {
+               return status;
+       }
+
+       public void setStatus(Status status) {
+               this.status = status;
+       }
+
+       public Calendar getInserted() {
+               return inserted;
+       }
+
+       public void setInserted(Calendar inserted) {
+               this.inserted = inserted;
+       }
+
+       public Calendar getUpdated() {
+               return updated;
+       }
+
+       public void setUpdated(Calendar updated) {
+               this.updated = updated;
+       }
+
+       public byte[] getIcs() {
+               return ics;
+       }
+
+       public void setIcs(byte[] ics) {
+               this.ics = ics;
+       }
+
+       public int getErrorCount() {
+               return errorCount;
+       }
+
+       public void setErrorCount(int errorCount) {
+               this.errorCount = errorCount;
+       }
+
+       public String getLastError() {
+               return lastError;
+       }
+
+       public void setLastError(String lastError) {
+               this.lastError = lastError;
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/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
index 7859b49..046bc92 100644
--- 
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
@@ -1,304 +1,304 @@
-/*
- * 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;
-       }
-}
+/*
+ * 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;
+       }
+}

Reply via email to