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()); + } + }); + } + + + + +}
