You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by ia...@apache.org on 2017/01/23 16:26:50 UTC

incubator-taverna-mobile git commit: Fetch inputs for a run.

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 <ia...@manchester.ac.uk>
Authored: Mon Jan 23 16:26:25 2017 +0000
Committer: Ian Dunlop <ia...@manchester.ac.uk>
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