package com.netifera.platform.host.processes.probe.ui;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import com.netifera.platform.api.log.ILogger;
import com.netifera.platform.api.probe.IProbe;
import com.netifera.platform.host.internal.processes.ui.Activator;
import com.netifera.platform.host.processes.IProcessManager;
import com.netifera.platform.host.processes.IProcessManagerFactory;
import com.netifera.platform.host.processes.ui.ProcessListView;
import com.netifera.platform.ui.actions.SpaceAction;
public class OpenProbeProcessViewAction extends SpaceAction {
private final IWorkbenchPage page;
private final ILogger logger;
private final IProbe probe;
private final IProcessManagerFactory factory;
public OpenProbeProcessViewAction(ILogger logger, IProbe probe, IProcessManagerFactory factory) {
super("Open Process List");
setImageDescriptor(Activator.getInstance().getImageCache().getDescriptor("icons/processes.png"));
page = getActivePage();
this.logger = logger;
this.probe = probe;
this.factory = factory;
}
private IWorkbenchPage getActivePage() {
/* hack around stupid java 'final' rule for anonymous inner classes */
final IWorkbenchPage[] pageHolder = new IWorkbenchPage[1];
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
public void run() {
final IWorkbench wb = PlatformUI.getWorkbench();
if(wb == null) return;
final IWorkbenchWindow window = wb.getActiveWorkbenchWindow();
if(window == null) return;
pageHolder[0] = window.getActivePage();
}
});
return pageHolder[0];
}
public void run() {
if(page == null)
return;
try {
openProcessView();
} catch (PartInitException e) {
logger.warning("Error opening process view", e);
}
}
private void openProcessView() throws PartInitException {
IViewPart view = page.showView(ProcessListView.ID, "Process List", IWorkbenchPage.VIEW_ACTIVATE);
if(view instanceof ProcessListView) {
setProcessInput((ProcessListView) view);
}
}
private void setProcessInput(ProcessListView view) {
IProcessManager processManager = factory.createForProbe(probe);
view.setInput(processManager);
view.setName(probe.getName());
}
}