From 9d58926f579074203bca496ddcb7424fe073c102 Mon Sep 17 00:00:00 2001 From: kenstir Date: Sun, 11 Oct 2015 22:39:53 -0400 Subject: [PATCH] search by format, e.g. "All Formats" or "DVD" --- .../core/res/layout-land/search_result_list.xml | 7 +++- .../Android/core/res/layout/search_result_list.xml | 13 ++++--- Open-ILS/src/Android/core/res/values/resources.xml | 28 ++++++++++++++ Open-ILS/src/Android/core/res/values/strings.xml | 2 +- .../searchCatalog/SampleUnderlinesNoFade.java | 8 +--- .../evergreen_ils/searchCatalog/SearchCatalog.java | 17 ++++++--- .../searchCatalog/SearchCatalogListView.java | 43 ++++++++++++++++++++-- 7 files changed, 95 insertions(+), 23 deletions(-) diff --git a/Open-ILS/src/Android/core/res/layout-land/search_result_list.xml b/Open-ILS/src/Android/core/res/layout-land/search_result_list.xml index e0f3c7a5f7..525b118e5c 100644 --- a/Open-ILS/src/Android/core/res/layout-land/search_result_list.xml +++ b/Open-ILS/src/Android/core/res/layout-land/search_result_list.xml @@ -28,7 +28,12 @@ android:layout_height="wrap_content" android:layout_gravity="right" android:entries="@array/advanced_search_index"/> - + + diff --git a/Open-ILS/src/Android/core/res/values/resources.xml b/Open-ILS/src/Android/core/res/values/resources.xml index 2912dc1d74..9c5fcc0cba 100644 --- a/Open-ILS/src/Android/core/res/values/resources.xml +++ b/Open-ILS/src/Android/core/res/values/resources.xml @@ -13,6 +13,34 @@ Does not contain Matches exactly + + + All Formats + All Books + All Music + + Blu-ray + + + CD Audiobook + CD Music recording + DVD + E-audio + E-book + E-video + + + Large Print Book + + + + + + Picture + Serials and magazines + Software and video games + + 1 diff --git a/Open-ILS/src/Android/core/res/values/strings.xml b/Open-ILS/src/Android/core/res/values/strings.xml index f9f95dd515..526072b3ec 100644 --- a/Open-ILS/src/Android/core/res/values/strings.xml +++ b/Open-ILS/src/Android/core/res/values/strings.xml @@ -37,7 +37,7 @@ - Search keywords + Search words Advanced Search diff --git a/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SampleUnderlinesNoFade.java b/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SampleUnderlinesNoFade.java index 385a2d5ee6..a228e8dfcb 100644 --- a/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SampleUnderlinesNoFade.java +++ b/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SampleUnderlinesNoFade.java @@ -22,7 +22,6 @@ package org.evergreen_ils.searchCatalog; import java.util.ArrayList; import android.support.v7.app.ActionBar; -import android.support.v7.app.ActionBarActivity; import android.view.MenuItem; import org.evergreen_ils.R; import org.evergreen_ils.accountAccess.AccountAccess; @@ -38,8 +37,6 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.view.ViewPager; import android.view.KeyEvent; -import android.view.View; -import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; @@ -114,7 +111,7 @@ public class SampleUnderlinesNoFade extends BaseSampleActivity { } }); - searchRecords = search.getSearchResults(search.searchText, search.searchClass, records.size()); + searchRecords = search.getSearchResults(search.searchText, search.searchClass, search.searchFormat, records.size()); runOnUiThread(new Runnable() { @@ -124,8 +121,7 @@ public class SampleUnderlinesNoFade extends BaseSampleActivity { // recordList.clear(); if (searchRecords.size() > 0) { - for (int j = 0; j < searchRecords - .size(); j++) + for (int j = 0; j < searchRecords.size(); j++) records.add(searchRecords.get(j)); // add extra record to display more diff --git a/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalog.java b/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalog.java index 6914ce82f8..b5e74260dc 100644 --- a/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalog.java +++ b/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalog.java @@ -115,6 +115,7 @@ public class SearchCatalog { public String searchText = null; public String searchClass = null; + public String searchFormat = null; public static SearchCatalog getInstance(ConnectivityManager cm) { @@ -153,14 +154,15 @@ public class SearchCatalog { /** * Gets the search results * - * @param searchWords + * @param searchText * the search words * @return the search results */ - public ArrayList getSearchResults(String searchWords, String searchClass, Integer offset) { + public ArrayList getSearchResults(String searchText, String searchClass, String searchFormat, Integer offset) { - searchText = searchWords; + this.searchText = searchText; this.searchClass = searchClass; + this.searchFormat = searchFormat; ArrayList resultsRecordInfo = new ArrayList(); HashMap complexParm = new HashMap(); @@ -172,6 +174,8 @@ public class SearchCatalog { complexParm.put("org_unit", this.selectedOrganization.id); if (this.selectedOrganization.level != null) complexParm.put("depth", this.selectedOrganization.level - 1); +// if (!this.searchFormat.isEmpty()) +// complexParm.put("format", this.searchFormat); } complexParm.put("limit", searchLimit); complexParm.put("offset", offset); @@ -184,12 +188,13 @@ public class SearchCatalog { Log.d(TAG, "Exception in JSON " + e.getMessage()); } - //kcxxx: for searching by format - //searchWords = searchWords + " search_format(vhs)"; + String queryString = searchText; + if (!searchFormat.isEmpty()) + queryString += " search_format(" + searchFormat + ")"; // do request and check for connectivity Object resp = Utils.doRequest(conn, SERVICE, METHOD_MULTICLASS_QUERY, - new Object[] { complexParm, searchWords, 1 }); + new Object[] { complexParm, queryString, 1 }); ArrayList ids = new ArrayList(); diff --git a/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalogListView.java b/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalogListView.java index fe33ffbe9b..b1065bd5fa 100644 --- a/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalogListView.java +++ b/Open-ILS/src/Android/core/src/org/evergreen_ils/searchCatalog/SearchCatalogListView.java @@ -106,6 +106,7 @@ public class SearchCatalogListView extends ActionBarActivity { private View searchOptionsMenu = null; private Spinner searchClassSpinner; + private Spinner searchFormatSpinner; // marks when the fetching record thread is started private boolean loadingElements = false; @@ -118,6 +119,39 @@ public class SearchCatalogListView extends ActionBarActivity { return searchClassSpinner.getSelectedItem().toString().toLowerCase(); } + // todo: find a way to get these programmatically. C/W MARS has an extended set of search formats. + private String getSearchFormat() { + String value = ""; + String s = searchFormatSpinner.getSelectedItem().toString(); + if (!s.isEmpty()) value=s; + if (s.equalsIgnoreCase("All Formats")) value=""; + else if (s.equalsIgnoreCase("All Books")) value="book"; + else if (s.equalsIgnoreCase("All Music")) value="music"; + else if (s.equalsIgnoreCase("Audiocassette music recording")) value="casmusic"; + else if (s.equalsIgnoreCase("Blu-ray")) value="blu-ray"; + else if (s.equalsIgnoreCase("Braille")) value="braille"; + else if (s.equalsIgnoreCase("Cassette audiobook")) value="casaudiobook"; + else if (s.equalsIgnoreCase("CD Audiobook")) value="cdaudiobook"; + else if (s.equalsIgnoreCase("CD Music recording")) value="cdmusic"; + else if (s.equalsIgnoreCase("DVD")) value="dvd"; + else if (s.equalsIgnoreCase("E-audio")) value="eaudio"; + else if (s.equalsIgnoreCase("E-book")) value="ebook"; + else if (s.equalsIgnoreCase("E-video")) value="evideo"; + else if (s.equalsIgnoreCase("Equipment, games, toys")) value="equip"; + else if (s.equalsIgnoreCase("Kit")) value="kit"; + else if (s.equalsIgnoreCase("Large Print Book")) value="lpbook"; + else if (s.equalsIgnoreCase("Map")) value="map"; + else if (s.equalsIgnoreCase("Microform")) value="microform"; + else if (s.equalsIgnoreCase("Music Score")) value="score"; + else if (s.equalsIgnoreCase("Phonograph music recording")) value="phonomusic"; + else if (s.equalsIgnoreCase("Phonograph spoken recording")) value="phonospoken"; + else if (s.equalsIgnoreCase("Picture")) value="picture"; + else if (s.equalsIgnoreCase("Serials and magazines")) value="serial"; + else if (s.equalsIgnoreCase("Software and video games")) value="software"; + else if (s.equalsIgnoreCase("VHS")) value="vhs"; + return value; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -149,8 +183,8 @@ public class SearchCatalogListView extends ActionBarActivity { R.layout.search_result_item, recordList); //searchOptionsMenu = findViewById(R.id.search_preference_options); - //final Spinner searchFormatSpinner = (Spinner) findViewById(R.id.search_format_spinner); searchClassSpinner = (Spinner) findViewById(R.id.search_class_spinner); + searchFormatSpinner = (Spinner) findViewById(R.id.search_format_spinner); searchResultsNumber = (TextView) findViewById(R.id.search_result_number); // Get reference to ListView holder @@ -174,7 +208,7 @@ public class SearchCatalogListView extends ActionBarActivity { if (text.length() < 1) return; int searchQueryType = searchClassSpinner.getSelectedItemPosition(); - Log.d(TAG, "type="+searchQueryType+" class="+getSearchClass()); + Log.d(TAG, "type="+searchQueryType+" class="+getSearchClass()+" format="+getSearchFormat()); runOnUiThread(new Runnable() { @Override @@ -193,7 +227,7 @@ public class SearchCatalogListView extends ActionBarActivity { } }); - searchResults = search.getSearchResults(text, getSearchClass(), 0); + searchResults = search.getSearchResults(text, getSearchClass(), getSearchFormat(), 0); runOnUiThread(new Runnable() { @@ -250,7 +284,7 @@ public class SearchCatalogListView extends ActionBarActivity { searchResults.clear(); - searchResults = search.getSearchResults(text, getSearchClass(), recordList.size()); + searchResults = search.getSearchResults(text, getSearchClass(), getSearchFormat(), recordList.size()); runOnUiThread(new Runnable() { @@ -352,6 +386,7 @@ public class SearchCatalogListView extends ActionBarActivity { String text = getSearchText(); searchResults.clear(); searchResults = search.getSearchResults(text, getSearchClass(), + getSearchFormat(), adapter.getCount()); runOnUiThread(new Runnable() { -- 2.11.0