blob: eb6b2a808be78695bf6a79e56f462495432dd31b [file] [log] [blame]
package org.eclipse.scout.rt.server.servlet31;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import org.eclipse.scout.commons.logger.IScoutLogger;
import org.eclipse.scout.commons.logger.ScoutLogManager;
import org.eclipse.scout.rt.server.servlet.IServletHelperService;
import org.eclipse.scout.service.AbstractService;
/**
* {@link IServletHelperService} for servlet 3.1
*/
public class ServletHelperService extends AbstractService implements IServletHelperService {
private static final IScoutLogger LOG = ScoutLogManager.getLogger(ServletHelperService.class);
@Override
public ServletInputStream createInputStream(final InputStream in) {
return new ServletInputStream() {
private ReadListener m_readListener;
private boolean m_finished = false;
@Override
public int read() throws IOException {
final int next = in.read();
if (next == -1) {
m_finished = true;
if (m_readListener != null) {
m_readListener.onAllDataRead();
}
}
return next;
}
@Override
public boolean isFinished() {
return m_finished;
}
@Override
public boolean isReady() {
return true;
}
@Override
public void setReadListener(ReadListener readListener) {
m_readListener = readListener;
if (m_readListener != null) {
try {
m_readListener.onDataAvailable();
}
catch (IOException e) {
LOG.error("Error reading stream", e);
m_readListener.onError(e);
}
}
}
};
}
}