Package org.eclipse.ecf.presence.bot.impl

Source Code of org.eclipse.ecf.presence.bot.impl.ChatRoomBot

/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ecf.presence.bot.impl;

import java.util.List;

import org.eclipse.ecf.core.ContainerConnectException;
import org.eclipse.ecf.core.ContainerFactory;
import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.core.identity.Namespace;
import org.eclipse.ecf.core.security.ConnectContextFactory;
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.core.util.ECFException;
import org.eclipse.ecf.presence.IIMMessageEvent;
import org.eclipse.ecf.presence.IIMMessageListener;
import org.eclipse.ecf.presence.bot.IChatRoomBotEntry;
import org.eclipse.ecf.presence.bot.IChatRoomMessageHandlerEntry;
import org.eclipse.ecf.presence.chatroom.IChatRoomContainer;
import org.eclipse.ecf.presence.chatroom.IChatRoomInfo;
import org.eclipse.ecf.presence.chatroom.IChatRoomManager;
import org.eclipse.ecf.presence.chatroom.IChatRoomMessage;
import org.eclipse.ecf.presence.chatroom.IChatRoomMessageEvent;

/**
* Default chat room robot implementation class.
*/
public class ChatRoomBot implements IIMMessageListener {

  protected IChatRoomBotEntry bot;
  protected IContainer container;
  protected ID targetID;
  protected IChatRoomContainer roomContainer;
  protected ID roomID;

  public ChatRoomBot(IChatRoomBotEntry bot) {
    this.bot = bot;
  }

  protected void fireInitBot() {
    List commands = bot.getCommands();
    for (int i = 0; i < commands.size(); i++) {
      IChatRoomMessageHandlerEntry entry = (IChatRoomMessageHandlerEntry) commands
          .get(i);
      entry.getHandler().init(bot);
    }
  }

  protected void firePreConnect() {
    List commands = bot.getCommands();
    for (int i = 0; i < commands.size(); i++) {
      IChatRoomMessageHandlerEntry entry = (IChatRoomMessageHandlerEntry) commands
          .get(i);
      entry.getHandler().preContainerConnect(container, targetID);
    }
  }

  protected void firePreRoomConnect() {
    List commands = bot.getCommands();
    for (int i = 0; i < commands.size(); i++) {
      IChatRoomMessageHandlerEntry entry = (IChatRoomMessageHandlerEntry) commands
          .get(i);
      entry.getHandler().preChatRoomConnect(roomContainer, roomID);
    }
  }

  public synchronized void connect() throws ECFException {

    fireInitBot();

    try {
      Namespace namespace = null;

      if (container == null) {
        container = ContainerFactory.getDefault().createContainer(
            bot.getContainerFactoryName());
        namespace = container.getConnectNamespace();
      } else
        throw new ContainerConnectException("Already connected"); //$NON-NLS-1$

      targetID = IDFactory.getDefault().createID(namespace,
          bot.getConnectID());

      IChatRoomManager manager = (IChatRoomManager) container
          .getAdapter(IChatRoomManager.class);

      if (manager == null)
        throw new ECFException("No chat room manager available"); //$NON-NLS-1$

      firePreConnect();

      String password = bot.getPassword();
      IConnectContext context = (password == null) ? null
          : ConnectContextFactory
              .createPasswordConnectContext(password);

      container.connect(targetID, context);

      String[] roomNames = bot.getChatRooms();
      String[] roomPasswords = bot.getChatRoomPasswords();
      for (int i = 0; i < roomNames.length; i++) {
        IChatRoomInfo room = manager.getChatRoomInfo(roomNames[i]);
        roomContainer = room.createChatRoomContainer();

        roomID = room.getRoomID();

        firePreRoomConnect();

        roomContainer.addMessageListener(this);
       
        IConnectContext roomContext = (roomPasswords[i] == null) ? null
            : ConnectContextFactory
                .createPasswordConnectContext(roomPasswords[i]);
        roomContainer.connect(roomID, roomContext);
      }
    } catch (ECFException e) {
      if (container != null) {
        if (container.getConnectedID() != null) {
          container.disconnect();
        }
        container.dispose();
      }
      container = null;
      throw e;
    }

  }

  public void handleMessageEvent(IIMMessageEvent event) {
    if (event instanceof IChatRoomMessageEvent) {
      IChatRoomMessageEvent roomEvent = (IChatRoomMessageEvent) event;
      IChatRoomMessage message = roomEvent.getChatRoomMessage();
      List commands = bot.getCommands();
      for (int i = 0; i < commands.size(); i++) {
        IChatRoomMessageHandlerEntry entry = (IChatRoomMessageHandlerEntry) commands
            .get(i);
        entry.handleRoomMessage(message);
      }
    }
  }

}
TOP

Related Classes of org.eclipse.ecf.presence.bot.impl.ChatRoomBot

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.