Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / ContainerObjectDetails.java @ b722cab3

History | View | Annotate | Download (18.7 kB)

1 3d6041e8 Phillip Toohill
package com.rackspacecloud.android;
2 3d6041e8 Phillip Toohill
3 51938302 Adam Menz
import java.io.BufferedOutputStream;
4 51938302 Adam Menz
import java.io.File;
5 51938302 Adam Menz
import java.io.FileNotFoundException;
6 51938302 Adam Menz
import java.io.FileOutputStream;
7 3d6041e8 Phillip Toohill
import java.io.IOException;
8 3d6041e8 Phillip Toohill
import java.io.StringReader;
9 3d6041e8 Phillip Toohill
10 3d6041e8 Phillip Toohill
import javax.xml.parsers.FactoryConfigurationError;
11 3d6041e8 Phillip Toohill
import javax.xml.parsers.ParserConfigurationException;
12 3d6041e8 Phillip Toohill
import javax.xml.parsers.SAXParser;
13 3d6041e8 Phillip Toohill
import javax.xml.parsers.SAXParserFactory;
14 3d6041e8 Phillip Toohill
15 51938302 Adam Menz
import org.apache.http.HttpEntity;
16 3d6041e8 Phillip Toohill
import org.apache.http.HttpResponse;
17 3d6041e8 Phillip Toohill
import org.apache.http.client.ClientProtocolException;
18 3d6041e8 Phillip Toohill
import org.apache.http.impl.client.BasicResponseHandler;
19 51938302 Adam Menz
import org.apache.http.util.EntityUtils;
20 3d6041e8 Phillip Toohill
import org.xml.sax.InputSource;
21 3d6041e8 Phillip Toohill
import org.xml.sax.SAXException;
22 3d6041e8 Phillip Toohill
import org.xml.sax.XMLReader;
23 3d6041e8 Phillip Toohill
24 3d6041e8 Phillip Toohill
import android.app.Activity;
25 3d6041e8 Phillip Toohill
import android.app.AlertDialog;
26 3d6041e8 Phillip Toohill
import android.app.Dialog;
27 d3ea294b Adam Menz
import android.app.ProgressDialog;
28 b347d5e3 Chmouel Boudjnah
import android.content.Context;
29 3d6041e8 Phillip Toohill
import android.content.DialogInterface;
30 82cd98ea unknown
import android.content.Intent;
31 82cd98ea unknown
import android.net.Uri;
32 3d6041e8 Phillip Toohill
import android.os.AsyncTask;
33 3d6041e8 Phillip Toohill
import android.os.Bundle;
34 51938302 Adam Menz
import android.os.Environment;
35 006434d8 Adam Menz
import android.util.Log;
36 3d6041e8 Phillip Toohill
import android.view.Menu;
37 3d6041e8 Phillip Toohill
import android.view.MenuInflater;
38 3d6041e8 Phillip Toohill
import android.view.MenuItem;
39 82cd98ea unknown
import android.view.View;
40 82cd98ea unknown
import android.widget.Button;
41 3d6041e8 Phillip Toohill
import android.widget.TextView;
42 697895bc Adam Menz
import android.widget.Toast;
43 3d6041e8 Phillip Toohill
44 3d6041e8 Phillip Toohill
import com.rackspace.cloud.files.api.client.ContainerObjectManager;
45 3d6041e8 Phillip Toohill
import com.rackspace.cloud.files.api.client.ContainerObjects;
46 3d6041e8 Phillip Toohill
import com.rackspace.cloud.servers.api.client.CloudServersException;
47 32731215 Adam Menz
import com.rackspace.cloud.servers.api.client.http.HttpBundle;
48 3d6041e8 Phillip Toohill
import com.rackspace.cloud.servers.api.client.parsers.CloudServersFaultXMLParser;
49 3d6041e8 Phillip Toohill
50 3d6041e8 Phillip Toohill
/** 
51 3d6041e8 Phillip Toohill
 * 
52 3d6041e8 Phillip Toohill
 * @author Phillip Toohill
53 3d6041e8 Phillip Toohill
 *
54 3d6041e8 Phillip Toohill
 */
