implementing upload workflow to dropbox

Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/354b4f4f
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/354b4f4f
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/354b4f4f

Branch: refs/heads/master
Commit: 354b4f4f31259a508feb968e002da719ecc4300c
Parents: 5b6c027
Author: larrytech7 <larrya...@gmail.com>
Authored: Sun Jul 12 02:17:53 2015 +0100
Committer: larrytech7 <larrya...@gmail.com>
Committed: Sun Jul 12 02:17:53 2015 +0100

----------------------------------------------------------------------
 .../workflowdetails/WorkflowdetailFragment.java | 104 +++++++++++++++++--
 app/src/main/res/drawable/dropbox_icon.png      | Bin 0 -> 1543 bytes
 app/src/main/res/drawable/google_drive_icon.png | Bin 0 -> 2014 bytes
 .../res/layout/fragment_workflow_detail.xml     |  28 ++++-
 4 files changed, 119 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/354b4f4f/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
 
b/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
index c2c5277..786f572 100644
--- 
a/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
+++ 
b/app/src/main/java/org/apache/taverna/mobile/fragments/workflowdetails/WorkflowdetailFragment.java
@@ -35,6 +35,7 @@ import android.content.Intent;
 import android.content.Loader;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
@@ -55,6 +56,12 @@ import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.ZoomControls;
 
+import com.dropbox.client2.DropboxAPI;
+import com.dropbox.client2.ProgressListener;
+import com.dropbox.client2.android.AndroidAuthSession;
+import com.dropbox.client2.exception.DropboxException;
+import com.dropbox.client2.session.AppKeyPair;
+
 import org.apache.taverna.mobile.R;
 import org.apache.taverna.mobile.activities.DashboardMainActivity;
 import org.apache.taverna.mobile.activities.RunResult;
@@ -71,10 +78,13 @@ import org.json.JSONObject;
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.charset.CharsetEncoder;
 
@@ -101,6 +111,10 @@ public class WorkflowdetailFragment extends Fragment 
implements View.OnClickList
     static Animation zoomout;
     public boolean isZoomIn;
     public static String workflow_uri ;
