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

COVERAGE SUMMARY FOR SOURCE FILE [EC2ImageParser.java]

nameclass, %method, %block, %line, %
EC2ImageParser.java100% (2/2)100% (4/4)81%  (195/241)88%  (29/33)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class EC2ImageParser100% (1/1)100% (2/2)80%  (179/225)87%  (28/32)
apply (Image): Image 100% (1/1)76%  (143/189)83%  (20/24)
EC2ImageParser (PopulateDefaultLoginCredentialsForImageStrategy, Map, Supplie... 100% (1/1)100% (36/36)100% (8/8)
     
class EC2ImageParser$1100% (1/1)100% (2/2)100% (16/16)100% (2/2)
EC2ImageParser$1 (EC2ImageParser, Image): void 100% (1/1)100% (9/9)100% (1/1)
apply (Location): boolean 100% (1/1)100% (7/7)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.compute.functions;
20 
21import static com.google.common.base.Preconditions.checkNotNull;
22import static org.jclouds.compute.util.ComputeServiceUtils.parseOsFamilyOrUnrecognized;
23 
24import java.util.Map;
25import java.util.NoSuchElementException;
26import java.util.Set;
27 
28import javax.annotation.Resource;
29import javax.inject.Inject;
30import javax.inject.Named;
31import javax.inject.Singleton;
32 
33import org.jclouds.collect.Memoized;
34import org.jclouds.compute.domain.Image;
35import org.jclouds.compute.domain.ImageBuilder;
36import org.jclouds.compute.domain.OperatingSystem;
37import org.jclouds.compute.domain.OsFamily;
38import org.jclouds.compute.reference.ComputeServiceConstants;
39import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
40import org.jclouds.compute.util.ComputeServiceUtils;
41import org.jclouds.domain.Location;
42import org.jclouds.domain.LocationBuilder;
43import org.jclouds.domain.LocationScope;
44import org.jclouds.ec2.compute.strategy.ReviseParsedImage;
45import org.jclouds.ec2.domain.Image.Architecture;
46import org.jclouds.ec2.domain.Image.ImageType;
47import org.jclouds.logging.Logger;
48 
49import com.google.common.base.Function;
50import com.google.common.base.Predicate;
51import com.google.common.base.Supplier;
52import com.google.common.collect.ImmutableMap;
53import com.google.common.collect.Iterables;
54 
55/**
56 * @author Adrian Cole
57 */
58@Singleton
59public class EC2ImageParser implements Function<org.jclouds.ec2.domain.Image, Image> {
60   @Resource
61   @Named(ComputeServiceConstants.COMPUTE_LOGGER)
62   protected Logger logger = Logger.NULL;
63 
64   private final PopulateDefaultLoginCredentialsForImageStrategy credentialProvider;
65   private final Supplier<Set<? extends Location>> locations;
66   private final Supplier<Location> defaultLocation;
67   private final Map<OsFamily, Map<String, String>> osVersionMap;
68   private final ReviseParsedImage reviseParsedImage;
69 
70   @Inject
71   public EC2ImageParser(PopulateDefaultLoginCredentialsForImageStrategy credentialProvider,
72            Map<OsFamily, Map<String, String>> osVersionMap, @Memoized Supplier<Set<? extends Location>> locations,
73            Supplier<Location> defaultLocation, ReviseParsedImage reviseParsedImage) {
74      this.credentialProvider = checkNotNull(credentialProvider, "credentialProvider");
75      this.locations = checkNotNull(locations, "locations");
76      this.defaultLocation = checkNotNull(defaultLocation, "defaultLocation");
77      this.osVersionMap = checkNotNull(osVersionMap, "osVersionMap");
78      this.reviseParsedImage = checkNotNull(reviseParsedImage, "reviseParsedImage");
79   }
80 
81   @Override
82   public Image apply(final org.jclouds.ec2.domain.Image from) {
83      if (from.getImageType() != ImageType.MACHINE) {
84         return null;
85      }
86      ImageBuilder builder = new ImageBuilder();
87      builder.providerId(from.getId());
88      builder.id(from.getRegion() + "/" + from.getId());
89      builder.name(from.getName());
90      builder.description(from.getDescription() != null ? from.getDescription() : from.getImageLocation());
91      builder.userMetadata(ImmutableMap.<String, String> builder().put("owner", from.getImageOwnerId()).put(
92               "rootDeviceType", from.getRootDeviceType().value()).put("virtualizationType",
93               from.getVirtualizationType().value()).put("hypervisor", from.getHypervisor().value()).build());
94 
95      OperatingSystem.Builder osBuilder = OperatingSystem.builder();
96      osBuilder.is64Bit(from.getArchitecture() == Architecture.X86_64);
97      OsFamily family = parseOsFamilyOrUnrecognized(from.getImageLocation());
98      osBuilder.family(family);
99      osBuilder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, from.getImageLocation(),
100               osVersionMap));
101      osBuilder.description(from.getImageLocation());
102      osBuilder.arch(from.getVirtualizationType().value());
103 
104      reviseParsedImage.reviseParsedImage(from, builder, family, osBuilder);
105 
106      builder.defaultCredentials(credentialProvider.apply(from));
107 
108      try {
109         builder.location(Iterables.find(locations.get(), new Predicate<Location>() {
110 
111            @Override
112            public boolean apply(Location input) {
113               return input.getId().equals(from.getRegion());
114            }
115 
116         }));
117      } catch (NoSuchElementException e) {
118         logger.error("unknown region %s for image %s; not in %s", from.getRegion(), from.getId(), locations);
119         builder.location(new LocationBuilder().scope(LocationScope.REGION).id(from.getRegion()).description(
120                  from.getRegion()).parent(defaultLocation.get()).build());
121      }
122      builder.operatingSystem(osBuilder.build());
123      return builder.build();
124   }
125 
126}

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