package com.rackspacecloud.android;
import org.apache.http.HttpResponse;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import com.rackspace.cloud.android.R;
import com.rackspace.cloud.servers.api.client.CloudServersException;
import com.rackspace.cloud.servers.api.client.Server;
import com.rackspace.cloud.servers.api.client.ServerManager;
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
public class ConfirmResizeActivity extends CloudActivity {
private Server server;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.viewresize);
server = (Server) this.getIntent().getExtras().get("server");
restoreState(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("server", server);
}
protected void restoreState(Bundle state) {
super.restoreState(state);
if (server == null && state != null && state.containsKey("server")) {
server = (Server) state.getSerializable("server");
}
setupButtons();
}
private void setupButtons(){
Button confirm = (Button)findViewById(R.id.confirm_resize_button);
confirm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new ConfirmResizeTask().execute((Void[]) null);
finish();
}
});
Button rollback = (Button)findViewById(R.id.rollback_server_button);
rollback.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new RollbackResizeTask().execute((Void[]) null);
finish();
}
});
}
private class ConfirmResizeTask extends AsyncTask<Void, Void, HttpBundle> {
private CloudServersException exception;
@Override
//let user know their process has started
protected void onPreExecute(){
showToast("Confirm process has begun");
}
@Override
protected HttpBundle doInBackground(Void... arg0) {
HttpBundle bundle = null;
try {
bundle = (new ServerManager()).confirmResize(server, getContext());
} catch (CloudServersException e) {
exception = e;
}
return bundle;
}
@Override
protected void onPostExecute(HttpBundle bundle) {
HttpResponse response = bundle.getResponse();
if (response != null) {
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == 204){ showToast("Server resize was successfully confirmed."); }
else {
CloudServersException cse = parseCloudServersException(response);
if ("".equals(cse.getMessage())) {
showError("There was a problem confirming your resize.", bundle);
} else {
showError("There was a problem confirming your resize." + cse.getMessage(), bundle);
}
}
} else if (exception != null) {
showError("There was a problem confirming your resize." + exception.getMessage(), bundle);
}
}
}
private class RollbackResizeTask extends AsyncTask<Void, Void, HttpBundle> {
private CloudServersException exception;
@Override
//let user know their process has started
protected void onPreExecute(){
showToast("Reverting your server.");
}
@Override
protected HttpBundle doInBackground(Void... arg0) {
HttpBundle bundle = null;
try {
bundle = (new ServerManager()).revertResize(server, getContext());
} catch (CloudServersException e) {
exception = e;
}
return bundle;
}
@Override
protected void onPostExecute(HttpBundle bundle) {
HttpResponse response = bundle.getResponse();
if (response != null) {
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == 202){ showToast("Server was successfully reverted."); }
else {
CloudServersException cse = parseCloudServersException(response);
if ("".equals(cse.getMessage())) {
showError("There was a problem reverting your server.", bundle);
} else {
showError("There was a problem reverting your server." + cse.getMessage(), bundle);
}
}
} else if (exception != null) {
showError("There was a problem reverting your server." + exception.getMessage(), bundle);
}
}
}
}