Author: yradtsevich
Date: 2012-03-29 16:41:38 -0400 (Thu, 29 Mar 2012)
New Revision: 39925
Added:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/BrowserSimCallback.java
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/OpenFileCallback.java
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/ViewSourceCallback.java
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/TransparentReader.java
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/META-INF/MANIFEST.MF
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/BrowserSim.java
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/Messages.java
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/messages.properties
Log:
https://issues.jboss.org/browse/JBIDE-11179 : BrowserSim - add a view source option
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/BrowserSim.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/BrowserSim.java 2012-03-29
20:38:25 UTC (rev 39924)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/BrowserSim.java 2012-03-29
20:41:38 UTC (rev 39925)
@@ -10,6 +10,7 @@
******************************************************************************/
package org.jboss.tools.vpe.browsersim.ui;
+import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -18,6 +19,8 @@
import java.util.Observable;
import java.util.Observer;
+import javax.xml.bind.DatatypeConverter;
+
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
@@ -64,6 +67,12 @@
public class BrowserSim {
private static final String DEFAULT_URL = "about:blank";
//"http://www.w3schools.com/js/tryit_view.asp?filename=try_nav_useragent";
//$NON-NLS-1$
private static final String[] BROWSERSIM_ICONS = {"icons/browsersim_16px.png",
"icons/browsersim_32px.png", "icons/browsersim_64px.png",
"icons/browsersim_128px.png", "icons/browsersim_256px.png", };
//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$//$NON-NLS-5$
+ private static final String BROWSERSIM_CLASS_NAME =
"org.jboss.tools.vpe.browsersim.ui.BrowserSim";
+ /** @see org.jboss.tools.vpe.browsersim.eclipse.callbacks.OpenFileCallback */
+ private static final String OPEN_FILE_COMMAND = BROWSERSIM_CLASS_NAME +
".command.openFile:";
+ /** @see org.jboss.tools.vpe.browsersim.eclipse.callbacks.ViewSourceCallback */
+ private static final String VIEW_SOURCE_COMMAND = BROWSERSIM_CLASS_NAME +
".command.viewSource:";
+
private Display display;
private String homeUrl;
private DevicesListHolder devicesListHolder;
@@ -350,6 +359,7 @@
private void addFileMenuItems(Menu menu) {
addOpenInDefaultBrowserItem(menu);
+ addViewSourceItem(menu);
MenuItem exit = new MenuItem(menu, SWT.PUSH);
exit.setText(Messages.BrowserSim_EXIT);
@@ -393,6 +403,30 @@
}
});
}
+
+ public void addViewSourceItem(Menu menu) {
+ MenuItem openInDefaultBrowser = new MenuItem(menu, SWT.PUSH);
+ openInDefaultBrowser.setText(Messages.BrowserSim_VIEW_PAGE_SOURCE);
+ openInDefaultBrowser.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ if (skin.getBrowser().getUrl().startsWith("file:")) {
+ URI uri = null;
+ try {
+ uri = new URI(skin.getBrowser().getUrl());
+ File sourceFile = new File(uri);
+ System.out.println(OPEN_FILE_COMMAND + sourceFile.getAbsolutePath()); // send
command to Eclipse
+ } catch (URISyntaxException e1) {
+ e1.printStackTrace();
+ }
+ } else {
+ System.out.println(VIEW_SOURCE_COMMAND + skin.getBrowser().getUrl()); // send
command to Eclipse
+ String source = skin.getBrowser().getText();
+ String base64Source = DatatypeConverter.printBase64Binary(source.getBytes());
+ System.out.println(base64Source);
+ }
+ }
+ });
+ }
private void showErrorMessage(Shell shell, String message) {
System.err.println(message);
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/Messages.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/Messages.java 2012-03-29
20:38:25 UTC (rev 39924)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/Messages.java 2012-03-29
20:41:38 UTC (rev 39925)
@@ -29,6 +29,7 @@
public static String BrowserSim_OPEN_IN_DEFAULT_BROWSER;
public static String BrowserSim_TURN_LEFT;
public static String BrowserSim_TURN_RIGHT;
+ public static String BrowserSim_VIEW_PAGE_SOURCE;
public static String EditDeviceDialog_CANCEL;
public static String EditDeviceDialog_EDIT_DEVICE;
public static String EditDeviceDialog_HEIGHT;
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/messages.properties
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/messages.properties 2012-03-29
20:38:25 UTC (rev 39924)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim/src/org/jboss/tools/vpe/browsersim/ui/messages.properties 2012-03-29
20:41:38 UTC (rev 39925)
@@ -10,6 +10,7 @@
BrowserSim_OPEN_IN_DEFAULT_BROWSER=Open in default browser
BrowserSim_TURN_LEFT=Turn Left
BrowserSim_TURN_RIGHT=Turn Right
+BrowserSim_VIEW_PAGE_SOURCE=View page source
EditDeviceDialog_CANCEL=Cancel
EditDeviceDialog_EDIT_DEVICE=Edit Device
EditDeviceDialog_HEIGHT=Height:
Modified: trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/META-INF/MANIFEST.MF
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/META-INF/MANIFEST.MF 2012-03-29
20:38:25 UTC (rev 39924)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/META-INF/MANIFEST.MF 2012-03-29
20:41:38 UTC (rev 39925)
@@ -11,7 +11,8 @@
org.eclipse.jface.text,
org.eclipse.ui.editors,
org.eclipse.ui.ide,
- org.eclipse.ui.browser
+ org.eclipse.ui.browser,
+ org.eclipse.core.filesystem
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Vendor: JBoss by Red Hat
Added:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/BrowserSimCallback.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/BrowserSimCallback.java
(rev 0)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/BrowserSimCallback.java 2012-03-29
20:41:38 UTC (rev 39925)
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2012 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.vpe.browsersim.eclipse.callbacks;
+
+import java.io.IOException;
+
+import org.jboss.tools.vpe.browsersim.eclipse.util.TransparentReader;
+
+/**
+ * @author Yahor Radtsevich (yradtsevich)
+ */
+public interface BrowserSimCallback {
+ String getCallbackId();
+ void call(String lastString, TransparentReader reader) throws IOException;
+}
Added:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/OpenFileCallback.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/OpenFileCallback.java
(rev 0)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/OpenFileCallback.java 2012-03-29
20:41:38 UTC (rev 39925)
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2012 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.vpe.browsersim.eclipse.callbacks;
+
+import java.io.File;
+
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.jboss.tools.vpe.browsersim.eclipse.util.BrowserSimLauncher;
+import org.jboss.tools.vpe.browsersim.eclipse.util.TransparentReader;
+
+
+/**
+ * Handler for the BrowserSim commands printed to the console in the following form:
+ *
<pre>org.jboss.tools.vpe.browsersim.ui.BrowserSim.command.openFile:file:///path/to/file</code>
+ *
+ * @author Yahor Radtsevich (yradtsevich)
+ */
+public class OpenFileCallback implements BrowserSimCallback {
+ private static final String OPEN_FILE_COMMAND = BrowserSimLauncher.BROWSERSIM_CLASS_NAME
+ ".command.openFile:";
+
+ /* (non-Javadoc)
+ * @see
org.jboss.tools.vpe.browsersim.eclipse.callbacks.BrowserSimCallback#getCallbackId()
+ */
+ @Override
+ public String getCallbackId() {
+ return OPEN_FILE_COMMAND;
+ }
+
+ /* (non-Javadoc)
+ * @see
org.jboss.tools.vpe.browsersim.eclipse.callbacks.BrowserSimCallback#callback(java.io.InputStreamReader)
+ */
+ @Override
+ public void call(final String lastString, TransparentReader reader) {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ File fileToOpen = new File(lastString.substring(OPEN_FILE_COMMAND.length()));
+
+ if (fileToOpen.exists() && fileToOpen.isFile()) {
+ IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI());
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ IWorkbenchPage page = window != null ? window.getActivePage() : null;
+
+ if (page != null) {
+ try {
+ IDE.openEditorOnFileStore(page, fileStore);
+ } catch (PartInitException e) {
+ //TODO: put exception handler
+ }
+ } else {
+ // TODO: log exception
+ }
+ } else {
+ //TODO: Do something if the file does not exist
+ }
+ }
+ });
+ }
+}
Added:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/ViewSourceCallback.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/ViewSourceCallback.java
(rev 0)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/callbacks/ViewSourceCallback.java 2012-03-29
20:41:38 UTC (rev 39925)
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2012 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.vpe.browsersim.eclipse.callbacks;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.bind.DatatypeConverter;
+
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.IStorageEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.jboss.tools.vpe.browsersim.eclipse.util.BrowserSimLauncher;
+import org.jboss.tools.vpe.browsersim.eclipse.util.TransparentReader;
+
+/**
+ * Handler for the BrowserSim commands printed to the console in the following form:
+ * <pre>
+ *
org.jboss.tools.vpe.browsersim.ui.BrowserSim.command.viewSource:http://ex...
+ * Base64EncodedPageSource==</code>
+ * @author Yahor Radtsevich (yradtsevich)
+ */
+public class ViewSourceCallback implements BrowserSimCallback {
+ private static final String VIEW_SOURCE_COMMAND =
BrowserSimLauncher.BROWSERSIM_CLASS_NAME + ".command.viewSource:";
+
+ /* (non-Javadoc)
+ * @see
org.jboss.tools.vpe.browsersim.eclipse.callbacks.BrowserSimCallback#getCallbackId()
+ */
+ @Override
+ public String getCallbackId() {
+ return VIEW_SOURCE_COMMAND;
+ }
+
+ /* (non-Javadoc)
+ * @see
org.jboss.tools.vpe.browsersim.eclipse.callbacks.BrowserSimCallback#callback(java.io.InputStreamReader)
+ */
+ @Override
+ public void call(final String lastString, TransparentReader reader) throws IOException
{
+ final String address = lastString.substring(VIEW_SOURCE_COMMAND.length());
+ String encodedSource = reader.readLine(false);
+ final String source = new String(DatatypeConverter.parseBase64Binary(encodedSource));
+
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ openInMemoryHtmlEditor(source, address, address);
+ }
+ });
+ }
+
+ private void openInMemoryHtmlEditor(String content, String name, String toolTip) {
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ IWorkbenchPage page = window != null ? window.getActivePage() : null;
+ if (page != null) {
+ try {
+ IEditorDescriptor editorDescriptor = PlatformUI.getWorkbench()
+ .getEditorRegistry().getDefaultEditor("view-source.html"); // get default
editor for .html
+ String editorId;
+ if (editorDescriptor != null && editorDescriptor.isInternal()) {
+ editorId = editorDescriptor.getId();
+ } else {
+ editorId = "org.eclipse.ui.DefaultTextEditor";
+ }
+
+ IStorage storage = new StringStorage("", // see the long comment below to
know why an empty storage is created
+ "view-source.html"); // .html extension is needed to enable code
highlighting in the WTP HTML editor
+ IStorageEditorInput input = new StringInput(storage, name, toolTip);
+ ITextEditor editor = (ITextEditor) page.openEditor(input, editorId);
+
+ /* We change content of the editor AFTER the editor is created
+ * as a workaround for the following WTP bug.
+ * The essence of the bug is that if given HTML page contains a link
+ * to an external DTD, then WTP HTML editor tries to access this DTD before the
editor
+ * is created and freezes UI.
+ * See
http://www.eclipse.org/forums/index.php/m/639937/
+ */
+ IDocument document =
editor.getDocumentProvider().getDocument(editor.getEditorInput());
+ document.set(content);
+ editor.doSave(null); // reset resource-changed marker
+ } catch (PartInitException e) {
+ // TODO: log exception
+ }
+ } else {
+ // TODO: log exception
+ }
+ }
+}
+
+class StringInput implements IStorageEditorInput {
+ private IStorage storage;
+ private String name;
+ private String toolTip;
+
+ StringInput(IStorage storage, String name, String toolTip) {
+ this.storage = storage;
+ this.name = name;
+ this.toolTip = toolTip;
+ }
+
+ public boolean exists() {
+ return true;
+ }
+
+ public ImageDescriptor getImageDescriptor() {
+ return null;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public IPersistableElement getPersistable() {
+ return null;
+ }
+
+ public IStorage getStorage() {
+ return storage;
+ }
+
+ public String getToolTipText() {
+ return toolTip;
+ }
+
+ public Object getAdapter(Class adapter) {
+ return null;
+ }
+}
+
+class StringStorage implements IStorage {
+ private String string;
+ private String name;
+
+ StringStorage(String string, String name) {
+ this.string = string;
+ this.name = name;
+ }
+
+ public InputStream getContents() throws CoreException {
+ return new ByteArrayInputStream(string.getBytes());
+ }
+
+ public IPath getFullPath() {
+ return null;
+ }
+
+ public Object getAdapter(Class adapter) {
+ return null;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public boolean isReadOnly() {
+ return true;
+ }
+}
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java 2012-03-29
20:38:25 UTC (rev 39924)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java 2012-03-29
20:41:38 UTC (rev 39925)
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007-2011 Red Hat, Inc.
+ * Copyright (c) 2007-2012 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
@@ -10,13 +10,10 @@
******************************************************************************/
package org.jboss.tools.vpe.browsersim.eclipse.util;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
@@ -25,12 +22,18 @@
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.jboss.tools.vpe.browsersim.browser.PlatformUtil;
import org.jboss.tools.vpe.browsersim.eclipse.Activator;
+import org.jboss.tools.vpe.browsersim.eclipse.callbacks.BrowserSimCallback;
+import org.jboss.tools.vpe.browsersim.eclipse.callbacks.OpenFileCallback;
+import org.jboss.tools.vpe.browsersim.eclipse.callbacks.ViewSourceCallback;
import org.osgi.framework.Bundle;
/**
* @author "Yahor Radtsevich (yradtsevich)"
*/
public class BrowserSimLauncher {
+ public static final String BROWSERSIM_CLASS_NAME =
"org.jboss.tools.vpe.browsersim.ui.BrowserSim";
+ private static final BrowserSimCallback[] BROWSERSIM_CALLBACKS = { new
ViewSourceCallback(), new OpenFileCallback() };
+
public static void launchBrowserSim(String initialUrl) {
String pathSeparator = System.getProperty("path.separator");
try {
@@ -51,7 +54,7 @@
commandElements.add("-cp");
commandElements.add(classPath);
- commandElements.add("org.jboss.tools.vpe.browsersim.ui.BrowserSim");
+ commandElements.add(BROWSERSIM_CLASS_NAME);
if (initialUrl != null) {
commandElements.add(initialUrl);
}
@@ -62,16 +65,18 @@
Process browserSimProcess = processBuilder.start();
final InputStreamReader errorReader = new
InputStreamReader(browserSimProcess.getErrorStream());
- final InputStreamReader inputReader = new
InputStreamReader(browserSimProcess.getInputStream());
-
+ final Reader inputReader = new InputStreamReader(browserSimProcess.getInputStream());
new Thread() {
public void run() {
- int nextCharInt;
- String nextLine;
try {
- while ((nextCharInt = inputReader.read()) >= 0) {
- char nextChar = (char) nextCharInt;
- System.out.print(nextChar);
+ TransparentReader transparentReader = new TransparentReader(inputReader,
System.out);
+ String nextLine;
+ while ((nextLine = transparentReader.readLine(true)) != null) {
+ for (BrowserSimCallback callback : BROWSERSIM_CALLBACKS) {
+ if (nextLine.startsWith(callback.getCallbackId())) {
+ callback.call(nextLine, transparentReader);
+ }
+ }
}
} catch (IOException e) {
e.printStackTrace();
Added:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/TransparentReader.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/TransparentReader.java
(rev 0)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/TransparentReader.java 2012-03-29
20:41:38 UTC (rev 39925)
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2012 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.vpe.browsersim.eclipse.util;
+
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.Reader;
+
+/**
+ * @author Yahor Radtsevich (yradtsevich)
+ */
+public class TransparentReader {
+ private Reader reader;
+ private PrintStream output;
+ private int prevCharInt = -1;
+
+ public TransparentReader(Reader reader, PrintStream output) {
+ this.reader = reader;
+ this.output = output;
+ }
+
+ public String readLine(boolean forwardToConcole) throws IOException {
+ StringBuilder nextLine = new StringBuilder();
+ int nextCharInt;
+ boolean eolReached = false;
+ while ((nextCharInt = reader.read()) >= 0 && !eolReached) {
+ char nextChar = (char) nextCharInt;
+ if (forwardToConcole) {
+ output.print(nextChar);
+ }
+
+ if (nextChar == '\r' || nextChar == '\n') { // EOL
+ if ((nextChar == '\r' && prevCharInt != '\n') || (nextChar ==
'\n' && prevCharInt != '\r')) {//not second part of CR/LF
+ eolReached = true;
+ }
+ } else {
+ nextLine.append(nextChar);
+ }
+
+ prevCharInt = nextCharInt;
+ }
+
+ if (nextLine.length() == 0 && nextCharInt < 0) {// nothing read AND end
reached
+ return null;
+ } else {
+ return nextLine.toString();
+ }
+ }
+
+}