Repository: incubator-taverna-mobile Updated Branches: refs/heads/ian_taverna_server [created] 825c79b11
Use taverna server to start workflow run 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/eab06c31 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/eab06c31 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/eab06c31 Branch: refs/heads/ian_taverna_server Commit: eab06c317e3ab149c8e593bb811dee3a3a74f58e Parents: 3798002 Author: Ian Dunlop <[email protected]> Authored: Fri Dec 9 16:35:05 2016 +0000 Committer: Ian Dunlop <[email protected]> Committed: Fri Dec 9 16:35:05 2016 +0000 ---------------------------------------------------------------------- .../data/remote/TavernaPlayerService.java | 10 +- .../ui/playerlogin/PlayerLoginFragment.java | 31 +++-- .../ui/playerlogin/PlayerLoginMvpView.java | 3 +- .../ui/playerlogin/PlayerLoginPresenter.java | 127 ++++++++++++++++--- .../ui/workflowrun/WorkflowRunActivity.java | 3 +- .../ui/workflowrun/WorkflowRunPresenter.java | 10 +- .../main/res/layout/activity_workflow_run.xml | 4 +- .../res/layout/fragment_player_login_layout.xml | 4 +- app/src/main/res/values/strings.xml | 2 + 9 files changed, 147 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java index e71ea38..0a3c688 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaPlayerService.java @@ -34,11 +34,13 @@ import rx.Observable; public interface TavernaPlayerService { - @POST("/workflows.json") + @POST("rest/runs") @Headers({ - APIEndPoint.JSON_CONTENT_HEADER, - APIEndPoint.JSON_ACCEPT_HEADER, - APIEndPoint.UTF_CONTENT_ENCODING_HEADER}) + "Content-type: application/vnd.taverna.t2flow+xml" + // APIEndPoint.JSON_CONTENT_HEADER, + // APIEndPoint.JSON_ACCEPT_HEADER, + // APIEndPoint.UTF_CONTENT_ENCODING_HEADER + }) Observable<PlayerWorkflow> uploadWorkflow(@Body RequestBody body, @Header("Authorization") String authorization); http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java index 7123e6e..ebb57d7 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java @@ -38,10 +38,12 @@ 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.utils.ConnectionInfo; +import org.apache.taverna.mobile.utils.Constants; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import rx.Subscription; public class PlayerLoginFragment extends Fragment implements PlayerLoginMvpView, View @@ -64,6 +66,7 @@ public class PlayerLoginFragment extends Fragment implements PlayerLoginMvpView, OnSuccessful mCallback; private DataManager dataManager; private PlayerLoginPresenter mPlayerLoginPresenter; + private Subscription mSubscriptions; public static PlayerLoginFragment newInstance() { @@ -119,17 +122,22 @@ public class PlayerLoginFragment extends Fragment implements PlayerLoginMvpView, @OnClick(R.id.bLogin) public void login(View v) { if (ConnectionInfo.isConnectingToInternet(getContext())) { - if (!mEditTextEmail.getText().toString().trim().isEmpty() && !mEditTextPassword - .getText().toString().trim().isEmpty()) { - - mPlayerLoginPresenter.playerLogin(mEditTextEmail.getText().toString().trim(), + String workflowURL = getActivity().getIntent().getStringExtra(Constants.WORKFLOW_URL); + mPlayerLoginPresenter.playerLogin(workflowURL, mEditTextEmail.getText().toString().trim(), mEditTextPassword.getText().toString().trim(), mCheckBoxRemember .isChecked()); - } else { - - showError(R.string.error_vaild_credential); - } +// if (!mEditTextEmail.getText().toString().trim().isEmpty() && !mEditTextPassword +// .getText().toString().trim().isEmpty()) { +// +// mPlayerLoginPresenter.playerLogin(mEditTextEmail.getText().toString().trim(), +// mEditTextPassword.getText().toString().trim(), mCheckBoxRemember +// .isChecked()); +// +// } else { +// +// showError(R.string.error_vaild_credential); +// } } else { showError(R.string.no_internet_connection); @@ -158,11 +166,10 @@ public class PlayerLoginFragment extends Fragment implements PlayerLoginMvpView, } @Override - public void validCredential() { - mCallback.onSuccessfulLogin(); + public void validCredential(String runID) { + mCallback.onSuccessfulLogin(runID); } - private void validateEmail() { if (mEditTextEmail.getText().toString().trim().isEmpty()) { @@ -221,7 +228,7 @@ public class PlayerLoginFragment extends Fragment implements PlayerLoginMvpView, public interface OnSuccessful { - void onSuccessfulLogin(); + void onSuccessfulLogin(String runID); } private class CustomTextWatcher implements TextWatcher { http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java index 4b4d84d..e34ba47 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java @@ -27,5 +27,6 @@ public interface PlayerLoginMvpView extends MvpView { void showCredentialError(); - void validCredential(); + void validCredential(String runID); + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java index 8113cbd..66bcb93 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java @@ -23,13 +23,24 @@ import android.util.Log; import org.apache.taverna.mobile.R; 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 org.apache.taverna.mobile.utils.Constants; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import okhttp3.MediaType; +import okhttp3.RequestBody; import okhttp3.ResponseBody; import retrofit2.adapter.rxjava.HttpException; +import rx.Observable; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Func1; import rx.schedulers.Schedulers; @@ -56,43 +67,117 @@ public class PlayerLoginPresenter extends BasePresenter<PlayerLoginMvpView> { if (mSubscriptions != null) mSubscriptions.unsubscribe(); } - public void playerLogin(final String username, final String password, final boolean loginFlag) { + public void playerLogin(final String workflowURL, final String username, final String password, final boolean loginFlag) { + if (mSubscriptions != null) mSubscriptions.unsubscribe(); + if (mSubscriptions != null) mSubscriptions.unsubscribe(); - mSubscriptions = mDataManager.authPlayerUserLoginDetail(getEncodedCredential(username, - password), loginFlag) + mSubscriptions = mDataManager.downloadWorkflowContent(workflowURL) + .concatMap(new Func1<ResponseBody, Observable<PlayerWorkflow>>() { + @Override + public Observable<PlayerWorkflow> call(ResponseBody responseBody) { + + StringBuffer sb = new StringBuffer(); + String post = ""; + + String basicAuth = getEncodedCredential(username, password); + // 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) { + Log.e(TAG, "call: ", e); + } + if (flag) { + RequestBody body = + RequestBody.create(MediaType.parse("application/vnd.taverna.t2flow+xml"), sb.toString()); + + 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<ResponseBody>() { + .subscribe(new Observer<PlayerWorkflowDetail>() { @Override public void onCompleted() { - } @Override public void onError(Throwable e) { - Log.e(TAG, "onError: ", e); - if (e instanceof HttpException) { - if (((HttpException) e).code() == 401) { - getMvpView().showCredentialError(); - } else if (((HttpException) e).code() == 406) { - getMvpView().validCredential(); - mDataManager.getPreferencesHelper() - .setUserPlayerLoggedInFlagAndCredential(loginFlag, - getEncodedCredential(username, password)); - - } else { - getMvpView().showError(R.string.servererr); - } - } + + getMvpView().showError(R.string.general_run_err); } @Override - public void onNext(ResponseBody responseBody) { - Log.d(TAG, "onCompleted: " + responseBody.byteStream()); + public void onNext(PlayerWorkflowDetail playerWorkflowDetail) { + getMvpView().validCredential(playerWorkflowDetail.getRun().getName()); } }); +// mSubscriptions = mDataManager.authPlayerUserLoginDetail(getEncodedCredential(username, +// password), loginFlag) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribeOn(Schedulers.io()) +// .subscribe(new Observer<ResponseBody>() { +// @Override +// public void onCompleted() { +// +// } +// +// @Override +// public void onError(Throwable e) { +// Log.e(TAG, "onError: ", e); +// if (e instanceof HttpException) { +// if (((HttpException) e).code() == 401) { +// getMvpView().showCredentialError(); +// } else if (((HttpException) e).code() == 406) { +// getMvpView().validCredential(); +// mDataManager.getPreferencesHelper() +// .setUserPlayerLoggedInFlagAndCredential(loginFlag, +// getEncodedCredential(username, password)); +// +// } else { +// getMvpView().showError(R.string.servererr); +// } +// } +// } +// +// @Override +// public void onNext(ResponseBody responseBody) { +// Log.d(TAG, "onCompleted: " + responseBody.byteStream()); +// } +// }); + } private String getEncodedCredential(String username, String password) { http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/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 index 50febae..42bb06b 100644 --- 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 @@ -112,11 +112,12 @@ public class WorkflowRunActivity extends FragmentActivity implements WorkflowRun @Override - public void onSuccessfulLogin() { + public void onSuccessfulLogin(String runID) { position = 1; mPager.setCurrentItem(position); mStepsView.setCompletedPosition(position % labels.length).drawView(); mWorkflowRunPresenter.runWorkflow(getIntent().getStringExtra(Constants.WORKFLOW_URL)); + mWorkflowRunPresenter.runWorkflow(runID); } @Override http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/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 index afb8761..105966e 100644 --- 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 @@ -94,18 +94,18 @@ public class WorkflowRunPresenter extends BasePresenter<WorkflowRunMvpView> { bufferedReader.close(); - String data = "{\"document\":\"data:application/octet-stream;base64," + - Base64.encodeToString(sb.toString().getBytes("UTF-8"), Base64 - .URL_SAFE | Base64.NO_WRAP).replace('-', '+') + "\"}"; + //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 + "}"; + /// post = "{\"workflow\":" + data + "}"; flag = true; } catch (IOException e) { Log.e(TAG, "call: ", e); } if (flag) { RequestBody body = - RequestBody.create(MediaType.parse("application/json"), post); + RequestBody.create(MediaType.parse("application/vnd.taverna.t2flow+xml"), sb.toString()); return mDataManager.uploadWorkflowContent(body, basicAuth.trim()); } else { http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/app/src/main/res/layout/activity_workflow_run.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/activity_workflow_run.xml b/app/src/main/res/layout/activity_workflow_run.xml index cf4fea9..38d9fb0 100644 --- a/app/src/main/res/layout/activity_workflow_run.xml +++ b/app/src/main/res/layout/activity_workflow_run.xml @@ -27,7 +27,9 @@ limitations under the License. android:id="@+id/stepsView" android:layout_width="match_parent" android:layout_height="wrap_content" - /> + > + + </com.anton46.stepsview.StepsView> <org.apache.taverna.mobile.utils.NonSwipeableViewPager android:id="@+id/viewpager" http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/app/src/main/res/layout/fragment_player_login_layout.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/fragment_player_login_layout.xml b/app/src/main/res/layout/fragment_player_login_layout.xml index 594fb6f..5d27b38 100644 --- a/app/src/main/res/layout/fragment_player_login_layout.xml +++ b/app/src/main/res/layout/fragment_player_login_layout.xml @@ -31,7 +31,7 @@ limitations under the License. android:layout_height="wrap_content" android:gravity="center" android:textSize="24sp" - android:text="@string/headline_taverna_player_portal_login"/> + android:text="@string/headline_taverna_server_login"/> <android.support.design.widget.TextInputLayout android:layout_below="@id/header" @@ -79,7 +79,7 @@ limitations under the License. android:id="@+id/bLogin" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/button_text_login" + android:text="@string/play_workflow" android:layout_marginTop="20dp" android:layout_below="@id/cbRemember"/> http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/eab06c31/app/src/main/res/values/strings.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d063b3f..9b21a05 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -113,6 +113,7 @@ limitations under the License. <string name="playeruser">Username/email</string> <string name="playerpass">Password</string> <string name="servererr">Server error. Please try again later</string> + <string name="general_run_err">There was an error while creating the run. Please try again.</string> <string name="auth_err">Invalid login credentials</string> <string name="myexperimenttitle">Configure MyExperiment Account</string> <string name="myexperimentsummary">Username used to login to MyExperiment</string> @@ -180,6 +181,7 @@ limitations under the License. <string name="uploading_workflow_lable">Uploading Workflow</string> <string name="please_wait">Please Wait ...</string> <string name="headline_taverna_player_portal_login">Taverna Player Portal Login</string> + <string name="headline_taverna_server_login">Taverna Server Login</string> <string name="button_text_login">Login</string>
