/******************************************************************************* * 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.InputStream; import java.io.UnsupportedEncodingException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.viewers.ISelection; import de.loskutov.anyedit.util.EclipseUtils; /** * @author Andrey */ public class ReplaceWithClipboardAction extends ReplaceWithAction { public ReplaceWithClipboardAction() { super(); } @Override public void selectionChanged(IAction action, ISelection selection) { super.selectionChanged(action, selection); if (action.isEnabled()) { /* XXX bug in SWT: if running eclipse in debugger, debugger stops to respond on Windows * as soon as the first eclipse tries to access the clipboard at org.eclipse.swt.internal.ole.win32.COM.VtblCall(Native Method) at org.eclipse.swt.internal.ole.win32.IDataObject.GetData(IDataObject.java:25) at org.eclipse.swt.dnd.TextTransfer.nativeToJava(TextTransfer.java:121) at org.eclipse.swt.dnd.Clipboard.getContents(Clipboard.java:332) at org.eclipse.swt.dnd.Clipboard.getContents(Clipboard.java:253) at de.loskutov.anyedit.util.EclipseUtils.getClipboardContent(EclipseUtils.java:517) at de.loskutov.anyedit.actions.compare.CompareWithClipboardAction.selectionChanged(CompareWithClipboardAction.java:35) at org.eclipse.ui.internal.PluginAction.refreshEnablement(PluginAction.java:206) at org.eclipse.ui.internal.PluginAction.selectionChanged(PluginAction.java:277) */ // String clipboardContent = EclipseUtils.getClipboardContent(); // if (clipboardContent == null || clipboardContent.length() == 0) { // action.setEnabled(false); // } } } @Override protected InputStream createInputStream() { String clipbContent = EclipseUtils.getClipboardContent(); if (clipbContent == null || clipbContent.length() == 0) { return null; } String newLine = null; IDocument document = editor.getDocument(); if (document != null){ newLine = EclipseUtils.getNewLineFromDocument(document); } else if (selectedContent != null && selectedContent.getIFile() != null) { newLine = EclipseUtils.getNewLineFromFile(selectedContent.getIFile()); } String property = System.getProperty("line.separator"); if (newLine == null || newLine.equals(property)) { try { return new ByteArrayInputStream(clipbContent.getBytes(editor.computeEncoding())); } catch (UnsupportedEncodingException e) { return new ByteArrayInputStream(clipbContent.getBytes()); } } try { return new ByteArrayInputStream(clipbContent.replaceAll(property, newLine).getBytes( editor.computeEncoding())); } catch (UnsupportedEncodingException e) { return new ByteArrayInputStream(clipbContent.replaceAll(property, newLine).getBytes()); } } }