package com.github.fabeclipse.textedgrep.internal.ui.cmd; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.text.IDocument; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.texteditor.AbstractTextEditor; import com.github.fabeclipse.textedgrep.Activator; import com.github.fabeclipse.textedgrep.internal.ui.GrepView; import com.github.fabeclipse.textedgrep.internal.ui.NonExistingFileEditorInput; public class OriginalRangeToUntitledFile extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { IWorkbenchPart part = HandlerUtil.getActivePart(event); IWorkbenchWindow activeWorkbenchWindow = HandlerUtil.getActiveWorkbenchWindow(event); IFileStore fileStore = queryFileStore(); IEditorInput input = createEditorInput(fileStore); String editorId = getEditorId(activeWorkbenchWindow.getWorkbench(), fileStore); IWorkbenchPage page = activeWorkbenchWindow.getActivePage(); try { IEditorPart editor = page.openEditor(input, editorId); setEditorContentFromGrepView(part, editor); } catch (PartInitException e) { // TODO: log } return null; } private void setEditorContentFromGrepView(IWorkbenchPart part, IEditorPart editor) { if (editor instanceof AbstractTextEditor && part instanceof GrepView) { AbstractTextEditor textEditor = (AbstractTextEditor) editor; IDocument document = textEditor.getDocumentProvider().getDocument(editor.getEditorInput()); if (document != null) { GrepView gv = (GrepView) part; document.set(gv.getOriginalForCurrentSelection()); } } } private IFileStore queryFileStore() { IPath stateLocation= Activator.getInstance().getStateLocation(); IPath path= stateLocation.append("/_" + new Object().hashCode()); //$NON-NLS-1$ return EFS.getLocalFileSystem().getStore(path); } private String getEditorId(IWorkbench workbench, IFileStore fileStore) { IEditorRegistry editorRegistry= workbench.getEditorRegistry(); IEditorDescriptor descriptor= editorRegistry.getDefaultEditor(fileStore.getName()); if (descriptor != null) return descriptor.getId(); return EditorsUI.DEFAULT_TEXT_EDITOR_ID; } private IEditorInput createEditorInput(IFileStore fileStore) { return new NonExistingFileEditorInput(fileStore, "Grep Result"); } }