openstackdroid/com.rcarrillocruz.android.o.../src/com/rcarrillocruz/android/openstackdroid/CloudControllerService.java

150 lines
5.6 KiB
Java

package com.rcarrillocruz.android.openstackdroid;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import com.rcarrillocruz.android.openstackdroid.operations.ApiOperation;
import android.app.IntentService;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.util.Log;
import android.widget.Toast;
public class CloudControllerService extends IntentService {
public static final String TAG = CloudControllerResultReceiver.class.getName();
public static final String GET_TOKEN_OPERATION = "com.rcarrillocruz.android.openstackdroid.operations.identity.GetTokenOperation";
public static final String GET_SERVERS_OPERATION = "com.rcarrillocruz.android.openstackdroid.operations.compute.GetServersOperation";
public static final String GET_VOLUMES_OPERATION = "com.rcarrillocruz.android.openstackdroid.operations.volume.GetVolumesOperation";
public static final String GET_IMAGES_OPERATION = "com.rcarrillocruz.android.openstackdroid.operations.image.GetImagesOperation";
public static final String GET_FLAVORS_OPERATION = "com.rcarrillocruz.android.openstackdroid.operations.compute.GetFlavorsOperation";
public static final String GET_USERS_OPERATION = "com.rcarrillocruz.android.openstackdroid.operations.identity.GetUsersOperation";
public static final String GET_TENANTS_OPERATION = "com.rcarrillocruz.android.openstackdroid.operations.identity.GetTenantsOperation";
public static final String OPERATION = "com.rcarrillocruz.android.openstackdroid.OPERATION";
public static final String TOKEN = "com.rcarrillocruz.android.openstackdroid.TOKEN";
public static final String TENANT = "com.rcarrillocruz.android.openstackdroid.TENANT";
public static final String PARAMS = "com.rcarrillocruz.android.openstackdroid.PARAMS";
public static final String RECEIVER = "com.rcarrillocruz.android.openstackdroid.RECEIVER";
public static final String OPERATION_RESULTS = "com.rcarrillocruz.android.openstackdroid.RESULTS";
public CloudControllerService() {
super("CloudControllerService");
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intent intent) {
// TODO Auto-generated method stub
Uri data = intent.getData();
Bundle extras = intent.getExtras();
String operation = extras.getString(OPERATION);
String token = extras.getString(TOKEN);
String tenantId = extras.getString(TENANT);
ResultReceiver receiver = extras.getParcelable(RECEIVER);
Bundle params = extras.getParcelable(PARAMS);
ApiOperation apiOperation = getOperationInstance(operation);
HttpRequestBase request = apiOperation.invoke(data, token, tenantId, params);
HttpResponse response = null;
response = executeOperation(request);
//android.os.Debug.waitForDebugger();
returnResultstoReceiver(operation, response, receiver);
}
private ApiOperation getOperationInstance(String operation) {
// TODO Auto-generated method stub
ApiOperation apiOperation = null;
try {
apiOperation = (ApiOperation) Class.forName(operation).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return apiOperation;
}
private HttpResponse executeOperation(HttpRequestBase request) {
// TODO Auto-generated method stub
HttpResponse response = null;
HttpClient client = new DefaultHttpClient();
try {
response = client.execute(request);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return response;
}
private void returnResultstoReceiver(String operation, HttpResponse response,
ResultReceiver receiver) {
// TODO Auto-generated method stub
Bundle results = new Bundle();
try {
results.putString(OPERATION, operation);
if (response != null) {
results.putString(OPERATION_RESULTS, EntityUtils.toString(response.getEntity()));
receiver.send(response.getStatusLine().getStatusCode(), results);
} else {
results.putString(OPERATION_RESULTS, "Connection to Openstack could not be established!");
receiver.send(504, results);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/* private static List<BasicNameValuePair> paramsToList(Bundle params) {
ArrayList<BasicNameValuePair> formList = new ArrayList<BasicNameValuePair>(params.size());
for (String key : params.keySet()) {
Object value = params.get(key);
formList.add(new BasicNameValuePair(key, value.toString()));
}
return formList;
}*/
}