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

svn commit: r1712911 [16/16] - in /openmeetings/branches/3.1.x: openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ openmeetings-core/src/main/java/org/apache/openmeetings/core/data/conference/ openmeetings-core/src/main/java/org/ap...

Modified: openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java?rev=1712911&r1=1712910&r2=1712911&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/ServerWebService.java Fri Nov  6 06:18:44 2015
@@ -18,12 +18,31 @@
  */
 package org.apache.openmeetings.webservice;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.List;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.cxf.feature.Features;
 import org.apache.openmeetings.db.dao.server.ServerDao;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.ServiceResult;
+import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
+import org.apache.openmeetings.db.dto.server.ServerDTO;
 import org.apache.openmeetings.db.entity.server.Server;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
 import org.apache.openmeetings.webservice.error.ServiceException;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -37,21 +56,24 @@ import org.springframework.beans.factory
  * @webservice ServerService
  * 
  */
+@WebService(serviceName="org.apache.openmeetings.webservice.ServerWebService")
+@Features(features = "org.apache.cxf.feature.LoggingFeature")
+@Produces({MediaType.APPLICATION_JSON})
+@Path("/server")
 public class ServerWebService {
-	private static final Logger log = Red5LoggerFactory.getLogger(
-			ServerWebService.class, OpenmeetingsVariables.webAppRootKey);
+	private static final Logger log = Red5LoggerFactory.getLogger(ServerWebService.class, webAppRootKey);
 
 	@Autowired
-	private SessiondataDao sessiondataDao;
+	private SessiondataDao sessionDao;
 	@Autowired
 	private UserDao userDao;
 	@Autowired
-	private ServerDao serversDao;
+	private ServerDao serverDao;
 
 	/**
 	 * Method to retrieve the list of the servers participating in cluster
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            - session id to identify the user making request
 	 * @param start
 	 *            - server index to start with
@@ -59,15 +81,22 @@ public class ServerWebService {
 	 *            - Maximum server count
 	 * @return The list of servers participating in cluster
 	 */
-	public Server[] getServers(String SID, int start, int max) throws ServiceException {
+	@WebMethod
+	@GET
+	@Path("/{start}/{max}")
+	public List<ServerDTO> getServers(@QueryParam("sid") @WebParam(name="sid") String sid
+			, @PathParam("start") @WebParam(name="start") int start
+			, @PathParam("max") @WebParam(name="max") int max
+			) throws ServiceException
+	{
 		log.debug("getServers enter");
-		Long users_id = sessiondataDao.checkSession(SID);
+		Long userId = sessionDao.checkSession(sid);
 
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-			return serversDao.get(start, max).toArray(new Server[0]);
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
+			return ServerDTO.list(serverDao.get(start, max));
 		} else {
 			log.warn("Insuffisient permissions");
-			return null;
+			throw new ServiceException("Insufficient permissins"); //TODO code -26
 		}
 	}
 
@@ -75,99 +104,74 @@ public class ServerWebService {
 	 * Method to retrieve the total count of the servers participating in
 	 * cluster
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            - session id to identify the user making request
 	 * @return total count of the servers participating in cluster
 	 */
-	public int getServerCount(String SID) throws ServiceException {
+	@WebMethod
+	@GET
+	@Path("/count")
+	public long count(@QueryParam("sid") @WebParam(name="sid") String sid) throws ServiceException {
 		log.debug("getServerCount enter");
-		Long users_id = sessiondataDao.checkSession(SID);
+		Long userId = sessionDao.checkSession(sid);
 
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-			return (int) serversDao.count();
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
+			return serverDao.count();
 		} else {
-			log.warn("Insuffisient permissions");
-			return -1;
+			throw new ServiceException("Insufficient permissins"); //TODO code -26
 		}
 	}
 
 	/**
 	 * Method to add/update server
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            - session id to identify the user making request
-	 * @param id
-	 *            - the id of the server to save
-	 * @param name
-	 *            - the name of the server to save
-	 * @param address
-	 *            - the address(DNS name or IP) of the server to save
-	 * @param port
-	 *            - the http port of the slave
-	 * @param user
-	 *            - REST user to access the slave
-	 * @param pass
-	 *            - REST pass to access the slave
-	 * @param webapp
-	 *            - webapp name of the OpenMeetings instance
-	 * @param protocol
-	 *            - protocol to access the OpenMeetings instance
-	 * @param active
-	 *            - if the server currently participates in the cluster or not
-	 * @param comment
-	 *            - comment for the server
+	 * @param server
+	 *            - server to add/update
 	 * @return the id of saved server
 	 */
-	public long saveServer(String SID, long id, String name, String address,
-			int port, String user, String pass, String webapp, String protocol,
-			Boolean active, String comment) throws ServiceException {
+	@WebMethod
+	@POST
+	@Path("/")
+	public ServerDTO add(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="server") @QueryParam("server") ServerDTO server) throws ServiceException {
 		log.debug("saveServerCount enter");
-		Long users_id = sessiondataDao.checkSession(SID);
-
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-			Server s = serversDao.get(id);
-			if (s == null) {
-				s = new Server();
-			}
-			s.setName(name);
-			s.setAddress(address);
-			s.setPort(port);
-			s.setUser(user);
-			s.setPass(pass);
-			s.setWebapp(webapp);
-			s.setProtocol(protocol);
-			s.setActive(active);
-			s.setComment(comment);
-			return serversDao.update(s, users_id).getId();
+		Long userId = sessionDao.checkSession(sid);
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
+			Server s = server.get();
+			return new ServerDTO(serverDao.update(s, userId));
 		} else {
 			log.warn("Insuffisient permissions");
-			return -1;
+			throw new ServiceException("Insufficient permissins"); //TODO code -26
 		}
 	}
 
 	/**
 	 * Method to delete server
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            - session id to identify the user making request
 	 * @param id
 	 *            - the id of the server to delete
 	 * @return true if the server was deleted, false otherwise
 	 */
-	public boolean deleteServer(String SID, long id) throws ServiceException {
+	@WebMethod
+	@DELETE
+	@Path("/{id}")
+	public ServiceResult delete(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="id") @PathParam("id") long id) throws ServiceException {
 		log.debug("saveServerCount enter");
-		Long users_id = sessiondataDao.checkSession(SID);
+		Long userId = sessionDao.checkSession(sid);
 
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-			Server s = serversDao.get(id);
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
+			Server s = serverDao.get(id);
 			if (s != null) {
-				serversDao.delete(s, users_id);
-				return true;
+				serverDao.delete(s, userId);
+				return new ServiceResult(id, "Deleted", Type.SUCCESS);
 			}
+			return new ServiceResult(0L, "Not found", Type.SUCCESS);
 		} else {
 			log.warn("Insuffisient permissions");
+			throw new ServiceException("Insufficient permissins"); //TODO code -26
 		}
-		return false;
 	}