55 3d6041e8 Phillip Toohill
56 b6fa6007 unknown
public class ContainerObjectDetails extends Activity {
57 3e180b04 Adam Menz
58 3d6041e8 Phillip Toohill
        private static final int deleteObject = 0;
59 51938302 Adam Menz
        private final String DOWNLOAD_DIRECTORY = "/RackspaceCloud";
60 3d6041e8 Phillip Toohill
        private ContainerObjects objects;
61 3d6041e8 Phillip Toohill
        private String containerNames;
62 3d6041e8 Phillip Toohill
        private String cdnURL;
63 8b432514 Phillip Toohill
        private String cdnEnabled;
64 3d6041e8 Phillip Toohill
        public String LOG = "ViewObject";
65 6864568a Phillip Toohill
        private int bConver = 1048576;
66 6864568a Phillip Toohill
        private int kbConver = 1024;
67 6864568a Phillip Toohill
        private double megaBytes;
68 6864568a Phillip Toohill
        private double kiloBytes;
69 82cd98ea unknown
        public Button previewButton;
70 51938302 Adam Menz
        public Button downloadButton;
71 b347d5e3 Chmouel Boudjnah
        public Context context;
72 3e180b04 Adam Menz
        private boolean displayDialog;
73 51938302 Adam Menz
        private ProgressDialog dialog;
74 51938302 Adam Menz
        private Boolean isDownloaded;
75 3e180b04 Adam Menz
        private AndroidCloudApplication app;
76 3e180b04 Adam Menz
        private DeleteObjectListenerTask deleteObjTask;
77 3e180b04 Adam Menz
        private DownloadObjectListenerTask downloadObjTask;
78 3d6041e8 Phillip Toohill
        
79 3e180b04 Adam Menz
        /** Called when the activity is first created. */
80 3e180b04 Adam Menz
        @Override
81 3e180b04 Adam Menz
        public void onCreate(Bundle savedInstanceState) {
82 3e180b04 Adam Menz
                super.onCreate(savedInstanceState);
83 3e180b04 Adam Menz
84 3e180b04 Adam Menz
                context = getApplicationContext();
85 3e180b04 Adam Menz
86 3e180b04 Adam Menz
                objects = (ContainerObjects) this.getIntent().getExtras().get("container");
87 3e180b04 Adam Menz
                containerNames =  (String) this.getIntent().getExtras().get("containerNames");
88 3e180b04 Adam Menz
                cdnURL = (String) this.getIntent().getExtras().get("cdnUrl");
89 3e180b04 Adam Menz
                cdnEnabled = (String) this.getIntent().getExtras().get("isCdnEnabled");
90 3e180b04 Adam Menz
91 3e180b04 Adam Menz
92 3e180b04 Adam Menz
                setContentView(R.layout.viewobject);       
93 3e180b04 Adam Menz
                restoreState(savedInstanceState);
94 3e180b04 Adam Menz
95 3e180b04 Adam Menz
        }
96 3e180b04 Adam Menz
97 3d6041e8 Phillip Toohill
        @Override
98 3d6041e8 Phillip Toohill
        protected void onSaveInstanceState(Bundle outState) {
99 3d6041e8 Phillip Toohill
                super.onSaveInstanceState(outState);
100 3d6041e8 Phillip Toohill
                outState.putSerializable("container", objects);
101 51938302 Adam Menz
                outState.putBoolean("isDownloaded", isDownloaded);
102 3e180b04 Adam Menz
                outState.putBoolean("displayDialog", displayDialog);
103 3e180b04 Adam Menz
                
104 3e180b04 Adam Menz
                if(displayDialog){
105 3e180b04 Adam Menz
                        hideDialog();
106 3e180b04 Adam Menz
                        displayDialog = true;
107 3e180b04 Adam Menz
                }
108 3d6041e8 Phillip Toohill
        }
109 3d6041e8 Phillip Toohill
110 3e180b04 Adam Menz
        private void restoreState(Bundle state) {
111 3e180b04 Adam Menz
                
112 3e180b04 Adam Menz
                /*
113 3e180b04 Adam Menz
                 * need reference to the app so you can access curDirFiles
114 3e180b04 Adam Menz
                 * as well as processing status
115 3e180b04 Adam Menz
                 */
116 3e180b04 Adam Menz
                app = (AndroidCloudApplication)this.getApplication();
117 51938302 Adam Menz
118 3e180b04 Adam Menz
                if (state != null && state.containsKey("displayDialog") && state.getBoolean("displayDialog")) {
119 3e180b04 Adam Menz
                    showDialog();
120 51938302 Adam Menz
            } else {
121 3e180b04 Adam Menz
                    hideDialog();
122 51938302 Adam Menz
            }
123 3e180b04 Adam Menz
                
124 3e180b04 Adam Menz
                if (state != null && state.containsKey("container")) {
125 3e180b04 Adam Menz
                        objects = (ContainerObjects) state.getSerializable("container");
126 3e180b04 Adam Menz
                }
127 3e180b04 Adam Menz
                loadObjectData();
128 51938302 Adam Menz
129 3e180b04 Adam Menz
                if ( cdnEnabled.equals("true"))  {
130 3e180b04 Adam Menz
                        this.previewButton = (Button) findViewById(R.id.preview_button);
131 3e180b04 Adam Menz
                        previewButton.setOnClickListener(new MyOnClickListener());
132 3e180b04 Adam Menz
                } else {
133 3e180b04 Adam Menz
                        this.previewButton = (Button) findViewById(R.id.preview_button);
134 3e180b04 Adam Menz
                        previewButton.setVisibility(View.GONE);
135 3e180b04 Adam Menz
                }
136 3e180b04 Adam Menz
137 3e180b04 Adam Menz
                if (state != null && state.containsKey("isDownloaded")){
138 3e180b04 Adam Menz
                        isDownloaded = state.getBoolean("isDownloaded");
139 3e180b04 Adam Menz
                }
140 3e180b04 Adam Menz
                else{
141 3e180b04 Adam Menz
                        isDownloaded = fileIsDownloaded();
142 3e180b04 Adam Menz
                }
143 3e180b04 Adam Menz
                this.downloadButton = (Button) findViewById(R.id.download_button);
144 3e180b04 Adam Menz
                if ( isDownloaded )  {
145 3e180b04 Adam Menz
                        downloadButton.setText("Open File");
146 3e180b04 Adam Menz
                } else {
147 3e180b04 Adam Menz
                        downloadButton.setText("Download File");
148 3e180b04 Adam Menz
                }           
149 3e180b04 Adam Menz
                downloadButton.setOnClickListener(new MyOnClickListener());
150 3e180b04 Adam Menz
                
151 3e180b04 Adam Menz
                if(app.isDeletingObject()){
152 3e180b04 Adam Menz
                        deleteObjTask = new DeleteObjectListenerTask();
153 3e180b04 Adam Menz
                        deleteObjTask.execute();
154 3e180b04 Adam Menz
                }
155 3e180b04 Adam Menz
                
156 3e180b04 Adam Menz
                if(app.isDownloadingObject()){
157 3e180b04 Adam Menz
                        downloadObjTask = new DownloadObjectListenerTask();
158 3e180b04 Adam Menz
                        downloadObjTask.execute();
159 3e180b04 Adam Menz
                }
160 3e180b04 Adam Menz
        }
161 3e180b04 Adam Menz
        
162 3e180b04 Adam Menz
        
163 3e180b04 Adam Menz
        @Override
164 3e180b04 Adam Menz
        protected void onStart(){
165 3e180b04 Adam Menz
                super.onStart();
166 3e180b04 Adam Menz
                if(displayDialog){
167 3e180b04 Adam Menz
                        showDialog();
168 3e180b04 Adam Menz
                }
169 3e180b04 Adam Menz
        }
170 3e180b04 Adam Menz
171 3e180b04 Adam Menz
        
172 3e180b04 Adam Menz
        @Override
173 3e180b04 Adam Menz
        protected void onStop(){
174 3e180b04 Adam Menz
                super.onStop();
175 51938302 Adam Menz
176 3e180b04 Adam Menz
                if(displayDialog){
177 3e180b04 Adam Menz
                        hideDialog();
178 3e180b04 Adam Menz
                        displayDialog = true;
179 3e180b04 Adam Menz
                }
180 82cd98ea unknown
181 3e180b04 Adam Menz
                /*
182 3e180b04 Adam Menz
                 * Need to stop running listener task
183 3e180b04 Adam Menz
                 * if we exit
184 3e180b04 Adam Menz
                 */
185 3e180b04 Adam Menz
                if(deleteObjTask != null){
186 3e180b04 Adam Menz
                        deleteObjTask.cancel(true);
187 3e180b04 Adam Menz
                }
188 3e180b04 Adam Menz
                
189 3e180b04 Adam Menz
                if(downloadObjTask != null){
190 3e180b04 Adam Menz
                        downloadObjTask.cancel(true);
191 3e180b04 Adam Menz
                }
192 3e180b04 Adam Menz
        }
193 3e180b04 Adam Menz
194 3e180b04 Adam Menz
195 3e180b04 Adam Menz
        private void loadObjectData() {
196 3e180b04 Adam Menz
                //Object Name
197 3e180b04 Adam Menz
                TextView name = (TextView) findViewById(R.id.view_container_name);
198 3e180b04 Adam Menz
                name.setText(objects.getCName().toString());
199 3e180b04 Adam Menz
200 3e180b04 Adam Menz
                //File size
201 3e180b04 Adam Menz
                if (objects.getBytes() >= bConver) {
202 6864568a Phillip Toohill
                        megaBytes = Math.abs(objects.getBytes()/bConver + 0.2);
203 3e180b04 Adam Menz
                        TextView sublabel = (TextView) findViewById(R.id.view_file_bytes);
204 3e180b04 Adam Menz
                        sublabel.setText(megaBytes + " MB");
205 6864568a Phillip Toohill
                } else if (objects.getBytes() >= kbConver){
206 6864568a Phillip Toohill
                        kiloBytes = Math.abs(objects.getBytes()/kbConver + 0.2);
207 3e180b04 Adam Menz
                        TextView sublabel = (TextView) findViewById(R.id.view_file_bytes);
208 3e180b04 Adam Menz
                        sublabel.setText(kiloBytes + " KB");
209 6864568a Phillip Toohill
                } else {
210 3e180b04 Adam Menz
                        TextView sublabel = (TextView) findViewById(R.id.view_file_bytes);
211 3e180b04 Adam Menz
                        sublabel.setText(objects.getBytes() + " B");
212 78af992b unknown
                }        
213 3e180b04 Adam Menz
214 3e180b04 Adam Menz
                //Content Type
215 3e180b04 Adam Menz
                TextView cType = (TextView) findViewById(R.id.view_content_type);
216 3e180b04 Adam Menz
                cType.setText(objects.getContentType().toString());
217 3e180b04 Adam Menz
218 3e180b04 Adam Menz
                //Last Modification date
219 3e180b04 Adam Menz
                String strDate = objects.getLastMod();
220 877f6f58 Adam Menz
                strDate = strDate.substring(0, strDate.indexOf('T'));
221 877f6f58 Adam Menz
                /*
222 3e180b04 Adam Menz
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.ssssss");
223 3e180b04 Adam Menz
                Date dateStr = null;
224 3e180b04 Adam Menz
                try {
225 3e180b04 Adam Menz
                        dateStr = formatter.parse(strDate);
226 3e180b04 Adam Menz
                } catch (ParseException e1) {
227 3e180b04 Adam Menz
                        e1.printStackTrace();
228 3e180b04 Adam Menz
                }
229 3e180b04 Adam Menz
                String formattedDate = formatter.format(dateStr);
230 877f6f58 Adam Menz

231 3e180b04 Adam Menz
                Date date1 = null;
232 3e180b04 Adam Menz
                try {
233 3e180b04 Adam Menz
                        date1 = formatter.parse(formattedDate);
234 3e180b04 Adam Menz
                } catch (ParseException e) {
235 3e180b04 Adam Menz
                        e.printStackTrace();
236 3e180b04 Adam Menz
                }      
237 3e180b04 Adam Menz
                formatter = new SimpleDateFormat("MMM-dd-yyyy");
238 3e180b04 Adam Menz
                formattedDate = formatter.format(date1);
239 877f6f58 Adam Menz
                */
240 3e180b04 Adam Menz
                TextView lastmod = (TextView) findViewById(R.id.view_file_modification);
241 877f6f58 Adam Menz
                lastmod.setText(strDate);              
242 3e180b04 Adam Menz
243 3e180b04 Adam Menz
        }
244 3e180b04 Adam Menz
245 3e180b04 Adam Menz
        private class MyOnClickListener implements View.OnClickListener {
246 3e180b04 Adam Menz
                @Override
247 3e180b04 Adam Menz
                public void onClick(View v) {
248 3e180b04 Adam Menz
                        if(v.equals(findViewById(R.id.preview_button))){
249 3e180b04 Adam Menz
                                Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse(cdnURL + "/" + objects.getCName()));
250 3e180b04 Adam Menz
                                startActivity(viewIntent);  
251 78af992b unknown
                        }
252 3e180b04 Adam Menz
                        /*
253 3e180b04 Adam Menz
                         * need to perform different functions based on if
254 3e180b04 Adam Menz
                         * the file is in the devices filesystem
255 3e180b04 Adam Menz
                         */
256 3e180b04 Adam Menz
                        if(v.equals(findViewById(R.id.download_button))){
257 3e180b04 Adam Menz
                                if(!isDownloaded){
258 3e180b04 Adam Menz
                                        if(storageIsReady()){
259 3e180b04 Adam Menz
                                                new ContainerObjectDownloadTask().execute();
260 3e180b04 Adam Menz
                                        }
261 3e180b04 Adam Menz
                                        else{
262 3e180b04 Adam Menz
                                                showAlert("Error", "Storage not found.");
263 3e180b04 Adam Menz
                                        }
264 3e180b04 Adam Menz
                                }
265 3e180b04 Adam Menz
                                else{
266 3e180b04 Adam Menz
                                        openFile();
267 3e180b04 Adam Menz
                                }
268 3e180b04 Adam Menz
                        }
269 3e180b04 Adam Menz
                }
270 3e180b04 Adam Menz
        }
