package com.rackspacecloud.android; import org.apache.http.HttpResponse; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Spinner; import com.rackspace.cloud.android.R; import com.rackspace.cloud.files.api.client.ContainerManager; import com.rackspace.cloud.servers.api.client.CloudServersException; import com.rackspace.cloud.servers.api.client.http.HttpBundle; public class EnableCDNActivity extends CloudActivity implements OnClickListener, OnItemSelectedListener { public static String containerName = null; private String selectedTtlId; private String selectedLogRetId; private String selectedCdnId; private Spinner ttlSpinner; private Spinner logRetSpinner; private Spinner cdnSpinner; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); trackPageView(GoogleAnalytics.PAGE_CONTAINER_DETAILS); setContentView(R.layout.enable_cdn_container); containerName = (String) this.getIntent().getExtras().get("Cname"); restoreState(savedInstanceState); } protected void restoreState(Bundle state){ super.restoreState(state); setupButtons(); loadTtlSpinner(); loadLogRetSpinner(); loadCdnSpinner(); } private void setupButton(int resourceId, OnClickListener onClickListener) { Button button = (Button) findViewById(resourceId); button.setOnClickListener(onClickListener); } private void setupButtons() { setupButton(R.id.enable_button, new OnClickListener() { public void onClick(View v) { showDialog(R.id.enable_button); } }); setupButton(R.id.disable_button, new OnClickListener() { public void onClick(View v) { showDialog(R.id.disable_button); } }); } private void loadCdnSpinner() { cdnSpinner = (Spinner) findViewById(R.id.cdn_spinner); cdnSpinner.setOnItemSelectedListener(this); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.cdn, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); cdnSpinner.setAdapter(adapter); } private void loadTtlSpinner() { ttlSpinner = (Spinner) findViewById(R.id.ttl_spinner); ttlSpinner.setOnItemSelectedListener(this); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.ttl, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); ttlSpinner.setAdapter(adapter); } private void loadLogRetSpinner() { logRetSpinner = (Spinner) findViewById(R.id.log_retention_spinner); logRetSpinner.setOnItemSelectedListener(this); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.logRet, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); logRetSpinner.setAdapter(adapter); } public void onItemSelected(AdapterView<?> parent, View view, int id, long arg3) { if (parent == cdnSpinner) { selectedCdnId = cdnSpinner.getSelectedItem().toString(); } if (parent == ttlSpinner) { selectedTtlId = ttlSpinner.getSelectedItem().toString(); } else if (parent == logRetSpinner) { selectedLogRetId = logRetSpinner.getSelectedItem().toString(); } } public void onNothingSelected(AdapterView<?> parent) { } @Override protected Dialog onCreateDialog(int id) { switch (id) { case R.id.enable_button: return new AlertDialog.Builder(EnableCDNActivity.this) .setIcon(R.drawable.alert_dialog_icon) .setTitle("Enable CDN") .setMessage( "Are you sure you want to enable CDN on this container?") .setPositiveButton("Enable CDN", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // User clicked OK so do some stuff trackEvent(GoogleAnalytics.CATEGORY_CONTAINER, GoogleAnalytics.EVENT_UPDATED, "", -1); new EnableCDNTask().execute((Void[]) null); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // User clicked Cancel so do some stuff } }).create(); case R.id.disable_button: return new AlertDialog.Builder(EnableCDNActivity.this) .setIcon(R.drawable.alert_dialog_icon) .setTitle("Change Attributes") .setMessage( "Are you sure you want to disable CDN, and/or change attributes?") .setPositiveButton("Change Attributes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // User clicked OK so do some stuff trackEvent(GoogleAnalytics.CATEGORY_CONTAINER, GoogleAnalytics.EVENT_UPDATED, "", -1); new ChangeAttributesCDNTask().execute((Void[]) null); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // User clicked Cancel so do some stuff } }).create(); } return null; } public class EnableCDNTask extends AsyncTask<Void, Void, HttpBundle> { private CloudServersException exception; @Override protected HttpBundle doInBackground(Void... arg0) { HttpBundle bundle = null; try { bundle = (new ContainerManager(getContext())).enable(containerName, selectedTtlId, selectedLogRetId); } catch (CloudServersException e) { exception = e; } return bundle; } @Override protected void onPostExecute(HttpBundle bundle) { if (bundle != null) { HttpResponse response = bundle.getResponse(); if (response != null) { int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 201) { setResult(Activity.RESULT_OK); finish(); } else if (statusCode == 202) { showToast("Accepted, container is already cdn enabled"); finish(); } else { CloudServersException cse = parseCloudServersException(response); if ("".equals(cse.getMessage())) { showError("There was a problem creating your container.", bundle); } else { showError("There was a problem creating your container: " + cse.getMessage() + " Check container name and try again", bundle); } } } else if (exception != null) { showError("There was a problem creating your container: " + exception.getMessage() + " Check container name and try again", bundle); } } else { showNetworkError(); } } } public class ChangeAttributesCDNTask extends AsyncTask<Void, Void, HttpBundle> { private CloudServersException exception; @Override protected HttpBundle doInBackground(Void... arg0) { HttpBundle bundle = null; try { bundle = (new ContainerManager(getContext())).disable(containerName, selectedCdnId, selectedTtlId, selectedLogRetId); } catch (CloudServersException e) { exception = e; } return bundle; } @Override protected void onPostExecute(HttpBundle bundle) { if (bundle != null) { HttpResponse response = bundle.getResponse(); if (response != null) { int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 202) { setResult(Activity.RESULT_OK); finish(); } else { CloudServersException cse = parseCloudServersException(response); if ("".equals(cse.getMessage())) { showError("There was a problem creating your container.", bundle); } else { showError("There was a problem creating your container: " + cse.getMessage() + " Check container name and try again", bundle); } } } else if (exception != null) { showError("There was a problem creating your container: " + exception.getMessage() + " Check container name and try again", bundle); } } else { showNetworkError(); } } } public void onClick(View v) { // TODO Auto-generated method stub } }