-
 }

Modified: openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java?rev=1712911&r1=1712910&r2=1712911&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/UserWebService.java Fri Nov  6 06:18:44 2015
@@ -20,31 +20,39 @@ package org.apache.openmeetings.webservi
 
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
-import java.util.ArrayList;
 import java.util.Date;
 
-import org.apache.openmeetings.core.remote.MainService;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.cxf.feature.Features;
+import org.apache.openmeetings.core.remote.ConferenceService;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.dao.basic.ErrorDao;
-import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
-import org.apache.openmeetings.db.dao.user.OrganisationDao;
-import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.dto.basic.ErrorResult;
-import org.apache.openmeetings.db.dto.basic.SearchResult;
-import org.apache.openmeetings.db.dto.user.UserSearchResult;
-import org.apache.openmeetings.db.entity.basic.ErrorType;
-import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.apache.openmeetings.db.dto.basic.ServiceResult;
+import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
+import org.apache.openmeetings.db.dto.room.RoomOptionsDTO;
+import org.apache.openmeetings.db.dto.user.ExternalUserDTO;
+import org.apache.openmeetings.db.dto.user.UserDTO;
 import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
-import org.apache.openmeetings.db.entity.user.Organisation;
-import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.State;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
-import org.apache.openmeetings.service.user.UserManager;
 import org.apache.openmeetings.util.OmException;
 import org.apache.openmeetings.webservice.error.ServiceException;
 import org.red5.logging.Red5LoggerFactory;
@@ -60,363 +68,131 @@ import org.springframework.beans.factory
  * @webservice UserService
  * 
  */
