/*
* 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;
import drakkar.oar.Response;
import drakkar.oar.Seeker;
import drakkar.oar.Session;
import static drakkar.oar.util.KeySession.*;
import static drakkar.oar.util.KeyTransaction.*;
import static drakkar.oar.util.NotifyAction.*;
import static drakkar.oar.util.SeekerAction.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ResponseSessionFactory {
/**
* Devuelve un objeto response para notificar a un seeker las operaciones
* siguientes:
*<br><br><table border = 1 summary="Shows property keys and associated values">
* <tr><th>Key</th><th>Description</th></tr>
* <tr>
* <td><code>DECLINE_COLLAB_SESSION</code></td>
* <td>No admisión en una sesión colaborativa de búsqueda</td>
* </tr>
* <tr>
* <td><code>DELETED_COLLAB_SESSION</code></td>
* <td>Eliminar una sesión colaborativa de búsqueda.</td>
* </tr>
* <tr>
* <td><code>SEEKER_LOGOUT_COLLAB_SESSION</code></td>
* <td>Salida de un seeker de una sesión colaborativa de búsqueda.</td>
* </tr>
* <tr>
* <td><code>DECLINE_SEEKER_COLLAB_SESSION</code></td>
* <td>Eliminar un seeker de una sesión colaborativa de búsqueda.</td>
* </tr>
* </table>
*
* @param sessionName nombre de la sesión colaborativa
* @param operation acción a notificar
*
* @return objeto response
*/
public static Response getResponse(int operation, String sessionName) {
Map<Object, Object> hash = new HashMap<>(4);
switch (operation) {
case DECLINE_COLLAB_SESSION:
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_ACCEPTANCE);
hash.put(DISTRIBUTED_EVENT, DECLINE_COLLAB_SESSION);
break;
case SEEKER_LOGOUT_COLLAB_SESSION:
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_AUTHENTICATION);
hash.put(DISTRIBUTED_EVENT, SEEKER_LOGOUT_COLLAB_SESSION);
hash.put(CAUSE, END_SESSION);
break;
case DELETED_COLLAB_SESSION:
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_EVENT);
hash.put(DISTRIBUTED_EVENT, DELETED_COLLAB_SESSION);
break;
case DECLINE_SEEKER_COLLAB_SESSION:
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_AUTHENTICATION);
hash.put(DISTRIBUTED_EVENT, DECLINE_SEEKER_COLLAB_SESSION);
break;
case SELF_LOGOUT_COLLAB_SESSION:
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_AUTHENTICATION);
hash.put(DISTRIBUTED_EVENT, SELF_LOGOUT_COLLAB_SESSION);
break;
}
hash.put(SESSION_NAME, sessionName);
return new Response(hash);
}
/**
* Devuelve un objeto response para notificar a un seeker la finalización
* de una sesión de búsqueda colaborativa, a partir de una de las siguientes
* causas:
*
*<br><br><table border = 1 summary="Shows property keys and associated values">
* <tr><th>Key</th><th>Description</th></tr>
* <tr>
* <td><code>HARD_INTEGRITY_CRITERIA</code></td>
* <td>No admisión en una sesión colaborativa de búsqueda</td>
* </tr>
* <tr>
* <td>Finalizar una sesión colaborativa de búsqueda.</td>
* </tr>
* <tr>
* <td><code>END_SESSION</code></td>
* <td>Eliminar una sesión colaborativa de búsqueda.</td>
* </tr>
*
* </table>
*
* @param sessionName nombre de la sesión colaborativa
* @param cause
* @param operation acción a notificar
*
* @return objeto response
*/
public static Response getResponse(String sessionName, int cause) {
Map<Object, Object> hash = new HashMap<>(4);
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_EVENT);
hash.put(DISTRIBUTED_EVENT, FINALIZED_COLLAB_SESSION);
hash.put(SESSION_NAME, sessionName);
hash.put(CAUSE, cause);
return new Response(hash);
}
/**
* Devuelve un objeto response para notificar la respuesta de solicitud de
* conexión efectuada por un seeker.
*
* @param sessionName nombre de la sesión colaborativa
* @param operation acción a notificar (CONNECTION_SUCCESSFUL,CONNECTION_FAILED)
* @param seekersList lista de seekers conectados
* @param searchers buscadores disponibles
* @param principles principios de búsqueda soportados
* @param activeSessions sesiones iniciadas
* @param availableSession sesiones a las que pertenece el seeker
*
* @return objeto response
*/
public static Response getResponse(int operation, String sessionName, List<Seeker> seekersList, String[] searchers, String[] repositories, List<String> principles, List<Session> activeSessions, List<Session> availableSession) {
Map<Object, Object> hash = new HashMap<>(10);
hash.put(OPERATION, NOTIFY_REQUEST_CONNECTION);
switch (operation) {
case CONNECTION_FAILED:
hash.put(REPLY, CONNECTION_FAILED);
hash.put(CAUSE, SEEKER_ALREADY_REGISTERED);
break;
case CONNECTION_SUCCESSFUL:
hash.put(SESSION_NAME, sessionName);
hash.put(SEEKERS_SESSION, seekersList);
hash.put(SEARCHERS, searchers);
hash.put(SVN_REPOSITORIES_NAMES, repositories);
hash.put(PERSISTENT_SESSIONS, availableSession);
hash.put(OPEN_SESSIONS, activeSessions);
hash.put(SEARCH_PRINCIPLES, principles);
hash.put(REPLY, CONNECTION_SUCCESSFUL);
break;
}
hash.put(SESSION_NAME, sessionName);
return new Response(hash);
}
/**
* Devuelve un objeto response para notificar la entrada al seeker a la sesión
* colaborativa de búsqueda.
*
* @param sessionName nombre de la sesión colaborativa
* @param seekersList miembros de la sesión
*
* @return objeto response
*/
public static Response getResponse(String sessionName, List<Seeker> seekersList, List<Session> availableSession) {
Map<Object, Object> hash = new HashMap<>(4);
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_ACCEPTANCE);
hash.put(DISTRIBUTED_EVENT, CONFIRM_COLLAB_SESSION);
hash.put(SESSION_NAME, sessionName);
hash.put(SEEKERS_SESSION, seekersList);
hash.put(PERSISTENT_SESSIONS, availableSession);
return new Response(hash);
}
/**
* Devuelve un objeto response para notificar las operaciones de:
* - Entrada al seeker a la sesión colaborativa de búsqueda.
* - La creación de la sesión colaborativa de búsqueda su creador.
*
* @param sessionName nombre de la sesión colaborativa
* @param operation acción a notificar (SELF_LOGIN_COLLAB_SESSION,CREATED_COLLAB_SESSION)
* @param seekersList miembros de la sesión
* @param principles principios de búsqueda
*
* @return objeto response
*/
public static Response getResponse(List<Seeker> seekersList, List<String> principles, String sessionName) {
Map<Object, Object> hash = new HashMap<>(5);
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_AUTHENTICATION);
hash.put(DISTRIBUTED_EVENT, SELF_LOGIN_COLLAB_SESSION);
hash.put(SESSION_NAME, sessionName);
hash.put(SEEKERS_SESSION, seekersList);
hash.put(SEARCH_PRINCIPLES, principles);
return new Response(hash);
}
public static Response getResponse(String sessionName, List<Seeker> seekersList, List<String> principles, List<Session> availableSession) {
Map<Object, Object> hash = new HashMap<>(6);
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_EVENT);
hash.put(DISTRIBUTED_EVENT, CREATED_COLLAB_SESSION);
hash.put(SESSION_NAME, sessionName);
hash.put(SEEKERS_SESSION, seekersList);
hash.put(PERSISTENT_SESSIONS, availableSession);
hash.put(SEARCH_PRINCIPLES, principles);
return new Response(hash);
}
// List<Session> availableSession
/**
* Devuelve un objeto response para notificar la el cambio del chairman de la
* sesión colaborativa
*
* @param sessionName nombre de la sesión colaborativa
* @param isChairman true si es el chairman de la sesión, flase en caso contrario
* @param chairmanName nombre del actual chairman de la sesión
* @param principles principios de búsqueda
*
* @return objeto response
*/
public static Response getResponse(String sessionName, boolean isChairman, String chairmanName, List<String> principles) {
Map<Object, Object> hash = new HashMap<>(6);
hash.put(OPERATION, NOTIFY_CHAIRMAN_SETTING);
hash.put(DISTRIBUTED_EVENT, CHANGE_CHAIRMAN_COLLAB_SESSION);
hash.put(SESSION_NAME, sessionName);
hash.put(IS_CHAIRMAN, isChairman);
hash.put(SEARCH_PRINCIPLES, principles);
hash.put(CHAIRMAN_NAME, chairmanName);
return new Response(hash);
}
/**
* Devuelve un objeto response para notificar la el cambio del chairman de la
* sesión colaborativa
*
* @param sessionName nombre de la sesión colaborativa
* @param isChairman true si es el chairman de la sesión, flase en caso contrario
* @param chairmanName nombre del actual chairman de la sesión
* @param principles principios de búsqueda
*
* @return objeto response
*/
public static Response getResponse(List<String> principles) {
Map<Object, Object> hash = new HashMap<>(6);
hash.put(OPERATION, NOTIFY_AVAILABLE_SEARCH_PRINCIPLES);
hash.put(SEARCH_PRINCIPLES, principles);
return new Response(hash);
}
/**
* Devuelve un objeto response para notificar la solicitud de un seeker al
* chairman de una sesión colaborativa de búsqueda.
*
* @param sessionName nombre de la sesión colaborativa
* @param seeker seeker que realiza la solicitud
*
* @return objeto response
*/
public static Response getResponse(String sessionName, Seeker seeker) {
Map<Object, Object> hash = new HashMap<>(4);
hash.put(OPERATION, NOTIFY_COLLAB_SESSION_ACCEPTANCE);
hash.put(DISTRIBUTED_EVENT, REQUEST_CONFIRM_COLLAB_SESSION);
hash.put(SESSION_NAME, sessionName);
hash.put(SEEKER, seeker);
return new Response(hash);
}
}