All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pl.bristleback.server.bristle.messages.MessageController Maven / Gradle / Ivy

// Bristleback plugin - Copyright (c) 2010 bristleback.googlecode.com
// ---------------------------------------------------------------------------
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 3 of the License, or (at your
// option) any later version.
// This library is distributed in the hope that it will be useful,
// but without any warranty; without even the implied warranty of merchantability
// or fitness for a particular purpose.
// You should have received a copy of the GNU Lesser General Public License along
// with this program; if not, see .
// ---------------------------------------------------------------------------
package pl.bristleback.server.bristle.messages;

import pl.bristleback.server.bristle.config.BristleConstants;
import pl.bristleback.server.bristle.config.MessageContainerDefaultResolver;
import pl.bristleback.server.bristle.config.MessageContainerResolver;
import pl.bristleback.server.bristle.exceptions.ImplementationResolvingException;
import pl.bristleback.server.bristle.utils.ResolverUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.jwebsocket.api.WebSocketServer;

import java.util.Map;

/**
 * Message controller communicates with Bristle plugin and performs operations on message dispatcher and message senders.
 * It provides method to load {@link pl.bristleback.server.bristle.messages.MessageContainer} object,
 * assign senders and dispatcher with server, and finally, export senders and start dispatching messages.
 * 

* Created on: 2010-09-25 10:14:37
* * @author Wojciech Niemiec */ public final class MessageController { private static Logger log = Logger.getLogger(MessageController.class.getName()); public static final Class MESSAGE_CONTAINER_DEFAULT_RESOLVER_CLASS = MessageContainerDefaultResolver.class; private MessageContainer messageContainer; /** * Loads message container using plugin settings. It chooses {@link pl.bristleback.server.bristle.config.MessageContainerResolver} * implementation, based on plugin settings. From then, resolver object is used to load message container, which is then stored * in controller. It sets dispatcher in all loaded senders by invoking * {@link pl.bristleback.server.bristle.config.MessageContainerResolver#assignDispatcherToSenders(MessageContainer)} method. * * @param pluginSettings plugin settings */ public void loadMessageContainer(Map pluginSettings) { Class messageContainerResolverClass = getResolverClass(pluginSettings); loadContainerByResolver(pluginSettings, messageContainerResolverClass); } private Class getResolverClass(Map pluginSettings) { String resolverClassName = pluginSettings.get(BristleConstants.MESSAGE_RESOLVER_CLASS_PARAMETER_NAME); if (StringUtils.isEmpty(resolverClassName)) { if (log.isDebugEnabled()) { log.debug("Message container resolver is not specified by user, system will use default resolver"); } return MESSAGE_CONTAINER_DEFAULT_RESOLVER_CLASS; } else { ResolverUtil resolver = new ResolverUtil(); return resolver.getImplementation(MessageContainerResolver.class, resolverClassName); } } private void loadContainerByResolver(Map pluginSettings, Class messageContainerResolverClass) { MessageContainerResolver messageContainerResolver; messageContainerResolver = getMessageResolver(messageContainerResolverClass); messageContainer = messageContainerResolver.createMessageContainer(pluginSettings); messageContainerResolver.assignDispatcherToSenders(messageContainer); } private MessageContainerResolver getMessageResolver(Class messageContainerResolverClass) { MessageContainerResolver messageContainerResolver; try { messageContainerResolver = (MessageContainerResolver) (messageContainerResolverClass.newInstance()); } catch (Exception e) { throw new ImplementationResolvingException(messageContainerResolverClass.getName(), MessageContainerResolver.class); } return messageContainerResolver; } /** * Assigns server into message dispatcher and message senders. * * @param server jwebsocket server implementation. */ public void assignServer(WebSocketServer server) { messageContainer.getMessageDispatcher().setServer(server); for (MessageSender sender : messageContainer.getSenders().values()) { sender.setServer(server); } } /** * Exports senders, after invoking this method, senders can be obtained from {@link pl.bristleback.server.bristle.messages.MessageSendersExporter} class. */ public void exportSenders() { MessageSendersExporter.setMessageSenders(messageContainer.getSenders()); } /** * Starts dispatcher, invoking its startDispatching() method. */ public void startDispatcher() { if (messageContainer == null || messageContainer.getMessageDispatcher() == null) { throw new IllegalStateException("Dispatcher is not set"); } messageContainer.getMessageDispatcher().startDispatching(); } /** * Stops dispatching, invoking its stopDispatching() method. */ public void stopDispatcher() { if (messageContainer == null || messageContainer.getMessageDispatcher() == null) { throw new IllegalStateException("Dispatcher is not set"); } messageContainer.getMessageDispatcher().stopDispatching(); } /** * Gets loaded message container. Returns null if container is not loaded yet. * * @return message container. */ public MessageContainer getMessageContainer() { return messageContainer; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy