Package org.eclipse.ecf.internal.examples.webinar.util.rosterentry

Source Code of org.eclipse.ecf.internal.examples.webinar.util.rosterentry.SendMessageRosterEntryContribution

package org.eclipse.ecf.internal.examples.webinar.util.rosterentry;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.datashare.IChannel;
import org.eclipse.ecf.datashare.IChannelContainerAdapter;
import org.eclipse.ecf.datashare.IChannelListener;
import org.eclipse.ecf.datashare.events.IChannelEvent;
import org.eclipse.ecf.datashare.events.IChannelMessageEvent;
import org.eclipse.ecf.presence.roster.IRosterEntry;
import org.eclipse.ecf.presence.ui.roster.AbstractRosterEntryContributionItem;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.browser.IWebBrowser;
import org.eclipse.ui.browser.IWorkbenchBrowserSupport;

public class SendMessageRosterEntryContribution extends
    AbstractRosterEntryContributionItem {

  private static final String CHANNELID = "mychannel";

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ecf.presence.ui.roster.AbstractPresenceContributionItem#makeActions()
   */
  protected IAction[] makeActions() {
    IAction action = null;
    final IRosterEntry rosterEntry = getSelectedRosterEntry();
    if (rosterEntry != null) {
      if (initializeChannelFor(getContainerForRosterEntry(rosterEntry)) != null) {
        action = new Action() {
          public void run() {
            sendDataToChannel(rosterEntry);
          }

        };
        action.setText("Send Message and URL");
        action.setImageDescriptor(PlatformUI.getWorkbench()
            .getSharedImages().getImageDescriptor(
                ISharedImages.IMG_DEF_VIEW));
        return new IAction[] { action };
      }
    }
    return null;
  }

  private void sendDataToChannel(IRosterEntry rosterEntry) {
    try {
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      ObjectOutputStream oos = new ObjectOutputStream(bos);
      oos.writeObject(new String[] { "Hi " + rosterEntry.getName(),
          "http://www.eclipse.org/ecf" });
      IChannel channel = initializeChannelFor(getContainerForRosterEntry(rosterEntry));
      channel.sendMessage(rosterEntry.getUser().getID(), bos
          .toByteArray());
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }

  private void receiveDataFromChannel(byte[] data) {
    try {
      ObjectInputStream oos = new ObjectInputStream(new ByteArrayInputStream(data));
      String[] received = (String[]) oos.readObject();
      showMessageAndURL(received[0], received[1]);
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }

  private static Map channels = new HashMap();

  private IChannel initializeChannelFor(IContainer container) {
    if (container == null)
      return null;
    ID containerID = container.getID();
    IChannel chan = (IChannel) channels.get(containerID);
    if (chan == null) {
      IChannelContainerAdapter adapter = (IChannelContainerAdapter) container
          .getAdapter(IChannelContainerAdapter.class);
      if (adapter != null) {
        chan = createChannel(adapter);
        channels.put(containerID, chan);
      }
    }
    return chan;
  }

  public void dispose() {
    super.dispose();
    for (Iterator i = channels.keySet().iterator(); i.hasNext();) {
      IChannel chan = (IChannel) channels.get(i.next());
      chan.dispose();
    }
    channels.clear();
  }

  private IChannel createChannel(IChannelContainerAdapter adapter) {
    try {
      return adapter.createChannel(IDFactory.getDefault().createStringID(
          CHANNELID), new IChannelListener() {
        public void handleChannelEvent(IChannelEvent event) {
          if (event instanceof IChannelMessageEvent) {
            receiveDataFromChannel(((IChannelMessageEvent) event)
                .getData());
          }
        }

      }, null);
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return null;
  }

  private void showMessageAndURL(final String string, final String url) {
    Display.getDefault().asyncExec(new Runnable() {
      public void run() {
        if (MessageDialog.openConfirm(null, "Received message", string
            + ".  Show URL?"))
          showURL(url);
      }
    });
  }

  private void showURL(String string) {
    IWorkbenchBrowserSupport support = PlatformUI.getWorkbench()
        .getBrowserSupport();
    IWebBrowser browser;
    try {
      browser = support.createBrowser(null);
      browser.openURL(new URL(string));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

}
TOP

Related Classes of org.eclipse.ecf.internal.examples.webinar.util.rosterentry.SendMessageRosterEntryContribution

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.