rimu related changes for Issue 826

This commit is contained in:
Adrian Cole 2012-02-02 07:37:24 -08:00
parent dc78a443de
commit e45aaa8a3c
4 changed files with 27 additions and 23 deletions

View File

@ -23,11 +23,8 @@ import java.util.Set;
import org.jclouds.compute.config.BindComputeSuppliersByClass; import org.jclouds.compute.config.BindComputeSuppliersByClass;
import org.jclouds.compute.domain.Hardware; import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.Image;
import org.jclouds.domain.Location;
import org.jclouds.rimuhosting.miro.compute.suppliers.RimuHostingDefaultLocationSupplier;
import org.jclouds.rimuhosting.miro.compute.suppliers.RimuHostingHardwareSupplier; import org.jclouds.rimuhosting.miro.compute.suppliers.RimuHostingHardwareSupplier;
import org.jclouds.rimuhosting.miro.compute.suppliers.RimuHostingImageSupplier; import org.jclouds.rimuhosting.miro.compute.suppliers.RimuHostingImageSupplier;
import org.jclouds.rimuhosting.miro.compute.suppliers.RimuHostingLocationSupplier;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
@ -42,14 +39,4 @@ public class RimuHostingBindComputeSuppliersByClass extends BindComputeSuppliers
protected Class<? extends Supplier<Set<? extends Image>>> defineImageSupplier() { protected Class<? extends Supplier<Set<? extends Image>>> defineImageSupplier() {
return RimuHostingImageSupplier.class; return RimuHostingImageSupplier.class;
} }
@Override
protected Class<? extends Supplier<Set<? extends Location>>> defineLocationSupplier() {
return RimuHostingLocationSupplier.class;
}
@Override
protected Class<? extends Supplier<Location>> defineDefaultLocationSupplier() {
return RimuHostingDefaultLocationSupplier.class;
}
} }

View File

