blob: 7bfe4ee9c54e03601892a0aef3dc5db563bf7672 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}