package de.geeksfactory.opacclient.apis;
import org.joda.time.LocalDate;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import de.geeksfactory.opacclient.i18n.StringProvider;
import de.geeksfactory.opacclient.networking.HttpClientFactory;
import de.geeksfactory.opacclient.networking.NotReachableException;
import de.geeksfactory.opacclient.objects.Account;
import de.geeksfactory.opacclient.objects.AccountData;
import de.geeksfactory.opacclient.objects.Detail;
import de.geeksfactory.opacclient.objects.DetailedItem;
import de.geeksfactory.opacclient.objects.Filter;
import de.geeksfactory.opacclient.objects.LentItem;
import de.geeksfactory.opacclient.objects.Library;
import de.geeksfactory.opacclient.objects.ReservedItem;
import de.geeksfactory.opacclient.objects.SearchRequestResult;
import de.geeksfactory.opacclient.objects.SearchResult;
import de.geeksfactory.opacclient.searchfields.SearchField;
import de.geeksfactory.opacclient.searchfields.SearchQuery;
import de.geeksfactory.opacclient.searchfields.TextSearchField;
public class TestApi extends BaseApi {
private Library library;
private List<SearchResult> list = new ArrayList<>();
private List<DetailedItem> detailList = new ArrayList<>();
@Override
public void start() throws IOException {
}
@Override
public void init(Library library, HttpClientFactory httpClientFactory) {
this.library = library;
makeSearchResult("Kurz", null, false);
makeSearchResult("Weit hinten, hinter den Wortbergen, fern der Länder", null, false);
makeSearchResult("Kurz", null, true);
makeSearchResult("Weit hinten, hinter den Wortbergen, fern der Länder", null, true);
String image =
"http://upload.wikimedia.org/wikipedia/commons/thumb/8/87/Old_book_bindings" +
".jpg/800px-Old_book_bindings.jpg";
makeSearchResult("Kurz", image, false);
makeSearchResult("Weit hinten, hinter den Wortbergen, fern der Länder", image, false);
makeSearchResult(
"Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien " +
"leben die Blindtexte.",
image, false);
makeSearchResult("Kurz", image, true);
makeSearchResult("Weit hinten, hinter den Wortbergen, fern der Länder", image, true);
super.init(library, httpClientFactory);
}
@Override
public SearchRequestResult search(List<SearchQuery> query)
throws IOException, OpacErrorException, JSONException {
return new SearchRequestResult(list, list.size(), 1, 0);
}
private void makeSearchResult(String name, String url, boolean reservable) {
SearchResult res = new SearchResult();
res.setNr(list.size());
res.setInnerhtml("<b>" + name + "</b><br/>Lorem ipsum <i>dolor</i> sit amet.");
res.setCover(url);
res.setType(SearchResult.MediaType.BOOK);
list.add(res);
DetailedItem item = new DetailedItem();
item.setTitle(name);
item.setReservable(reservable);
item.setCover(url);
item.addDetail(new Detail("Autor", "Max Mustermann"));
item.addDetail(new Detail("Beschreibung", "Weit hinten, hinter den Wortbergen, " +
"fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden " +
"wohnen sie in Buchstabhausen an der Küste des Semantik, " +
"eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren " +
"Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches " +
"Land, in dem einem gebratene Satzteile in den Mund fliegen.\n" +
"\n" +
"Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht" +
" – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine " +
"Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite " +
"Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen " +
"Kommata, wilden Fragezeichen und hinterhältigen Semikoli, " +
"doch das Blindtextchen ließ sich nicht beirren.\n" +
"Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und " +
"machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen " +
"hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt " +
"Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen " +
"Straße, der Zeilengasse. Wehmütig lief ihm eine rhetorische Frage über die " +
"Wange, dann setzte es seinen Weg fort.\n" +
"\n" +
"Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, " +
"wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, " +
"was von ihrem Ursprung noch übrig wäre, sei das Wort \"und\" und das " +
"Blindtextchen solle umkehren und wieder in sein eigenes, " +
"sicheres Land zurückkehren.\n" +
"\n" +
"Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, " +
"bis ihm ein paar heimtückische Werbetexter auflauerten, " +
"es mit Longe und Parole betrunken machten und es dann in ihre Agentur " +
"schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn" +
" es nicht umgeschrieben wurde, dann benutzen Sie es immernoch." +
""));
detailList.add(item);
}
@Override
public SearchRequestResult volumeSearch(Map<String, String> query)
throws IOException, OpacErrorException {
return null;
}
@Override
public SearchRequestResult filterResults(Filter filter, Filter.Option option)
throws IOException, OpacErrorException {
return null;
}
@Override
public SearchRequestResult searchGetPage(int page)
throws IOException, OpacErrorException, JSONException {
return null;
}
@Override
public DetailedItem getResultById(String id, String homebranch)
throws IOException, OpacErrorException {
return null;
}
@Override
public DetailedItem getResult(int position) throws IOException, OpacErrorException {
return detailList.get(position);
}
@Override
public ReservationResult reservation(DetailedItem item, Account account,
int useraction, String selection) throws IOException {
return null;
}
@Override
public ProlongResult prolong(String media, Account account, int useraction,
String selection) throws IOException {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return new ProlongResult(MultiStepResult.Status.OK);
}
@Override
public ProlongAllResult prolongAll(Account account, int useraction, String selection)
throws IOException {
return null;
}
@Override
public CancelResult cancel(String media, Account account, int useraction,
String selection) throws IOException, OpacErrorException {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return new CancelResult(MultiStepResult.Status.OK);
}
@Override
public AccountData account(Account account)
throws IOException, JSONException, OpacErrorException {
AccountData data = new AccountData(account.getId());
List<LentItem> lent = new ArrayList<>();
List<ReservedItem> reservations = new ArrayList<>();
try {
JSONObject d = new JSONObject(httpGet(library.getData().getString("url"), "UTF-8"));
for (int i = 0; i < d.getJSONArray("lent").length(); i++) {
JSONObject l = d.getJSONArray("lent").getJSONObject(i);
LentItem lentItem = new LentItem();
for (Iterator iter = l.keys(); iter.hasNext(); ) {
String key = (String) iter.next();
lentItem.set(key, l.getString(key));
}
lent.add(lentItem);
}
for (int i = 0; i < d.getJSONArray("reservations").length(); i++) {
JSONObject l = d.getJSONArray("reservations").getJSONObject(i);
ReservedItem resItem = new ReservedItem();
for (Iterator iter = l.keys(); iter.hasNext(); ) {
String key = (String) iter.next();
resItem.set(key, l.getString(key));
}
reservations.add(resItem);
}
} catch (NotReachableException e) {
for (int i = 0; i < 6; i++) {
LentItem lentItem = new LentItem();
lentItem.setAuthor("Max Mustermann");
lentItem.setTitle("Lorem Ipsum");
lentItem.setStatus("hier ist der Status");
lentItem.setDeadline(new LocalDate(1442564454547L));
lentItem.setRenewable(true);
lentItem.setProlongData("foo");
lentItem.setHomeBranch("Meine Zweigstelle");
lentItem.setLendingBranch("Ausleihzweigstelle");
lentItem.setBarcode("Barcode");
lent.add(lentItem);
ReservedItem reservedItem = new ReservedItem();
reservedItem.setAuthor("Max Mustermann");
reservedItem.setTitle("Lorem Ipsum");
reservedItem.setReadyDate(LocalDate.now());
reservations.add(reservedItem);
}
}
data.setLent(lent);
data.setReservations(reservations);
return data;
}
@Override
public void checkAccountData(Account account)
throws IOException, JSONException, OpacErrorException {
}
@Override
public List<SearchField> parseSearchFields()
throws IOException, OpacErrorException, JSONException {
List<SearchField> fields = new ArrayList<>();
fields.add(new TextSearchField("free", "Freie Suche", false, false, "Freie Suche", true,
false));
return fields;
}
@Override
public String getShareUrl(String id, String title) {
return null;
}
@Override
public int getSupportFlags() {
return 0;
}
@Override
public boolean shouldUseMeaningDetector() {
return false;
}
@Override
public void setStringProvider(StringProvider stringProvider) {
}
@Override
public Set<String> getSupportedLanguages() throws IOException {
return null;
}
@Override
public void setLanguage(String language) {
}
}