+@WebService(serviceName="org.apache.openmeetings.webservice.UserWebService")
+@Features(features = "org.apache.cxf.feature.LoggingFeature")
+@Produces({MediaType.APPLICATION_JSON})
+@Path("/user")
 public class UserWebService {
 	private static final Logger log = Red5LoggerFactory.getLogger(UserWebService.class, webAppRootKey);
-
-	@Autowired
-	private SessiondataDao sessiondataDao;
-	@Autowired
-	private ConfigurationDao configurationDao;
-	@Autowired
-	private UserManager userManagement;
 	@Autowired
-	private ErrorDao errorDao;
+	private ConfigurationDao cfgDao;
 	@Autowired
-	private OrganisationDao orgDao;
-	@Autowired
-	private OrganisationUserDao orgUserDao;
+	private IUserManager userManagement;
 	@Autowired
 	private SOAPLoginDao soapLoginDao;
 	@Autowired
 	private UserDao userDao;
 	@Autowired
-	private MainService mainService;
+	private SessiondataDao sessionDao;
 	@Autowired
-	private LabelDao labelDao;
-
-	/**
-	 * load this session id before doing anything else Returns an Object of Type
-	 * Sessiondata, this contains a sessionId, use that sessionId in all Methods
-	 * 
-	 * @return - creates new session
-	 */
-	public Sessiondata getSession() {
-		log.debug("SPRING LOADED getSession -- ");
-		return mainService.getsessiondata();
-	}
+	private ConferenceService conferenceService;
 
 	/**
-	 * Auth function, use the SID you get by getSession, return positive means
-	 * logged-in, if negative its an ErrorCode, you have to invoke the Method
-	 * getErrorByCode to get the Text-Description of that ErrorCode
-	 * 
-	 * @param SID - The SID from getSession
-	 * @param username - Username from OpenMeetings, the user has to have Admin-rights
-	 * @param userpass - Userpass from OpenMeetings
+	 * @param user - login or email of Openmeetings user with admin or SOAP-rights
+	 * @param pass - password
 	 *            
-	 * @return - id of the logged in user, -1 in case of the error
+	 * @return - {@link ServiceResult} with error code or SID and userId
 	 */
-	public Long loginUser(String SID, String username, String userpass) throws ServiceException {
+	@WebMethod
+	@GET
+	@Path("/login")
+	public ServiceResult login(@WebParam(name="user") @QueryParam("user") String user, @WebParam(name="pass") @QueryParam("pass") String pass) {
 		try {
-			log.debug("Login user SID : " + SID);
-			User u = userDao.login(username, userpass);
+			log.debug("Login user");
+			User u = userDao.login(user, pass);
 			if (u == null) {
-				return -1L;
+				return new ServiceResult(-1L, "Login failed", Type.ERROR);
 			}
 			
-			boolean bool = sessiondataDao.updateUser(SID, u.getUser_id(), false, u.getLanguage_id());
-			if (!bool) {
-				// invalid Session-Object
-				return -35L;
+			Sessiondata sd = sessionDao.startsession();
+			log.debug("Login user SID : " + sd.getSessionId());
+			if (!sessionDao.updateUser(sd.getSessionId(), u.getId(), false, u.getLanguageId())) {
+				return new ServiceResult(-35L, "invalid Session-Object", Type.ERROR);
 			}
 			
-			return u.getUser_id();
+			return new ServiceResult(u.getId(), sd.getSessionId(), Type.SUCCESS);
 		} catch (OmException oe) {
-			if (oe.getCode() != null) {
-				return oe.getCode();
-			}
-		} catch (Exception err) {
-			log.error("[loginUser]", err);
-		}
-		return -1L;
-	}
-
-	/**
-	 * loads an Error-Object. If a Method returns a negative Result, its an
-	 * Error-id, it needs a language_id to specify in which language you want to
-	 * display/read the error-message. English has the Language-ID one, for
-	 * different one see the list of languages
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param errorid
-	 *            the error id (negative Value here!)
-	 * @param langId
-	 *            The id of the language
-	 *            
-	 * @return - error with the code given
-	 */
-	public ErrorResult getErrorByCode(String SID, long errorid, long langId) {
-		try {
-			if (errorid < 0) {
-				ErrorValue eValues = errorDao.get(-1 * errorid);
-				if (eValues != null) {
-					ErrorType eType = errorDao.getErrorType(eValues.getErrortype_id());
-					log.debug("eValues.getFieldvalues_id() = " + eValues.getFieldvalues_id());
-					log.debug("eValues.getErrorType() = " + eType);
-					String eValue = labelDao.getString(eValues.getFieldvalues_id(), langId);
-					String tValue = labelDao.getString(eType.getFieldvalues_id(), langId);
-					if (eValue != null) {
-						return new ErrorResult(errorid, eValue, tValue);
-					}
-				}
-			} else {
-				return new ErrorResult(errorid, "Error ... please check your input", "Error");
-			}
+			return new ServiceResult(oe.getCode() == null ? -1 : oe.getCode(), oe.getMessage(), Type.ERROR);
 		} catch (Exception err) {
-			log.error("[getErrorByCode] ", err);
+			log.error("[login]", err);
+			return new ServiceResult(-1L, err.getMessage(), Type.ERROR);
 		}
-		return null;
 	}
 
 	/**
 	 * Adds a new User like through the Frontend, but also does activates the
 	 * Account To do SSO see the methods to create a hash and use those ones!
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param userpass
-	 *            any userpass
-	 * @param lastname
-	 *            any lastname
-	 * @param firstname
-	 *            any firstname
-	 * @param email
-	 *            any email
-	 * @param additionalname
-	 *            any additionalname
-	 * @param street
-	 *            any street
-	 * @param zip
-	 *            any zip
-	 * @param fax
-	 *            any fax
-	 * @param states_id
-	 *            a valid states_id
-	 * @param town
-	 *            any town
-	 * @param language_id
-	 *            the language_id
+	 * @param user
+	 *            user object
+	 * @param confirm
+	 *            whatever or not to send email, leave empty for auto-send
 	 *            
 	 * @return - id of the user added or error code
 	 * @throws ServiceException
 	 */
-	public Long addNewUser(String SID, String username, String userpass,
-			String lastname, String firstname, String email,
-			String additionalname, String street, String zip, String fax,
-			long states_id, String town, long language_id)
-			throws ServiceException {
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-
-				String jName_timeZone = configurationDao.getConfValue("default.timezone", String.class, "");
-
-				Long user_id = userManagement.registerUser(username, userpass,
-						lastname, firstname, email, new Date(), street,
-						additionalname, fax, zip, states_id, town, language_id,
-						"", false, true, // generate SIP Data if the config is enabled
-						jName_timeZone);
-
-				if (user_id == null || user_id < 0) {
-					return user_id;
-				}
-
-				User user = userDao.get(user_id);
-
-				// activate the User
-				user.getRights().add(Right.Dashboard);
-				user.getRights().add(Right.Login);
-				user.getRights().add(Right.Room);
-				user.setUpdatetime(new Date());
-
-				userDao.update(user, users_id);
-
-				return user_id;
-
-			} else {
-				return new Long(-26);
-			}
-		} catch (Exception err) {
-			log.error("addNewUser", err);
-			throw new ServiceException(err.getMessage());
-		}
-	}
-
-	/**
-	 * Adds a new User like through the Frontend, but also does activates the
-	 * Account
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param userpass
-	 *            any userpass
-	 * @param lastname
-	 *            any lastname
-	 * @param firstname
-	 *            any firstname
-	 * @param email
-	 *            any email
-	 * @param additionalname
-	 *            any additionalname
-	 * @param street
-	 *            any street
-	 * @param zip
-	 *            any zip
-	 * @param fax
-	 *            any fax
-	 * @param states_id
-	 *            a valid states_id
-	 * @param town
-	 *            any town
-	 * @param language_id
-	 *            the language_id
-	 * @param jNameTimeZone
-	 *            the name of the timezone for the user
-	 *            
-	 * @return - id of the user added or the error code
-	 * @throws ServiceException
-	 */
-	public Long addNewUserWithTimeZone(String SID, String username,
-			String userpass, String lastname, String firstname, String email,
-			String additionalname, String street, String zip, String fax,
-			long states_id, String town, long language_id, String jNameTimeZone) throws ServiceException {
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-
-				Long user_id = userManagement.registerUser(username, userpass,
-						lastname, firstname, email, new Date(), street,
-						additionalname, fax, zip, states_id, town, language_id,
-						"", false, true, // generate
-											// SIP
-											// Data
-											// if
-											// the
-											// config
-											// is
-											// enabled
-						jNameTimeZone); 
-
-				if (user_id == null || user_id < 0) {
-					return user_id;
-				}
-
-				User user = userDao.get(user_id);
-
-				// activate the User
-				user.getRights().add(Right.Login);
-				user.setUpdatetime(new Date());
-
-				userDao.update(user, users_id);
-
-				return user_id;
-
-			} else {
-				return new Long(-26);
-			}
-		} catch (Exception err) {
-			log.error("addNewUserWithTimeZone", err);
-			throw new ServiceException(err.getMessage());
-		}
-	}
-
-	/**
-	 * Adds a new User like through the Frontend, but also does activates the
-	 * Account, sends NO email (no matter what you configured) and sets the
-	 * users external user id and type
-	 * 
-	 * Use the methods to create a hash for SSO, creating users is not required
-	 * for SSO
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param userpass
-	 *            any userpass
-	 * @param lastname
-	 *            any lastname
-	 * @param firstname
-	 *            any firstname
-	 * @param email
-	 *            any email
-	 * @param additionalname
-	 *            any additionalname
-	 * @param street
-	 *            any street
-	 * @param zip
-	 *            any zip
-	 * @param fax
-	 *            any fax
-	 * @param states_id
-	 *            a valid states_id
-	 * @param town
-	 *            any town
-	 * @param language_id
-	 *            the language_id
-	 * @param jNameTimeZone
-	 *            the name of the timezone for the user
-	 * @param externalUserId
-	 *            externalUserId
-	 * @param externalUserType
-	 *            externalUserType
-	 *            
-	 * @return - id of user added or error code
-	 * @throws ServiceException
-	 */
-	public Long addNewUserWithExternalType(String SID, String username,
-			String userpass, String lastname, String firstname, String email,
-			String additionalname, String street, String zip, String fax,
-			long states_id, String town, long language_id,
-			String jNameTimeZone, String externalUserId, String externalUserType)
-			throws ServiceException {
+	@WebMethod
+	@POST
+	@Path("/")
+	public UserDTO add(
+			@WebParam(name="sid") @QueryParam("sid") String sid
+			, @WebParam(name="user") @QueryParam("user") UserDTO user
+			, @WebParam(name="confirm") @QueryParam("confirm") Boolean confirm
+			) throws ServiceException
+	{
 		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-
-			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			Long authUserId = sessionDao.checkSession(sid);
 
-				User testUser = userDao.getExternalUser(externalUserId, externalUserType);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(authUserId))) {
+				User testUser = userDao.getExternalUser(user.getExternalId(), user.getExternalType());
 
 				if (testUser != null) {
-					throw new Exception("User does already exist!");
+					throw new ServiceException("User does already exist!");
 				}
 
-				// This will send no email to the users
-				Long user_id = userManagement.registerUserNoEmail(username,
-						userpass, lastname, firstname, email, new Date(),
-						street, additionalname, fax, zip, states_id, town,
-						language_id, "", false, true, // generate SIP Data if the config is enabled
-						jNameTimeZone);
+				String jName_timeZone = cfgDao.getConfValue("default.timezone", String.class, "");
+				if (user.getAddress() == null) {
+					user.setAddress(new Address());
+					State s = new State();
+					s.setId(1L);
+					user.getAddress().setState(s);
+				}
+				if (user.getLanguageId() == null) {
+					user.setLanguageId(1L);
+				}
+				Long userId = userManagement.registerUser(user.getLogin(), user.getPassword(),
+						user.getLastname(), user.getFirstname(), user.getAddress().getEmail(), new Date(), user.getAddress().getStreet(),
+						user.getAddress().getAdditionalname(), user.getAddress().getFax(), user.getAddress().getZip(), user.getAddress().getState().getId()
+						, user.getAddress().getTown(), user.getLanguageId(),
+						"", false, true, // generate SIP Data if the config is enabled
+						jName_timeZone, confirm);
 
-				if (user_id == null || user_id < 0) {
-					return user_id;
+				if (userId == null || userId < 0) {
+					throw new ServiceException("Unknown error");
 				}
 
-				User user = userDao.get(user_id);
-
-				// activate the User
-				user.getRights().add(Right.Login);
-				user.setUpdatetime(new Date());
-				user.setExternalUserId(externalUserId);
-				user.setExternalUserType(externalUserType);
+				User u = userDao.get(userId);
 
-				userDao.update(user, users_id);
+				u.getRights().add(Right.Room);
+				if (user.getExternalId() == null && user.getExternalType() == null) {
+					// activate the User
+					u.getRights().add(Right.Login);
+					u.getRights().add(Right.Dashboard);
+				} else {
+					u.setExternalId(user.getExternalId());
+					u.setExternalType(user.getExternalType());
+				}
 
-				return user_id;
+				u = userDao.update(u, authUserId);
 
+				return new UserDTO(u);
 			} else {
-				return new Long(-26);
+				throw new ServiceException("Insufficient permissins"); //TODO code -26
 			}
-
 		} catch (Exception err) {
-			log.error("addNewUserWithExternalType", err);
+			log.error("addNewUser", err);
 			throw new ServiceException(err.getMessage());
 		}
 	}
