-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCBStringPart.java
More file actions
90 lines (75 loc) · 3.4 KB
/
Copy pathCBStringPart.java
File metadata and controls
90 lines (75 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
Copyright (c) 2013 Cloudbase.io Limited
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the specific language governing permissions and limitations under
the License.
*/
package com.cloudbase;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import org.apache.http.protocol.HTTP;
public final class CBStringPart extends CBBasePart {
private final byte[] valueBytes;
/**
* @param name String - name of parameter (may not be <code>null</code>).
* @param value String - value of parameter (may not be <code>null</code>).
* @param charset String, if null is passed then default "ISO-8859-1" charset is used.
*
* @throws IllegalArgumentException if either <code>value</code>
* or <code>name</code> is <code>null</code>.
* @throws RuntimeException if <code>charset</code> is unsupported by OS.
*/
public CBStringPart(String name, String value, String charset) {
if (name == null) {
throw new IllegalArgumentException("Name may not be null"); //$NON-NLS-1$
}
if (value == null) {
throw new IllegalArgumentException("Value may not be null"); //$NON-NLS-1$
}
final String partName = CBUrlEncodingHelper.encode(name, HTTP.DEFAULT_PROTOCOL_CHARSET);
if (charset == null) {
charset = HTTP.DEFAULT_CONTENT_CHARSET;
}
final String partCharset = charset;
try {
this.valueBytes = value.getBytes(partCharset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
headersProvider = new IHeadersProvider() {
public String getContentDisposition() {
return "Content-Disposition: form-data; name=\"" + partName + '"'; //$NON-NLS-1$
}
public String getContentType() {
return "Content-Type: " + HTTP.PLAIN_TEXT_TYPE + HTTP.CHARSET_PARAM + partCharset; //$NON-NLS-1$
}
public String getContentTransferEncoding() {
return "Content-Transfer-Encoding: 8bit"; //$NON-NLS-1$
}
};
}
/**
* Default "ISO-8859-1" charset is used.
* @param name String - name of parameter (may not be <code>null</code>).
* @param value String - value of parameter (may not be <code>null</code>).
*
* @throws IllegalArgumentException if either <code>value</code>
* or <code>name</code> is <code>null</code>.
*/
public CBStringPart(String name, String value) {
this(name, value, null);
}
public long getContentLength(CBBoundary boundary) {
return getHeader(boundary).length + valueBytes.length + CRLF.length;
}
public void writeTo(final OutputStream out, CBBoundary boundary) throws IOException {
out.write(getHeader(boundary));
out.write(valueBytes);
out.write(CRLF);
}
}