package com.netifera.platform.host.terminal.probe; import java.util.HashMap; import java.util.Map; import com.netifera.platform.api.dispatcher.DispatchException; import com.netifera.platform.api.dispatcher.DispatchMismatchException; import com.netifera.platform.api.dispatcher.IMessageDispatcher; import com.netifera.platform.api.dispatcher.IMessageDispatcherService; import com.netifera.platform.api.dispatcher.IMessageHandler; import com.netifera.platform.api.dispatcher.IMessenger; import com.netifera.platform.api.dispatcher.IProbeMessage; import com.netifera.platform.api.log.ILogManager; import com.netifera.platform.api.log.ILogger; import com.netifera.platform.api.probe.IProbe; import com.netifera.platform.host.terminal.ITerminalManager; import com.netifera.platform.host.terminal.ITerminalManagerFactory; public class TerminalManagerFactory implements ITerminalManagerFactory { private ILogger logger; private Map<IProbe, RemoteTerminalManager> probeMap = new HashMap<IProbe, RemoteTerminalManager>(); public ITerminalManager createForProbe(IProbe probe) { if(probeMap.containsKey(probe)) return probeMap.get(probe); final RemoteTerminalManager rtm = new RemoteTerminalManager(probe, logger); probeMap.put(probe, rtm); return rtm; } private void registerHandlers(IMessageDispatcher dispatcher) { IMessageHandler handler = new IMessageHandler() { public void call(IMessenger messenger, IProbeMessage message) throws DispatchException { RemoteTerminalManager rtm = (RemoteTerminalManager) createForProbe(messenger.getProbe()); if(message instanceof TerminalOutput) { rtm.terminalOutput((TerminalOutput) message); } else if(message instanceof TerminalClosed) { rtm.terminalClosed((TerminalClosed) message); } else { throw new DispatchMismatchException(message); } } }; dispatcher.registerMessageHandler(TerminalOutput.ID, handler); dispatcher.registerMessageHandler(TerminalClosed.ID, handler); } protected void setMessageDispatcher(IMessageDispatcherService dispatcher) { registerHandlers(dispatcher.getClientDispatcher()); } protected void unsetMessageDispatcher(IMessageDispatcherService dispatcher) { } protected void setLogManager(ILogManager logManager) { logger = logManager.getLogger("Terminal Manager"); } protected void unsetLogManager(ILogManager logManager) { } }