package com.netifera.platform.net.daemon.sniffing.ui; import org.eclipse.jface.action.ICoolBarManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.ToolBarContributionItem; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.osgi.util.tracker.ServiceTracker; import com.netifera.platform.api.events.IEventHandler; import com.netifera.platform.api.log.ILogManager; import com.netifera.platform.api.model.ISpace; import com.netifera.platform.api.probe.IProbe; import com.netifera.platform.api.probe.IProbeManagerService; import com.netifera.platform.api.system.ISystemService; import com.netifera.platform.net.daemon.sniffing.ISniffingDaemon; import com.netifera.platform.net.daemon.sniffing.ISniffingDaemonFactory; import com.netifera.platform.ui.application.ApplicationPlugin; import com.netifera.platform.ui.spaces.SpaceEditorInput; import com.netifera.platform.ui.workbench.IWorkbenchChangeListener; import com.netifera.platform.ui.workbench.WorkbenchChangeManager; public class Activator extends AbstractUIPlugin { public static final String PLUGIN_ID = "com.netifera.platform.net.daemon.sniffing.ui"; public static final String PERSPECTIVE_ID = "com.netifera.platform.ui.perspectives.sniffing"; public static final String MODEL_VIEW_ID = "com.netifera.platform.ui.views.Model"; private static Activator plugin; private ServiceTracker sniffingDaemonFactoryTracker; private ServiceTracker probeManagerTracker; private ServiceTracker logManagerTracker; private ServiceTracker systemServiceTracker; private SniffingActionManager sniffingActionManager; private ToolBarContributionItem toolbarItem; private WorkbenchChangeManager workbenchChangeManager; public Activator() { } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; sniffingDaemonFactoryTracker = new ServiceTracker(context, ISniffingDaemonFactory.class.getName() , null); sniffingDaemonFactoryTracker.open(); probeManagerTracker = new ServiceTracker(context, IProbeManagerService.class.getName(), null); probeManagerTracker.open(); logManagerTracker = new ServiceTracker(context, ILogManager.class.getName(), null); logManagerTracker.open(); systemServiceTracker = new ServiceTracker(context,ISystemService.class.getName(),null); systemServiceTracker.open(); } public ISniffingDaemonFactory getSniffingDaemonFactory() { return (ISniffingDaemonFactory) sniffingDaemonFactoryTracker.getService(); } public IProbeManagerService getProbeManager() { return (IProbeManagerService) probeManagerTracker.getService(); } public ILogManager getLogManager() { return (ILogManager) logManagerTracker.getService(); } public ISystemService getSystemService() { return (ISystemService) systemServiceTracker.getService(); } public ISniffingDaemon getSniffingDaemon() { IProbe probe = getCurrentProbe(); if(probe == null) return null; // XXX fix with change handler return getSniffingDaemonFactory().createForProbe(probe, null); } public ISniffingDaemon createSniffingDaemon(IEventHandler changeHandler) { IProbe probe = getCurrentProbe(); if(probe == null) return null; return getSniffingDaemonFactory().createForProbe(probe, changeHandler); } public void initialize() { workbenchChangeManager = new WorkbenchChangeManager(getWindow(), PerspectiveFactory.ID, createChangeListener()); workbenchChangeManager.initialize(); } private IWorkbenchChangeListener createChangeListener() { return new IWorkbenchChangeListener() { public void activePageOpened(IWorkbenchPage page) { } public void partChange() { if(sniffingActionManager != null) { sniffingActionManager.setState(); } } public void perspectiveClosed() { if(toolbarItem != null) { ApplicationPlugin.getDefault().getCoolBar().remove(toolbarItem); toolbarItem.dispose(); toolbarItem = null; if(sniffingActionManager != null) { sniffingActionManager.dispose(); sniffingActionManager = null; } } } public void perspectiveOpened() { displayToolbar(); } }; } private void displayToolbar() { if(toolbarItem != null) return; final ICoolBarManager coolbar = ApplicationPlugin.getDefault().getCoolBar(); final IToolBarManager toolbar = new ToolBarManager(coolbar.getStyle()); toolbarItem = new ToolBarContributionItem(toolbar); coolbar.add(toolbarItem); sniffingActionManager = new SniffingActionManager(toolbar); PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { sniffingActionManager.setState(); coolbar.update(true); } }); } public ISpace getCurrentSpace() { IWorkbenchPage page = getWindow().getActivePage(); if(page == null) { return null; } IEditorPart editor = page.getActiveEditor(); if(editor == null || !(editor.getEditorInput() instanceof SpaceEditorInput)) { return null; } return ((SpaceEditorInput)editor.getEditorInput()).getSpace(); } public IProbe getCurrentProbe() { final ISpace space = getCurrentSpace(); if(space == null) return null; return getProbeManager().getProbeById(getCurrentSpace().getProbeId()); } private IWorkbenchWindow getWindow() { IWorkbenchWindow[] windows = getWorkbench().getWorkbenchWindows(); if(windows.length == 0) { return null; } return windows[0]; } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } public static Activator getDefault() { return plugin; } }