From 4e2e9ea82911aca360f9740a16630ec523f1dbed Mon Sep 17 00:00:00 2001 From: StefRe Date: Sat, 5 Jan 2019 18:34:55 +0100 Subject: [PATCH] Add SLUB API, implement parseSearchFields and getSupportFlags This API is specific for SLUB in Dresden. --- .../opacclient/OpacApiFactory.java | 3 + .../de/geeksfactory/opacclient/apis/SLUB.kt | 98 +++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 opacclient/libopac/src/main/java/de/geeksfactory/opacclient/apis/SLUB.kt diff --git a/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/OpacApiFactory.java b/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/OpacApiFactory.java index 542ae55f6..55115c0e2 100644 --- a/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/OpacApiFactory.java +++ b/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/OpacApiFactory.java @@ -31,6 +31,7 @@ import de.geeksfactory.opacclient.apis.PicaOld; import de.geeksfactory.opacclient.apis.Primo; import de.geeksfactory.opacclient.apis.SISIS; +import de.geeksfactory.opacclient.apis.SLUB; import de.geeksfactory.opacclient.apis.SRU; import de.geeksfactory.opacclient.apis.TestApi; import de.geeksfactory.opacclient.apis.TouchPoint; @@ -130,6 +131,8 @@ public static OpacApi create(Library lib, StringProvider sp, HttpClientFactory h newApiInstance = new Open(); } else if (lib.getApi().equals("koha")) { newApiInstance = new Koha(); + } else if (lib.getApi().equals("slub")) { + newApiInstance = new SLUB(); } else if (lib.getApi().equals("test")) { newApiInstance = new TestApi(); } else { diff --git a/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/apis/SLUB.kt b/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/apis/SLUB.kt new file mode 100644 index 000000000..5388a66a8 --- /dev/null +++ b/opacclient/libopac/src/main/java/de/geeksfactory/opacclient/apis/SLUB.kt @@ -0,0 +1,98 @@ +package de.geeksfactory.opacclient.apis + +import de.geeksfactory.opacclient.networking.HttpClientFactory +import de.geeksfactory.opacclient.objects.* +import de.geeksfactory.opacclient.searchfields.SearchField +import de.geeksfactory.opacclient.searchfields.SearchQuery +import de.geeksfactory.opacclient.searchfields.TextSearchField +import de.geeksfactory.opacclient.utils.get +import de.geeksfactory.opacclient.utils.html +import de.geeksfactory.opacclient.utils.text + +/** + * OpacApi implementation for SLUB. https://slub-dresden.de + * + * @author Steffen Rehberg, Jan 2019 + */ +open class SLUB : OkHttpBaseApi() { + protected lateinit var baseurl: String + protected val ENCODING = "UTF-8" + + override fun init(library: Library, factory: HttpClientFactory) { + super.init(library, factory) + baseurl = library.data.getString("baseurl") + } + + override fun search(query: List): SearchRequestResult { + TODO("not implemented") + } + + override fun filterResults(filter: Filter, option: Filter.Option): SearchRequestResult { + TODO("not implemented") + } + + override fun searchGetPage(page: Int): SearchRequestResult { + TODO("not implemented") + } + + override fun getResultById(id: String, homebranch: String?): DetailedItem { + TODO("not implemented") + } + + override fun getResult(position: Int): DetailedItem? { + // getResultById is implemented and every search result has an id set, so getResult is not used + return null + } + + override fun reservation(item: DetailedItem, account: Account, useraction: Int, selection: String?): OpacApi.ReservationResult { + TODO("not implemented") + } + + override fun prolong(media: String, account: Account, useraction: Int, selection: String?): OpacApi.ProlongResult { + TODO("not implemented") + } + + override fun prolongAll(account: Account, useraction: Int, selection: String?): OpacApi.ProlongAllResult { + TODO("not implemented") + } + + override fun cancel(media: String, account: Account, useraction: Int, selection: String?): OpacApi.CancelResult { + TODO("not implemented") + } + + override fun account(account: Account): AccountData { + TODO("not implemented") + } + + override fun checkAccountData(account: Account) { + TODO("not implemented") + } + + override fun getShareUrl(id: String?, title: String?): String { + TODO("not implemented") + } + + override fun getSupportFlags(): Int { + return 0 + } + + override fun getSupportedLanguages(): Set? { + //TODO("not implemented") + return null + } + + override fun parseSearchFields(): List { + val doc = httpGet(baseurl, ENCODING).html + return doc.select("ul#search-in-field-options li").map { + TextSearchField().apply { + id = it["name"] + displayName = it.text + } + } + } + + override fun setLanguage(language: String?) { + //TODO("not implemented") + } + +} \ No newline at end of file