[jbosstools-commits] JBoss Tools SVN: r39925 - in trunk/vpe/plugins: org.jboss.tools.vpe.browsersim.eclipse/META-INF and 3 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Mar 29 16:41:39 EDT 2012


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://example.com/index.html
+ * 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();
+		}
+	}
+	
+}



More information about the jbosstools-commits mailing list