271 3e180b04 Adam Menz
272 3e180b04 Adam Menz
        private void showAlert(String title, String message) {
273 3d6041e8 Phillip Toohill
                AlertDialog alert = new AlertDialog.Builder(this).create();
274 3d6041e8 Phillip Toohill
                alert.setTitle(title);
275 3d6041e8 Phillip Toohill
                alert.setMessage(message);
276 3d6041e8 Phillip Toohill
                alert.setButton("OK", new DialogInterface.OnClickListener() {
277 3e180b04 Adam Menz
                        public void onClick(DialogInterface dialog, int which) {
278 3e180b04 Adam Menz
                                return;
279 3e180b04 Adam Menz
                        } }); 
280 3d6041e8 Phillip Toohill
                alert.show();
281 3e180b04 Adam Menz
        }
282 3e180b04 Adam Menz
        //Create the Menu options
283 3e180b04 Adam Menz
        @Override 
284 3e180b04 Adam Menz
        public boolean onCreateOptionsMenu(Menu menu) {
285 3d6041e8 Phillip Toohill
                super.onCreateOptionsMenu(menu);
286 3d6041e8 Phillip Toohill
                MenuInflater inflater = getMenuInflater();
287 3d6041e8 Phillip Toohill
                inflater.inflate(R.menu.container_object_list_menu, menu);
288 3d6041e8 Phillip Toohill
                return true;
289 3d6041e8 Phillip Toohill
        } 
