@Override
public HttpResponseOutputStream<String> write(final Path file, final TransferStatus status, final ConnectionCallback callback) throws BackgroundException {
final List<Header> headers = new ArrayList<Header>();
if(status.isAppend()) {
final HttpRange range = HttpRange.withStatus(status);
if(-1L == range.getEnd()) {
throw new UnsupportedException("Content-Range with unknown file size is not supported");
}
else {
final String header = String.format("bytes %d-%d/%d", range.getStart(), range.getEnd(),
status.getOffset() + status.getLength());
if(log.isDebugEnabled()) {
log.debug(String.format("Add range header %s for file %s", header, file));
}
headers.add(new BasicHeader(HttpHeaders.CONTENT_RANGE, header));
}
}
if(expect) {
if(status.getLength() > 0L) {
headers.add(new BasicHeader(HTTP.EXPECT_DIRECTIVE, HTTP.EXPECT_CONTINUE));
}
}
if(status.getLockId() != null) {
headers.add(new BasicHeader(HttpHeaders.IF, String.format("(<%s>)", status.getLockId())));
}
return this.write(file, headers, status);
}