EMMA Coverage Report (generated Fri Apr 27 15:03:37 EDT 2012)
[all classes][org.jclouds.ec2.binders]

COVERAGE SUMMARY FOR SOURCE FILE [BindBlockDeviceMappingToIndexedFormParams.java]

nameclass, %method, %block, %line, %
BindBlockDeviceMappingToIndexedFormParams.java100% (1/1)100% (2/2)98%  (87/89)99%  (11.8/12)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class BindBlockDeviceMappingToIndexedFormParams100% (1/1)100% (2/2)98%  (87/89)99%  (11.8/12)
bindToRequest (HttpRequest, Object): HttpRequest 100% (1/1)98%  (84/86)99%  (10.8/11)
BindBlockDeviceMappingToIndexedFormParams (): void 100% (1/1)100% (3/3)100% (1/1)

1/**
2 * Licensed to jclouds, Inc. (jclouds) under one or more
3 * contributor license agreements.  See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership.  jclouds licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License.  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,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied.  See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19package org.jclouds.ec2.binders;
20 
21import static com.google.common.base.Preconditions.checkArgument;
22import static com.google.common.base.Preconditions.checkNotNull;
23import static java.lang.String.format;
24 
25import java.util.Map;
26import java.util.Map.Entry;
27 
28import org.jclouds.ec2.domain.BlockDevice;
29import org.jclouds.http.HttpRequest;
30import org.jclouds.http.utils.ModifyRequest;
31import org.jclouds.rest.Binder;
32 
33import com.google.common.collect.ImmutableMap;
34import com.google.common.collect.Multimap;
35import com.google.common.collect.Multimaps;
36 
37/**
38 * @author Oleksiy Yarmula
39 * @author Adrian Cole
40 */
41public class BindBlockDeviceMappingToIndexedFormParams implements Binder {
42 
43   private static final String deviceNamePattern = "BlockDeviceMapping.%d.DeviceName";
44   private static final String volumeIdPattern = "BlockDeviceMapping.%d.Ebs.VolumeId";
45   private static final String deleteOnTerminationPattern = "BlockDeviceMapping.%d.Ebs.DeleteOnTermination";
46 
47   @SuppressWarnings("unchecked")
48   @Override
49   public <R extends HttpRequest> R bindToRequest(R request, Object input) {
50      checkArgument(checkNotNull(input, "input") instanceof Map, "this binder is only valid for Map");
51      Map<String, BlockDevice> blockDeviceMapping = (Map<String, BlockDevice>) input;
52 
53      ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
54      int amazonOneBasedIndex = 1; // according to docs, counters must start with 1
55      for (Entry<String, BlockDevice> ebsBlockDeviceName : blockDeviceMapping.entrySet()) {
56         // not null by contract
57         builder.put(format(volumeIdPattern, amazonOneBasedIndex), ebsBlockDeviceName.getValue().getVolumeId());
58         builder.put(format(deviceNamePattern, amazonOneBasedIndex), ebsBlockDeviceName.getKey());
59         builder.put(format(deleteOnTerminationPattern, amazonOneBasedIndex),
60               String.valueOf(ebsBlockDeviceName.getValue().isDeleteOnTermination()));
61 
62         amazonOneBasedIndex++;
63      }
64      Multimap<String, String> forms = Multimaps.forMap(builder.build());
65      return forms.size() == 0 ? request : ModifyRequest.putFormParams(request, forms);
66   }
67 
68}

[all classes][org.jclouds.ec2.binders]
EMMA 2.0.5312 (C) Vladimir Roubtsov