/******************************************************************************* * Copyright (c) 2009 Andrey Loskutov. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * Contributor: Andrey Loskutov - initial API and implementation *******************************************************************************/ package de.loskutov.anyedit.actions.replace; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.window.Window; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.dialogs.ListDialog; import de.loskutov.anyedit.AnyEditToolsPlugin; import de.loskutov.anyedit.actions.compare.CompareWithEditorAction; import de.loskutov.anyedit.actions.compare.CompareWithEditorAction.EditorsContentProvider; import de.loskutov.anyedit.ui.editor.AbstractEditor; /** * @author Andrey * */ public class ReplaceWithEditorAction extends ReplaceWithAction { public ReplaceWithEditorAction() { super(); } @Override public void selectionChanged(IAction action, ISelection selection) { // restore disabled state and let us re-test enablement action.setEnabled(true); super.selectionChanged(action, selection); if (action.isEnabled()) { Object[] elements = new EditorsContentProvider(editor, selectedContent).getElements(null); action.setEnabled(elements.length > 0); } } @Override protected InputStream createInputStream() { ListDialog dialog = CompareWithEditorAction.createSelectionDialog(editor, selectedContent, "Select an opened editor to get content from:"); int result = dialog.open(); if (result == Window.OK) { Object[] objects = dialog.getResult(); if (objects != null && objects.length == 1 && objects[0] instanceof IEditorReference) { IEditorReference reference = (IEditorReference) objects[0]; IEditorPart editorPart = reference.getEditor(true); AbstractEditor editor1 = new AbstractEditor(editorPart); IFile file = editor1.getIFile(); if (file != null) { if (file.getLocation() != null) { try { return file.getContents(); } catch (CoreException e) { AnyEditToolsPlugin.logError( "Can't get file content: " + file, e); } } try { return new FileInputStream(file.getFullPath().toFile()); } catch (FileNotFoundException e) { AnyEditToolsPlugin.logError("File not found: " + file, e); } } File localFile = editor1.getFile(); if (localFile != null) { try { return new FileInputStream(localFile); } catch (FileNotFoundException e) { AnyEditToolsPlugin.logError("File not found: " + localFile, e); } } else { IDocument document = editor1.getDocument(); if(document != null) { String content = document.get(); if (content != null) { try { return new ByteArrayInputStream(content.getBytes(editor1 .computeEncoding())); } catch (UnsupportedEncodingException e) { return new ByteArrayInputStream(content.getBytes()); } } } } } } return null; } }