ca16e89e40dd42058eaa218318d78bd9443be552
[pub/Android/ownCloud.git] / src / eu / alefzero / webdav / FileRequestEntity.java
1 package eu.alefzero.webdav;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.io.OutputStream;
8
9 import org.apache.commons.httpclient.methods.RequestEntity;
10
11 import eu.alefzero.owncloud.files.interfaces.OnDatatransferProgressListener;
12
13 /**
14 * A RequestEntity that represents a File.
15 *
16 */
17 public class FileRequestEntity implements RequestEntity {
18
19 final File file;
20 final String contentType;
21 OnDatatransferProgressListener listener;
22
23 public FileRequestEntity(final File file, final String contentType) {
24 super();
25 if (file == null) {
26 throw new IllegalArgumentException("File may not be null");
27 }
28 this.file = file;
29 this.contentType = contentType;
30 }
31
32 public long getContentLength() {
33 return this.file.length();
34 }
35
36 public String getContentType() {
37 return this.contentType;
38 }
39
40 public boolean isRepeatable() {
41 return true;
42 }
43
44 public void setOnDatatransferProgressListener(OnDatatransferProgressListener listener) {
45 this.listener = listener;
46 }
47
48 public void writeRequest(final OutputStream out) throws IOException {
49 byte[] tmp = new byte[4096];
50 int i = 0;
51 InputStream instream = new FileInputStream(this.file);
52 try {
53 while ((i = instream.read(tmp)) >= 0) {
54 out.write(tmp, 0, i);
55 if (listener != null)
56 listener.transferProgress(i);
57 }
58 } finally {
59 instream.close();
60 }
61 }
62
63 }