use of de.geeksfactory.opacclient.searchfields.SearchField in project opacclient by opacapp.
the class BiBer1992 method parseSearchFields.
/*
* ----- media types ----- Example Wuerzburg: <td ...><input type="checkbox"
* name="MT" value="1" ...></td> <td ...><img src="../image/spacer.gif.S"
* title="Buch"><br>Buch</td>
*
* Example Friedrichshafen: <td ...><input type="checkbox" name="MS"
* value="1" ...></td> <td ...><img src="../image/spacer.gif.S"
* title="Buch"><br>Buch</td>
*
* Example Offenburg: <input type="radio" name="MT" checked
* value="MTYP0">Alles <input type="radio" name="MT"
* value="MTYP10">Belletristik Unfortunately Biber miss the end
* tag </input>, so opt.text() does not work! (at least Offenburg)
*
* Example Essen, Aschaffenburg: <input type="radio" name="MT" checked
* value="MTYP0"><img src="../image/all.gif.S" title="Alles"> <input
* type="radio" name="MT" value="MTYP7"><img src="../image/cdrom.gif.S"
* title="CD-ROM">
*
* ----- Branches ----- Example Essen,Erkrath: no closing </option> !!!
* cannot be parsed by Jsoup, so not supported <select name="AORT"> <option
* value="ZWST1">Altendorf </select>
*
* Example Hagen, Würzburg, Friedrichshafen: <select name="ZW" class="sel1">
* <option selected value="ZWST0">Alle Bibliotheksorte</option> </select>
*/
@Override
public List<SearchField> parseSearchFields() throws IOException {
List<SearchField> fields = new ArrayList<>();
HttpGet httpget;
if (opacDir.contains("opax")) {
httpget = new HttpGet(opacUrl + "/" + opacDir + "/de/qsel.html.S");
} else {
httpget = new HttpGet(opacUrl + "/" + opacDir + "/de/qsel_main.S");
}
HttpResponse response = http_client.execute(httpget);
if (response.getStatusLine().getStatusCode() == 500) {
throw new NotReachableException(response.getStatusLine().getReasonPhrase());
}
String html = convertStreamToString(response.getEntity().getContent());
HttpUtils.consume(response.getEntity());
Document doc = Jsoup.parse(html);
// get text fields
Elements text_opts = doc.select("form select[name=REG1] option");
for (Element opt : text_opts) {
TextSearchField field = new TextSearchField();
field.setId(opt.attr("value"));
field.setDisplayName(opt.text());
field.setHint("");
fields.add(field);
}
// get media types
Elements mt_opts = doc.select("form input[name~=(MT|MS)]");
if (mt_opts.size() > 0) {
DropdownSearchField mtDropdown = new DropdownSearchField();
mtDropdown.setId(mt_opts.get(0).attr("name"));
mtDropdown.setDisplayName("Medientyp");
for (Element opt : mt_opts) {
if (!opt.val().equals("")) {
String text = opt.text();
if (text.length() == 0) {
// text is empty, check layouts:
// Essen: <input name="MT"><img title="mediatype">
// Schaffenb: <input name="MT"><img alt="mediatype">
Element img = opt.nextElementSibling();
if (img != null && img.tagName().equals("img")) {
text = img.attr("title");
if (text.equals("")) {
text = img.attr("alt");
}
}
}
if (text.length() == 0) {
// text is still empty, check table layout, Example
// Friedrichshafen
// <td><input name="MT"></td> <td><img
// title="mediatype"></td>
Element td1 = opt.parent();
Element td2 = td1.nextElementSibling();
if (td2 != null) {
Elements td2Children = td2.select("img[title]");
if (td2Children.size() > 0) {
text = td2Children.get(0).attr("title");
}
}
}
if (text.length() == 0) {
// text is still empty, check images in label layout, Example
// Wiedenst
// <input type="radio" name="MT" id="MTYP1" value="MTYP1">
// <label for="MTYP1"><img src="http://www.wiedenest.de/bib/image/books
// .png" alt="Bücher" title="Bücher"></label>
Element label = opt.nextElementSibling();
if (label != null) {
Elements td2Children = label.select("img[title]");
if (td2Children.size() > 0) {
text = td2Children.get(0).attr("title");
}
}
}
if (text.length() == 0) {
// text is still empty: missing end tag like Offenburg
text = parse_option_regex(opt);
}
mtDropdown.addDropdownValue(opt.val(), text);
}
}
fields.add(mtDropdown);
}
// get branches
Elements br_opts = doc.select("form select[name=ZW] option");
if (br_opts.size() > 0) {
DropdownSearchField brDropdown = new DropdownSearchField();
brDropdown.setId(br_opts.get(0).parent().attr("name"));
brDropdown.setDisplayName(br_opts.get(0).parent().parent().previousElementSibling().text().replace("\u00a0", "").replace("?", "").trim());
for (Element opt : br_opts) {
brDropdown.addDropdownValue(opt.val(), opt.text());
}
fields.add(brDropdown);
}
Elements sort_opts = doc.select("form select[name=SORTX] option");
if (sort_opts.size() > 0) {
DropdownSearchField sortDropdown = new DropdownSearchField();
sortDropdown.setId(sort_opts.get(0).parent().attr("name"));
sortDropdown.setDisplayName(sort_opts.get(0).parent().parent().previousElementSibling().text().replace("\u00a0", "").replace("?", "").trim());
for (Element opt : sort_opts) {
sortDropdown.addDropdownValue(opt.val(), opt.text());
}
fields.add(sortDropdown);
}
return fields;
}
use of de.geeksfactory.opacclient.searchfields.SearchField in project opacclient by opacapp.
the class LibraryApiTestCases method testEmptySearch.
@Test
public void testEmptySearch() throws IOException, OpacErrorException, JSONException {
List<SearchQuery> query = new ArrayList<>();
SearchField field = findFreeSearchOrTitle(fields);
if (field == null) {
throw new // TODO: prevent this
OpacErrorException("There is no free or title search field");
}
query.add(new SearchQuery(field, "fasgeadstrehdaxydsfstrgdfjxnvgfhdtnbfgn"));
try {
SearchRequestResult res = api.search(query);
assertTrue(res.getTotal_result_count() == 0);
} catch (OpacErrorException e) {
// Expected, should be an empty result.
}
}
use of de.geeksfactory.opacclient.searchfields.SearchField in project opacclient by opacapp.
the class SearchFragment method saveHomeBranch.
private void saveHomeBranch() {
if (fields == null || view == null) {
return;
}
for (SearchField field : fields) {
if (!field.isVisible()) {
continue;
}
if (field instanceof DropdownSearchField && field.getMeaning() == Meaning.HOME_BRANCH) {
ViewGroup v = (ViewGroup) view.findViewWithTag(field.getId());
if (v == null) {
continue;
}
Spinner spinner = (Spinner) v.findViewById(R.id.spinner);
String homeBranch = ((DropdownSearchField) field).getDropdownValues().get(spinner.getSelectedItemPosition()).getKey();
if (!homeBranch.equals("")) {
sp.edit().putString(OpacClient.PREF_HOME_BRANCH_PREFIX + app.getAccount().getId(), homeBranch).apply();
}
return;
}
}
}
use of de.geeksfactory.opacclient.searchfields.SearchField in project opacclient by opacapp.
the class SearchFragment method saveSearchQuery.
public List<SearchQuery> saveSearchQuery() {
saveHomeBranch();
List<SearchQuery> query = new ArrayList<>();
if (fields == null || view == null) {
return null;
}
for (SearchField field : fields) {
if (!field.isVisible()) {
continue;
}
ViewGroup v = (ViewGroup) view.findViewWithTag(field.getId());
if (field instanceof TextSearchField) {
EditText text;
if (((TextSearchField) field).isFreeSearch()) {
text = etSimpleSearch;
} else {
if (v == null)
continue;
text = (EditText) v.findViewById(R.id.edittext);
}
query.add(new SearchQuery(field, text.getEditableText().toString().trim()));
} else if (field instanceof BarcodeSearchField) {
if (v == null)
continue;
EditText text = (EditText) v.findViewById(R.id.edittext);
query.add(new SearchQuery(field, text.getEditableText().toString().trim()));
} else if (field instanceof DropdownSearchField) {
if (v == null)
continue;
Spinner spinner = (Spinner) v.findViewById(R.id.spinner);
if (spinner.getSelectedItemPosition() != -1) {
String key = ((DropdownSearchField) field).getDropdownValues().get(spinner.getSelectedItemPosition()).getKey();
if (!key.equals("")) {
query.add(new SearchQuery(field, key));
}
}
} else if (field instanceof CheckboxSearchField) {
if (v == null)
continue;
CheckBox checkbox = (CheckBox) v.findViewById(R.id.checkbox);
query.add(new SearchQuery(field, String.valueOf(checkbox.isChecked())));
}
}
return query;
}
use of de.geeksfactory.opacclient.searchfields.SearchField in project opacclient by opacapp.
the class SearchFragment method buildSearchForm.
protected void buildSearchForm(Map<String, String> restoreQuery) {
String skey = "annoyed_" + app.getLibrary().getIdent();
if (app.getLibrary().getReplacedBy() != null && !"".equals(app.getLibrary().getReplacedBy()) && sp.getInt(skey, 0) < 5 && app.promotePlusApps()) {
rlReplaced.setVisibility(View.VISIBLE);
ivReplacedStore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(app.getLibrary().getReplacedBy().replace("https://play.google.com/store/apps/details?id=", "market://details?id=")));
startActivity(i);
} catch (ActivityNotFoundException e) {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(app.getLibrary().getReplacedBy()));
startActivity(i);
}
}
});
sp.edit().putInt(skey, sp.getInt(skey, 0) + 1).apply();
} else {
rlReplaced.setVisibility(View.GONE);
}
llFormFields.removeAllViews();
llAdvancedFields.removeAllViews();
llExpand.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setAdvanced(!advanced);
}
});
rlSimpleSearch.setVisibility(View.GONE);
tvSearchAdvHeader.setVisibility(View.GONE);
int i = 0;
if (fields == null) {
return;
}
for (final SearchField field : fields) {
if (!field.isVisible()) {
continue;
}
ViewGroup v = null;
if (field instanceof TextSearchField) {
TextSearchField textSearchField = (TextSearchField) field;
if (textSearchField.isFreeSearch()) {
rlSimpleSearch.setVisibility(View.VISIBLE);
tvSearchAdvHeader.setVisibility(View.VISIBLE);
etSimpleSearch.setHint(textSearchField.getHint());
} else {
v = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.searchfield_text, llFormFields, false);
TextView title = (TextView) v.findViewById(R.id.title);
title.setText(textSearchField.getDisplayName());
EditText edittext = (EditText) v.findViewById(R.id.edittext);
edittext.setHint(textSearchField.getHint());
if (((TextSearchField) field).isNumber()) {
edittext.setInputType(InputType.TYPE_CLASS_NUMBER);
}
if (((TextSearchField) field).isHalfWidth() && i >= 1 && !(fields.get(i - 1) instanceof TextSearchField && ((TextSearchField) fields.get(i - 1)).isFreeSearch())) {
ViewGroup before = (ViewGroup) view.findViewWithTag(fields.get(i - 1).getId());
llFormFields.removeView(before);
llAdvancedFields.removeView(before);
v.setTag(field.getId());
View together = makeHalfWidth(before, v);
v = null;
if (field.isAdvanced()) {
llAdvancedFields.addView(together);
} else {
llFormFields.addView(together);
}
}
}
} else if (field instanceof BarcodeSearchField) {
BarcodeSearchField bcSearchField = (BarcodeSearchField) field;
v = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.searchfield_barcode, llFormFields, false);
TextView title = (TextView) v.findViewById(R.id.title);
title.setText(bcSearchField.getDisplayName());
EditText edittext = (EditText) v.findViewById(R.id.edittext);
edittext.setHint(bcSearchField.getHint());
ImageView ivBarcode = (ImageView) v.findViewById(R.id.ivBarcode);
ivBarcode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
barcodeScanningField = field.getId();
callback.scanBarcode();
}
});
if (((BarcodeSearchField) field).isHalfWidth() && i >= 1 && !(fields.get(i - 1) instanceof TextSearchField && ((TextSearchField) fields.get(i - 1)).isFreeSearch())) {
ViewGroup before = (ViewGroup) view.findViewWithTag(fields.get(i - 1).getId());
llFormFields.removeView(before);
llAdvancedFields.removeView(before);
v = makeHalfWidth(before, v);
}
} else if (field instanceof DropdownSearchField) {
DropdownSearchField ddSearchField = (DropdownSearchField) field;
if (ddSearchField.getDropdownValues() == null) {
continue;
}
v = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.searchfield_dropdown, llFormFields, false);
TextView title = (TextView) v.findViewById(R.id.title);
title.setText(ddSearchField.getDisplayName());
Spinner spinner = (Spinner) v.findViewById(R.id.spinner);
spinner.setAdapter(((OpacActivity) getActivity()).new MetaAdapter<DropdownSearchField.Option>(getActivity(), ddSearchField.getDropdownValues(), R.layout.simple_spinner_item));
// Load saved home branch
if (field.getMeaning() == Meaning.HOME_BRANCH) {
String selection;
if (sp.contains(OpacClient.PREF_HOME_BRANCH_PREFIX + app.getAccount().getId())) {
selection = sp.getString(OpacClient.PREF_HOME_BRANCH_PREFIX + app.getAccount().getId(), "");
} else {
try {
selection = app.getLibrary().getData().getString("homebranch");
} catch (JSONException e) {
selection = "";
}
}
if (!selection.equals("")) {
int j = 0;
for (DropdownSearchField.Option row : ddSearchField.getDropdownValues()) {
if (row.getKey().equals(selection)) {
spinner.setSelection(j);
}
j++;
}
}
}
} else if (field instanceof CheckboxSearchField) {
CheckboxSearchField cbSearchField = (CheckboxSearchField) field;
v = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.searchfield_checkbox, llFormFields, false);
CheckBox checkbox = (CheckBox) v.findViewById(R.id.checkbox);
checkbox.setText(cbSearchField.getDisplayName());
}
if (v != null) {
v.setTag(field.getId());
if (field.isAdvanced()) {
llAdvancedFields.addView(v);
} else {
llFormFields.addView(v);
}
}
i++;
}
llExpand.setVisibility(llAdvancedFields.getChildCount() == 0 ? View.GONE : View.VISIBLE);
if (restoreQuery != null) {
loadQuery(restoreQuery);
}
}
Aggregations