diff options
Diffstat (limited to 'examples/bundles/org.eclipse.ecf.examples.webinar/src/org/eclipse/ecf/internal/examples/webinar/util/rosterentry/SendMessageRosterEntryContribution.java')
-rw-r--r-- | examples/bundles/org.eclipse.ecf.examples.webinar/src/org/eclipse/ecf/internal/examples/webinar/util/rosterentry/SendMessageRosterEntryContribution.java | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/examples/bundles/org.eclipse.ecf.examples.webinar/src/org/eclipse/ecf/internal/examples/webinar/util/rosterentry/SendMessageRosterEntryContribution.java b/examples/bundles/org.eclipse.ecf.examples.webinar/src/org/eclipse/ecf/internal/examples/webinar/util/rosterentry/SendMessageRosterEntryContribution.java new file mode 100644 index 000000000..16d0d7843 --- /dev/null +++ b/examples/bundles/org.eclipse.ecf.examples.webinar/src/org/eclipse/ecf/internal/examples/webinar/util/rosterentry/SendMessageRosterEntryContribution.java @@ -0,0 +1,158 @@ +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(); + } + } + +} |