Package org.eclipse.ecf.internal.irc.ui.wizards

Source Code of org.eclipse.ecf.internal.irc.ui.wizards.IRCConnectWizard

/****************************************************************************
* Copyright (c) 2007, 2009 Remy Suen, Composent Inc., 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:
*    Remy Suen <remy.suen@gmail.com> - initial API and implementation
*    Scott Lewis <slewis@composent.com>
*****************************************************************************/
package org.eclipse.ecf.internal.irc.ui.wizards;

import org.eclipse.ecf.core.*;
import org.eclipse.ecf.core.identity.*;
import org.eclipse.ecf.core.security.ConnectContextFactory;
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.internal.irc.ui.*;
import org.eclipse.ecf.internal.provider.irc.identity.IRCID;
import org.eclipse.ecf.presence.chatroom.IChatRoomManager;
import org.eclipse.ecf.ui.IConnectWizard;
import org.eclipse.ecf.ui.actions.AsynchContainerConnectAction;
import org.eclipse.ecf.ui.dialogs.IDCreateErrorDialog;
import org.eclipse.ecf.ui.util.PasswordCacheHelper;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;

public final class IRCConnectWizard extends Wizard implements IConnectWizard, INewWizard {

  public static final String DEFAULT_GUEST_USER = "guest";

  private IRCConnectWizardPage page;

  private IContainer container;

  private ID targetID;

  private IConnectContext connectContext;

  private String authorityAndPath = null;

  public IRCConnectWizard() {
    super();
  }

  public IRCConnectWizard(String authorityAndPart) {
    super();
    this.authorityAndPath = authorityAndPart;
  }

  public void addPages() {
    page = new IRCConnectWizardPage(authorityAndPath);
    addPage(page);
  }

  public void init(IWorkbench workbench, IContainer container) {
    this.container = container;

    setWindowTitle(Messages.IRCConnectWizard_WIZARD_TITLE);
  }

  public void init(IWorkbench workbench, IStructuredSelection selection) {
    this.container = null;
    try {
      this.container = ContainerFactory.getDefault().createContainer("ecf.irc.irclib");
    } catch (final ContainerCreateException e) {
      // None
    }

    setWindowTitle(Messages.IRCConnectWizard_WIZARD_TITLE);
  }

  public boolean performCancel() {
    container.dispose();

    IContainerManager containerManager = Activator.getDefault()
        .getContainerManager();
    if (containerManager != null) {
      containerManager.removeContainer(container);
    }

    return super.performCancel();
  }

  public boolean performFinish() {

    final String connectID = page.getConnectID();
    final String password = page.getPassword();

    connectContext = ConnectContextFactory.createPasswordConnectContext(password);

    page.saveComboText();

    try {
      targetID = IDFactory.getDefault().createID(container.getConnectNamespace(), connectID);
    } catch (final IDCreateException e) {
      new IDCreateErrorDialog(null, connectID, e).open();
      return false;
    }

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

    final IRCUI ui = new IRCUI(this.container, manager, null);
    ui.showForTarget(targetID);
    // If it's not already connected, then we connect this new container
    if (!ui.isContainerConnected()) {
      page.saveComboItems();
     
      // bug 274613, we need to remove the extra autojoin channel bits
      IRCID id = (IRCID) targetID;
      // start with user, then host, then port, abc@irc.freenode.net:6667
      StringBuffer buffer = new StringBuffer(id.getUsername());
      buffer.append('@').append(id.getHost());
      buffer.append(':').append(id.getPort());
      // create a truncated ID instance for the container to connect to
      id = (IRCID) container.getConnectNamespace().createInstance(
          new Object[] { buffer.toString() });
         
      new AsynchContainerConnectAction(container, id, connectContext, null, new Runnable() {
        public void run() {
          cachePassword(page.getPasswordKeyFromUserName(connectID), password);
        }
      }).run();

    }

    return true;
  }

  protected void cachePassword(final String connectID, String password) {
    if (password != null && !password.equals("")) {
      final PasswordCacheHelper pwStorage = new PasswordCacheHelper(connectID);
      pwStorage.savePassword(password);
    }
  }

}
TOP

Related Classes of org.eclipse.ecf.internal.irc.ui.wizards.IRCConnectWizard

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.