/*
* DrakkarKeel - An Enterprise Collaborative Search Platform
*
* The contents of this file are subject under the terms described in the
* DRAKKARKEEL_LICENSE file included in this distribution; you may not use this
* file except in compliance with the License.
*
* 2013-2014 DrakkarKeel Platform.
*/
package drakkar.stern.servant.service;
import drakkar.oar.Seeker;
import drakkar.oar.exception.ChairmanNotExistException;
import drakkar.oar.exception.SeekerException;
import drakkar.oar.exception.SessionAlreadyRegisterException;
import drakkar.oar.exception.SessionException;
import drakkar.oar.exception.SessionPropertyException;
import drakkar.oar.exception.UserStatusNotSupportedException;
import drakkar.oar.slice.client.ClientSidePrx;
import drakkar.oar.slice.error.RequestException;
import java.io.IOException;
import java.util.List;
/**
* The <code>Sessionable</code> class is....
* Esta interfaz declara todas las operaciones soportadas por el framework DrakkarKeel
* para el trabajo con sesiones
*/
public interface Sessionable {
/**
* Crea una sesión de búsqueda colaborativa
*
* @param newSessionName nombre de la nueva sesión
* @param seeker usuario que invoca la operación
* @param membersMinNumber cantidad mínima de usuarios
* @param membersMaxNumber cantidad máxima de usuarios
* @param integrityCriteria criterio de integridad de la sesión
* @param membershipPolicy política de membresía de la sesión
* @param seekerList lista de usuario a integrar la sesión
* @param description descripción de la sesión
*
* @return true si se pudo crear la sesión, en caso contrario lanzará algunas
* de las excepciones siguientes.
*
* @throws SeekerException
* @throws ChairmanNotExistException si no existe un usuario con el role de Chairman
* @throws SessionAlreadyRegisterException si existe ya una sesión registrada
* con ese nombre
* @throws SessionPropertyException si especifica una propiedad de sesión
* no soprtada.
*/
public boolean createCollabSession(String newSessionName, Seeker seeker, int membersMinNumber, int membersMaxNumber, int integrityCriteria, int membershipPolicy, List<Seeker> seekerList, String description) throws SeekerException, ChairmanNotExistException, SessionAlreadyRegisterException, SessionPropertyException;
/**
* Adiciona un usuario a una sesión
*
* @param sessionName nombre de la sesión
* @param seeker usuario
* @param seekerPrx objeto proxy del usuario
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void loginSeeker(String sessionName, Seeker seeker, ClientSidePrx seekerPrx) throws SessionException, IOException;
/**
* Solicita la unión de un usuario a una sesión de búsqueda colaborativa
*
* @param sessionName nombre de la sesión
* @param seeker usuario que emite la solicitud
* @param seekerPrx obejeto proxy del usuario
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void joinCollabSession(String sessionName, Seeker seeker, ClientSidePrx seekerPrx) throws SessionException, IOException;
/**
* Solicita la entrada de un usuario a una sesión de búsqueda colaborativa
* a la cual ya pertenece
*
* @param sessionName nombre de la sesión
* @param seeker usuario que emite la solicitud
* @param seekerPrx obejeto proxy del usuario
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void enterCollabSession(String sessionName, Seeker seeker, ClientSidePrx seekerPrx) throws SessionException, IOException;
/**
* Actualiza el nuevo estado de un usuario a todos los usuarios de su sesión
*
* @param sessionName nombre de la sesión
* @param seeker usuario de la actualización
* @param status nuevo estado del usuario
*
* @throws SessionException si la sesión no se encuentra registrada
* en el servidor
* @throws UserStatusNotSupportedException si nuevo estado no es soportado
* @throws SeekerException
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void updateStateSeeker(String sessionName, Seeker seeker, int status) throws SessionException, UserStatusNotSupportedException, SeekerException, IOException;
/**
* Actualiza el nuevo avatar de un usuario a todos los usuarios de su sesión
*
* @param sessionName nombre de la sesión
* @param seeker usuario de la actualización
* @param avatar nueva imagen
*
* @throws SessionException si la sesión no se encuentra registrada
* en el servidor
* @throws SeekerException
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void updateAvatarSeeker(String sessionName, Seeker seeker, byte[] avatar) throws SessionException, SeekerException, IOException;
/**
* Elimina un usuario de una session.
*
* @param sessionName nombre de la sesión
* @param seeker usuario a eliminar.
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
* @throws SeekerException
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void logoutSeeker(String sessionName, Seeker seeker) throws SessionException, SeekerException, IOException;
/**
* Elimina un usuario(Seeker) de una session colaborativa
*
* @param sessionName nombre de la sesión
* @param seeker objeto seeker
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
* @throws SeekerException si el objeto seeker no se encuentra registrado
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void logoutCollabSession(String sessionName, Seeker seeker) throws SessionException, SeekerException, IOException;
/**
* Notifica la admisión de un usuario en una sesión de búsqueda colaborativa
*
* @param sessionName nombre de la sesión
* @param chairman usuario jefe de la sesión
* @param seeker usuario que solicitó la admisión
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
* @throws SeekerException
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void notifyConfirmCollabSession(String sessionName, Seeker chairman, Seeker seeker) throws SessionException, SeekerException, IOException;
/**
* Notifica la no admisión de un usuario en una sesión de búsqueda colaborativa
*
* @param sessionName nombre de la sesión
* @param chairman usuario jefe de la sesión
* @param seeker usuario que solicitó la admisión
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
* @throws SeekerException si el usuario a registrar no existe ó el chairman no es el respectivo
* chairman de dicha sesión
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void notifyDeclineCollabSession(String sessionName, Seeker chairman, Seeker seeker) throws SessionException, SeekerException, IOException;
/**
* Finaliza la sesión colaborativa de búsqueda
*
* @param sessionName nombre de la sesión
* @param chairman jefe de la sesión
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
* @throws IOException si ocurre alguna excepción durante el proceso de
* serialización del objeto Response
*/
public void finalizeCollabSession(String sessionName, Seeker chairman) throws SessionException, IOException;
/**
* Devuelve la lista de nombres de las sesiones existentes en el servidor
*
* @return nombres de las sesiones
*/
public String[] getSessionsNames();
/**
* Devuelve los usuarios registrados en la sesión especificada
*
* @param sessionName nombre de la sesión
*
* @return lista de usuarios
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
*/
public java.util.List<Seeker> getOnlineMembers(String sessionName) throws SessionException;
/**
* Gestiona si el nombre de usuario se encuentra disponible
*
* @param userName nombre de usuario
*
* @return true de estar disponible el usuario, false en caso contrario
*
* @throws RequestException si ocurre algún en el transcurso de la solicitud
*/
public boolean isAvailableUser(String userName) throws RequestException;
/**
* Solicita el registro de usuario en el servidor
*
* @param name nombre
* @param password contraseña
* @param description
* @param email
* @param nickname usuario
* @param avatar foto de usuario
*
*/
public void registerSeeker(String nickname, String name, String password, String description, String email, byte[] avatar);
/**
* Registra al usuario en la sesión de comunicación del servidor
*
* @param user usuario
* @param password contraseña
* @param clientPrx objeto proxy del cliente
*
* @return el objeto Seeker que representa al usuario, ó un objeto null de existir
* problemas con el usuario ó contraseña introducidos
*
* @throws RequestException si ocurre algún en el transcurso de la solicitud
*/
public Seeker login(String user, String password, ClientSidePrx clientPrx) throws RequestException;
/**
* Recupera la contraseña del usurio especificado
*
* @param user usuario
*
* @throws RequestException si ocurre algún en el transcurso de la solicitud
*/
public void recoverPassword(String user) throws RequestException;
/**
* Solicita el cambio de contraseña de un usuario
*
* @param user usuario
* @param oldPassword antigua contraseña
* @param newPassword nueva contraseña
*
* @return true si se pudo cambiar la contraseña, false en caso contrario
*
* @throws RequestException si ocurre algún en el transcurso de la solicitud
*/
public boolean changePassword(String user, String oldPassword, String newPassword) throws RequestException ;
/**
* Devuelve el total de sesiones registradas en el servidor
*
* @return total de sesiones
*/
public int getSessionsCount();
/**
* Devuelve el total de usuarios registrados en el servidor
*
* @return total de usuarios
*/
public int getSeekersCount();
/**
* Devuelve el total de usuarios registrados en la sesión especificada
*
* @param sessionName nombre de la sesión
*
* @return total de usuarios
*
* @throws SessionException si la sesión no se encuentra registrada en el servidor
*/
public int getSeekersCount(String sessionName) throws SessionException;
/**
*
* @param sessionName
* @param chairman
* @param chairmanProxy
* @throws SessionException
* @throws SeekerException
*/
public void deleteCollabSession(String sessionName, Seeker chairman,ClientSidePrx chairmanProxy)throws SessionException, SeekerException;
/**
*
* @param sessionName
* @param seeker
* @param seekerProxy
* @throws SessionException
* @throws SeekerException
*/
public void declineSeekerCollabSession(String sessionName, Seeker seeker, ClientSidePrx seekerProxy) throws SessionException, SeekerException;
}