@@ -425,29 +201,28 @@ public class UserWebService {
 	 * 
 	 * Delete a certain user by its id
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            The SID from getSession
-	 * @param userId
+	 * @param id
 	 *            the openmeetings user id
 	 *            
 	 * @return - id of the user deleted, error code otherwise
 	 * @throws ServiceException
 	 */
-	public Long deleteUserById(String SID, Long userId) throws ServiceException {
+	@WebMethod
+	@DELETE
+	@Path("/{id}")
+	public ServiceResult delete(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="id") @PathParam("id") long id) throws ServiceException {
 		try {
-			Long users_id = sessiondataDao.checkSession(SID);
+			Long authUserId = sessionDao.checkSession(sid);
 
-			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
-
-				// Setting user deleted
-				userDao.deleteUserID(userId);
-
-				return userId;
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(authUserId))) {
+				userDao.deleteUserID(id);
 
+				return new ServiceResult(id, "Deleted", Type.SUCCESS);
 			} else {
-				return new Long(-26);
+				return new ServiceResult(-26L, "Insufficient permissins", Type.ERROR);
 			}
-
 		} catch (Exception err) {
 			log.error("deleteUserById", err);
 			throw new ServiceException(err.getMessage());
@@ -458,36 +233,39 @@ public class UserWebService {
 	 * 
 	 * Delete a certain user by its external user id
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            The SID from getSession
-	 * @param externalUserId
+	 * @param externalId
 	 *            externalUserId
-	 * @param externalUserType
+	 * @param externalType
 	 *            externalUserId
 	 *            
 	 * @return - id of user deleted, or error code
 	 * @throws ServiceException
 	 */
-	public Long deleteUserByExternalUserIdAndType(String SID,
-			String externalUserId, String externalUserType) throws ServiceException {
+	@DELETE
+	@Path("/{externaltype}/{externalid}")
+	public ServiceResult deleteExternal(
+			@WebParam(name="sid") @QueryParam("sid") String sid
+			, @WebParam(name="externaltype") @PathParam("externaltype") String externalType
+			, @WebParam(name="externalid") @PathParam("externalid") String externalId
+			) throws ServiceException
+	{
 		try {
-			Long users_id = sessiondataDao.checkSession(SID);
+			Long authUserId = sessionDao.checkSession(sid);
 
-			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(authUserId))) {
+				User userExternal = userDao.getExternalUser(externalId, externalType);
 
-				User userExternal = userDao.getExternalUser(externalUserId, externalUserType);
-
-				Long userId = userExternal.getUser_id();
+				Long userId = userExternal.getId();
 
 				// Setting user deleted
 				userDao.deleteUserID(userId);
 
-				return userId;
-
+				return new ServiceResult(userId, "Deleted", Type.SUCCESS);
 			} else {
-				return new Long(-26);
+				return new ServiceResult(-26L, "Insufficient permissins", Type.ERROR);
 			}
-
 		} catch (Exception err) {
 			log.error("deleteUserByExternalUserIdAndType", err);
 			throw new ServiceException(err.getMessage());
@@ -499,45 +277,32 @@ public class UserWebService {
 	 * Session-Object you can use the SID + a RoomId to enter any Room. ...
 	 * Session-Hashs are deleted 15 minutes after the creation if not used.
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param firstname
-	 *            any firstname
-	 * @param lastname
-	 *            any lastname
-	 * @param profilePictureUrl
-	 *            any profilePictureUrl
-	 * @param email
-	 *            any email
-	 * @param externalUserId
-	 *            if you have any external user Id you may set it here
-	 * @param externalUserType
-	 *            you can specify your system-name here, for example "moodle"
-	 * @param room_id
-	 *            the room id the user should be logged in
-	 * @param becomeModeratorAsInt
-	 *            0 means no Moderator, 1 means Moderator
-	 * @param showAudioVideoTestAsInt
-	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
-	 *            Test Application before the user is logged into the room
+	 * @param user
+	 *            user details to set
+	 * @param options
+	 *            room options to set
 	 *            
 	 * @return - secure hash or error code
 	 * @throws ServiceException
 	 */
-	public String setUserObjectAndGenerateRoomHash(String SID, String username,
-			String firstname, String lastname, String profilePictureUrl,
-			String email, String externalUserId, String externalUserType,
-			Long room_id, int becomeModeratorAsInt, int showAudioVideoTestAsInt)
-			throws ServiceException {
+	@WebMethod
+	@POST
+	@Path("/hash")
+	public ServiceResult getRoomHash(
+			@WebParam(name="sid") @QueryParam("sid") String sid
+			, @WebParam(name="user") @QueryParam("user") ExternalUserDTO user
+			, @WebParam(name="options") @QueryParam("options") RoomOptionsDTO options
+			) throws ServiceException
+	{
 		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-
+			Long userId = sessionDao.checkSession(sid);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
 				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
-						username, firstname, lastname, profilePictureUrl,
-						email, externalUserId, externalUserType);
+						user.getLogin(), user.getFirstname(), user.getLastname()
+						, user.getProfilePictureUrl(), user.getEmail()
+						, user.getExternalId(), user.getExternalType());
 
 				log.debug(remoteSessionObject.toString());
 
@@ -545,580 +310,76 @@ public class UserWebService {
 
 				log.debug("xmlString " + xmlString);
 
-				sessiondataDao.updateUserRemoteSession(SID, xmlString);
-
-				boolean becomeModerator = false;
-				if (becomeModeratorAsInt != 0) {
-					becomeModerator = true;
-				}
-
-				boolean showAudioVideoTest = false;
-				if (showAudioVideoTestAsInt != 0) {
-					showAudioVideoTest = true;
-				}
+				sessionDao.updateUserRemoteSession(sid, xmlString);
 
-				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
-						becomeModerator, showAudioVideoTest, false, // allowSameURLMultipleTimes
-						null, // recording_id
-						false, // showNickNameDialogAsInt
+				//TODO LandingZone are not configurable for now
+				String hash = soapLoginDao.addSOAPLogin(sid, options.getRoomId(),
+						options.isModerator(), options.isShowAudioVideoTest(), options.isAllowSameURLMultipleTimes(),
+						options.getRecordingId(),
+						options.isShowNickNameDialog(),
 						"room", // LandingZone,
-						true // allowRecording
+						options.isAllowRecording()
 						);
 
 				if (hash != null) {
-					return hash;
+					return new ServiceResult(0, hash, Type.SUCCESS);
 				}
-
 			} else {
-				return "" + new Long(-26);
+				return new ServiceResult(-26L, "Insufficient permissins", Type.ERROR);
 			}
 		} catch (Exception err) {
 			log.error("setUserObjectWithAndGenerateRoomHash", err);
 			throw new ServiceException(err.getMessage());
 		}
-		return "" + new Long(-1);
-	}
-
-	/**
-	 * 
-	 * Description: sets the SessionObject for a certain SID, after setting this
-	 * Session-Object you can use the SID + a RoomId to enter any Room.
-	 * 
-	 * ++ the user can press f5 to reload the page / use the link several times,
-	 * the SOAP Gateway does remember the IP of the user and the will only the
-	 * first user that enters the room allow to re-enter. ... Session-Hashs are
-	 * deleted 15 minutes after the creation if not used.
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param firstname
-	 *            any firstname
-	 * @param lastname
-	 *            any lastname
-	 * @param profilePictureUrl
-	 *            any profilePictureUrl
-	 * @param email
-	 *            any email any email
-	 * @param externalUserId
-	 *            if you have any external user Id you may set it here
-	 * @param externalUserType
-	 *            you can specify your system-name here, for example "moodle"
-	 * @param room_id
-	 *            the room id the user should be logged in
-	 * @param becomeModeratorAsInt
-	 *            0 means no Moderator, 1 means Moderator
-	 * @param showAudioVideoTestAsInt
-	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
-	 *            Test Application before the user is logged into the room
-	 *            
-	 * @return - secure hash or error code
-	 */
-	public String setUserObjectAndGenerateRoomHashByURL(String SID,
-			String username, String firstname, String lastname,
-			String profilePictureUrl, String email, String externalUserId,
-			String externalUserType, Long room_id, int becomeModeratorAsInt,
-			int showAudioVideoTestAsInt) throws ServiceException {
-
-		log.debug("UserService.setUserObjectAndGenerateRoomHashByURL");
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-
-				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
-						username, firstname, lastname, profilePictureUrl,
-						email, externalUserId, externalUserType);
-
-				log.debug(remoteSessionObject.toString());
-
-				String xmlString = remoteSessionObject.toXml();
-
-				log.debug("xmlString " + xmlString);
-
-				sessiondataDao.updateUserRemoteSession(SID, xmlString);
-
-				boolean becomeModerator = false;
-				if (becomeModeratorAsInt != 0) {
-					becomeModerator = true;
-				}
-
-				boolean showAudioVideoTest = false;
-				if (showAudioVideoTestAsInt != 0) {
-					showAudioVideoTest = true;
-				}
-
-				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
-						becomeModerator, showAudioVideoTest, true, // allowSameURLMultipleTimes
-						null, // recording_id
-						false, // showNickNameDialogAsInt
-						"room", // LandingZone,
-						true // allowRecording
-						);
-
-				if (hash != null) {
-					return hash;
-				}
-
-			} else {
-				return "" + new Long(-26);
-			}
-		} catch (Exception err) {
-			log.error("setUserObjectAndGenerateRoomHashByURL", err);
-			throw new ServiceException(err.getMessage());
-		}
-		return "" + new Long(-1);
-	}
-
-	/**
-	 * 
-	 * Description: sets the SessionObject for a certain SID, after setting this
-	 * Session-Object you can use the SID + a RoomId to enter any Room.
-	 * 
-	 * ++ the user can press f5 to reload the page / use the link several times,
-	 * the SOAP Gateway does remember the IP of the user and the will only the
-	 * first user that enters the room allow to re-enter. ... Session-Hashs are
-	 * deleted 15 minutes after the creation if not used.
-	 * 
-	 * ++ sets the flag if the user can do recording in the conference room
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param firstname
-	 *            any firstname
-	 * @param lastname
-	 *            any lastname
-	 * @param profilePictureUrl
-	 *            any profilePictureUrl
-	 * @param email
-	 *            any email
-	 * @param externalUserId
-	 *            if you have any external user Id you may set it here
-	 * @param externalUserType
-	 *            you can specify your system-name here, for example "moodle"
-	 * @param room_id
-	 *            the room id the user should be logged in
-	 * @param becomeModeratorAsInt
-	 *            0 means no Moderator, 1 means Moderator
-	 * @param showAudioVideoTestAsInt
-	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
-	 *            Test Application before the user is logged into the room
-	 * @param allowRecording
-	 *            0 means don't allow Recording, 1 means allow Recording
-	 *            
-	 * @return - secure hash or error code
-	 */
-	public String setUserObjectAndGenerateRoomHashByURLAndRecFlag(String SID,
-			String username, String firstname, String lastname,
-			String profilePictureUrl, String email, String externalUserId,
-			String externalUserType, Long room_id, int becomeModeratorAsInt,
-			int showAudioVideoTestAsInt, int allowRecording) {
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-
-				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
-						username, firstname, lastname, profilePictureUrl,
-						email, externalUserId, externalUserType);
-
-				log.debug(remoteSessionObject.toString());
-
-				String xmlString = remoteSessionObject.toXml();
-
-				log.debug("xmlString " + xmlString);
-
-				sessiondataDao.updateUserRemoteSession(SID, xmlString);
-
-				boolean becomeModerator = false;
-				if (becomeModeratorAsInt != 0) {
-					becomeModerator = true;
-				}
-
-				boolean showAudioVideoTest = false;
-				if (showAudioVideoTestAsInt != 0) {
-					showAudioVideoTest = true;
-				}
-
-				boolean allowRecordingBool = false;
-				if (allowRecording != 0) {
-					allowRecordingBool = true;
-				}
-
-				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
-						becomeModerator, showAudioVideoTest, true, // allowSameURLMultipleTimes
-						null, // recording_id
-						false, // showNickNameDialogAsInt
-						"room", // LandingZone,
-						allowRecordingBool // allowRecording
-						);
-
-				if (hash != null) {
-					return hash;
-				}
-
-			} else {
-				return "" + new Long(-26);
-			}
-		} catch (Exception err) {
-			log.error("setUserObjectWithAndGenerateRoomHash", err);
-		}
-		return "" + new Long(-1);
-	}
-
-	/**
-	 * 
-	 * Description: sets the SessionObject for a certain SID, after setting this
-	 * Session-Object you can use the SID and directly login into the dashboard
-	 * 
-	 * ++ the user can press f5 to reload the page / use the link several times,
-	 * the SOAP Gateway does remember the IP of the user and the will only the
-	 * first user that enters the room allow to re-enter. ... Session-Hashs are
-	 * deleted 15 minutes after the creation if not used.
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param firstname
-	 *            any firstname
-	 * @param lastname
-	 *            any lastname
-	 * @param profilePictureUrl
-	 *            any absolute profilePictureUrl
-	 * @param email
-	 *            any email
-	 * @param externalUserId
-	 *            if you have any external user Id you may set it here
-	 * @param externalUserType
-	 *            you can specify your system-name here, for example "moodle"
-	 *            
-	 * @return - secure hash or error code
-	 */
-	public String setUserObjectMainLandingZone(String SID, String username,
-			String firstname, String lastname, String profilePictureUrl,
-			String email, String externalUserId, String externalUserType) {
-		log.debug("UserService.setUserObjectMainLandingZone");
-
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-
-				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
-						username, firstname, lastname, profilePictureUrl,
-						email, externalUserId, externalUserType);
-
-				log.debug(remoteSessionObject.toString());
-
-				String xmlString = remoteSessionObject.toXml();
-
-				log.debug("xmlString " + xmlString);
-
-				sessiondataDao.updateUserRemoteSession(SID, xmlString);
-
-				String hash = soapLoginDao.addSOAPLogin(SID, null, false, true,
-						true, // allowSameURLMultipleTimes
-						null, // recording_id
-						false, // showNickNameDialogAsInt
-						"dashboard", // LandingZone,
-						true // allowRecording
-						);
-
-				if (hash != null) {
-					return hash;
-				}
-
-			} else {
-				return "" + -26L;
-			}
-		} catch (Exception err) {
-			log.error("setUserObjectWithAndGenerateRoomHash", err);
-		}
-		return "" + -1L;
-	}
-
-	/**
-	 * 
-	 * Description: sets the SessionObject for a certain SID, after setting this
-	 * Session-Object you can use the SID + a RoomId to enter any Room.
-	 * 
-	 * ++ the user can press f5 to reload the page / use the link several times,
-	 * the SOAP Gateway does remember the IP of the user and the will only the
-	 * first user that enters the room allow to re-enter. ... Session-Hashs are
-	 * deleted 15 minutes after the creation if not used.
-	 * 
-	 * ++ Additionally you can set a param showNickNameDialogAsInt, the effect
-	 * if that param is 1 is, that the user gets a popup where he can enter his
-	 * nickname right before he enters the conference room. All nicknames and
-	 * emails users enter are logged in the conferencelog table.
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param firstname
-	 *            any firstname
-	 * @param lastname
-	 *            any lastname
-	 * @param profilePictureUrl
-	 *            any profilePictureUrl
-	 * @param email
-	 *            any email
-	 * @param externalUserId
-	 *            if you have any external user Id you may set it here
-	 * @param externalUserType
-	 *            you can specify your system-name here, for example "moodle"
-	 * @param room_id
-	 *            the room id the user should be logged in
-	 * @param becomeModeratorAsInt
-	 *            0 means no Moderator, 1 means Moderator
-	 * @param showAudioVideoTestAsInt
-	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
-	 *            Test Application before the user is logged into the room
-	 * @param showNickNameDialogAsInt
-	 *            0 means do not show the popup to enter a nichname, 1 means
-	 *            that there is a popup to enter the nickname for the conference
-	 *            
-	 * @return - secure hash, or error code 
-	 */
-	public String setUserAndNickName(String SID, String username,
-			String firstname, String lastname, String profilePictureUrl,
-			String email, String externalUserId, String externalUserType,
-			Long room_id, int becomeModeratorAsInt,
-			int showAudioVideoTestAsInt, int showNickNameDialogAsInt) {
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-
-				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
-						username, firstname, lastname, profilePictureUrl,
-						email, externalUserId, externalUserType);
-
-				log.debug(remoteSessionObject.toString());
-				log.debug("showNickNameDialogAsInt" + showNickNameDialogAsInt);
-
-				String xmlString = remoteSessionObject.toXml();
-
-				log.debug("xmlString " + xmlString);
-
-				sessiondataDao.updateUserRemoteSession(SID, xmlString);
-
-				boolean becomeModerator = false;
-				if (becomeModeratorAsInt != 0) {
-					becomeModerator = true;
-				}
-
-				boolean showAudioVideoTest = false;
-				if (showAudioVideoTestAsInt != 0) {
-					showAudioVideoTest = true;
-				}
-
-				boolean showNickNameDialog = false;
-				if (showNickNameDialogAsInt != 0) {
-					showNickNameDialog = true;
-				}
-
-				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
-						becomeModerator, showAudioVideoTest, true, null,
-						showNickNameDialog, "room", // LandingZone,
-						true // allowRecording
-						);
-
-				if (hash != null) {
-					return hash;
-				}
-
-			} else {
-				return "" + new Long(-26);
-			}
-		} catch (Exception err) {
-			log.error("setUserObjectWithAndGenerateRoomHash", err);
-		}
-		return "" + new Long(-1);
-	}
-
-	/**
-	 * Use this method to access a Recording instead of Room
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param username
-	 *            any username
-	 * @param firstname
-	 *            any firstname
-	 * @param lastname
-	 *            any lastname
-	 * @param externalUserId
-	 *            if you have any external user Id you may set it here
-	 * @param externalUserType
-	 *            you can specify your system-name here, for example "moodle"
-	 * @param recording_id
-	 *            the id of the recording, get a List of all Recordings with
-	 *            RoomService::getFlvRecordingByExternalRoomType
-	 *            
-	 * @return - hash of the recording, or error id
-	 */
-	public String setUserObjectAndGenerateRecordingHashByURL(String SID,
-			String username, String firstname, String lastname,
-			String externalUserId, String externalUserType, Long recording_id) {
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-
-				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
-						username, firstname, "", "", "", externalUserId,
-						externalUserType);
-
-				log.debug(remoteSessionObject.toString());
-
-				String xmlString = remoteSessionObject.toXml();
-
-				log.debug("xmlString " + xmlString);
-
-				sessiondataDao.updateUserRemoteSession(SID, xmlString);
-
-				String hash = soapLoginDao.addSOAPLogin(SID, null, false,
-						false, true, // allowSameURLMultipleTimes
-						recording_id, // recording_id
-						false, // showNickNameDialogAsInt
-						"room", // LandingZone,
-						true // allowRecording
-						);
-
-				if (hash != null) {
-					return hash;
-				}
-
-			} else {
-				return "" + new Long(-26);
-			}
-		} catch (Exception err) {
-			log.error("setUserObjectWithAndGenerateRoomHash", err);
-		}
-		return "" + new Long(-1);
-	}
-
-	/**
-	 * 
-	 * Add a user to a certain organization
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param user_id
-	 *            the user id
-	 * @param organisation_id
-	 *            the organization id
-	 * @param insertedby
-	 *            user id of the operating user
-	 * @return - id of the user added, or error id in case of the error
-	 */
-	public Long addUserToOrganisation(String SID, Long user_id,
-			Long organisation_id, Long insertedby) {
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-				if (!orgUserDao.isUserInOrganization(organisation_id, user_id)) {
-					User u = userDao.get(user_id);
-					u.getOrganisation_users().add(new Organisation_Users(orgDao.get(organisation_id)));
-					userDao.update(u, users_id);
-				}
-				return user_id;
-			} else {
-				return new Long(-26);
-			}
-		} catch (Exception err) {
-			log.error("addUserToOrganisation", err);
-		}
-		return new Long(-1);
-	}
-
-	/**
-	 * Search users and return them
-	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param organisation_id
-	 *            the organization id
-	 * @param start
-	 *            first record
-	 * @param max
-	 *            max records
-	 * @param orderby
-	 *            orderby clause
-	 * @param asc
-	 *            asc or desc
-	 * @return - users found
-	 */
-	public UserSearchResult getUsersByOrganisation(String SID,
-			long organisation_id, int start, int max, String orderby,
-			boolean asc) {
-		try {
-			Long users_id = sessiondataDao.checkSession(SID);
-			SearchResult<User> result = new SearchResult<User>();
-			result.setObjectName(User.class.getName());
-			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-				result.setRecords(orgUserDao.count(organisation_id));
-				result.setResult(new ArrayList<User>());
-				for (Organisation_Users ou : orgUserDao.get(organisation_id, null, start, max, orderby + " " + (asc ? "ASC" : "DESC"))) {
-					result.getResult().add(ou.getUser());
-				}
-			} else {
-				log.error("Need Administration Account");
-				result.setErrorId(-26L);
-			}
-			return new UserSearchResult(result);
-		} catch (Exception err) {
-			log.error("getUsersByOrganisation", err);
-		}
-		return null;
+		return new ServiceResult(-1L, "Unknown error", Type.ERROR);
 	}
 
 	/**
 	 * Kick a user by its public SID
 	 * 
-	 * @param SID
+	 * @param sid
 	 *            The SID from getSession
 	 * @param publicSID
 	 *            the publicSID (you can get it from the call to get users in a
 	 *            room)
 	 * @return - <code>true</code> if user was kicked
 	 */
