public long getLength() { return all.getLength(); }
public Fountain getBody() { return body; }
- public Part(Fountain all) {
- this.headers = new Headers(all);
+ public JS get(JS key) throws JSExn {
+ String k = JSU.toString(key);
+ if ("body".equals(k)) {
+ StringBuffer sb = new StringBuffer();
+ getBody().getStream().transcribe(sb);
+ return JSU.S(sb.toString());
+ }
+ return super.get(key);
+ }
+
+ public Part(final Fountain fount, String[] keyval) {
+ Headers h = new Headers(fount);
+ this.headers = keyval==null ? h : new Headers(h, keyval);
String ctype = headers.get("content-type");
this.encoding = headers.get("content-transfer-encoding");
String enc = this.encoding;
ctype = "application/octet-stream";
}
this.contentType = new ContentType(ctype, headers.get("content-description"), headers.get("content-id"), encoding);
- this.all = all;
+ // FIXME: this is a horrible, tangled mess.
this.body = new Fountain() {
- public int getNumLines() { return Stream.countLines(getStream()); }
- public long getLength() { return Part.this.getLength() - headers.getLength() - 2 /*CRLF*/; }
- public Stream getStream() { return transformBodyStream(Headers.skip(Part.this.all.getStream())); }
+ public int getNumLines() { return Stream.countLines(this.getStream()); }
+ public long getLength() { return Stream.countBytes(this.getStream()); }
+ public Stream getStream() { return transformBodyStream(Headers.skip(fount.getStream())); }
};
+ this.all =
+ keyval==null
+ ? fount
+ : Fountain.Util.concat(this.headers, Fountain.Util.create("\r\n"), this.body);
}
private Stream transformBodyStream(Stream body) {