/* * 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.Response; import drakkar.oar.Seeker; import drakkar.oar.exception.AwarenessException; import drakkar.oar.exception.SeekerException; import drakkar.oar.exception.SessionException; import drakkar.oar.slice.client.ClientSidePrx; import drakkar.oar.util.KeySuggest; import static drakkar.oar.util.KeyTransaction.*; import static drakkar.oar.util.NotifyAction.*; import drakkar.oar.util.OutputMonitor; import drakkar.stern.callback.NotifyAMICallback; import drakkar.stern.controller.DataBaseController; import drakkar.stern.facade.event.FacadeListener; import drakkar.stern.tracker.cache.SeekerInfo; import drakkar.stern.tracker.cache.SessionProfile; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class ImplicitRecomendation extends Service implements Suggestable { /** * * @param defaultSessionName * @param defaultSessionProfile * @param collaborativeSessions * @param htTempSessions * @param listener * @param dbController */ public ImplicitRecomendation(String defaultSessionName, SessionProfile defaultSessionProfile, Map<String, SessionProfile> collaborativeSessions, Map<String, SessionProfile> htTempSessions, FacadeListener listener, DataBaseController dbController) { super(defaultSessionName, defaultSessionProfile, collaborativeSessions, htTempSessions, listener, dbController); } /** * * @param defaultSessionName * @param defaultSessionProfile * @param collaborativeSessions * @param htTempSessions * @param dbController */ public ImplicitRecomendation(String defaultSessionName, SessionProfile defaultSessionProfile, Map<String, SessionProfile> collaborativeSessions, Map<String, SessionProfile> htTempSessions, DataBaseController dbController) { super(defaultSessionName, defaultSessionProfile, collaborativeSessions, htTempSessions, dbController); } /** * * @param defaultSessionName * @param defaultSessionProfile * @param collaborativeSessions * @param htTempSessions */ public ImplicitRecomendation(String defaultSessionName, SessionProfile defaultSessionProfile, Map<String, SessionProfile> collaborativeSessions, Map<String, SessionProfile> htTempSessions) { super(defaultSessionName, defaultSessionProfile, collaborativeSessions, htTempSessions); } public void sendCollabTermsSuggestAction(String sessionName, int event, Seeker emitter, ClientSidePrx prx) throws SessionException, SeekerException, AwarenessException { if (sessionName.equals(defaultSessionName)) { enabledCollabTermsSuggest(sessionName, event, emitter, prx); } else if (emitter.getRole() == Seeker.ROLE_CHAIRMAN) { enabledCollabTermsSuggest(sessionName, event, emitter, prx); } else { throw new SeekerException("Doesn't have privileges to executing this technique."); } } private void enabledCollabTermsSuggest(String sessionName, int event, Seeker emitter, ClientSidePrx prx) throws SessionException, SeekerException, AwarenessException { boolean enable = (event == KeySuggest.ENABLE_TERMS_SUGGEST); if (enable || event == KeySuggest.DISABLE_TERMS_SUGGEST) { SessionProfile sessionProfile = getSessionProfile(sessionName); if (existSeeker(sessionProfile, emitter)) { sessionProfile.setTermsSuggest(enable); Map<Object, Object> hash = new HashMap<>(5); hash.put(OPERATION, NOTIFY_COLLAB_TERMS_SUGGEST); hash.put(SESSION_NAME, sessionName); hash.put(DISTRIBUTED_EVENT, event); Response response = new Response(hash); try { prx.notify_async(new NotifyAMICallback(emitter, "sendCollabTermsSuggestAction"), response.toArray()); } catch (IOException ex) { OutputMonitor.printStream("",ex); } } } else { throw new AwarenessException("Event of Collaborative Terms Suggest not supported."); } } private boolean existSeeker(SessionProfile session, Seeker emitter) throws SeekerException { SeekerInfo seekersRecord = session.getSeekerInfo(); boolean flag = seekersRecord.record.containsKey(emitter); if (flag) { return flag; } else { throw new SeekerException("The seeker '" + emitter.getUser() + "' is not registered in the session '" + session.getProperties().getSessionName() + "'."); } } }