package org.buddycloud.channelserver.packetprocessor.message.event;
import java.util.Properties;
import java.util.concurrent.BlockingQueue;
import org.apache.log4j.Logger;
import org.buddycloud.channelserver.Configuration;
import org.buddycloud.channelserver.channel.ChannelManager;
import org.buddycloud.channelserver.channel.node.configuration.Helper;
import org.buddycloud.channelserver.db.exception.NodeStoreException;
import org.buddycloud.channelserver.utils.NotificationScheme;
import org.dom4j.Element;
import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;
public class ConfigurationProcessor extends AbstractMessageProcessor {
private Helper helper;
private static final Logger logger = Logger
.getLogger(ConfigurationProcessor.class);
public ConfigurationProcessor(BlockingQueue<Packet> outQueue,
Properties configuration, ChannelManager channelManager) {
super(channelManager, configuration, outQueue);
this.helper = new Helper(channelManager);
}
public void setConfigurationHelper(Helper helper) {
this.helper = helper;
}
@Override
public void process(Message packet) throws Exception {
message = packet;
getPacketDetails();
if ((null == node) || (true == Configuration.getInstance().isLocalNode(node))) {
return;
}
sendLocalNotifications(NotificationScheme.validSubscribers);
handleDataForm();
}
private void getPacketDetails() {
Element configurationElement = message.getElement().element("event")
.element("configuration");
if (null == configurationElement) {
return;
}
node = configurationElement.attributeValue("node");
}
private void handleDataForm() throws NodeStoreException {
if (true == Configuration.getInstance().isLocalNode(node)) {
return;
}
setNodeConfiguration();
}
private void setNodeConfiguration() throws NodeStoreException {
addRemoteNode();
helper.parseEventUpdate(message);
channelManager.setNodeConf(node, helper.getValues());
}
private void addRemoteNode() {
try {
if (false == channelManager.nodeExists(node)) {
channelManager.addRemoteNode(node);
}
} catch (NodeStoreException e) {
logger.error(e);
}
}
}