1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.trmk.vcloud_0_8.config;
20
21 import static com.google.common.base.Preconditions.checkNotNull;
22 import static com.google.common.base.Preconditions.checkState;
23 import static org.jclouds.trmk.vcloud_0_8.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC;
24
25 import java.util.Map;
26
27 import javax.inject.Inject;
28 import javax.inject.Singleton;
29
30 import org.jclouds.config.ValueOfConfigurationKeyOrNull;
31 import org.jclouds.trmk.vcloud_0_8.domain.Org;
32 import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
33 import org.jclouds.trmk.vcloud_0_8.endpoints.VDC;
34 import org.jclouds.trmk.vcloud_0_8.suppliers.OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault;
35
36 import com.google.common.base.Function;
37 import com.google.common.base.Predicate;
38 import com.google.common.base.Supplier;
39
40
41
42
43
44 @Singleton
45 public class DefaultVDCForOrg implements Function<ReferenceType, ReferenceType> {
46 private final OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault selector;
47 private final Supplier<Map<String, ? extends Org>> nameToOrg;
48
49 @Inject
50 public DefaultVDCForOrg(ValueOfConfigurationKeyOrNull valueOfConfigurationKeyOrNull,
51 @VDC Predicate<ReferenceType> defaultSelector, Supplier<Map<String, ? extends Org>> nameToOrg) {
52 this.selector = new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(checkNotNull(
53 valueOfConfigurationKeyOrNull, "valueOfConfigurationKeyOrNull"), PROPERTY_VCLOUD_DEFAULT_VDC, checkNotNull(
54 defaultSelector, "defaultSelector"));
55 this.nameToOrg = checkNotNull(nameToOrg, "nameToOrg");
56 }
57
58 @Override
59 public ReferenceType apply(ReferenceType defaultOrg) {
60 org.jclouds.trmk.vcloud_0_8.domain.Org org = nameToOrg.get().get(defaultOrg.getName());
61 checkState(org != null, "could not retrieve Org at %s", defaultOrg);
62 return selector.apply(org.getVDCs().values());
63 }
64
65 }