-	public Boolean kickUserByPublicSID(String SID, String publicSID) {
-		try {
-			Boolean success = false;
-
-			success = userManagement.kickUserByPublicSID(SID, publicSID);
-
-			if (success == null)
-				success = false;
-
-			return success;
+	@WebMethod
+	@POST
+	@Path("/kick/{publicsid}")
+	public ServiceResult kick(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="publicsid") @PathParam("publicsid") String publicSID) throws ServiceException {
+		try {
+			Long userId = sessionDao.checkSession(sid);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
+				Boolean success = userManagement.kickUserByPublicSID(sid, publicSID);
+	
+				return new ServiceResult(Boolean.TRUE.equals(success) ? 1L : 0L, Boolean.TRUE.equals(success) ? "deleted" : "not deleted", Type.SUCCESS);
+			} else {
+				return new ServiceResult(-26L, "Insufficient permissins", Type.ERROR);
+			}
 		} catch (Exception err) {
-			log.error("[kickUser]", err);
+			log.error("[kick]", err);
+			throw new ServiceException(err.getMessage());
 		}
-		return null;
 	}
-	
+
 	/**
-	 * add a new organisation
+	 * Returns the count of users currently in the Room with given id
+	 * No admin rights are necessary for this call
 	 * 
-	 * @param SID
-	 *            The SID from getSession
-	 * @param name
-	 *            the name of the org
-	 * @return the new id of the org or -1 in case an error happened
-	 * @throws ServiceException
-	 */
-	public Long addOrganisation(String SID, String name) throws ServiceException {
-		Long users_id = sessiondataDao.checkSession(SID);
-		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
-			Organisation o = new Organisation();
-			o.setName(name);
-			return orgDao.update(o, users_id).getOrganisation_id();
+	 * @param sid The SID from UserService.getSession
+	 * @param roomId id of the room to get users
+	 * @return number of users as int
+	 */
+	@WebMethod
+	@GET
+	@Path("/count/{roomid}")
+	public int count(@WebParam(name="sid") @QueryParam("sid") String sid, @WebParam(name="roomid") @PathParam("roomid") Long roomId) {
+		Long userId = sessionDao.checkSession(sid);
+
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(userId))) {
+			return conferenceService.getRoomClientsListByRoomId(roomId).size();
 		}
-		log.error("Could not create organization");
-		return -1L;
+		return -1;
 	}
-
 }

Modified: openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/RestClient.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/RestClient.java?rev=1712911&r1=1712910&r2=1712911&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/RestClient.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/cluster/RestClient.java Fri Nov  6 06:18:44 2015
@@ -25,6 +25,7 @@ import java.net.URL;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Service;
 
+import org.apache.openmeetings.db.dto.basic.ServiceResult;
 import org.apache.openmeetings.db.entity.server.Server;
 import org.apache.openmeetings.webservice.UserWebService;
 import org.red5.logging.Red5LoggerFactory;
@@ -201,7 +202,7 @@ public class RestClient {
 			}
 
 			UserWebService client = getUserClient();
-			ServiceResult result = client.kickUserByPublicSID(sessionId, publicSID);
+			ServiceResult result = client.kick(sessionId, publicSID);
 
 			if (result.getCode() == 0) {
 				throw new Exception("Could not delete user from slave host");