1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.jetty.client;
16
17 import java.io.ByteArrayOutputStream;
18 import java.io.File;
19 import java.io.FileInputStream;
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.io.UnsupportedEncodingException;
23
24 import org.mortbay.io.Buffer;
25 import org.mortbay.io.BufferUtil;
26 import org.mortbay.jetty.HttpHeaders;
27 import org.mortbay.util.StringUtil;
28
29
30
31
32
33 public class ContentExchange extends CachedExchange
34 {
35 int _contentLength = 1024;
36 String _encoding = "utf-8";
37 ByteArrayOutputStream _responseContent;
38
39 File _fileForUpload;
40
41 public ContentExchange()
42 {
43 super(false);
44 }
45
46
47 public ContentExchange(boolean cacheFields)
48 {
49 super(cacheFields);
50 }
51
52
53 public String getResponseContent() throws UnsupportedEncodingException
54 {
55 if (_responseContent != null)
56 {
57 return _responseContent.toString(_encoding);
58 }
59 return null;
60 }
61
62
63 protected void onResponseHeader(Buffer name, Buffer value) throws IOException
64 {
65 super.onResponseHeader(name,value);
66 int header = HttpHeaders.CACHE.getOrdinal(value);
67 switch (header)
68 {
69 case HttpHeaders.CONTENT_LENGTH_ORDINAL:
70 _contentLength = BufferUtil.toInt(value);
71 break;
72 case HttpHeaders.CONTENT_TYPE_ORDINAL:
73
74 String mime = StringUtil.asciiToLowerCase(value.toString());
75 int i = mime.indexOf("charset=");
76 if (i > 0)
77 {
78 mime = mime.substring(i + 8);
79 i = mime.indexOf(';');
80 if (i > 0)
81 mime = mime.substring(0,i);
82 }
83 if (mime != null && mime.length() > 0)
84 _encoding = mime;
85 break;
86 }
87 }
88
89 protected void onResponseContent(Buffer content) throws IOException
90 {
91 super.onResponseContent( content );
92 if (_responseContent == null)
93 _responseContent = new ByteArrayOutputStream(_contentLength);
94 content.writeTo(_responseContent);
95 }
96
97 protected void onRetry() throws IOException
98 {
99 if ( _fileForUpload != null )
100 {
101 _requestContent = null;
102 _requestContentSource = getInputStream();
103 }
104 else if ( _requestContentSource != null )
105 {
106 throw new IOException("Unsupported Retry attempt, no registered file for upload.");
107 }
108
109 super.onRetry();
110 }
111
112 private InputStream getInputStream() throws IOException
113 {
114 return new FileInputStream( _fileForUpload );
115 }
116
117 public File getFileForUpload()
118 {
119 return _fileForUpload;
120 }
121
122 public void setFileForUpload(File fileForUpload) throws IOException
123 {
124 this._fileForUpload = fileForUpload;
125 _requestContentSource = getInputStream();
126 }
127 }