1 | /** |
2 | * |
3 | * Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com> |
4 | * |
5 | * ==================================================================== |
6 | * Licensed under the Apache License, Version 2.0 (the "License"); |
7 | * you may not use this file except in compliance with the License. |
8 | * You may obtain a copy of the License at |
9 | * |
10 | * http://www.apache.org/licenses/LICENSE-2.0 |
11 | * |
12 | * Unless required by applicable law or agreed to in writing, software |
13 | * distributed under the License is distributed on an "AS IS" BASIS, |
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
15 | * See the License for the specific language governing permissions and |
16 | * limitations under the License. |
17 | * ==================================================================== |
18 | */ |
19 | package org.jclouds.openstack.swift.functions; |
20 | |
21 | import javax.inject.Inject; |
22 | |
23 | import org.jclouds.http.HttpRequest; |
24 | import org.jclouds.http.HttpResponse; |
25 | import org.jclouds.openstack.swift.domain.MutableObjectInfoWithMetadata; |
26 | import org.jclouds.openstack.swift.domain.SwiftObject; |
27 | import org.jclouds.rest.InvocationContext; |
28 | |
29 | import com.google.common.base.Function; |
30 | |
31 | /** |
32 | * Parses response headers and creates a new SwiftObject from them and the HTTP content. |
33 | * |
34 | * @see ParseMetadataFromHeaders |
35 | * @author Adrian Cole |
36 | */ |
37 | public class ParseObjectFromHeadersAndHttpContent implements Function<HttpResponse, SwiftObject>, |
38 | InvocationContext<ParseObjectFromHeadersAndHttpContent> { |
39 | |
40 | private final ParseObjectInfoFromHeaders infoParser; |
41 | private final SwiftObject.Factory objectProvider; |
42 | |
43 | @Inject |
44 | public ParseObjectFromHeadersAndHttpContent(ParseObjectInfoFromHeaders infoParser, |
45 | SwiftObject.Factory objectProvider) { |
46 | this.infoParser = infoParser; |
47 | this.objectProvider = objectProvider; |
48 | } |
49 | |
50 | public SwiftObject apply(HttpResponse from) { |
51 | MutableObjectInfoWithMetadata metadata = infoParser.apply(from); |
52 | if (metadata.getHash() != null) |
53 | from.getPayload().getContentMetadata().setContentMD5(metadata.getHash()); |
54 | SwiftObject object = objectProvider.create(metadata); |
55 | object.getAllHeaders().putAll(from.getHeaders()); |
56 | object.setPayload(from.getPayload()); |
57 | return object; |
58 | } |
59 | |
60 | @Override |
61 | public ParseObjectFromHeadersAndHttpContent setContext(HttpRequest request) { |
62 | infoParser.setContext(request); |
63 | return this; |
64 | } |
65 | } |