Package org.eclipse.ecf.internal.bulletinboard.commons

Source Code of org.eclipse.ecf.internal.bulletinboard.commons.AbstractBBContainer

package org.eclipse.ecf.internal.bulletinboard.commons;

import org.eclipse.ecf.bulletinboard.BBException;
import org.eclipse.ecf.bulletinboard.IBBCredentials;
import org.eclipse.ecf.bulletinboard.IBulletinBoardContainerAdapter;
import org.eclipse.ecf.core.AbstractContainer;
import org.eclipse.ecf.core.ContainerConnectException;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.security.Callback;
import org.eclipse.ecf.core.security.CallbackHandler;
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.core.security.NameCallback;
import org.eclipse.ecf.core.security.ObjectCallback;

public abstract class AbstractBBContainer extends AbstractContainer {

  private ID localID;

  private ID targetID;

  protected AbstractBulletinBoard bb;

  public AbstractBBContainer(ID id) {
    super();
    this.localID = id;
    this.targetID = null;
  }

  public void connect(ID targetID, IConnectContext connectContext)
      throws ContainerConnectException {
    this.targetID = targetID;
    bb.postConnect();
    IBBCredentials creds = getCredentialsFromConnectContext(connectContext);
    if (creds != null) {
      try {
        bb.login(creds);
      } catch (BBException e) {
        throw new ContainerConnectException(e);
      }
    }
  }

  public void disconnect() {
    try {
      if (bb.getLoggedInMember() != null) {
        bb.logout();
      }
      bb.postDisconnect();
      targetID = null;
    } catch (BBException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  public ID getID() {
    return localID;
  }

  public ID getConnectedID() {
    return targetID;
  }

  @Override
  public void dispose() {
    disconnect();
    bb = null;
  }

  public Object getAdapter(Class serviceType) {
    if (serviceType.equals(IBulletinBoardContainerAdapter.class)) {
      return bb;
    }
    return super.getAdapter(serviceType);
  }

  public static class Credentials implements IBBCredentials {

    private String username;

    private String password;

    private Credentials(String username, String password) {
      super();
      this.username = username;
      this.password = password;
    }

    public String getUsername() {
      return this.username;
    }

    public String getPassword() {
      return this.password;
    }

  }

  protected IBBCredentials getCredentialsFromConnectContext(
      IConnectContext connectContext) throws ContainerConnectException {
    try {
      if (connectContext == null) {
        return null;
      }
      Callback[] callbacks = new Callback[2];
      callbacks[0] = new NameCallback("Username");
      callbacks[1] = new ObjectCallback();
      CallbackHandler handler = connectContext.getCallbackHandler();
      if (handler != null) {
        handler.handle(callbacks);
      }
      NameCallback nc = (NameCallback) callbacks[0];
      ObjectCallback cb = (ObjectCallback) callbacks[1];
      return new Credentials(nc.getName(), (String) cb.getObject());
    } catch (Exception e) {
      throw new ContainerConnectException(
          "Exception in CallbackHandler.handle(<callbacks>)", e);
    }
  }
}
TOP

Related Classes of org.eclipse.ecf.internal.bulletinboard.commons.AbstractBBContainer

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.