290 3e180b04 Adam Menz
291 3e180b04 Adam Menz
        @Override 
292 3e180b04 Adam Menz
        public boolean onOptionsItemSelected(MenuItem item) {
293 3d6041e8 Phillip Toohill
                switch (item.getItemId()) {
294 3d6041e8 Phillip Toohill
                case R.id.delete_object:
295 3d6041e8 Phillip Toohill
                        showDialog(deleteObject); 
296 3d6041e8 Phillip Toohill
                        return true;
297 3d6041e8 Phillip Toohill
                case R.id.refresh:
298 3d6041e8 Phillip Toohill
                        loadObjectData();
299 3e180b04 Adam Menz
                        return true;
300 3d6041e8 Phillip Toohill
                }
301 3d6041e8 Phillip Toohill
                return false;
302 3d6041e8 Phillip Toohill
        } 
303 3e180b04 Adam Menz
304 3e180b04 Adam Menz
        @Override
305 3e180b04 Adam Menz
        protected Dialog onCreateDialog(int id ) {
306 3e180b04 Adam Menz
                switch (id) {
307 3e180b04 Adam Menz
                case deleteObject:
308 3e180b04 Adam Menz
                        return new AlertDialog.Builder(ContainerObjectDetails.this)
309 3e180b04 Adam Menz
                        .setIcon(R.drawable.alert_dialog_icon)
310 3e180b04 Adam Menz
                        .setTitle("Delete File")
311 3e180b04 Adam Menz
                        .setMessage("Are you sure you want to delete this file?")
312 3e180b04 Adam Menz
                        .setPositiveButton("Delete File", new DialogInterface.OnClickListener() {
313 3e180b04 Adam Menz
                                public void onClick(DialogInterface dialog, int whichButton) {
314 3e180b04 Adam Menz
                                        // User clicked OK so do some stuff
315 3e180b04 Adam Menz
                                        new ContainerObjectDeleteTask().execute((Void[]) null);
316 3e180b04 Adam Menz
                                }
317 3e180b04 Adam Menz
                        })
318 3e180b04 Adam Menz
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
319 3e180b04 Adam Menz
                                public void onClick(DialogInterface dialog, int whichButton) {
320 3e180b04 Adam Menz
                                        // User clicked Cancel so do some stuff
321 3e180b04 Adam Menz
                                }
322 3e180b04 Adam Menz
                        })
323 3e180b04 Adam Menz
                        .create();
