add Workflow Run Activity with MVP classes

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/8c1c5bf1
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/8c1c5bf1
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/8c1c5bf1

Branch: refs/heads/master
Commit: 8c1c5bf1a9ed7c699bcd9e9bfdc9146bf0ce6448
Parents: d411dae
Author: Sagar <[email protected]>
Authored: Mon Sep 26 14:37:13 2016 +0530
Committer: Sagar <[email protected]>
Committed: Mon Sep 26 14:37:13 2016 +0530

----------------------------------------------------------------------
 .../ui/workflowrun/WorkflowRunActivity.java     | 173 +++++++++++++++++++
 .../ui/workflowrun/WorkflowRunMvpView.java      |  13 ++
 .../ui/workflowrun/WorkflowRunPresenter.java    | 146 ++++++++++++++++
 3 files changed, 332 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/8c1c5bf1/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunActivity.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunActivity.java
 
b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunActivity.java
new file mode 100644
index 0000000..0ba0e1f
--- /dev/null
+++ 
b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunActivity.java
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.taverna.mobile.ui.workflowrun;
+
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+import android.support.v4.view.PagerAdapter;
+
+import com.anton46.stepsview.StepsView;
+
+import org.apache.taverna.mobile.R;
+import org.apache.taverna.mobile.data.DataManager;
+import org.apache.taverna.mobile.data.local.PreferencesHelper;
+import org.apache.taverna.mobile.ui.DownloadingFragment;
+import org.apache.taverna.mobile.ui.playerlogin.PlayerLoginFragment;
+import org.apache.taverna.mobile.utils.NonSwipeableViewPager;
+import org.apache.taverna.mobile.utils.WebViewGen;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+import static com.raizlabs.android.dbflow.config.FlowManager.getContext;
+
+public class WorkflowRunActivity extends FragmentActivity implements 
WorkflowRunMvpView,
+        PlayerLoginFragment.OnSuccessful {
+
+    public static final String WORKFLOW_URL = "Workflow_url";
+
+
+    private DataManager dataManager;
+
+    private WorkflowRunPresenter mWorkflowRunPresenter;
+
+    @BindView(R.id.stepsView)
+    StepsView mStepsView;
+
+    @BindView(R.id.viewpager)
+    NonSwipeableViewPager mPager;
+
+    private PagerAdapter mPagerAdapter;
+
+    private final String[] labels = {"Player\nLogin","Download", "Upload", 
"Inputs &\n Run"};
+    int position =0;
+
+    String workflowRunURL;
+
+    String workflowURL;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(R.layout.activity_workflow_run);
+
+        ButterKnife.bind(this);
+
+        dataManager = new DataManager(new PreferencesHelper(getContext()));
+
+        mWorkflowRunPresenter = new WorkflowRunPresenter(dataManager);
+
+        mWorkflowRunPresenter.attachView(this);
+
+
+        mStepsView.setCompletedPosition(position % labels.length)
+                .setLabels(labels)
+                .setBarColorIndicator(
+                        
getContext().getResources().getColor(R.color.material_blue_grey_800))
+                
.setProgressColorIndicator(getContext().getResources().getColor(R.color.colorPrimary))
+                
.setLabelColorIndicator(getContext().getResources().getColor(R.color.colorPrimary))
+                .drawView();
+
+
+        mPagerAdapter = new 
ScreenSlidePagerAdapter(getSupportFragmentManager());
+        mPager.setAdapter(mPagerAdapter);
+
+        if(dataManager.getPreferencesHelper().isUserPlayerLoggedInFlag()){
+            mPager.setCurrentItem(++position);
+            mStepsView.setCompletedPosition(position % 
labels.length).drawView();
+
+            
mWorkflowRunPresenter.runWorkflow(getIntent().getStringExtra(WORKFLOW_URL));
+        }
+
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        mWorkflowRunPresenter.detachView();
+    }
+
+
+    @Override
+    public void onSuccessfulLogin() {
+        position =1;
+        mPager.setCurrentItem(position);
+        mStepsView.setCompletedPosition(position % labels.length).drawView();
+        mWorkflowRunPresenter.runWorkflow("hh");
+    }
+
+    @Override
+    public void movetoUploadWorkflow() {
+        position =2;
+        mPager.setCurrentItem(position);
+        mStepsView.setCompletedPosition(position % labels.length).drawView();
+    }
+
+    @Override
+    public void movetoInputs() {
+        position =3;
+        mStepsView.setCompletedPosition(position % labels.length).drawView();
+        mPager.setCurrentItem(position);
+
+    }
+
+    @Override
+    public void setInputsAttribute(int id) {
+
+        workflowRunURL = "http://139.59.28.12:3000/workflows/"+id+"/runs/new";;
+        mPager.getAdapter().notifyDataSetChanged();
+    }
+
+
+    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
+        public ScreenSlidePagerAdapter(FragmentManager fm) {
+            super(fm);
+        }
+
+        @Override
+        public Fragment getItem(int position) {
+            switch (position){
+                case 0:
+                    return PlayerLoginFragment.newInstance();
+                case 1:
+                    return DownloadingFragment.newInstance("Downloading 
Workflow");
+                case 2:
+                    return DownloadingFragment.newInstance("Uploading 
Workflow");
+                case 3:
+                    return WebViewGen.newInstance(workflowRunURL);
+                default:
+                    return DownloadingFragment.newInstance("Uploading1+ 
Workflow");
+
+            }
+        }
+
+        @Override
+        public int getCount() {
+            return 4;
+        }
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/8c1c5bf1/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunMvpView.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunMvpView.java
 
b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunMvpView.java
new file mode 100644
index 0000000..727cb38
--- /dev/null
+++ 
b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunMvpView.java
@@ -0,0 +1,13 @@
+package org.apache.taverna.mobile.ui.workflowrun;
+
+
+import org.apache.taverna.mobile.ui.base.MvpView;
+
+public interface WorkflowRunMvpView extends MvpView {
+
+    void movetoUploadWorkflow();
+
+    void movetoInputs();
+
+    void setInputsAttribute(int id);
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/8c1c5bf1/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
----------------------------------------------------------------------
diff --git 
a/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
 
b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
new file mode 100644
index 0000000..48e6310
--- /dev/null
+++ 
b/app/src/main/java/org/apache/taverna/mobile/ui/workflowrun/WorkflowRunPresenter.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.taverna.mobile.ui.workflowrun;
+
+
+import android.util.Base64;
+import android.util.Log;
+
+import org.apache.taverna.mobile.data.DataManager;
+import org.apache.taverna.mobile.data.model.PlayerWorkflow;
+import org.apache.taverna.mobile.data.model.PlayerWorkflowDetail;
+import org.apache.taverna.mobile.ui.base.BasePresenter;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import rx.Observable;
+import rx.Observer;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.functions.Func1;
+import rx.schedulers.Schedulers;
+
+public class WorkflowRunPresenter extends BasePresenter<WorkflowRunMvpView> {
+
+
+    private final DataManager mDataManager;
+    private Subscription mSubscriptions;
+
+
+    public WorkflowRunPresenter(DataManager dataManager) {
+        mDataManager = dataManager;
+
+    }
+
+    @Override
+    public void attachView(WorkflowRunMvpView mvpView) {
+
+        super.attachView(mvpView);
+
+    }
+
+    @Override
+    public void detachView() {
+        super.detachView();
+        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+    }
+
+
+    public void runWorkflow(String contentURL) {
+        if (mSubscriptions != null) mSubscriptions.unsubscribe();
+
+        mSubscriptions = mDataManager.downloadWorkflowContent(contentURL)
+                .concatMap(new Func1<ResponseBody, 
Observable<PlayerWorkflow>>() {
+                    @Override
+                    public Observable<PlayerWorkflow> call(ResponseBody 
responseBody) {
+
+                        StringBuffer sb = new StringBuffer();
+                        String post = "";
+
+                        String basicAuth = 
mDataManager.getPreferencesHelper().getUserPlayerCredential();
+                        boolean flag = false;
+                        try {
+
+                            BufferedReader bufferedReader = new BufferedReader(
+                                    new 
InputStreamReader(responseBody.byteStream()));
+
+                            String str = "";
+
+                            while ((str = bufferedReader.readLine()) != null)
+                                sb.append(str);
+
+                            bufferedReader.close();
+
+                            String data = 
"{\"document\":\"data:application/octet-stream;base64," +
+                                    
Base64.encodeToString(sb.toString().getBytes("UTF-8"), Base64
+                                            .URL_SAFE | 
Base64.NO_WRAP).replace('-', '+') + "\"}";
+
+                            post = "{\"workflow\":" + data + "}";
+                            flag = true;
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                        if (flag) {
+                            RequestBody body =
+                                    
RequestBody.create(MediaType.parse("application/json"), post);
+
+                            return mDataManager.uploadWorkflowContent(body, 
basicAuth.trim());
+                        } else {
+                            return Observable.empty();
+                        }
+
+
+                    }
+                })
+                .concatMap(new Func1<PlayerWorkflow, 
Observable<PlayerWorkflowDetail>>() {
+                    @Override
+                    public Observable<PlayerWorkflowDetail> 
call(PlayerWorkflow playerWorkflow) {
+
+                        return 
mDataManager.getWorkflowDetail(playerWorkflow.getId());
+                    }
+                })
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribeOn(Schedulers.io())
+                .subscribe(new Observer<PlayerWorkflowDetail>() {
+                    @Override
+                    public void onCompleted() {
+                        getMvpView().movetoInputs();
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        Log.e("TAG", "onError: ", e);
+                    }
+
+                    @Override
+                    public void onNext(PlayerWorkflowDetail 
playerWorkflowDetail) {
+                        
getMvpView().setInputsAttribute(playerWorkflowDetail.getRun().getWorkflowId());
+                    }
+                });
+    }
+
+
+
+
+}

Reply via email to