package mireka;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class LongMailData implements MailData {
@Override
public void dispose() {
// do nothing
}
@Override
public InputStream getInputStream() throws IOException {
return new InputStreamGenerator(ResourceLoader.loadResource(getClass(),
"emptyMail.eml"));
}
@Override
public void writeTo(OutputStream out) throws IOException {
InputStream in = getInputStream();
byte[] buffer = new byte[8192];
int cRead;
while (-1 != (cRead = in.read(buffer))) {
out.write(buffer, 0, cRead);
}
in.close();
}
private static class InputStreamGenerator extends InputStream {
private final byte[] heading;
private Part part = Part.Heading;
private int i = 0;
public InputStreamGenerator(byte[] heading) {
this.heading = heading;
}
@Override
public int read() throws IOException {
int result;
switch (part) {
case Heading:
result = heading[i++];
if (i == heading.length) {
part = Part.Body;
i = 0;
}
return result;
case Body:
int iColumn = i++ % 80;
if (iColumn == 78)
result = '\r';
else if (iColumn == 79)
result = '\n';
else
result = 'X';
if (i == 500 * 1000 * 1000) {
part = Part.Eof;
i = 0;
}
return result;
case Eof:
return -1;
default:
throw new RuntimeException();
}
}
private static enum Part {
Heading, Body, Eof;
}
}
}