package org.occiware.clouddesigner.occi.cloud.connector.cloudproviders;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Iterables;
import com.google.common.io.Closeables;
import java.io.Closeable;
import java.io.IOException;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.jclouds.ContextBuilder;
import org.jclouds.openstack.trove.v1.TroveApi;
import org.jclouds.openstack.trove.v1.domain.Flavor;
import org.jclouds.openstack.trove.v1.domain.Instance;
import org.jclouds.openstack.trove.v1.features.FlavorApi;
import org.jclouds.openstack.trove.v1.utils.TroveUtils;
import org.occiware.clouddesigner.occi.cloud.Machine_RackSpace;
import org.occiware.clouddesigner.occi.cloud.connector.cloudproviders.IaaSHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SuppressWarnings("all")
public class JcloudsRackSpace extends IaaSHandler implements Closeable {
private static Logger LOGGER = LoggerFactory.getLogger(JcloudsRackSpace.class);
private Machine_RackSpace machine;
private TroveApi context;
public JcloudsRackSpace() {
}
public JcloudsRackSpace(final Machine_RackSpace machine) {
this.machine = machine;
TroveApi _createContext = this.createContext();
this.context = _createContext;
}
/**
* Initialize the context
*/
public TroveApi createContext() {
String _provider = this.machine.getProvider();
ContextBuilder _newBuilder = ContextBuilder.newBuilder(_provider);
String _username = this.machine.getUsername();
String _api_key = this.machine.getApi_key();
ContextBuilder _credentials = _newBuilder.credentials(_username, _api_key);
TroveApi _buildApi = _credentials.<TroveApi>buildApi(TroveApi.class);
this.context = _buildApi;
JcloudsRackSpace.LOGGER.info("The context is created Successfully ..");
return this.context;
}
public String launchMachine() {
Instance instance = null;
try {
String _region = this.machine.getRegion();
FlavorApi flavorApi = this.context.getFlavorApiForZone(_region);
FluentIterable<Flavor> _list = flavorApi.list();
Flavor flavor = Iterables.<Flavor>getFirst(_list, null);
TroveUtils utils = new TroveUtils(this.context);
String _region_1 = this.machine.getRegion();
String _name = this.machine.getName();
int _id = flavor.getId();
String _plus = ("" + Integer.valueOf(_id));
Instance _workingInstance = utils.getWorkingInstance(_region_1, _name, _plus, 1);
instance = _workingInstance;
} catch (final Throwable _t) {
if (_t instanceof Exception) {
final Exception exception = (Exception)_t;
} else {
throw Exceptions.sneakyThrow(_t);
}
}
return instance.getId();
}
@Override
public void close() throws IOException {
Closeables.close(this.context, true);
}
}