324 3e180b04 Adam Menz
                }
325 3e180b04 Adam Menz
                return null;
326 3e180b04 Adam Menz
        }
327 3e180b04 Adam Menz
        /**
328 3d6041e8 Phillip Toohill
         * @return the file
329 3d6041e8 Phillip Toohill
         */
330 3d6041e8 Phillip Toohill
        public ContainerObjects getViewFile() {
331 3d6041e8 Phillip Toohill
                return objects;
332 3d6041e8 Phillip Toohill
        }
333 3d6041e8 Phillip Toohill
334 3d6041e8 Phillip Toohill
        /**
335 3d6041e8 Phillip Toohill
         * @param File the file to set
336 3d6041e8 Phillip Toohill
         */
337 3d6041e8 Phillip Toohill
        public void setViewFile(ContainerObjects object) {
338 3d6041e8 Phillip Toohill
                this.objects = object;
339 3d6041e8 Phillip Toohill
        }
340 3e180b04 Adam Menz
341 51938302 Adam Menz
        /*
342 51938302 Adam Menz
         * returns false if external storage is not avaliable
343 51938302 Adam Menz
         * (if its mounted, missing, read-only, etc)
344 51938302 Adam Menz
         * from: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
345 51938302 Adam Menz
         */
346 51938302 Adam Menz
        private boolean storageIsReady(){
347 51938302 Adam Menz
                boolean mExternalStorageAvailable = false;
348 51938302 Adam Menz
                boolean mExternalStorageWriteable = false;
349 51938302 Adam Menz
                String state = Environment.getExternalStorageState();
350 51938302 Adam Menz
351 51938302 Adam Menz
                if (Environment.MEDIA_MOUNTED.equals(state)) {
352 3e180b04 Adam Menz
                        // We can read and write the media
353 3e180b04 Adam Menz
                        mExternalStorageAvailable = mExternalStorageWriteable = true;
354 51938302 Adam Menz
                } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
355 3e180b04 Adam Menz
                        // We can only read the media
356 3e180b04 Adam Menz
                        mExternalStorageAvailable = true;
357 3e180b04 Adam Menz
                        mExternalStorageWriteable = false;
358 51938302 Adam Menz
                } else {
359 3e180b04 Adam Menz
                        // Something else is wrong. It may be one of many other states, but all we need
360 3e180b04 Adam Menz
                        //  to know is we can neither read nor write
361 3e180b04 Adam Menz
                        mExternalStorageAvailable = mExternalStorageWriteable = false;
362 51938302 Adam Menz
                }
363 51938302 Adam Menz
                return mExternalStorageAvailable && mExternalStorageWriteable;
364 51938302 Adam Menz
        }
365 3e180b04 Adam Menz
366 51938302 Adam Menz
        private boolean fileIsDownloaded(){
367 51938302 Adam Menz
                if(storageIsReady()){
368 51938302 Adam Menz
                        String fileName = Environment.getExternalStorageDirectory().getPath() + "/RackspaceCloud/" + objects.getCName();
369 51938302 Adam Menz
                        File f = new File(fileName);
370 51938302 Adam Menz
                        return f.isFile();
371 51938302 Adam Menz
                }
372 51938302 Adam Menz
                return false;
373 51938302 Adam Menz
        }
374 3e180b04 Adam Menz
375 51938302 Adam Menz
        private void openFile(){
376 51938302 Adam Menz
                File object = new File(Environment.getExternalStorageDirectory().getPath() + "/RackspaceCloud/" + objects.getCName());
377 51938302 Adam Menz
                Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
378 3e180b04 Adam Menz
                File file = new File(object.getAbsolutePath()); 
379 3e180b04 Adam Menz
                String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
380 3e180b04 Adam Menz
                String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
381 3e180b04 Adam Menz
                myIntent.setDataAndType(Uri.fromFile(file),mimetype);
382 3e180b04 Adam Menz
                //myIntent.setData(Uri.fromFile(file));
383 3e180b04 Adam Menz
                try{
384 3e180b04 Adam Menz
                        startActivity(myIntent);
385 3e180b04 Adam Menz
                }
386 3e180b04 Adam Menz
                catch(Exception e){
387 3e180b04 Adam Menz
                        Toast.makeText(this, "Could not open file.", Toast.LENGTH_SHORT).show();
388 3e180b04 Adam Menz
                }
389 51938302 Adam Menz
        }
390 3e180b04 Adam Menz
391 51938302 Adam Menz
        private boolean writeFile(byte[] data){
392 51938302 Adam Menz
                String directoryName = Environment.getExternalStorageDirectory().getPath() + DOWNLOAD_DIRECTORY;
393 51938302 Adam Menz
                File f = new File(directoryName);
394 3e180b04 Adam Menz
395 51938302 Adam Menz
                if(!f.isDirectory()){
396 51938302 Adam Menz
                        if(!f.mkdir()){
397 51938302 Adam Menz
                                return false;
398 51938302 Adam Menz
                        }
399 51938302 Adam Menz
                }
400 3e180b04 Adam Menz
401 51938302 Adam Menz
                String filename = directoryName + "/" + objects.getCName();
402 51938302 Adam Menz
                File object = new File(filename);
403 51938302 Adam Menz
                BufferedOutputStream bos = null;
404 3e180b04 Adam Menz
405 51938302 Adam Menz
                try{
406 51938302 Adam Menz
                        FileOutputStream fos = new FileOutputStream(object);
407 51938302 Adam Menz
                        bos = new BufferedOutputStream(fos);
408 51938302 Adam Menz
                        bos.write(data);
409 51938302 Adam Menz
                }
410 51938302 Adam Menz
                catch(FileNotFoundException e){
411 51938302 Adam Menz
                        e.printStackTrace();
412 51938302 Adam Menz
                }
413 51938302 Adam Menz
                catch(IOException e){
414 51938302 Adam Menz
                        e.printStackTrace();
415 51938302 Adam Menz
                }
416 51938302 Adam Menz
                finally{
417 51938302 Adam Menz
                        if(bos != null){
418 51938302 Adam Menz
                                try {
419 51938302 Adam Menz
                                        bos.flush();
420 51938302 Adam Menz
                                        bos.close();
421 51938302 Adam Menz
                                } catch (IOException e) {
422 51938302 Adam Menz
                                        // TODO Auto-generated catch block
423 51938302 Adam Menz
                                        e.printStackTrace();
424 51938302 Adam Menz
                                }
425 51938302 Adam Menz
                        }
426 51938302 Adam Menz
                }
427 51938302 Adam Menz
                return true;
428 51938302 Adam Menz
        }
