package be.nikiroo.fanfix.reader; import java.io.IOException; import java.net.URL; import be.nikiroo.fanfix.data.Story; import be.nikiroo.fanfix.library.BasicLibrary; import be.nikiroo.fanfix.library.LocalLibrary; import be.nikiroo.utils.Progress; public interface Reader { /** * A type of {@link BasicReader}. * * @author niki */ public enum ReaderType { /** Simple reader that outputs everything on the console */ CLI, /** Reader that starts local programs to handle the stories */ GUI, /** A text (UTF-8) reader with menu and text windows */ TUI, ; /** * Return the full class name of a type that implements said * {@link ReaderType}. * * @return the class name */ public String getTypeName() { String pkg = "be.nikiroo.fanfix.reader."; switch (this) { case CLI: return pkg + "CliReader"; case TUI: return pkg + "TuiReader"; case GUI: return pkg + "GuiReader"; } return null; } }; /** * Return the current {@link Story}. * * @return the {@link Story} */ public Story getStory(); /** * The {@link LocalLibrary} to load the stories from (by default, takes the * default {@link LocalLibrary}). * * @return the {@link LocalLibrary} */ public BasicLibrary getLibrary(); /** * Change the {@link LocalLibrary} that will be managed by this * {@link BasicReader}. * * @param lib * the new {@link LocalLibrary} */ public void setLibrary(LocalLibrary lib); /** * Create a new {@link BasicReader} for a {@link Story} in the * {@link LocalLibrary}. * * @param luid * the {@link Story} ID * @param pg * the optional progress reporter * * @throws IOException * in case of I/O error */ public void setStory(String luid, Progress pg) throws IOException; /** * Create a new {@link BasicReader} for an external {@link Story}. * * @param source * the {@link Story} {@link URL} * @param pg * the optional progress reporter * * @throws IOException * in case of I/O error */ public void setStory(URL source, Progress pg) throws IOException; /** * Start the {@link Story} Reading. * * @throws IOException * in case of I/O error or if the {@link Story} was not * previously set */ public void read() throws IOException; /** * Read the selected chapter (starting at 1). * * @param chapter * the chapter * * @throws IOException * in case of I/O error or if the {@link Story} was not * previously set */ public void read(int chapter) throws IOException; /** * Start the reader in browse mode for the given source (or pass NULL for * all sources). * * @param source * the type of {@link Story} to take into account, or NULL for * all */ public void browse(String source); }