+    final static private String BOX_APP_KEY = "doicbvkfyzligh2";
+    final static private String BOX_APP_SECRET = "3uuuw36mm7jkflc";
+
+    private DropboxAPI<AndroidAuthSession> mDBApi;
 
     /**
      * Returns a new instance of this fragment for the given section
@@ -121,8 +135,11 @@ public class WorkflowdetailFragment extends Fragment 
implements View.OnClickList
     }
 
     @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
+    public View onCreateView(LayoutInflater inflater, ViewGroup 
container,Bundle savedInstanceState) {
+
+        AppKeyPair appKeys = new AppKeyPair(BOX_APP_KEY, BOX_APP_SECRET);
+        AndroidAuthSession session = new AndroidAuthSession(appKeys);
+        mDBApi = new DropboxAPI<AndroidAuthSession>(session);
         long workflowid = getActivity().getIntent().getLongExtra("workflowid", 
0);
         rootView = inflater.inflate(R.layout.fragment_workflow_detail, 
container, false);
         progressDialog = new ProgressDialog(getActivity());
@@ -131,14 +148,15 @@ public class WorkflowdetailFragment extends Fragment 
implements View.OnClickList
         WORKFLO_ID = workflowid;
         zoomin = AnimationUtils.loadAnimation(getActivity(), R.anim.zoomin);
         zoomout = AnimationUtils.loadAnimation(getActivity(), R.anim.zoomout);
-        zoomControls = (ZoomControls) rootView.findViewById(R.id.zoomControls);
-        zoomControls.setOnClickListener(this);
+
         isZoomIn = false;
 
         Button createRun = (Button) rootView.findViewById(R.id.run_wk);
         createRun.setOnClickListener(this);
         Button download = (Button) rootView.findViewById(R.id.download_wk);
         download.setOnClickListener(this);
+        
rootView.findViewById(R.id.saveToDropboxButton).setOnClickListener(this);
+        
rootView.findViewById(R.id.saveToGoogleDriveButton).setOnClickListener(this);
         (rootView.findViewById(R.id.wkf_image)).setOnLongClickListener(new 
View.OnLongClickListener() {
             @Override
             public boolean onLongClick(View view) {
@@ -186,10 +204,11 @@ public class WorkflowdetailFragment extends Fragment 
implements View.OnClickList
             case R.id.mark_wk:
                 //TODO mark a workflow as important and launch task to store 
the entry into the local database
                 break;
-            case R.id.zoomControls:
-                zoomin.reset();
-                zoomin.startNow();
-                Toast.makeText(getActivity(), "Zooming", 
Toast.LENGTH_SHORT).show();
+            case R.id.saveToDropboxButton:
+                mDBApi.getSession().startOAuth2Authentication(getActivity());
+
+                break;
+            case R.id.saveToGoogleDriveButton:
                 break;
         }
     }
@@ -207,6 +226,17 @@ public class WorkflowdetailFragment extends Fragment 
implements View.OnClickList
         workflow_uri = getActivity().getIntent().getStringExtra("uri");
 
         getActivity().getLoaderManager().initLoader(1, null, this).forceLoad();
+
+        if (mDBApi.getSession().authenticationSuccessful()) {
+            try {
+                // Required to complete auth, sets the access token on the 
session
+                mDBApi.getSession().finishAuthentication();
+                String accessToken = 
mDBApi.getSession().getOAuth2AccessToken();
+                new WorkflowDriveUpload().execute(download_url);
+            } catch (IllegalStateException e) {
+                Log.i("DbAuthLog", "Error authenticating", e);
+            }
+        }
     }
 
     @Override
@@ -591,4 +621,62 @@ public class WorkflowdetailFragment extends Fragment 
implements View.OnClickList
         }
     }
 
+    /**
+     * Upload workflow from myexperiment to DropBox
+     */
+    private class WorkflowDriveUpload extends  AsyncTask<String, Void, String>{
+        @Override
+        protected void onPreExecute() {
+            Toast.makeText(getActivity(), "Saving workflow to dropBox", 
Toast.LENGTH_LONG).show();
+        }
+
+        @Override
+        protected String doInBackground(String... files) {
+           // File file = new File(files[0]);
+            HttpURLConnection mconn ;
+         //   FileInputStream inputStream = null;
+            DropboxAPI.Entry response = null;
+            DropboxAPI.Entry metaDataEntry = null;
+            try {
+                mconn = (HttpURLConnection) new URL(files[0]).openConnection();
+                mconn.setRequestMethod("GET");
+                mconn.connect();
+
+              //  inputStream = new FileInputStream(file);
+
+                 response = mDBApi.putFile("/"+ 
Uri.parse(files[0]).getLastPathSegment(), mconn.getInputStream(),
+                        mconn.getContentLength(), null, new ProgressListener() 
{
+                             @Override
+                             public void onProgress(long l, long l2) {
+                                 if (l==l2){
+                                     Toast.makeText(getActivity(), "Upload 
complete", Toast.LENGTH_LONG).show();
+                                 }
+                             }
+                         });
+
+                Log.i("DbExampleLog", "The uploaded file's rev is: " + 
response.rev);
+                metaDataEntry = 
mDBApi.metadata("/"+Uri.parse(files[0]).getLastPathSegment(), 1, null, false, 
null);
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (DropboxException e) {
+                e.printStackTrace();
+            } catch (MalformedURLException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+            return response.rev;
+        }
+
+        @Override
+        protected void onPostExecute(String s) {
+            if(null != s)
+                Toast.makeText(getActivity(), "File Saved to dropbox: "+s, 
Toast.LENGTH_LONG).show();
+            else{
+                Toast.makeText(getActivity(), "Failed to save to dropbox "+s, 
Toast.LENGTH_LONG).show();
+            }
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/354b4f4f/app/src/main/res/drawable/dropbox_icon.png
----------------------------------------------------------------------
diff --git a/app/src/main/res/drawable/dropbox_icon.png 
b/app/src/main/res/drawable/dropbox_icon.png
new file mode 100644
index 0000000..77c5fc8
Binary files /dev/null and b/app/src/main/res/drawable/dropbox_icon.png differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/354b4f4f/app/src/main/res/drawable/google_drive_icon.png
----------------------------------------------------------------------
diff --git a/app/src/main/res/drawable/google_drive_icon.png 
b/app/src/main/res/drawable/google_drive_icon.png
new file mode 100644
index 0000000..cdd8b0b
Binary files /dev/null and b/app/src/main/res/drawable/google_drive_icon.png 
differ

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/354b4f4f/app/src/main/res/layout/fragment_workflow_detail.xml
----------------------------------------------------------------------
diff --git a/app/src/main/res/layout/fragment_workflow_detail.xml 
b/app/src/main/res/layout/fragment_workflow_detail.xml
index 9bab19c..94d3e94 100644
--- a/app/src/main/res/layout/fragment_workflow_detail.xml
+++ b/app/src/main/res/layout/fragment_workflow_detail.xml
@@ -93,12 +93,30 @@ limitations under the License.
                 android:backgroundTint="@color/accent_material_light"
                 android:backgroundTintMode="src_atop" />
 
-            <ZoomControls
-                android:layout_width="wrap_content"
+            <LinearLayout
+                android:orientation="horizontal"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:id="@+id/zoomControls"
-                android:layout_gravity="center_horizontal"
-                android:orientation="horizontal" />
+                android:layout_gravity="center"
+                android:gravity="right">
+
+                <ImageButton
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/saveToDropboxButton"
+                    android:src="@drawable/dropbox_icon"
+                    android:layout_gravity="left"
+                    android:layout_marginRight="20dp"
+                    android:background="@color/button_material_light" />
+
+                <ImageButton
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:id="@+id/saveToGoogleDriveButton"
+                    android:src="@drawable/google_drive_icon"
+                    android:layout_gravity="right"
+                    android:background="@color/button_material_light" />
+            </LinearLayout>
 
         </LinearLayout>
     </ScrollView>

Reply via email to