429 3e180b04 Adam Menz
430 3d6041e8 Phillip Toohill
        //Task's
431 3e180b04 Adam Menz
432 3e180b04 Adam Menz
        private CloudServersException parseCloudServersException(HttpResponse response) {
433 3e180b04 Adam Menz
                CloudServersException cse = new CloudServersException();
434 3e180b04 Adam Menz
                try {
435 3e180b04 Adam Menz
                        BasicResponseHandler responseHandler = new BasicResponseHandler();
436 3e180b04 Adam Menz
                        String body = responseHandler.handleResponse(response);
437 3e180b04 Adam Menz
                        CloudServersFaultXMLParser parser = new CloudServersFaultXMLParser();
438 3e180b04 Adam Menz
                        SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
439 3e180b04 Adam Menz
                        XMLReader xmlReader = saxParser.getXMLReader();
440 3e180b04 Adam Menz
                        xmlReader.setContentHandler(parser);
441 3e180b04 Adam Menz
                        xmlReader.parse(new InputSource(new StringReader(body)));                            
442 3e180b04 Adam Menz
                        cse = parser.getException();                            
443 3e180b04 Adam Menz
                } catch (ClientProtocolException e) {
444 3e180b04 Adam Menz
                        cse = new CloudServersException();
445 3e180b04 Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
446 3e180b04 Adam Menz
                } catch (IOException e) {
447 3e180b04 Adam Menz
                        cse = new CloudServersException();
448 3e180b04 Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
449 3e180b04 Adam Menz
                } catch (ParserConfigurationException e) {
450 3e180b04 Adam Menz
                        cse = new CloudServersException();
451 3e180b04 Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
452 3e180b04 Adam Menz
                } catch (SAXException e) {
453 3e180b04 Adam Menz
                        cse = new CloudServersException();
454 3e180b04 Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
455 3e180b04 Adam Menz
                } catch (FactoryConfigurationError e) {
456 3e180b04 Adam Menz
                        cse = new CloudServersException();
457 3e180b04 Adam Menz
                        cse.setMessage(e.getLocalizedMessage());
458 3e180b04 Adam Menz
                }
459 3e180b04 Adam Menz
                return cse;
460 3e180b04 Adam Menz
        }
461 3e180b04 Adam Menz
462 3e180b04 Adam Menz
        private void startFileError(String message, HttpBundle bundle){
463 3e180b04 Adam Menz
                Intent viewIntent = new Intent(getApplicationContext(), ServerErrorActivity.class);
464 3e180b04 Adam Menz
                viewIntent.putExtra("errorMessage", message);
465 3e180b04 Adam Menz
                viewIntent.putExtra("response", bundle.getResponseText());
466 3e180b04 Adam Menz
                viewIntent.putExtra("request", bundle.getCurlRequest());
467 3e180b04 Adam Menz
                startActivity(viewIntent);
468 3e180b04 Adam Menz
        }
469 3e180b04 Adam Menz
        
470 3e180b04 Adam Menz
        private void showDialog() {
471 3e180b04 Adam Menz
                if(dialog == null || !dialog.isShowing()){
472 3e180b04 Adam Menz
                        displayDialog = true;
473 3e180b04 Adam Menz
                        dialog = ProgressDialog.show(ContainerObjectDetails.this, "", "Loading...", true);
474 3e180b04 Adam Menz
                }
475 3e180b04 Adam Menz
    }
476 3e180b04 Adam Menz
    
477 3e180b04 Adam Menz
    private void hideDialog() {
478 3e180b04 Adam Menz
            if(dialog != null){
479 3e180b04 Adam Menz
                    dialog.dismiss();
480 3e180b04 Adam Menz
            }
481 3e180b04 Adam Menz
            displayDialog = false;
482 3e180b04 Adam Menz
    }
483 3e180b04 Adam Menz
484 3e180b04 Adam Menz
        private class ContainerObjectDeleteTask extends AsyncTask<Void, Void, HttpBundle> {
485 3e180b04 Adam Menz
486 3e180b04 Adam Menz
                private CloudServersException exception;
487 3e180b04 Adam Menz
488 3e180b04 Adam Menz
                protected void onPreExecute(){
489 3e180b04 Adam Menz
                        //dialog = ProgressDialog.show(ContainerObjectDetails.this, "", "Deleting...", true);
490 3e180b04 Adam Menz
                        showDialog();
491 3e180b04 Adam Menz
                        app.setDeleteingObject(true);
492 3e180b04 Adam Menz
                        deleteObjTask = new DeleteObjectListenerTask();
493 3e180b04 Adam Menz
                        deleteObjTask.execute();
494 3e180b04 Adam Menz
                }
495 3e180b04 Adam Menz
496 3e180b04 Adam Menz
                @Override
497 3e180b04 Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
498 3e180b04 Adam Menz
                        HttpBundle bundle = null;        
499 3e180b04 Adam Menz
                        try {
500 3e180b04 Adam Menz
                                bundle = (new ContainerObjectManager(context)).deleteObject(containerNames, objects.getCName() );
501 3e180b04 Adam Menz
                        } catch (CloudServersException e) {
502 3e180b04 Adam Menz
                                exception = e;
503 3e180b04 Adam Menz
                        }
504 3e180b04 Adam Menz
                        
505 3e180b04 Adam Menz
                        return bundle;
506 3e180b04 Adam Menz
                }