@ -29,13 +29,18 @@ import org.jclouds.http.RequiresHttp;
import org.jclouds.json.config.GsonModule; import org.jclouds.json.config.GsonModule;
import org.jclouds.json.config.GsonModule.DateAdapter; import org.jclouds.json.config.GsonModule.DateAdapter;
import org.jclouds.json.config.GsonModule.PropertiesAdapter; import org.jclouds.json.config.GsonModule.PropertiesAdapter;
import org.jclouds.location.suppliers.ImplicitLocationSupplier;
import org.jclouds.location.suppliers.LocationsSupplier;
import org.jclouds.rest.ConfiguresRestClient; import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.config.RestClientModule; import org.jclouds.rest.config.RestClientModule;
import org.jclouds.rimuhosting.miro.RimuHostingAsyncClient; import org.jclouds.rimuhosting.miro.RimuHostingAsyncClient;
import org.jclouds.rimuhosting.miro.RimuHostingClient; import org.jclouds.rimuhosting.miro.RimuHostingClient;
import org.jclouds.rimuhosting.miro.location.RimuHostingDefaultLocationSupplier;
import org.jclouds.rimuhosting.miro.location.RimuHostingLocationSupplier;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter; import com.google.gson.stream.JsonWriter;
import com.google.inject.Scopes;
/** /**
* *
@ -78,4 +83,11 @@ public class RimuHostingRestClientModule extends RestClientModule<RimuHostingCli
} }
} }
@Override
protected void installLocations() {
super.installLocations();
bind(ImplicitLocationSupplier.class).to(RimuHostingDefaultLocationSupplier.class).in(Scopes.SINGLETON);
bind(LocationsSupplier.class).to(RimuHostingLocationSupplier.class).in(Scopes.SINGLETON);
}
} }

View File

@ -16,7 +16,7 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
package org.jclouds.rimuhosting.miro.compute.suppliers; package org.jclouds.rimuhosting.miro.location;
import static org.jclouds.rimuhosting.miro.reference.RimuHostingConstants.PROPERTY_RIMUHOSTING_DEFAULT_DC; import static org.jclouds.rimuhosting.miro.reference.RimuHostingConstants.PROPERTY_RIMUHOSTING_DEFAULT_DC;
@ -28,6 +28,7 @@ import javax.inject.Singleton;
import org.jclouds.collect.Memoized; import org.jclouds.collect.Memoized;
import org.jclouds.domain.Location; import org.jclouds.domain.Location;
import org.jclouds.location.suppliers.ImplicitLocationSupplier;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
@ -38,7 +39,7 @@ import com.google.common.collect.Iterables;
* @author Adrian Cole * @author Adrian Cole
*/ */
@Singleton @Singleton
public class RimuHostingDefaultLocationSupplier implements Supplier<Location> { public class RimuHostingDefaultLocationSupplier implements ImplicitLocationSupplier {
private final Supplier<Set<? extends Location>> locations; private final Supplier<Set<? extends Location>> locations;
private final String defaultDC; private final String defaultDC;

View File

@ -16,7 +16,7 @@
* specific language governing permissions and limitations * specific language governing permissions and limitations
* under the License. * under the License.
*/ */
package org.jclouds.rimuhosting.miro.compute.suppliers; package org.jclouds.rimuhosting.miro.location;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
@ -32,13 +32,15 @@ import org.jclouds.domain.LocationBuilder;
import org.jclouds.domain.LocationScope; import org.jclouds.domain.LocationScope;
import org.jclouds.location.Iso3166; import org.jclouds.location.Iso3166;
import org.jclouds.location.Provider; import org.jclouds.location.Provider;
import org.jclouds.location.suppliers.JustProvider; import org.jclouds.location.suppliers.LocationsSupplier;
import org.jclouds.location.suppliers.all.JustProvider;
import org.jclouds.rimuhosting.miro.RimuHostingClient; import org.jclouds.rimuhosting.miro.RimuHostingClient;
import org.jclouds.rimuhosting.miro.domain.DataCenter; import org.jclouds.rimuhosting.miro.domain.DataCenter;
import org.jclouds.rimuhosting.miro.domain.PricingPlan; import org.jclouds.rimuhosting.miro.domain.PricingPlan;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.ImmutableSet.Builder; import com.google.common.collect.ImmutableSet.Builder;
@ -48,17 +50,17 @@ import com.google.common.collect.ImmutableSet.Builder;
* @author Adrian Cole * @author Adrian Cole
*/ */
@Singleton @Singleton
public class RimuHostingLocationSupplier extends JustProvider { public class RimuHostingLocationSupplier extends JustProvider implements LocationsSupplier {
private final RimuHostingClient sync; private final RimuHostingClient sync;
private final Map<String, Set<String>> isoCodesById; private final Supplier<Map<String, Supplier<Set<String>>>> isoCodesByIdSupplier;
@Inject @Inject
RimuHostingLocationSupplier(@Iso3166 Set<String> isoCodes, @Provider String providerName, @Provider URI endpoint, RimuHostingLocationSupplier(@Iso3166 Set<String> isoCodes, @Provider String providerName, @Provider URI endpoint,
RimuHostingClient sync, @Iso3166 Map<String, Set<String>> isoCodesById) { RimuHostingClient sync, @Iso3166 Supplier<Map<String, Supplier<Set<String>>>> isoCodesByIdSupplier) {
super(providerName, endpoint, isoCodes); super(providerName, endpoint, isoCodes);
this.sync = checkNotNull(sync, "sync"); this.sync = checkNotNull(sync, "sync");
this.isoCodesById = checkNotNull(isoCodesById, "isoCodesById"); this.isoCodesByIdSupplier = checkNotNull(isoCodesByIdSupplier, "isoCodesByIdSupplier");
} }
@Override @Override
@ -76,14 +78,16 @@ public class RimuHostingLocationSupplier extends JustProvider {
Location provider = Iterables.getOnlyElement(super.get()); Location provider = Iterables.getOnlyElement(super.get());
if (Iterables.size(list) == 0) if (Iterables.size(list) == 0)
locations.add(provider); locations.add(provider);
else else{
Map<String, Supplier<Set<String>>> isoCodesById = isoCodesByIdSupplier.get();
for (DataCenter from : list) { for (DataCenter from : list) {
LocationBuilder builder = new LocationBuilder().scope(LocationScope.ZONE).id(from.getId()).description( LocationBuilder builder = new LocationBuilder().scope(LocationScope.ZONE).id(from.getId()).description(
from.getName()).parent(provider); from.getName()).parent(provider);
if (isoCodesById.containsKey(from.getId())) if (isoCodesById.containsKey(from.getId()))
builder.iso3166Codes(isoCodesById.get(from.getId())); builder.iso3166Codes(isoCodesById.get(from.getId()).get());
locations.add(builder.build()); locations.add(builder.build());
} }
}
return locations.build(); return locations.build();
} }
} }