package com.netifera.platform.host.filesystem.ui.probe;
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.filesystem.IFileSystem;
import com.netifera.platform.host.filesystem.IFileSystemFactory;
import com.netifera.platform.host.filesystem.ui.FileSystemView;
import com.netifera.platform.host.internal.filesystem.ui.Activator;
import com.netifera.platform.ui.actions.SpaceAction;
public class OpenProbeFileSystemViewAction extends SpaceAction {
private final IWorkbenchPage page;
private final ILogger logger;
private final IProbe probe;
private final IFileSystemFactory fileSystemFactory;
public OpenProbeFileSystemViewAction(ILogger logger, IProbe probe, IFileSystemFactory factory) {
super("Browse File System");
setImageDescriptor(Activator.getInstance().getImageCache().getDescriptor("icons/folders.png"));
page = getActivePage();
this.logger = logger;
this.probe = probe;
this.fileSystemFactory = 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 filesystem view", e);
}
}
private void openProcessView() throws PartInitException {
IViewPart view = page.showView(FileSystemView.ID, "File System", IWorkbenchPage.VIEW_ACTIVATE);
if(!(view instanceof FileSystemView))
return;
FileSystemView fsView = (FileSystemView) view;
IFileSystem filesystem = fileSystemFactory.createForProbe(probe);
fsView.setInput(filesystem);
fsView.setName(probe.getName());
}
}