EMMA Coverage Report (generated Mon Oct 17 05:41:20 EDT 2011)
[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%  (190/236)87%  (28/32)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class EC2ImageParser100% (1/1)100% (2/2)79%  (174/220)87%  (27/31)
apply (Image): Image 100% (1/1)75%  (138/184)82%  (19/23)
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.description(from.getDescription() != null ? from.getDescription() : from.getImageLocation());
90      builder.userMetadata(ImmutableMap.<String, String> builder().put("owner", from.getImageOwnerId()).put(
91               "rootDeviceType", from.getRootDeviceType().value()).put("virtualizationType",
92               from.getVirtualizationType().value()).put("hypervisor", from.getHypervisor().value()).build());
93 
94      OperatingSystem.Builder osBuilder = OperatingSystem.builder();
95      osBuilder.is64Bit(from.getArchitecture() == Architecture.X86_64);
96      OsFamily family = parseOsFamilyOrUnrecognized(from.getImageLocation());
97      osBuilder.family(family);
98      osBuilder.version(ComputeServiceUtils.parseVersionOrReturnEmptyString(family, from.getImageLocation(),
99               osVersionMap));
100      osBuilder.description(from.getImageLocation());
101      osBuilder.arch(from.getVirtualizationType().value());
102 
103      reviseParsedImage.reviseParsedImage(from, builder, family, osBuilder);
104 
105      builder.defaultCredentials(credentialProvider.execute(from));
106 
107      try {
108         builder.location(Iterables.find(locations.get(), new Predicate<Location>() {
109 
110            @Override
111            public boolean apply(Location input) {
112               return input.getId().equals(from.getRegion());
113            }
114 
115         }));
116      } catch (NoSuchElementException e) {
117         logger.error("unknown region %s for image %s; not in %s", from.getRegion(), from.getId(), locations);
118         builder.location(new LocationBuilder().scope(LocationScope.REGION).id(from.getRegion()).description(
119                  from.getRegion()).parent(defaultLocation.get()).build());
120      }
121      builder.operatingSystem(osBuilder.build());
122      return builder.build();
123   }
124 
125}

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