View Javadoc

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   */
19  package org.jclouds.trmk.vcloud_0_8.config;
20  
21  import static org.jclouds.Constants.PROPERTY_IDENTITY;
22  
23  import java.net.URI;
24  import java.util.Map;
25  
26  import javax.inject.Named;
27  import javax.inject.Singleton;
28  
29  import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
30  import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
31  
32  import com.google.common.base.Function;
33  import com.google.common.base.Predicate;
34  import com.google.common.base.Predicates;
35  import com.google.common.base.Supplier;
36  import com.google.common.base.Suppliers;
37  import com.google.common.collect.ImmutableMap;
38  import com.google.common.collect.ImmutableMap.Builder;
39  import com.google.inject.AbstractModule;
40  import com.google.inject.Injector;
41  import com.google.inject.Provides;
42  
43  /**
44   * 
45   * @author Adrian Cole
46   */
47  public class DefaultVCloudReferencesModule extends AbstractModule {
48  
49     @Override
50     protected void configure() {
51  
52     }
53  
54     @Provides
55     @org.jclouds.trmk.vcloud_0_8.endpoints.Org
56     @Singleton
57     protected ReferenceType provideDefaultOrg(DefaultOrgForUser defaultOrgURIForUser,
58           @Named(PROPERTY_IDENTITY) String user) {
59        return defaultOrgURIForUser.apply(user);
60     }
61  
62     @Provides
63     @Singleton
64     @org.jclouds.trmk.vcloud_0_8.endpoints.Org
65     protected Predicate<ReferenceType> provideDefaultOrgSelector(Injector i) {
66        return Predicates.alwaysTrue();
67     }
68  
69     @Provides
70     @org.jclouds.trmk.vcloud_0_8.endpoints.TasksList
71     @Singleton
72     protected ReferenceType provideDefaultTasksList(DefaultTasksListForOrg defaultTasksListURIForOrg,
73           @org.jclouds.trmk.vcloud_0_8.endpoints.Org ReferenceType defaultOrg) {
74        return defaultTasksListURIForOrg.apply(defaultOrg);
75     }
76  
77     @Provides
78     @Singleton
79     @org.jclouds.trmk.vcloud_0_8.endpoints.TasksList
80     protected Predicate<ReferenceType> provideDefaultTasksListSelector(Injector i) {
81        return Predicates.alwaysTrue();
82     }
83  
84     @Provides
85     @org.jclouds.trmk.vcloud_0_8.endpoints.Catalog
86     @Singleton
87     protected ReferenceType provideDefaultCatalog(DefaultCatalogForOrg defaultCatalogURIForOrg,
88           @org.jclouds.trmk.vcloud_0_8.endpoints.Org ReferenceType defaultOrg) {
89        return defaultCatalogURIForOrg.apply(defaultOrg);
90     }
91  
92     @Provides
93     @Singleton
94     @org.jclouds.trmk.vcloud_0_8.endpoints.Catalog
95     protected Predicate<ReferenceType> provideDefaultCatalogSelector(Injector i) {
96        return Predicates.alwaysTrue();
97     }
98  
99     @Provides
100    @Singleton
101    protected Supplier<Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>> provideCatalogsById(
102          Supplier<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>> supplier) {
103       return Suppliers
104             .compose(
105                   new Function<Map<String, Map<String, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>, Map<URI, ? extends org.jclouds.trmk.vcloud_0_8.domain.Catalog>>() {
106 
107                      @Override
108                      public Map<URI, ? extends Catalog> apply(Map<String, Map<String, ? extends Catalog>> arg0) {
109                         Builder<URI, Catalog> builder = ImmutableMap.<URI, Catalog> builder();
110                         for (Map<String, ? extends Catalog> v1 : arg0.values()) {
111                            for (Catalog v2 : v1.values()) {
112                               builder.put(v2.getHref(), v2);
113                            }
114                         }
115                         return builder.build();
116                      }
117 
118                   }, supplier);
119    }
120 
121    @Provides
122    @org.jclouds.trmk.vcloud_0_8.endpoints.VDC
123    @Singleton
124    protected ReferenceType provideDefaultVDC(DefaultVDCForOrg defaultVDCURIForOrg,
125          @org.jclouds.trmk.vcloud_0_8.endpoints.Org ReferenceType defaultOrg) {
126       return defaultVDCURIForOrg.apply(defaultOrg);
127    }
128 
129    @Provides
130    @Singleton
131    @org.jclouds.trmk.vcloud_0_8.endpoints.VDC
132    protected Predicate<ReferenceType> provideDefaultVDCSelector(Injector i) {
133       return Predicates.alwaysTrue();
134    }
135 
136    @Provides
137    @org.jclouds.trmk.vcloud_0_8.endpoints.Network
138    @Singleton
139    protected ReferenceType provideDefaultNetwork(DefaultNetworkForVDC defaultNetworkURIForVDC,
140          @org.jclouds.trmk.vcloud_0_8.endpoints.VDC ReferenceType defaultVDC) {
141       return defaultNetworkURIForVDC.apply(defaultVDC);
142    }
143 
144    @Provides
145    @Singleton
146    @org.jclouds.trmk.vcloud_0_8.endpoints.Network
147    protected Predicate<ReferenceType> provideDefaultNetworkSelector(Injector i) {
148       return Predicates.alwaysTrue();
149    }
150 }