Search in sources :

Example 1 with AbstractRosterMenuHandler

use of org.eclipse.ecf.presence.ui.menu.AbstractRosterMenuHandler in project ecf by eclipse.

the class SendContextContributionItem method createRosterEntryHandler.

protected AbstractRosterMenuHandler createRosterEntryHandler(final IRosterEntry rosterEntry) {
    return new AbstractRosterMenuHandler(rosterEntry) {

        public Object execute(ExecutionEvent event) throws ExecutionException {
            IWorkbenchPart part = HandlerUtil.getActivePart(event);
            if (part == null) {
                return null;
            }
            IWorkbenchSite site = part.getSite();
            if (site == null) {
                return null;
            }
            ISelectionProvider provider = site.getSelectionProvider();
            if (provider == null) {
                return null;
            }
            ISelection selection = provider.getSelection();
            if (selection instanceof IStructuredSelection) {
                IChannelContainerAdapter icca = (IChannelContainerAdapter) rosterEntry.getRoster().getPresenceContainerAdapter().getAdapter(IChannelContainerAdapter.class);
                ID channelID;
                try {
                    channelID = icca.getChannelNamespace().createInstance(new Object[] { Activator.PLUGIN_ID });
                } catch (IDCreateException e1) {
                    return null;
                }
                final IChannel channel = icca.getChannel(channelID);
                if (channel == null) {
                    return null;
                }
                Object element = ((IStructuredSelection) selection).getFirstElement();
                if (element instanceof ITask) {
                    final ITask task = (ITask) element;
                    Job job = new Job("Send Task") {

                        protected IStatus run(IProgressMonitor monitor) {
                            monitor.beginTask("Sending task...", 5);
                            ByteArrayOutputStream stream = new ByteArrayOutputStream();
                            TasksUiPlugin.getTaskListManager().getTaskListWriter().writeTask((AbstractTask) task, stream);
                            monitor.worked(2);
                            try {
                                channel.sendMessage(getRosterEntry().getUser().getID(), stream.toByteArray());
                                monitor.worked(3);
                            } catch (Exception e) {
                                return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "An error occurred while sending the task.", e);
                            } finally {
                                monitor.done();
                            }
                            return Status.OK_STATUS;
                        }
                    };
                    job.schedule();
                }
            }
            return null;
        }
    };
}
Also used : IWorkbenchSite(org.eclipse.ui.IWorkbenchSite) ITask(org.eclipse.mylyn.tasks.core.ITask) IChannel(org.eclipse.ecf.datashare.IChannel) IDCreateException(org.eclipse.ecf.core.identity.IDCreateException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IDCreateException(org.eclipse.ecf.core.identity.IDCreateException) ExecutionException(org.eclipse.core.commands.ExecutionException) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) AbstractRosterMenuHandler(org.eclipse.ecf.presence.ui.menu.AbstractRosterMenuHandler) ExecutionEvent(org.eclipse.core.commands.ExecutionEvent) IChannelContainerAdapter(org.eclipse.ecf.datashare.IChannelContainerAdapter) ID(org.eclipse.ecf.core.identity.ID) Job(org.eclipse.core.runtime.jobs.Job)

Aggregations

ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 ExecutionEvent (org.eclipse.core.commands.ExecutionEvent)1 ExecutionException (org.eclipse.core.commands.ExecutionException)1 Job (org.eclipse.core.runtime.jobs.Job)1 ID (org.eclipse.ecf.core.identity.ID)1 IDCreateException (org.eclipse.ecf.core.identity.IDCreateException)1 IChannel (org.eclipse.ecf.datashare.IChannel)1 IChannelContainerAdapter (org.eclipse.ecf.datashare.IChannelContainerAdapter)1 AbstractRosterMenuHandler (org.eclipse.ecf.presence.ui.menu.AbstractRosterMenuHandler)1 ITask (org.eclipse.mylyn.tasks.core.ITask)1 IWorkbenchPart (org.eclipse.ui.IWorkbenchPart)1 IWorkbenchSite (org.eclipse.ui.IWorkbenchSite)1