| /******************************************************************************* |
| * Copyright (c) 2010, 2017 SAP AG and others. |
| * 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 |
| * |
| * Contributors: |
| * Lazar Kirchev, SAP AG - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.equinox.console.common; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| |
| /** |
| * This class represents a generic handler of content, read from some input stream. It reads from the |
| * stream, and passes what is read to a processor, which performs some actions on the content, |
| * eventually writing to an output stream. This handler should be customized with a concrete content processor. |
| */ |
| public abstract class InputHandler extends Thread { |
| |
| protected Scanner inputScanner; |
| protected OutputStream out; |
| protected ConsoleInputStream in; |
| protected InputStream input; |
| protected byte[] buffer; |
| protected static final int MAX_SIZE = 2048; |
| |
| public InputHandler(InputStream input, ConsoleInputStream in, OutputStream out) { |
| this.input = input; |
| this.in = in; |
| this.out = out; |
| buffer = new byte[MAX_SIZE]; |
| } |
| |
| @Override |
| public void run() { |
| int count; |
| try { |
| while ((count = input.read(buffer)) > -1) { |
| for (int i = 0; i < count; i++) { |
| inputScanner.scan(buffer[i]); |
| } |
| } |
| } catch (IOException e) { |
| // Printing stack trace is not needed since the streams are closed immediately |
| // do nothing |
| } finally { |
| try { |
| in.close(); |
| } catch (IOException e1) { |
| // do nothing |
| } |
| try { |
| out.close(); |
| } catch (IOException e1) { |
| // do nothing |
| } |
| } |
| } |
| |
| public Scanner getScanner() { |
| return inputScanner; |
| } |
| |
| } |