/* * 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.DocumentMetaData; import drakkar.oar.Documents; import drakkar.oar.ResultSetMetaData; import drakkar.oar.exception.SessionException; import drakkar.oar.util.OutputMonitor; import drakkar.stern.controller.DataBaseController; import drakkar.stern.facade.event.FacadeListener; import drakkar.stern.tracker.cache.SessionProfile; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * The <code>Service</code> class is.... * Esta clase constituye la raiz de todos los servicios soportados por el * framework DrakkarKeel */ public class Service { /** * */ protected Map<String, SessionProfile> collaborativeSessions; /** * */ protected FacadeListener listener; /** * */ protected DataBaseController dbController; /** * */ protected String defaultSessionName; /** * */ protected SessionProfile defaultSessionProfile; /** * */ protected Map<Integer, MetaResults> resultsStore; protected Map<String, SessionProfile> htTempSessions; /** * Constructor de la clase * * @param defaultSessionName * @param defaultSessionProfile * @param collaborativeSessions listado de sesiones */ public Service(String defaultSessionName, SessionProfile defaultSessionProfile, Map<String, SessionProfile> collaborativeSessions, Map<String, SessionProfile> htTempSessions) { this.defaultSessionName = defaultSessionName; this.defaultSessionProfile = defaultSessionProfile; defaultSessionProfile.getProperties().setSessionName(defaultSessionName); this.collaborativeSessions = collaborativeSessions; resultsStore = new HashMap<>(); this.htTempSessions = htTempSessions; } /** * Constructor de la clase * * @param defaultSessionName * @param defaultSessionProfile * @param collaborativeSessions listado de sesiones * @param dbController */ public Service(String defaultSessionName, SessionProfile defaultSessionProfile, Map<String, SessionProfile> collaborativeSessions, Map<String, SessionProfile> htTempSessions, DataBaseController dbController) { this.defaultSessionName = defaultSessionName; this.defaultSessionProfile = defaultSessionProfile; this.collaborativeSessions = collaborativeSessions; this.dbController = dbController; resultsStore = new HashMap<>(); defaultSessionProfile.getProperties().setSessionName(defaultSessionName); this.htTempSessions = htTempSessions; } /** * Constructor de la clase * * @param defaultSessionName * @param defaultSessionProfile * @param collaborativeSessions listado de sesiones * @param listener oyente de la aplicación servidora * @param dbController */ public Service(String defaultSessionName, SessionProfile defaultSessionProfile, Map<String, SessionProfile> collaborativeSessions, Map<String, SessionProfile> htTempSessions, FacadeListener listener, DataBaseController dbController) { this.defaultSessionName = defaultSessionName; this.defaultSessionProfile = defaultSessionProfile; this.collaborativeSessions = collaborativeSessions; this.listener = listener; this.dbController = dbController; resultsStore = new HashMap<>(); defaultSessionProfile.getProperties().setSessionName(defaultSessionName); this.htTempSessions = htTempSessions; } /** * Devuelve la tabla hash de las sesiones * * @return sesiones */ public Map<String, SessionProfile> getCollaborativeSessions() { return collaborativeSessions; } /** * Modifica el valor de la tabla hash de las sesiones * * @param collaborativeSessions nuevo valor */ public void setCollaborativeSessions(Map<String, SessionProfile> collaborativeSessions) { this.collaborativeSessions = collaborativeSessions; } /** * Devuelve el oyente de la aplicación servidor * * @return oyente */ public FacadeListener getListener() { return listener; } /** * Modifica el oyente de la aplicación servidor * * @param listener nuevo oyente */ public void setListener(FacadeListener listener) { this.listener = listener; } /** * * @return */ public String getDefaultSessionName() { return defaultSessionName; } /** * * @param sessionNameDefault */ public void setDefaultSessionName(String sessionNameDefault) { this.defaultSessionName = sessionNameDefault; } /** * * @return */ public Map<Integer, MetaResults> getResultsStore() { return resultsStore; } /** * * @param resultsStore */ public void setResultsStore(Map<Integer, MetaResults> resultsStore) { this.resultsStore = resultsStore; } /** * actualizar * @param list */ public synchronized void updateResultsStore(final ResultSetMetaData list) { MetaResults temp; Set<Integer> searchers = list.getResultsMap().keySet(); for (Integer item : searchers) { if (resultsStore.containsKey(item)) { temp = resultsStore.get(item); temp.add(list.getResultList(item)); } else { temp = new MetaResults(); temp.add(list.getResultList(item)); resultsStore.put(item, temp); } } } /** * * @return */ public String getCommunicationSessionName() { return defaultSessionProfile.getProperties().getSessionName(); } public boolean existCollabSession(String sessionName) { boolean flag = false; try { if (collaborativeSessions.containsKey(sessionName)) { flag = true; } } catch (NullPointerException e) { OutputMonitor.printStream("", e); } return flag; } protected SessionProfile getSessionProfile(String sessionName) throws SessionException { SessionProfile recordSession = null; if (sessionName.equals(getCommunicationSessionName())) { // se actualiza el role del miembro en el registro de la sesión recordSession = this.defaultSessionProfile; } else if (existCollabSession(sessionName)) { recordSession = this.collaborativeSessions.get(sessionName); } else { throw new SessionException("The session '" + sessionName + "' doesn't exist."); } return recordSession; } /** * actualizar * @param list */ public synchronized void updateResultsStore(final List<ResultSetMetaData> list) { Thread t = new Thread(new Runnable() { public void run() { for (ResultSetMetaData documentsList : list) { updateResultsStore(documentsList); } } }); t.start(); } /** * * @param docs * @return */ public ResultSetMetaData getDocumentsList(Documents docs) { Map<Integer, List<Integer>> documents = docs.getDocs(); List<Integer> indexList = null; MetaResults meta; DocumentMetaData metaDoc; Set<Integer> searchersID = documents.keySet(); ResultSetMetaData results = new ResultSetMetaData(); for (Integer item : searchersID) { if (resultsStore.containsKey(item)) { meta = resultsStore.get(item); indexList = documents.get(item); List<DocumentMetaData> list = new ArrayList<>(); for (Integer integer : indexList) { metaDoc = meta.get(integer); if (metaDoc != null) { list.add(metaDoc); } } results.add(item, list); } } return results; } /** * */ public void clear() { this.resultsStore.clear(); } public SessionProfile getDefaultSessionProfile() { return defaultSessionProfile; } }