-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCBBasePart.java
More file actions
67 lines (53 loc) · 2.25 KB
/
Copy pathCBBasePart.java
File metadata and controls
67 lines (53 loc) · 2.25 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
/*
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 org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;
/**
* Parent class for FilePart and StringPart.
*/
abstract class CBBasePart implements CBPart {
protected static final byte[] CRLF = EncodingUtils.getAsciiBytes(CBMultipartEntity.CRLF);
protected interface IHeadersProvider {
public String getContentDisposition();
public String getContentType();
public String getContentTransferEncoding();
}
protected IHeadersProvider headersProvider; // must be initialized in descendant constructor
private byte[] header;
protected byte[] getHeader(CBBoundary boundary) {
if (header == null) {
header = generateHeader(boundary); // lazy init
}
return header;
}
private byte[] generateHeader(CBBoundary boundary) {
if (headersProvider == null) {
throw new RuntimeException("Uninitialized headersProvider"); //$NON-NLS-1$
}
final ByteArrayBuffer buf = new ByteArrayBuffer(256);
append(buf, boundary.getStartingBoundary());
append(buf, headersProvider.getContentDisposition());
append(buf, CRLF);
append(buf, headersProvider.getContentType());
append(buf, CRLF);
append(buf, headersProvider.getContentTransferEncoding());
append(buf, CRLF);
append(buf, CRLF);
return buf.toByteArray();
}
private static void append(ByteArrayBuffer buf, String data) {
append(buf, EncodingUtils.getAsciiBytes(data));
}
private static void append(ByteArrayBuffer buf, byte[] data) {
buf.append(data, 0, data.length);
}
}