507 3e180b04 Adam Menz
508 3e180b04 Adam Menz
                @Override
509 3e180b04 Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
510 3e180b04 Adam Menz
                        //dialog.dismiss();
511 3e180b04 Adam Menz
                        app.setDeleteingObject(false);
512 3e180b04 Adam Menz
                        hideDialog();
513 3e180b04 Adam Menz
                        HttpResponse response = bundle.getResponse();
514 3e180b04 Adam Menz
                        if (response != null) {
515 3e180b04 Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();
516 3e180b04 Adam Menz
                                if (statusCode == 204) {
517 3e180b04 Adam Menz
                                        //handled by listner
518 3e180b04 Adam Menz
                                } else {
519 3e180b04 Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
520 3e180b04 Adam Menz
                                        if ("".equals(cse.getMessage())) {
521 3e180b04 Adam Menz
                                                startFileError("There was a problem deleting your File.", bundle);
522 3e180b04 Adam Menz
                                        } else {
523 3e180b04 Adam Menz
                                                startFileError("There was a problem deleting your file: " + cse.getMessage(), bundle);
524 3e180b04 Adam Menz
                                        }
525 3e180b04 Adam Menz
                                }
526 3e180b04 Adam Menz
                        } else if (exception != null) {
527 3e180b04 Adam Menz
                                startFileError("There was a problem deleting your file: " + exception.getMessage(), bundle);                                
528 3e180b04 Adam Menz
                        }                        
529 3e180b04 Adam Menz
                }
530 3e180b04 Adam Menz
        }
531 3e180b04 Adam Menz
532 3e180b04 Adam Menz
        private class ContainerObjectDownloadTask extends AsyncTask<Void, Void, HttpBundle> {
533 3e180b04 Adam Menz
534 3e180b04 Adam Menz
                private CloudServersException exception;
535 3e180b04 Adam Menz
536 3e180b04 Adam Menz
                @Override
537 3e180b04 Adam Menz
                protected void onPreExecute(){
538 3e180b04 Adam Menz
                        showDialog();
539 3e180b04 Adam Menz
                        app.setDownloadingObject(true);
540 3e180b04 Adam Menz
                        downloadObjTask = new DownloadObjectListenerTask();
541 3e180b04 Adam Menz
                        downloadObjTask.execute();
542 3e180b04 Adam Menz
                }
543 3e180b04 Adam Menz
544 3e180b04 Adam Menz
                @Override
545 3e180b04 Adam Menz
                protected HttpBundle doInBackground(Void... arg0) {
546 3e180b04 Adam Menz
                        HttpBundle bundle = null;        
547 3e180b04 Adam Menz
                        try {
548 3e180b04 Adam Menz
                                bundle = (new ContainerObjectManager(context)).getObject(containerNames, objects.getCName());
549 3e180b04 Adam Menz
                        } catch (CloudServersException e) {
550 3e180b04 Adam Menz
                                exception = e;
551 3e180b04 Adam Menz
                        }
552 3e180b04 Adam Menz
                        return bundle;
553 3e180b04 Adam Menz
                }
554 3e180b04 Adam Menz
555 3e180b04 Adam Menz
                @Override
556 3e180b04 Adam Menz
                protected void onPostExecute(HttpBundle bundle) {
557 3e180b04 Adam Menz
                        app.setDownloadingObject(false);
558 3e180b04 Adam Menz
                        hideDialog();
559 3e180b04 Adam Menz
                        HttpResponse response = bundle.getResponse();
560 3e180b04 Adam Menz
                        if (response != null) {
561 3e180b04 Adam Menz
                                int statusCode = response.getStatusLine().getStatusCode();
562 3e180b04 Adam Menz
                                if (statusCode == 200) {
563 3e180b04 Adam Menz
                                        setResult(Activity.RESULT_OK);
564 3e180b04 Adam Menz
                                        HttpEntity entity = response.getEntity();
565 3e180b04 Adam Menz
                                        app.setDownloadedEntity(entity);
566 3e180b04 Adam Menz
                                        /*
567 3e180b04 Adam Menz
                                        try {
568 3e180b04 Adam Menz
                                                if(writeFile(EntityUtils.toByteArray(entity))){
569 3e180b04 Adam Menz
                                                        downloadButton.setText("Open File");
570 3e180b04 Adam Menz
                                                        isDownloaded = true;
571 3e180b04 Adam Menz
                                                }
572 3e180b04 Adam Menz
                                                else{
573 3e180b04 Adam Menz
                                                        showAlert("Error", "There was a problem downloading your file.");
574 3e180b04 Adam Menz
                                                }
575 3e180b04 Adam Menz

576 3e180b04 Adam Menz
                                        } catch (IOException e) {
577 3e180b04 Adam Menz
                                                showAlert("Error", "There was a problem downloading your file.");
578 3e180b04 Adam Menz
                                                e.printStackTrace();
579 3e180b04 Adam Menz
                                        }
580 3e180b04 Adam Menz
                                        */
581 3e180b04 Adam Menz
582 3e180b04 Adam Menz
                                } else {
583 3e180b04 Adam Menz
                                        CloudServersException cse = parseCloudServersException(response);
584 3e180b04 Adam Menz
                                        if ("".equals(cse.getMessage())) {
585 3e180b04 Adam Menz
                                                startFileError("There was a problem downloading your File.", bundle);
586 3e180b04 Adam Menz
                                        } else {
587 3e180b04 Adam Menz
                                                startFileError("There was a problem downloading your file: " + cse.getMessage(), bundle);
588 3e180b04 Adam Menz
                                        }
589 3e180b04 Adam Menz
                                }
590 3e180b04 Adam Menz
                        } else if (exception != null) {
591 3e180b04 Adam Menz
                                startFileError("There was a problem downloading your file: " + exception.getMessage(), bundle);                                
592 3e180b04 Adam Menz
                        }                        
593 3e180b04 Adam Menz
                }
594 3e180b04 Adam Menz
        }
