/** * Copyright (C) 2016 by Johan von Forstner under the MIT license: * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and * associated documentation files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package de.geeksfactory.opacclient; import de.geeksfactory.opacclient.apis.Adis; import de.geeksfactory.opacclient.apis.BiBer1992; import de.geeksfactory.opacclient.apis.Bibliotheca; import de.geeksfactory.opacclient.apis.Heidi; import de.geeksfactory.opacclient.apis.IOpac; import de.geeksfactory.opacclient.apis.Littera; import de.geeksfactory.opacclient.apis.OpacApi; import de.geeksfactory.opacclient.apis.Open; import de.geeksfactory.opacclient.apis.PicaLBS; import de.geeksfactory.opacclient.apis.PicaOld; import de.geeksfactory.opacclient.apis.Primo; import de.geeksfactory.opacclient.apis.SISIS; import de.geeksfactory.opacclient.apis.SRU; import de.geeksfactory.opacclient.apis.TestApi; import de.geeksfactory.opacclient.apis.TouchPoint; import de.geeksfactory.opacclient.apis.VuFind; import de.geeksfactory.opacclient.apis.WebOpacNet; import de.geeksfactory.opacclient.apis.WinBiap; import de.geeksfactory.opacclient.apis.Zones; import de.geeksfactory.opacclient.i18n.DummyStringProvider; import de.geeksfactory.opacclient.i18n.StringProvider; import de.geeksfactory.opacclient.networking.HttpClientFactory; import de.geeksfactory.opacclient.objects.Library; import de.geeksfactory.opacclient.reporting.ReportHandler; /** * This class is used to simplify obtaining {@link OpacApi} instances. * * @author Johan von Forstner */ public class OpacApiFactory { protected OpacApiFactory() { } /** * Creates an {@link OpacApi} instance for accessing the given {@link Library}. This method will * use a {@link DummyStringProvider} (not provide any human-readable error messages), the * default {@link HttpClientFactory} with the User-Agent "libopac" and provide results in the * library's default language. * * @param lib the {@link Library} you want to connect to * @param userAgent the value to use as the User-Agent header for HTTP requests. Will be * overridden if the library's configuration contains the {@code disguise} * parameter. * @return a new {@link OpacApi} instance */ public static OpacApi create(Library lib, String userAgent) { return create(lib, new DummyStringProvider(), new HttpClientFactory(userAgent), null, null); } public static OpacApi create(Library lib, StringProvider sp, HttpClientFactory hcf, String lang) { return create(lib, sp, hcf, lang, null); } /** * Creates an {@link OpacApi} instance for accessing the given {@link Library} * * @param lib the {@link Library} you want to connect to * @param sp the {@link StringProvider} to use * @param hcf the {@link HttpClientFactory} to use * @param lang the preferred language as a ISO-639-1 code, see {@link OpacApi#setLanguage(String)} * @return a new {@link OpacApi} instance */ public static OpacApi create(Library lib, StringProvider sp, HttpClientFactory hcf, String lang, ReportHandler reportHandler) { OpacApi newApiInstance; if (lib.getApi().equals("bibliotheca")) { newApiInstance = new Bibliotheca(); } else if (lib.getApi().equals("sisis")) { newApiInstance = new SISIS(); } else if (lib.getApi().equals("zones")) { newApiInstance = new Zones(); } else if (lib.getApi().equals("biber1992")) { newApiInstance = new BiBer1992(); } else if (lib.getApi().equals("pica")) { switch (lib.getData().optString("account_system", "")) { case "lbs": newApiInstance = new PicaLBS(); break; case "default": newApiInstance = new PicaOld(); break; default: newApiInstance = new PicaOld(); break; } } else if (lib.getApi().equals("iopac")) { newApiInstance = new IOpac(); } else if (lib.getApi().equals("adis")) { newApiInstance = new Adis(); } else if (lib.getApi().equals("sru")) { newApiInstance = new SRU(); } else if (lib.getApi().equals("primo")) { newApiInstance = new Primo(); } else if (lib.getApi().equals("vufind")) { newApiInstance = new VuFind(); } else if (lib.getApi().equals("webopac.net")) { newApiInstance = new WebOpacNet(); } else if (lib.getApi().equals("web-opac.at") || lib.getApi().equals("littera")) { newApiInstance = new Littera(); } else if (lib.getApi().equals("winbiap")) { newApiInstance = new WinBiap(); } else if (lib.getApi().equals("heidi")) { newApiInstance = new Heidi(); } else if (lib.getApi().equals("touchpoint")) { newApiInstance = new TouchPoint(); } else if (lib.getApi().equals("open")) { newApiInstance = new Open(); } else if (lib.getApi().equals("test")) { newApiInstance = new TestApi(); } else { return null; } newApiInstance.init(lib, hcf); newApiInstance.setStringProvider(sp); newApiInstance.setReportHandler(reportHandler); if (lang != null) newApiInstance.setLanguage(lang); return newApiInstance; } }