package com.sequenceiq.cloudbreak.cloud.openstack.nativ.network;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import com.google.common.collect.Maps;
import com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext;
import com.sequenceiq.cloudbreak.cloud.model.CloudResource;
import com.sequenceiq.cloudbreak.cloud.model.CloudResourceStatus;
import com.sequenceiq.cloudbreak.cloud.model.Network;
import com.sequenceiq.cloudbreak.cloud.model.Security;
import com.sequenceiq.cloudbreak.cloud.openstack.auth.OpenStackClient;
import com.sequenceiq.cloudbreak.cloud.openstack.nativ.AbstractOpenStackResourceBuilder;
import com.sequenceiq.cloudbreak.cloud.openstack.nativ.OpenStackResourceException;
import com.sequenceiq.cloudbreak.cloud.openstack.nativ.context.OpenStackContext;
import com.sequenceiq.cloudbreak.cloud.openstack.nativ.service.OpenStackResourceNameService;
import com.sequenceiq.cloudbreak.cloud.template.NetworkResourceBuilder;
public abstract class AbstractOpenStackNetworkResourceBuilder extends AbstractOpenStackResourceBuilder implements NetworkResourceBuilder<OpenStackContext> {
private static final Map<Class<? extends AbstractOpenStackNetworkResourceBuilder>, Integer> ORDER;
static {
Map<Class<? extends AbstractOpenStackNetworkResourceBuilder>, Integer> map = Maps.newHashMap();
map.put(OpenStackNetworkResourceBuilder.class, 0);
map.put(OpenStackSubnetResourceBuilder.class, 1);
map.put(OpenStackRouterResourceBuilder.class, 2);
ORDER = Collections.unmodifiableMap(map);
}
@Inject
private OpenStackResourceNameService resourceNameService;
@Inject
private OpenStackClient openStackClient;
@Override
public CloudResource create(OpenStackContext context, AuthenticatedContext auth, Network network) {
String resourceName = resourceNameService.resourceName(resourceType(), context.getName());
return createNamedResource(resourceType(), null, resourceName);
}
@Override
public CloudResourceStatus update(OpenStackContext context, AuthenticatedContext auth, Network network, Security security, CloudResource resource) {
return null;
}
@Override
public int order() {
Integer order = ORDER.get(getClass());
if (order == null) {
throw new OpenStackResourceException(String.format("No resource order found for class: %s", getClass()));
}
return order;
}
@Override
public List<CloudResourceStatus> checkResources(OpenStackContext context, AuthenticatedContext auth, List<CloudResource> resources) {
return checkResources(resourceType(), context, auth, resources);
}
}