595 3d6041e8 Phillip Toohill
        
596 3e180b04 Adam Menz
        private class DeleteObjectListenerTask extends
597 3e180b04 Adam Menz
        AsyncTask<Void, Void, Void> {
598 3e180b04 Adam Menz
                
599 3e180b04 Adam Menz
                @Override
600 3e180b04 Adam Menz
                protected Void doInBackground(Void... arg1) {
601 3e180b04 Adam Menz
602 3e180b04 Adam Menz
                        while(app.isDeletingObject()){
603 3e180b04 Adam Menz
                                // wait for process to finish
604 3e180b04 Adam Menz
                                // or have it be canceled
605 3e180b04 Adam Menz
                                if(deleteObjTask.isCancelled()){
606 3e180b04 Adam Menz
                                        return null;
607 3e180b04 Adam Menz
                                }
608 3e180b04 Adam Menz
                        }
609 3e180b04 Adam Menz
                        return null;
610 3e180b04 Adam Menz
                }
611 3e180b04 Adam Menz
612 3e180b04 Adam Menz
                /*
613 3e180b04 Adam Menz
                 * when no longer processing, time to load
614 3e180b04 Adam Menz
                 * the new files
615 3e180b04 Adam Menz
                 */
616 3e180b04 Adam Menz
                @Override
617 3e180b04 Adam Menz
                protected void onPostExecute(Void arg1) {
618 3e180b04 Adam Menz
                        hideDialog();
619 3e180b04 Adam Menz
                        setResult(99);
620 3e180b04 Adam Menz
                        finish();
621 3e180b04 Adam Menz
                }
622 3e180b04 Adam Menz
        }
623 3e180b04 Adam Menz
        
624 3e180b04 Adam Menz
        private class DownloadObjectListenerTask extends
625 3e180b04 Adam Menz
        AsyncTask<Void, Void, Void> {
626 3e180b04 Adam Menz
                
627 3e180b04 Adam Menz
                @Override
628 3e180b04 Adam Menz
                protected Void doInBackground(Void... arg1) {
629 3e180b04 Adam Menz
630 3e180b04 Adam Menz
                        while(app.isDownloadingObject()){
631 3e180b04 Adam Menz
                                // wait for process to finish
632 3e180b04 Adam Menz
                                // or have it be canceled
633 3e180b04 Adam Menz
                                if(downloadObjTask.isCancelled()){
634 3e180b04 Adam Menz
                                        return null;
635 3e180b04 Adam Menz
                                }
636 3e180b04 Adam Menz
                        }
637 3e180b04 Adam Menz
                        return null;
638 3e180b04 Adam Menz
                }
639 3e180b04 Adam Menz
640 3e180b04 Adam Menz
                /*
641 3e180b04 Adam Menz
                 * when no longer processing, time to load
642 3e180b04 Adam Menz
                 * the new files
643 3e180b04 Adam Menz
                 */
644 3e180b04 Adam Menz
                @Override
645 3e180b04 Adam Menz
                protected void onPostExecute(Void arg1) {
646 3e180b04 Adam Menz
                        hideDialog();
647 3e180b04 Adam Menz
                        try {
648 3e180b04 Adam Menz
                                Log.d("info", "captin starting to write");
649 3e180b04 Adam Menz
                                if(writeFile(EntityUtils.toByteArray(app.getDownloadedEntity()))){
650 3e180b04 Adam Menz
                                        downloadButton.setText("Open File");
651 3e180b04 Adam Menz
                                        isDownloaded = true;
652 3e180b04 Adam Menz
                                        Log.d("info", "captin wrote");
653 3e180b04 Adam Menz
                                }
654 3e180b04 Adam Menz
                                else{
655 3e180b04 Adam Menz
                                        showAlert("Error", "There was a problem downloading your file.");
656 3e180b04 Adam Menz
                                }
657 3e180b04 Adam Menz
658 3e180b04 Adam Menz
                        } catch (IOException e) {
659 3e180b04 Adam Menz
                                showAlert("Error", "There was a problem downloading your file.");
660 3e180b04 Adam Menz
                                e.printStackTrace();
661 969195cf Adam Menz
                        } catch (Exception e) {
662 969195cf Adam Menz
                                showAlert("Error", "There was a problem downloading your file.");
663 969195cf Adam Menz
                                e.printStackTrace();
664 3e180b04 Adam Menz
                        }
665 3e180b04 Adam Menz
                }
666 3e180b04 Adam Menz
        }
667 3e180b04 Adam Menz
668 3e180b04 Adam Menz
}