+ protected void search() throws IOException {
+ new CliReader().listSearchables();
+ }
+
+ /**
+ * Search for books by keywords on the given supported web site.
+ *
+ * @param searchOn
+ * the web site to search on
+ * @param search
+ * the keyword to look for
+ * @param page
+ * the page of results to get, or 0 to inquire about the number
+ * of pages
+ * @param item
+ * the index of the book we are interested by, or 0 to query
+ * about how many books are in that page of results
+ *
+ * @throws IOException
+ * in case of I/O error
+ */
+ protected void searchKeywords(SupportType searchOn, String search,
+ int page, Integer item) throws IOException {
+ new CliReader().searchBooksByKeyword(searchOn, search, page, item);
+ }
+
+ /**
+ * Search for books by tags on the given supported web site.
+ *
+ * @param searchOn
+ * the web site to search on
+ * @param page
+ * the page of results to get, or 0 to inquire about the number
+ * of pages
+ * @param item
+ * the index of the book we are interested by, or 0 to query
+ * about how many books are in that page of results
+ * @param tags
+ * the tags to look for
+ *
+ * @throws IOException
+ * in case of I/O error
+ */
+ protected void searchTags(SupportType searchOn, Integer page, Integer item,
+ Integer[] tags) throws IOException {
+ new CliReader().searchBooksByTag(searchOn, page, item, tags);
+ }
+
+ /**
+ * Start a Fanfix server.
+ *
+ * @throws IOException
+ * in case of I/O errors
+ * @throws SSLException
+ * when the key was not accepted
+ */
+ private void startServer() throws IOException {
+ String mode = Instance.getInstance().getConfig()
+ .getString(Config.SERVER_MODE, "fanfix");
+ if (mode.equals("fanfix")) {
+ RemoteLibraryServer server = new RemoteLibraryServer();
+ server.setTraceHandler(Instance.getInstance().getTraceHandler());
+ server.run();
+ } else if (mode.equals("http")) {
+ WebLibraryServer server = new WebLibraryServer(false);
+ server.setTraceHandler(Instance.getInstance().getTraceHandler());
+ server.run();
+ } else if (mode.equals("https")) {
+ WebLibraryServer server = new WebLibraryServer(true);
+ server.setTraceHandler(Instance.getInstance().getTraceHandler());
+ server.run();
+ } else {
+ throw new IOException("Unknown server mode: " + mode);
+ }
+ }
+
+ /**
+ * Stop a running Fanfix server.
+ *
+ * @param key
+ * the key to contact the Fanfix server
+ * @param host
+ * the host on which it runs (NULL means localhost)
+ * @param port
+ * the port on which it runs
+ *
+ * @throws IOException
+ * in case of I/O errors
+ * @throws SSLException
+ * when the key was not accepted
+ */
+ private void stopServer(String key, String host, Integer port)
+ throws IOException, SSLException {
+ if (host.startsWith("http://") || host.startsWith("https://")) {
+ new WebLibrary(key, host, port).stop();
+ } else {
+ new RemoteLibrary(key, host, port).stop();
+ }
+ }
+
+ /**
+ * We are done and ready to exit.
+ * <p>
+ * By default, it will call {@link System#exit(int)} if the status is not 0.
+ *
+ * @param status
+ * the exit status
+ */
+ protected void exit(int status) {
+ if (status != 0) {
+ System.exit(status);