package cf.spring;
import org.springframework.beans.factory.FactoryBean;
import cf.client.CloudController;
import cf.client.TokenProvider;
import cf.service.Bootstrap;
import java.net.URI;
import java.util.List;
import java.util.UUID;
/**
* @author Mike Heath
*/
public class BootstrappingServiceGuidProvider implements FactoryBean<UUID> {
public static class ServicePlan {
private final String name;
private final String description;
public ServicePlan(String name, String description) {
this.name = name;
this.description = description;
}
}
private final CloudController cloudController;
private final TokenProvider clientToken;
private final String label;
private final String provider;
private final String version;
private final String url;
private final String description;
private final String infoUrl;
private final String authToken;
private final List<ServicePlan> servicePlans;
public BootstrappingServiceGuidProvider(CloudController cloudController, TokenProvider clientToken, String label, String provider, String version, String url, String description, String infoUrl, String authToken, List<ServicePlan> servicePlans) {
this.cloudController = cloudController;
this.clientToken = clientToken;
this.label = label;
this.provider = provider;
this.version = version;
this.url = url;
this.description = description;
this.infoUrl = infoUrl;
this.authToken = authToken;
this.servicePlans = servicePlans;
}
@Override
public UUID getObject() {
final Bootstrap bootstrap = new Bootstrap(cloudController, clientToken);
final String uniqueId = provider + "_" + label;
final UUID serviceGuid = bootstrap.registerService(label, provider, version, URI.create(url), description, URI.create(infoUrl), uniqueId);
for (ServicePlan servicePlan : servicePlans) {
bootstrap.registerPlan(serviceGuid, servicePlan.name, servicePlan.description, uniqueId + "_" + servicePlan.name);
}
bootstrap.registerAuthToken(label, provider, authToken);
return serviceGuid;
}
@Override
public Class<?> getObjectType() {
return UUID.class;
}
@Override
public boolean isSingleton() {
return true;
}
}