Repository: incubator-taverna-mobile Updated Branches: refs/heads/ian_taverna_server cffcc3da6 -> de38c55c9
Fetch inputs for a 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/de38c55c Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/de38c55c Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/de38c55c Branch: refs/heads/ian_taverna_server Commit: de38c55c902325130a4d0d02a48474c6e6ce7ece Parents: cffcc3d Author: Ian Dunlop <[email protected]> Authored: Mon Jan 23 16:26:25 2017 +0000 Committer: Ian Dunlop <[email protected]> Committed: Mon Jan 23 16:26:25 2017 +0000 ---------------------------------------------------------------------- .../apache/taverna/mobile/data/DataManager.java | 7 +- .../apache/taverna/mobile/data/model/Input.java | 49 ++++++++++++ .../taverna/mobile/data/model/Inputs.java | 60 +++++++++++++++ .../mobile/data/remote/BaseApiManager.java | 5 ++ .../data/remote/TavernaPlayerService.java | 3 +- .../data/remote/TavernaServerService.java | 34 +++++++++ .../TavernaServerCreateRunFragment.java | 3 +- .../TavernaServerCreateRunPresenter.java | 57 +------------- .../inputs/TavernaServerInputsFragment.java | 73 +++++++++++++++--- .../inputs/TavernaServerInputsMvpView.java | 10 +++ .../inputs/TavernaServerInputsPresenter.java | 78 ++++++++++++++++++++ .../ui/workflowrun/WorkflowRunActivity.java | 65 +++++++++++++--- .../ui/workflowrun/WorkflowRunMvpView.java | 3 +- .../ui/workflowrun/WorkflowRunPresenter.java | 30 +------- .../apache/taverna/mobile/utils/Constants.java | 7 ++ .../layout/fragment_taverna_server_inputs.xml | 35 +++++---- app/src/main/res/layout/input_port.xml | 33 +++++++++ 17 files changed, 431 insertions(+), 121 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java b/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java index f95f17b..ea7d08a 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/DataManager.java @@ -22,6 +22,7 @@ import org.apache.taverna.mobile.data.local.DBHelper; import org.apache.taverna.mobile.data.local.PreferencesHelper; import org.apache.taverna.mobile.data.model.Announcements; import org.apache.taverna.mobile.data.model.DetailAnnouncement; +import org.apache.taverna.mobile.data.model.Inputs; import org.apache.taverna.mobile.data.model.License; import org.apache.taverna.mobile.data.model.PlayerWorkflow; import org.apache.taverna.mobile.data.model.PlayerWorkflowDetail; @@ -186,7 +187,7 @@ public class DataManager { * @return Workflow's ID */ public Observable<Response<ResponseBody>> uploadWorkflowContent(RequestBody body, String baseAuth) { - return mBaseApiManager.getTavernaPlayerApi().uploadWorkflow(body, baseAuth); + return mBaseApiManager.getTavernaServerApi().uploadWorkflow(body, baseAuth); } /** @@ -209,8 +210,8 @@ public class DataManager { return mBaseApiManager.getTavernaApi().getUserDetail(userID , options); } - public Observable<Response<ResponseBody>> getWorkflowInputs(String auth, String runLocationID) { - return mBaseApiManager.getTavernaPlayerApi().getInputs(auth, runLocationID); + public Observable<Inputs> getWorkflowInputs(String auth, String runLocationID) { + return mBaseApiManager.getTavernaServerApi().getInputs(auth, runLocationID); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/data/model/Input.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/model/Input.java b/app/src/main/java/org/apache/taverna/mobile/data/model/Input.java new file mode 100644 index 0000000..d8ba998 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/data/model/Input.java @@ -0,0 +1,49 @@ +package org.apache.taverna.mobile.data.model; + +import android.os.Parcel; +import android.os.Parcelable; + +import org.simpleframework.xml.Attribute; +import org.simpleframework.xml.Element; +import org.simpleframework.xml.Root; +import org.simpleframework.xml.Text; + +/** + * Created by ian on 16/01/17. + */ + +@Root(name="input") +public class Input { + @Attribute(name = "name") + private String name; + + @Attribute(name = "depth") + private String depth; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDepth() { + return depth; + } + + public void setDepth(String depth) { + this.depth = depth; + } + + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } + + @Attribute(name = "href", required = false) + private String href; +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/data/model/Inputs.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/model/Inputs.java b/app/src/main/java/org/apache/taverna/mobile/data/model/Inputs.java new file mode 100644 index 0000000..53a307e --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/data/model/Inputs.java @@ -0,0 +1,60 @@ +package org.apache.taverna.mobile.data.model; + +import org.simpleframework.xml.Attribute; +import org.simpleframework.xml.ElementList; +import org.simpleframework.xml.Root; + +import java.util.List; +/** + * Created by ian on 16/01/17. + */ + +@Root(name="inputDescription") +public class Inputs { + + @Attribute(name = "workflowId", required = false) + private String workflowId; + + @Attribute(name = "workflowRun", required = false) + private String workflowRun; + + public void setWorkflowId(String workflowId) { + this.workflowId = workflowId; + } + + public void setWorkflowRun(String workflowRun) { + this.workflowRun = workflowRun; + } + + public void setWorkflowRunId(String workflowRunId) { + this.workflowRunId = workflowRunId; + } + + public void setInputs(List<Input> inputs) { + this.inputs = inputs; + } + + @Attribute(name = "workflowRunId", required = false) + private String workflowRunId; + + public List<Input> getInputs() { + return inputs; + } + + public String getWorkflowId() { + return workflowId; + } + + public String getWorkflowRun() { + return workflowRun; + } + + public String getWorkflowRunId() { + return workflowRunId; + } + + @ElementList(inline = true, required = false) + private List<Input> inputs; + + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java b/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java index c3747e8..9766f9b 100644 --- a/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java +++ b/app/src/main/java/org/apache/taverna/mobile/data/remote/BaseApiManager.java @@ -73,4 +73,9 @@ public class BaseApiManager { return createJsonApi(TavernaPlayerService.class, new PreferencesHelper(TavernaApplication.getContext()).getPlayerURL()); } + + public TavernaServerService getTavernaServerApi() { + return createSimpleXMLApi(TavernaServerService.class, + new PreferencesHelper(TavernaApplication.getContext()).getPlayerURL()); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/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 d2558c8..0908cc4 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 @@ -49,7 +49,8 @@ public interface TavernaPlayerService { Observable<Response<ResponseBody>> startWorkflowRun(@Body RequestBody body, @Header("Authorization") String authorization); - @GET("rest/runs/{uuid}/input/baclava") + @GET("rest/runs/{uuid}/input/expected") + @Headers({APIEndPoint.XML_ACCEPT_HEADER}) Observable<Response<ResponseBody>> getInputs(@Header("Authorization") String authorization, @Path("uuid") String runLocationID); http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaServerService.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaServerService.java b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaServerService.java new file mode 100644 index 0000000..c40b312 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/data/remote/TavernaServerService.java @@ -0,0 +1,34 @@ +package org.apache.taverna.mobile.data.remote; + +import org.apache.taverna.mobile.data.model.Inputs; + +import okhttp3.RequestBody; +import okhttp3.ResponseBody; +import retrofit2.Response; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.Path; +import rx.Observable; + +/** + * Created by ian on 16/01/17. + */ + +public interface TavernaServerService { + + @POST("rest/runs") + @Headers({ + "Content-type: application/vnd.taverna.t2flow+xml" + }) + Observable<Response<ResponseBody>> uploadWorkflow(@Body RequestBody body, @Header("Authorization") + String authorization); + + @GET("rest/runs/{uuid}/input/expected") + @Headers({APIEndPoint.XML_ACCEPT_HEADER}) + Observable<Inputs> getInputs(@Header("Authorization") + String authorization, @Path("uuid") String runLocationID); + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunFragment.java b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunFragment.java index 2c1f2ab..27c9834 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunFragment.java @@ -126,7 +126,8 @@ public class TavernaServerCreateRunFragment extends Fragment implements TavernaS if (!mEditTextEmail.getText().toString().trim().isEmpty() && !mEditTextPassword .getText().toString().trim().isEmpty()) { - + getActivity().getIntent().putExtra(Constants.SERVER_USER, mEditTextEmail.getText().toString().trim()); + getActivity().getIntent().putExtra(Constants.SERVER_PASS, mEditTextPassword.getText().toString().trim()); tavernaPlayerCreateRunPresenter.playerLogin(workflowURL, mEditTextEmail.getText().toString().trim(), mEditTextPassword.getText().toString().trim(), mCheckBoxRemember .isChecked()); http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunPresenter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunPresenter.java index f250e33..e3a3c7e 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunPresenter.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/createrun/TavernaServerCreateRunPresenter.java @@ -18,6 +18,7 @@ */ package org.apache.taverna.mobile.ui.tavernaserver.createrun; +import android.net.Uri; import android.util.Base64; import android.util.Log; @@ -129,61 +130,11 @@ public class TavernaServerCreateRunPresenter extends BasePresenter<TavernaServer @Override public void onNext(Response response) { - getMvpView().runLocation(response.headers().get("Location")); + Uri uri = Uri.parse(response.headers().get("Location")); + String uuid = uri.getLastPathSegment(); + getMvpView().runLocation(uuid); } }); -// .observeOn(AndroidSchedulers.mainThread()) -// .subscribeOn(Schedulers.io()) -// .subscribe(new Observer<PlayerWorkflowDetail>() { -// @Override -// public void onCompleted() { -// } -// -// @Override -// public void onError(Throwable e) { -// -// getMvpView().showError(R.string.general_run_err); -// } -// -// @Override -// 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()); -// } -// }); } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsFragment.java b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsFragment.java index cba2a90..8fa2b16 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsFragment.java @@ -4,11 +4,24 @@ import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v4.app.ListFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; 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.data.model.Input; +import org.apache.taverna.mobile.data.model.Inputs; +import org.apache.taverna.mobile.ui.workflowrun.WorkflowRunActivity; +import org.apache.taverna.mobile.utils.Constants; + +import java.util.List; + +import butterknife.ButterKnife; /** * A simple {@link Fragment} subclass. @@ -18,7 +31,7 @@ import org.apache.taverna.mobile.R; * Use the {@link TavernaServerInputsFragment#newInstance} factory method to * create an instance of this fragment. */ -public class TavernaServerInputsFragment extends Fragment { +public class TavernaServerInputsFragment extends ListFragment implements TavernaServerInputsMvpView, View.OnFocusChangeListener { // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; @@ -28,6 +41,11 @@ public class TavernaServerInputsFragment extends Fragment { private String mParam1; private String mParam2; + + private DataManager dataManager; + + private TavernaServerInputsPresenter tavernaServerInputsPresenter; + private OnFragmentInteractionListener mListener; public TavernaServerInputsFragment() { @@ -55,20 +73,21 @@ public class TavernaServerInputsFragment extends Fragment { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } + dataManager = new DataManager(new PreferencesHelper(getContext())); + tavernaServerInputsPresenter = new TavernaServerInputsPresenter(dataManager); + ArrayAdapter<Input> adapter = new ArrayAdapter<>(getActivity(), + R.layout.input_port, new Input[]{}); + setListAdapter(adapter); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_taverna_server_inputs, container, false); - } - - // TODO: Rename method, update argument and hook method into UI event - public void onButtonPressed(Uri uri) { - if (mListener != null) { - mListener.onFragmentInteraction(uri); - } + View rootView = inflater.inflate(R.layout.fragment_taverna_server_inputs, container, false); + ButterKnife.bind(this, rootView); + tavernaServerInputsPresenter.attachView(this); + return rootView; } @Override @@ -88,6 +107,39 @@ public class TavernaServerInputsFragment extends Fragment { mListener = null; } + @Override + public void onFocusChange(View v, boolean hasFocus) { + + } + + @Override + public void showError(int stringID) { + + } + + @Override + public void showCredentialError() { + + } + + @Override + public void setInputs(Inputs inputs) { + // Add inputs to the view + //LayoutInflater vi = (LayoutInflater) getActivity().getLayoutInflater().getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + //View v = vi.inflate(R.layout.input_port, null); + //for (Input input: inputs.getInputs()) { + // input.getDepth(); + // TextView portNameView = (TextView) v.findViewById(R.id.port_name); + // portNameView.setText(input.getName()); + // ViewGroup insertPoint = (ViewGroup) getView().findViewById(R.id.inputs_area); + // insertPoint.addView(v, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + //} + } + + public void fetchInputs(String username, String password, String runLocation) { + tavernaServerInputsPresenter.workflowInputs(username, password, runLocation); + } + /** * This interface must be implemented by activities that contain this * fragment to allow an interaction in this fragment to be communicated @@ -100,6 +152,7 @@ public class TavernaServerInputsFragment extends Fragment { */ public interface OnFragmentInteractionListener { // TODO: Update argument type and name - void onFragmentInteraction(Uri uri); + void onFragmentInteraction(Inputs inputs); } + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsMvpView.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsMvpView.java b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsMvpView.java index 0a9074c..f865f62 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsMvpView.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsMvpView.java @@ -1,10 +1,20 @@ package org.apache.taverna.mobile.ui.tavernaserver.inputs; +import org.apache.taverna.mobile.data.model.Inputs; import org.apache.taverna.mobile.ui.base.MvpView; +import java.util.List; + /** * Created by ian on 16/12/16. */ public interface TavernaServerInputsMvpView extends MvpView { + + + void showError(int stringID); + + void showCredentialError(); + + void setInputs(Inputs inputs); } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsPresenter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsPresenter.java index 626b376..4dfe253 100644 --- a/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsPresenter.java +++ b/app/src/main/java/org/apache/taverna/mobile/ui/tavernaserver/inputs/TavernaServerInputsPresenter.java @@ -1,10 +1,88 @@ package org.apache.taverna.mobile.ui.tavernaserver.inputs; +import android.net.Uri; +import android.util.Base64; +import android.util.Log; + +import org.apache.taverna.mobile.data.DataManager; +import org.apache.taverna.mobile.data.model.Inputs; import org.apache.taverna.mobile.ui.base.BasePresenter; +import org.apache.taverna.mobile.ui.tavernaserver.createrun.TavernaServerCreateRunMvpView; +import org.apache.taverna.mobile.ui.tavernaserver.createrun.TavernaServerCreateRunPresenter; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okhttp3.ResponseBody; +import retrofit2.Response; +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Func1; +import rx.schedulers.Schedulers; /** * Created by ian on 16/12/16. */ public class TavernaServerInputsPresenter extends BasePresenter<TavernaServerInputsMvpView> { + + private static final String TAG = TavernaServerInputsPresenter.class.getSimpleName(); + + private DataManager mDataManager; + + private Subscription mSubscriptions; + + public TavernaServerInputsPresenter(DataManager dataManager) { + mDataManager = dataManager; + } + + @Override + public void attachView(TavernaServerInputsMvpView mvpView) { + super.attachView(mvpView); + } + + @Override + public void detachView() { + super.detachView(); + if (mSubscriptions != null) mSubscriptions.unsubscribe(); + } + + public void workflowInputs(final String username, final String password, final String runLocation) { + + String basicAuth = getEncodedCredential(username, password); + + mDataManager.getWorkflowInputs(basicAuth.trim(), runLocation) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(new Observer<Inputs>() { + + @Override + public void onCompleted() { + System.out.println("Complete"); + } + + @Override + public void onError(Throwable e) { + System.out.println(e); + } + + @Override + public void onNext(Inputs inputs) { + getMvpView().setInputs(inputs); + } + + }); + + } + + private String getEncodedCredential(String username, String password) { + + return "Basic " + Base64.encodeToString((username + ":" + password).getBytes(), Base64 + .NO_WRAP); + } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/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 f8b4972..a6d4303 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 @@ -27,6 +27,7 @@ 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 android.view.ViewGroup; import android.widget.Toast; import com.anton46.stepsview.StepsView; @@ -34,6 +35,7 @@ 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.data.model.Inputs; import org.apache.taverna.mobile.ui.DownloadingFragment; import org.apache.taverna.mobile.ui.tavernaserver.createrun.TavernaServerCreateRunFragment; import org.apache.taverna.mobile.ui.tavernaserver.inputs.TavernaServerInputsFragment; @@ -41,11 +43,12 @@ import org.apache.taverna.mobile.utils.Constants; import org.apache.taverna.mobile.utils.NonSwipeableViewPager; import org.apache.taverna.mobile.utils.WebViewGenerator; -import java.util.List; +import java.lang.ref.WeakReference; import butterknife.BindView; import butterknife.ButterKnife; +import static android.R.attr.fragment; import static com.raizlabs.android.dbflow.config.FlowManager.getContext; public class WorkflowRunActivity extends FragmentActivity implements WorkflowRunMvpView, @@ -70,6 +73,14 @@ public class WorkflowRunActivity extends FragmentActivity implements WorkflowRun private PagerAdapter mPagerAdapter; + private TavernaServerInputsFragment tavernaServerInputsFragment; + + private WeakReference<Fragment> createRunsFragment; + private WeakReference<Fragment> inputsFragment; + private WeakReference<Fragment> downloadingFragment; + private WeakReference<Fragment> webviewFragment; + + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -99,12 +110,12 @@ public class WorkflowRunActivity extends FragmentActivity implements WorkflowRun mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); mPager.setAdapter(mPagerAdapter); - if (dataManager.getPreferencesHelper().isUserPlayerLoggedInFlag()) { - mPager.setCurrentItem(++position); - mStepsView.setCompletedPosition(position % labels.length).drawView(); - - mWorkflowRunPresenter.runWorkflow(getIntent().getStringExtra(Constants.WORKFLOW_URL)); - } +// if (dataManager.getPreferencesHelper().isUserPlayerLoggedInFlag()) { +// mPager.setCurrentItem(++position); +// mStepsView.setCompletedPosition(position % labels.length).drawView(); +// +// mWorkflowRunPresenter.runWorkflow(getIntent().getStringExtra(Constants.WORKFLOW_URL)); +// } } @@ -123,7 +134,11 @@ public class WorkflowRunActivity extends FragmentActivity implements WorkflowRun position = 1; mPager.setCurrentItem(position); mStepsView.setCompletedPosition(position % labels.length).drawView(); - mWorkflowRunPresenter.showWorkflowInputs(runLocation); + getIntent().putExtra(runLocation, Constants.RUN_LOCATION); + String password = getIntent().getStringExtra(Constants.SERVER_PASS); + String username = getIntent().getStringExtra(Constants.SERVER_USER); + ((TavernaServerInputsFragment)inputsFragment.get()).fetchInputs(username, password, runLocation); + //mWorkflowRunPresenter.runWorkflow(getIntent().getStringExtra(Constants.WORKFLOW_URL)); //mWorkflowRunPresenter.runWorkflow(runID); } @@ -140,11 +155,10 @@ public class WorkflowRunActivity extends FragmentActivity implements WorkflowRun position = 3; mStepsView.setCompletedPosition(position % labels.length).drawView(); mPager.setCurrentItem(position); - } @Override - public void setInputs(List<String> inputs) { + public void setInputs(Inputs inputs) { //Update the view or something? } @@ -168,8 +182,9 @@ public class WorkflowRunActivity extends FragmentActivity implements WorkflowRun } @Override - public void onFragmentInteraction(Uri uri) { + public void onFragmentInteraction(Inputs inputs) { //TODO something when the inputs are set + System.out.println("Inputs returned to run activity"); } private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { @@ -194,10 +209,38 @@ public class WorkflowRunActivity extends FragmentActivity implements WorkflowRun } @Override + public Object instantiateItem(ViewGroup container, int position) { + // It's fairly easy to communicate from fragment to activity but + // the other way is tricky. This is the 'best' way I found to do + // it. See http://stackoverflow.com/questions/14035090/how-to-get-existing-fragments-when-using-fragmentpageradapter + // Really Android, you should be able to do this in a simpler way + Fragment createdFragment = (Fragment) super.instantiateItem(container, position); + // save the appropriate reference depending on position + switch (position) { + case 0: + createRunsFragment = new WeakReference<Fragment>(createdFragment); + break; + case 1: + inputsFragment = new WeakReference<Fragment>(createdFragment); + break; + case 2: + downloadingFragment = new WeakReference<Fragment>(createdFragment); + break; + case 3: + webviewFragment = new WeakReference<Fragment>(createdFragment); + } + return createdFragment; + } + + @Override public int getCount() { return 4; } } + public interface RunIDListener { + void onRunLocation(); + } + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/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 index dbaa282..a3bb555 100644 --- 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 @@ -19,6 +19,7 @@ package org.apache.taverna.mobile.ui.workflowrun; +import org.apache.taverna.mobile.data.model.Inputs; import org.apache.taverna.mobile.ui.base.MvpView; import java.util.List; @@ -33,5 +34,5 @@ public interface WorkflowRunMvpView extends MvpView { void moveToInputs(); - void setInputs(List<String> inputs); + void setInputs(Inputs inputs); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/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 4e7d191..9b26433 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 @@ -23,6 +23,7 @@ import android.util.Base64; import android.util.Log; import org.apache.taverna.mobile.data.DataManager; +import org.apache.taverna.mobile.data.model.Inputs; import org.apache.taverna.mobile.data.model.PlayerWorkflow; import org.apache.taverna.mobile.data.model.PlayerWorkflowDetail; import org.apache.taverna.mobile.ui.base.BasePresenter; @@ -140,31 +141,4 @@ public class WorkflowRunPresenter extends BasePresenter<WorkflowRunMvpView> { }); } - public void showWorkflowInputs(String runLocation) { - if (mSubscriptions != null) mSubscriptions.unsubscribe(); - String basicAuth = mDataManager.getPreferencesHelper() - .getUserPlayerCredential(); - //TODO trim the runLocation to get the UUID for the run - mSubscriptions = mDataManager.getWorkflowInputs(basicAuth.trim(), runLocation) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeOn(Schedulers.io()) - .subscribe(new Observer<Response<ResponseBody>>() { - @Override - public void onCompleted() { - getMvpView().setInputs(inputs); - } - - @Override - public void onError(Throwable e) { - - getMvpView().showError(); - } - - @Override - public void onNext(Response inputsResponse) { - //Set the inputs - } - }); - } - - } +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/java/org/apache/taverna/mobile/utils/Constants.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/Constants.java b/app/src/main/java/org/apache/taverna/mobile/utils/Constants.java index b4a0832..7beaf6a 100644 --- a/app/src/main/java/org/apache/taverna/mobile/utils/Constants.java +++ b/app/src/main/java/org/apache/taverna/mobile/utils/Constants.java @@ -30,4 +30,11 @@ public class Constants { public static final String WORKFLOW_ID = "workflow_id"; public static final String WORKFLOW_TITLE = "workflow_title"; + + public static final String SERVER_PASS = "server_pass"; + + public static final String SERVER_USER = "server_user"; + + public static final String RUN_LOCATION = "run_location"; + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/res/layout/fragment_taverna_server_inputs.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/fragment_taverna_server_inputs.xml b/app/src/main/res/layout/fragment_taverna_server_inputs.xml index 4781819..d5369c0 100644 --- a/app/src/main/res/layout/fragment_taverna_server_inputs.xml +++ b/app/src/main/res/layout/fragment_taverna_server_inputs.xml @@ -1,15 +1,24 @@ -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context="org.apache.taverna.mobile.ui.tavernaserver.inputs.TavernaServerInputsFragment"> +<?xml version="1.0" encoding="utf-8"?> +<!-- + 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 - <!-- <TextView - android:id="@+id/taverna_server_inputs_header" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center" - android:textSize="24sp" - android:text="@string/header_taverna_server_inputs"/> + 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. --> -</FrameLayout> + +<ListView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:id="@+id/inputs_area"/> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/de38c55c/app/src/main/res/layout/input_port.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/input_port.xml b/app/src/main/res/layout/input_port.xml new file mode 100644 index 0000000..191b672 --- /dev/null +++ b/app/src/main/res/layout/input_port.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + 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. +--> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:text="TextView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/port_name" /> + + <TextView + android:text="TextView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/port_value" /> +</LinearLayout> \ No newline at end of file
