Optimise search and fixed crash bug during search
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/1b07fee5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/1b07fee5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/1b07fee5 Branch: refs/heads/master Commit: 1b07fee59d296826b6547a324a23509edb937903 Parents: 045fab5 Author: larrytech7 <larrya...@gmail.com> Authored: Wed Jun 24 19:10:46 2015 +0100 Committer: larrytech7 <larrya...@gmail.com> Committed: Wed Jun 24 19:10:46 2015 +0100 ---------------------------------------------------------------------- .../mobile/adapters/WorkflowAdapter.java | 16 +- .../mobile/fragments/WorkflowItemFragment.java | 89 +--------- .../mobile/utils/MyExperimentXmlParser.java | 168 ------------------- .../taverna/mobile/utils/WorkflowLoader.java | 101 +---------- .../taverna/mobile/utils/WorkflowParser.java | 50 ------ .../utils/xmlparsers/MyExperimentXmlParser.java | 146 ++++++++++++++++ .../mobile/utils/xmlparsers/WorkflowParser.java | 35 ++++ .../main/res/layout/workflow_item_layout.xml | 9 +- 8 files changed, 207 insertions(+), 407 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1b07fee5/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java b/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java index b2c17f4..ce4e4c9 100644 --- a/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java +++ b/app/src/main/java/org/apache/taverna/mobile/adapters/WorkflowAdapter.java @@ -76,6 +76,7 @@ public class WorkflowAdapter extends RecyclerView.Adapter<WorkflowAdapter.ViewHo public WorkflowAdapter(Context c){ context = c; workflow = new ArrayList<Workflow>(); + favDB = new Workflow_DB(context, WORKFLOW_FAVORITE_KEY); } @Override @@ -115,10 +116,6 @@ public class WorkflowAdapter extends RecyclerView.Adapter<WorkflowAdapter.ViewHo final Intent it = new Intent(); it.setClass(context, WorkflowDetailActivity.class); it.putExtra("workflowid", workflow.get(i).getId()); - /*it.putExtra("author", workflow.get(i).getWorkflow_author()); - it.putExtra("title",title); - it.putExtra("description",desc_full); - it.putExtra("url", wkflow_url);*/ WorkflowdetailFragment.WORKFLO_ID = workflow.get(i).getId(); viewHolder.btn_view_workflow.setOnClickListener(new View.OnClickListener() { @@ -131,7 +128,7 @@ public class WorkflowAdapter extends RecyclerView.Adapter<WorkflowAdapter.ViewHo ((Activity) context).overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.fade_out); } }); - viewHolder.btn_download_workflow.setOnClickListener(new View.OnClickListener() { + /*viewHolder.btn_download_workflow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -151,14 +148,15 @@ public class WorkflowAdapter extends RecyclerView.Adapter<WorkflowAdapter.ViewHo e.printStackTrace(); } } - }); + });*/ viewHolder.btn_mark_workflow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { boolean saved = favDB.save(); - if(saved) - Toast.makeText(context,"Workflow marked as favorite",Toast.LENGTH_SHORT).show(); - else + if(saved) { + Toast.makeText(context, "Workflow marked as favorite", Toast.LENGTH_SHORT).show(); + viewHolder.btn_mark_workflow.setCompoundDrawables(context.getResources().getDrawable(android.R.drawable.btn_star_big_on),null,null,null); + }else Toast.makeText(context,"Error!, please try again",Toast.LENGTH_SHORT).show(); } }); http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1b07fee5/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java b/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java index 4457366..e48a6ba 100644 --- a/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java +++ b/app/src/main/java/org/apache/taverna/mobile/fragments/WorkflowItemFragment.java @@ -28,7 +28,6 @@ import android.app.Activity; import android.app.ProgressDialog; import android.app.SearchManager; import android.content.Context; -import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; @@ -36,7 +35,6 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; import android.util.Log; -import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -46,13 +44,11 @@ import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.TextView; -import android.widget.Toast; import org.apache.taverna.mobile.R; import org.apache.taverna.mobile.activities.DashboardMainActivity; import org.apache.taverna.mobile.adapters.WorkflowAdapter; import org.apache.taverna.mobile.tavernamobile.Workflow; -import org.apache.taverna.mobile.utils.WorkflowDataCallback; import org.apache.taverna.mobile.utils.WorkflowLoader; import java.util.ArrayList; @@ -65,8 +61,7 @@ import java.util.List; * with a GridView. * <p/> */ -public class WorkflowItemFragment extends Fragment implements android.app.LoaderManager.LoaderCallbacks<List<Workflow>>, - SwipeRefreshLayout.OnRefreshListener, SearchView.OnQueryTextListener { +public class WorkflowItemFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener, SearchView.OnQueryTextListener { // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; @@ -166,12 +161,6 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader rootView = null; } - /** - * Called when the fragment is visible to the user and actively running. - * This is generally - * tied to {@link android.app.Activity#onResume() Activity.onResume} of the containing - * Activity's lifecycle. - */ @Override public void onResume() { super.onResume(); @@ -183,23 +172,10 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader //Toast.makeText(getActivity(), "Query = " + query, Toast.LENGTH_SHORT).show(); performSearch(workflowAdapter,query); }else*/ - new WorkflowLoader(getActivity(),mListView,swipeRefreshLayout).execute(); + new WorkflowLoader(getActivity(), swipeRefreshLayout).execute(); // getActivity().getLoaderManager().initLoader(0,null,this).forceLoad(); } - /** - * Initialize the contents of the Activity's standard options menu. You - * should place your menu items in to <var>menu</var>. For this method - * to be called, you must have first called {@link #setHasOptionsMenu}. See - * {@link android.app.Activity#onCreateOptionsMenu(android.view.Menu) Activity.onCreateOptionsMenu} - * for more information. - * - * @param menu The options menu in which you place your items. - * @param inflater - * @see #setHasOptionsMenu - * @see #onPrepareOptionsMenu - * @see #onOptionsItemSelected - */ @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); @@ -220,27 +196,10 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader } } - /** - * This hook is called whenever an item in your options menu is selected. - * The default implementation simply returns false to have the normal - * processing happen (calling the item's Runnable or sending a message to - * its Handler as appropriate). You can use this method for any items - * for which you would like to do processing without those other - * facilities. - * <p/> - * <p>Derived classes should call through to the base class for it to - * perform the default menu handling. - * - * @param item The menu item that was selected. - * @return boolean Return false to allow normal menu processing to - * proceed, true to consume it here. - * @see #onCreateOptionsMenu - */ @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getTitle().equals("Refresh")){ - new WorkflowLoader(getActivity(), mListView, swipeRefreshLayout).execute(); -// getActivity().getLoaderManager().restartLoader(0, null, this).forceLoad(); + new WorkflowLoader(getActivity(),swipeRefreshLayout).execute(); return true; } return super.onOptionsItemSelected(item); @@ -251,11 +210,6 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader super.onDetach(); } - /** - * The default content for this Fragment has a TextView that is shown when - * the list is empty. If you would like to change the text, call this method - * to supply the text it should use. - */ public void setEmptyText(CharSequence emptyText) { View emptyView = mListView.getChildAt(2); @@ -271,42 +225,17 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader Log.i("Count", ""+wk.getItemCount()); for(int i=0; i< wk.getItemCount(); i++) { Workflow workflow = wk.getItem(i); - if(search.toLowerCase().contains(workflow.getWorkflow_author().toLowerCase()) - || search.contains(workflow.getWorkflow_title().toLowerCase())){ + if( search.contains(workflow.getWorkflow_title().toLowerCase())){ ladapter.addWorkflow(workflow); } } - mListView.swapAdapter(ladapter, true); - /// Toast.makeText(getActivity(), "Query = " + search, Toast.LENGTH_SHORT).show(); - } - - @Override - public android.content.Loader<List<Workflow>> onCreateLoader(int id, Bundle args) { - swipeRefreshLayout.setRefreshing(true); - return null; - //return new WorkflowLoader(getActivity()); - } - - @Override - public void onLoadFinished(android.content.Loader<List<Workflow>> loader, List<Workflow> workflows) { - swipeRefreshLayout.setRefreshing(false); - Toast.makeText(getActivity(), "loader finished", Toast.LENGTH_SHORT).show(); - workflowAdapter= new WorkflowAdapter(getActivity(), workflows); - WorkflowItemFragment.searchAdpater = workflowAdapter; - //mListView.swapAdapter(workflowAdapter, true); - } - - @Override - public void onLoaderReset(android.content.Loader<List<Workflow>> listLoader) { - listLoader.reset(); -// mListView.swapAdapter(null, true); + mListView.setAdapter(ladapter); +// mListView.swapAdapter(ladapter, true); } @Override public void onRefresh() { - - new WorkflowLoader(getActivity(), mListView, swipeRefreshLayout).execute(); - //getActivity().getLoaderManager().restartLoader(0, null, this).forceLoad(); + new WorkflowLoader(getActivity(),swipeRefreshLayout).execute(); } @Override @@ -325,9 +254,9 @@ public class WorkflowItemFragment extends Fragment implements android.app.Loader ((Activity)cx).runOnUiThread(new Runnable() { @Override public void run() { - WorkflowItemFragment.mListView.setAdapter(new WorkflowAdapter(cx, data)); + WorkflowItemFragment.searchAdpater = new WorkflowAdapter(cx,data); + WorkflowItemFragment.mListView.setAdapter(WorkflowItemFragment.searchAdpater); } }); - } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1b07fee5/app/src/main/java/org/apache/taverna/mobile/utils/MyExperimentXmlParser.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/MyExperimentXmlParser.java b/app/src/main/java/org/apache/taverna/mobile/utils/MyExperimentXmlParser.java deleted file mode 100644 index 26893f7..0000000 --- a/app/src/main/java/org/apache/taverna/mobile/utils/MyExperimentXmlParser.java +++ /dev/null @@ -1,168 +0,0 @@ -package org.apache.taverna.mobile.utils; -/** - * Apache Taverna Mobile - * Copyright 2015 The Apache Software Foundation - - * This product includes software developed at - * The Apache Software Foundation (http://www.apache.org/). - - * 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. - */ - -import android.text.util.Linkify; - -import com.thebuzzmedia.sjxp.XMLParser; -import com.thebuzzmedia.sjxp.rule.DefaultRule; - -import org.apache.taverna.mobile.tavernamobile.Workflow; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by Larry Akah on 6/23/15. - */ -public class MyExperimentXmlParser { - - //parse a single workflow from myexperiment - public static final class WorkflowItemRule extends DefaultRule{ - - /** - * Create a new rule with the given values. - * - * @param type The type of the rule. - * @param locationPath The location path of the element to target in the XML. - * @param attributeNames An optional list of attribute names to parse values for if the - * type of this rule is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#ATTRIBUTE}. - * @throws IllegalArgumentException if <code>type</code> is <code>null</code>, if - * <code>locationPath</code> is <code>null</code> or empty, if - * <code>type</code> is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#ATTRIBUTE} and - * <code>attributeNames</code> is <code>null</code> or empty or - * if <code>type</code> is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#CHARACTER} and - * <code>attributeNames</code> <strong>is not</strong> - * <code>null</code> or empty. - */ - public WorkflowItemRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException { - super(Type.CHARACTER, "http://www.myexperiment.org/workflows.xml", "workflow"); - } - - /** - * Default no-op implementation. Please override with your own logic. - * - * @param parser - * @param index - * @param value - * @param userObject - * @see com.thebuzzmedia.sjxp.rule.IRule#handleParsedAttribute(com.thebuzzmedia.sjxp.XMLParser, int, String, Object) - */ - @Override - public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) { - switch(index){ - case 0: - break; - case 1: - break; - case 2: - break; - case 3: - break; - - } - } - } - - /** - * parse workflows from myExperiment - */ - public final static class WorkflowRule extends DefaultRule{ - Workflow workflow; - List<Workflow> wlist; - static String uri,version,desc; - static String url=uri=version=desc=""; - static long id = 0; - /** - * Create a new rule with the given values. - * - * @param type The type of the rule. - * @param locationPath The location path of the element to target in the XML. - * @param attributeNames An optional list of attribute names to parse values for if the - * type of this rule is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#ATTRIBUTE}. - * @throws IllegalArgumentException if <code>type</code> is <code>null</code>, if - * <code>locationPath</code> is <code>null</code> or empty, if - * <code>type</code> is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#ATTRIBUTE} and - * <code>attributeNames</code> is <code>null</code> or empty or - * if <code>type</code> is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#CHARACTER} and - * <code>attributeNames</code> <strong>is not</strong> - * <code>null</code> or empty. - */ - public WorkflowRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException { - super(type, locationPath, attributeNames); - this.workflow = new Workflow(); - wlist = new ArrayList<>(); - } - //instantiated to parse xml data for a given workflow - public WorkflowRule(Type type, String path, int id, String attributenames){ - super(type,path,attributenames); - } - - @Override - public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) { - - switch(index){ - case 0: - System.out.println("Workflow Resource: "+value); url = value; - desc = "To view workflow on the web, click "+value; -// this.workflow.setWorkflow_web_url(value); -// this.workflow.setWorkflow_description("To view workflow on the web, click "+value); - break; - case 1: - System.out.println("Workflow uri: "+value); //uri for detailed workflow - uri = value; -// this.workflow.setWorkflow_remote_url(value); - break; - case 2: - System.out.println("Workflow id: "+value); - id = Integer.parseInt(value); -// this.workflow.setId(Integer.parseInt(value)); - break; - case 3: - System.out.println("Workflow version: "+value); - version = value; - // this.workflow.setWorkflow_versions(value); - break; - } - - } - - @Override - public void handleParsedCharacters(XMLParser parser, String text, Object workflowListObject) { - //add the title to the workflow and add it to the workflow list - this.workflow = new Workflow("", desc, id, url); - this.workflow.setWorkflow_title(text); - this.workflow.setWorkflow_author(""); - wlist.add(this.workflow); - WorkflowLoader.loadedWorkflows.add(this.workflow); - System.out.println("static Workflow Count: " + WorkflowLoader.loadedWorkflows.size()); - ((List<Workflow>)workflowListObject).add(this.workflow); - this.workflow = null; - - } - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1b07fee5/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java b/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java index 3071f88..3eb272f 100644 --- a/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java +++ b/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowLoader.java @@ -23,29 +23,20 @@ package org.apache.taverna.mobile.utils; * specific language governing permissions and limitations * under the License. */ -import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.RecyclerView; -import android.util.Base64; import android.util.Log; -import com.thebuzzmedia.sjxp.XMLParser; -import com.thebuzzmedia.sjxp.rule.DefaultRule; import com.thebuzzmedia.sjxp.rule.IRule; -import org.apache.taverna.mobile.adapters.WorkflowAdapter; -import org.apache.taverna.mobile.tavernamobile.TavernaPlayerAPI; import org.apache.taverna.mobile.tavernamobile.Workflow; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; +import org.apache.taverna.mobile.utils.xmlparsers.MyExperimentXmlParser; +import org.apache.taverna.mobile.utils.xmlparsers.WorkflowParser; -import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; @@ -61,7 +52,6 @@ public class WorkflowLoader extends AsyncTask<Object, Object, Object>{ //Workflo private Context ctx; private List<Workflow> userWorkflows; public static List<Workflow> loadedWorkflows; - private RecyclerView recyclerView; private SwipeRefreshLayout refreshLayout; /* public WorkflowLoader(Context context) { @@ -71,9 +61,8 @@ public class WorkflowLoader extends AsyncTask<Object, Object, Object>{ //Workflo userWorkflows = new ArrayList<Workflow>(); }*/ - public WorkflowLoader(Context context, RecyclerView rc, SwipeRefreshLayout sw) { + public WorkflowLoader(Context context, SwipeRefreshLayout sw) { this.ctx = context; - this.recyclerView = rc; this.refreshLayout = sw; this.userWorkflows = new ArrayList<Workflow>(); loadedWorkflows = new ArrayList<Workflow>(); @@ -134,7 +123,7 @@ public class WorkflowLoader extends AsyncTask<Object, Object, Object>{ //Workflo }*/ IRule wkflowRule = new MyExperimentXmlParser.WorkflowRule(IRule.Type.ATTRIBUTE, "/workflows/workflow", "resource", "uri","id", "version"); IRule workflowNameRule = new MyExperimentXmlParser.WorkflowRule(IRule.Type.CHARACTER, "/workflows/workflow"); - WorkflowParser xmlParser = new WorkflowParser(new IRule[]{wkflowRule, workflowNameRule}, recyclerView, this.ctx); + WorkflowParser xmlParser = new WorkflowParser(new IRule[]{wkflowRule, workflowNameRule}); try { URL workflowurl = new URL("http://www.myexperiment.org/workflows.xml"); HttpURLConnection connection = (HttpURLConnection) workflowurl.openConnection(); @@ -146,7 +135,6 @@ public class WorkflowLoader extends AsyncTask<Object, Object, Object>{ //Workflo InputStream dis = connection.getInputStream(); xmlParser.parse(dis, this.userWorkflows); - Thread.sleep(4000);//4sec delay so that parsing completes }catch (MalformedURLException e) { e.printStackTrace(); @@ -154,10 +142,7 @@ public class WorkflowLoader extends AsyncTask<Object, Object, Object>{ //Workflo e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); } - // return WorkflowLoader.loadedWorkflows; return this.userWorkflows; } @@ -200,83 +185,5 @@ public class WorkflowLoader extends AsyncTask<Object, Object, Object>{ //Workflo protected void onPostExecute(Object o) { refreshLayout.setRefreshing(false); System.out.println("Workflow Count: "+this.userWorkflows.size()); - // recyclerView.setAdapter(new WorkflowAdapter(this.ctx, (List<Workflow>) o)); - } - - class WorkflowRule extends DefaultRule { - Workflow workflow; - - /** - * Create a new rule with the given values. - * - * @param type The type of the rule. - * @param locationPath The location path of the element to target in the XML. - * @param attributeNames An optional list of attribute names to parse values for if the - * type of this rule is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#ATTRIBUTE}. - * @throws IllegalArgumentException if <code>type</code> is <code>null</code>, if - * <code>locationPath</code> is <code>null</code> or empty, if - * <code>type</code> is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#ATTRIBUTE} and - * <code>attributeNames</code> is <code>null</code> or empty or - * if <code>type</code> is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#CHARACTER} and - * <code>attributeNames</code> <strong>is not</strong> - * <code>null</code> or empty. - */ - public WorkflowRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException { - super(type, locationPath, attributeNames); - workflow = new Workflow(); - } - //instantiated to parse xml data for a given workflow - public WorkflowRule(Type type, String path, int id, String attributenames){ - super(type,path,attributenames); - } - - /** - * Default no-op implementation. Please override with your own logic. - * - * @param parser - * @param index - * @param value - * @param userObject - * @see com.thebuzzmedia.sjxp.rule.IRule#handleParsedAttribute(com.thebuzzmedia.sjxp.XMLParser, int, String, Object) - */ - @Override - public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) { - switch(index){ - case 0: - System.out.println("Workflow Resource: "+value); - workflow.setWorkflow_web_url(value); - workflow.setWorkflow_description("To view workflow on the web, click "+value); - break; - case 1: - System.out.println("Workflow uri: "+value); //uri for detailed workflow - workflow.setWorkflow_remote_url(value); - break; - case 2: - System.out.println("Workflow id: "+value); - workflow.setId(Integer.parseInt(value)); - break; - case 3: - System.out.println("Workflow version: "+value); - workflow.setWorkflow_versions(value); - break; - } - } - - /** - * Default no-op implementation. Please override with your own logic. - * - * @param parser - * @param text - * @param workflowListObject - * @see com.thebuzzmedia.sjxp.rule.IRule#handleParsedCharacters(com.thebuzzmedia.sjxp.XMLParser, String, Object) - */ - @Override - public void handleParsedCharacters(XMLParser parser, String text, Object workflowListObject) { - //add the title to the workflow and add it to the workflow list - workflow.setWorkflow_title(text); - workflow.setWorkflow_author(""); - workflow = new Workflow(); - ((List<Workflow>)workflowListObject).add(workflow); - } } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1b07fee5/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowParser.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowParser.java b/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowParser.java deleted file mode 100644 index cc74955..0000000 --- a/app/src/main/java/org/apache/taverna/mobile/utils/WorkflowParser.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.apache.taverna.mobile.utils; - -import android.content.Context; -import android.support.v7.widget.RecyclerView; - -import com.thebuzzmedia.sjxp.XMLParser; -import com.thebuzzmedia.sjxp.XMLParserException; -import com.thebuzzmedia.sjxp.rule.IRule; - -import org.apache.taverna.mobile.adapters.WorkflowAdapter; -import org.apache.taverna.mobile.fragments.WorkflowItemFragment; -import org.apache.taverna.mobile.tavernamobile.Workflow; - -import java.util.List; - -/** - * Workflow end document class for detecting when the complete list of workflows have been read out - * Created by Larry Akah on 6/24/15. - */ -public class WorkflowParser extends XMLParser implements WorkflowDataCallback{ - - private RecyclerView recyclerView; - private Context mcontext; - - public WorkflowParser(IRule[] rules) throws IllegalArgumentException, XMLParserException { - super(rules); - } - - public WorkflowParser(IRule[] rules, RecyclerView recyclerv, Context c){ - super(rules); - this.recyclerView = recyclerv; - this.mcontext = c; - } - - @Override - protected void doEndDocument(Object userObject) { - // super.doEndDocument(userObject); - //bind workflows to the adapter; -// onWorkflowDataReady((List<Workflow>) userObject); - WorkflowItemFragment.updateWorkflowUI((List<Workflow>) userObject); - } - - @Override - public void onWorkflowDataReady(List<Workflow> data) { - // this.recyclerView.setAdapter(new WorkflowAdapter(mcontext, data)); - for(Workflow w:data){ - System.out.println(w.getId()); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1b07fee5/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParser.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParser.java b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParser.java new file mode 100644 index 0000000..69791d5 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/MyExperimentXmlParser.java @@ -0,0 +1,146 @@ +package org.apache.taverna.mobile.utils.xmlparsers; +/** + * Apache Taverna Mobile + * Copyright 2015 The Apache Software Foundation + + * This product includes software developed at + * The Apache Software Foundation (http://www.apache.org/). + + * 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. + */ + +import com.thebuzzmedia.sjxp.XMLParser; +import com.thebuzzmedia.sjxp.rule.DefaultRule; + +import org.apache.taverna.mobile.tavernamobile.Workflow; +import org.apache.taverna.mobile.utils.WorkflowLoader; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Larry Akah on 6/23/15. + */ +public class MyExperimentXmlParser { + + //parse a single workflow from myexperiment + public static final class WorkflowItemRule extends DefaultRule{ + + /** + * Create a new rule with the given values. + * + * @param type The type of the rule. + * @param locationPath The location path of the element to target in the XML. + * @param attributeNames An optional list of attribute names to parse values for if the + * type of this rule is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#ATTRIBUTE}. + * @throws IllegalArgumentException if <code>type</code> is <code>null</code>, if + * <code>locationPath</code> is <code>null</code> or empty, if + * <code>type</code> is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#ATTRIBUTE} and + * <code>attributeNames</code> is <code>null</code> or empty or + * if <code>type</code> is {@link com.thebuzzmedia.sjxp.rule.IRule.Type#CHARACTER} and + * <code>attributeNames</code> <strong>is not</strong> + * <code>null</code> or empty. + */ + public WorkflowItemRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException { + super(Type.CHARACTER, "http://www.myexperiment.org/workflows.xml", "workflow"); + } + + /** + * Default no-op implementation. Please override with your own logic. + * + * @param parser + * @param index + * @param value + * @param userObject + * @see com.thebuzzmedia.sjxp.rule.IRule#handleParsedAttribute(com.thebuzzmedia.sjxp.XMLParser, int, String, Object) + */ + @Override + public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) { + switch(index){ + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + break; + + } + } + } + + /** + * parse workflows from myExperiment + */ + public final static class WorkflowRule extends DefaultRule{ + Workflow workflow; + List<Workflow> wlist; + static String uri,version,desc; + static String url=uri=version=desc=""; + static long id = 0; + + public WorkflowRule(Type type, String locationPath, String... attributeNames) throws IllegalArgumentException { + super(type, locationPath, attributeNames); + this.workflow = new Workflow(); + wlist = new ArrayList<>(); + } + //instantiated to parse xml data for a given workflow + public WorkflowRule(Type type, String path, int id, String attributenames){ + super(type,path,attributenames); + } + + @Override + public void handleParsedAttribute(XMLParser parser, int index, String value, Object userObject) { + + switch(index){ + case 0: + System.out.println("Workflow Resource: "+value); url = value; + desc = "To view workflow on the web, click "+value; + break; + case 1: + System.out.println("Workflow uri: "+value); + uri = value; + break; + case 2: + System.out.println("Workflow id: "+value); + id = Integer.parseInt(value); + break; + case 3: + System.out.println("Workflow version: "+value); + version = value; + break; + } + } + + @Override + public void handleParsedCharacters(XMLParser parser, String text, Object workflowListObject) { + //add the workflow to the workflow list + this.workflow = new Workflow("", desc, id, url); + this.workflow.setWorkflow_title(text); + this.workflow.setWorkflow_author(""); + wlist.add(this.workflow); + WorkflowLoader.loadedWorkflows.add(this.workflow); + System.out.println("static Workflow Count: " + WorkflowLoader.loadedWorkflows.size()); + ((List<Workflow>)workflowListObject).add(this.workflow); + this.workflow = null; + } + + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1b07fee5/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowParser.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowParser.java b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowParser.java new file mode 100644 index 0000000..f349805 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/utils/xmlparsers/WorkflowParser.java @@ -0,0 +1,35 @@ +package org.apache.taverna.mobile.utils.xmlparsers; + +import com.thebuzzmedia.sjxp.XMLParser; +import com.thebuzzmedia.sjxp.XMLParserException; +import com.thebuzzmedia.sjxp.rule.IRule; + +import org.apache.taverna.mobile.fragments.WorkflowItemFragment; +import org.apache.taverna.mobile.tavernamobile.Workflow; +import org.apache.taverna.mobile.utils.WorkflowDataCallback; + +import java.util.List; + +/** + * Workflow end document class for detecting when the complete list of workflows have been read out + * Created by Larry Akah on 6/24/15. + */ + +public class WorkflowParser extends XMLParser implements WorkflowDataCallback { + + public WorkflowParser(IRule[] rules) throws IllegalArgumentException, XMLParserException { + super(rules); + } + + @Override + protected void doEndDocument(Object userObject) { + WorkflowItemFragment.updateWorkflowUI((List<Workflow>) userObject); + } + + @Override + public void onWorkflowDataReady(List<Workflow> data) { + for(Workflow w:data){ + System.out.println(w.getId()); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1b07fee5/app/src/main/res/layout/workflow_item_layout.xml ---------------------------------------------------------------------- diff --git a/app/src/main/res/layout/workflow_item_layout.xml b/app/src/main/res/layout/workflow_item_layout.xml index 4324bcf..da42247 100644 --- a/app/src/main/res/layout/workflow_item_layout.xml +++ b/app/src/main/res/layout/workflow_item_layout.xml @@ -135,7 +135,8 @@ limitations under the License. style="android:buttonBarButtonStyle" android:text="@string/workflow_read" android:background="#33b5e5" - android:drawableLeft="@android:drawable/ic_menu_view" /> + android:drawableLeft="@android:drawable/ic_menu_view" + android:layout_marginLeft="3dp" /> <Button android:id="@+id/button_download_workflow" android:layout_width="wrap_content" @@ -147,7 +148,8 @@ limitations under the License. android:text="@string/workflow_download" android:drawableLeft="@drawable/download" android:layout_marginLeft="2dp" - android:layout_marginRight="2dp" /> + android:layout_marginRight="2dp" + android:visibility="gone" /> <Button android:id="@+id/button_mark_workflow" android:layout_width="wrap_content" @@ -157,7 +159,8 @@ limitations under the License. android:background="#33b5e5" android:text="@string/workflow_mark" android:drawableLeft="@android:drawable/btn_star_big_off" - style="android:buttonBarButtonStyle"/> + style="android:buttonBarButtonStyle" + android:layout_marginLeft="3dp" /> </LinearLayout> </LinearLayout>