package be.nikiroo.fanfix.reader; import java.io.IOException; import java.net.URL; import java.util.List; import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.Library; import be.nikiroo.fanfix.bundles.StringId; import be.nikiroo.fanfix.data.Chapter; import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.fanfix.data.Paragraph; import be.nikiroo.fanfix.data.Story; import be.nikiroo.fanfix.output.BasicOutput.OutputType; import be.nikiroo.fanfix.supported.BasicSupport; import be.nikiroo.fanfix.supported.BasicSupport.SupportType; /** * Command line {@link Story} reader. *
* Will output stories to the console.
*
* @author niki
*/
public class CliReader {
private Story story;
/**
* Create a new {@link CliReader} for a {@link Story} in the {@link Library}
* .
*
* @param luid
* the {@link Story} ID
* @throws IOException
* in case of I/O error
*/
public CliReader(String luid) throws IOException {
story = Instance.getLibrary().getStory(luid);
if (story == null) {
throw new IOException("Cannot retrieve story from library: " + luid);
}
}
/**
* Create a new {@link CliReader} for an external {@link Story}.
*
* @param source
* the {@link Story} {@link URL}
* @throws IOException
* in case of I/O error
*/
public CliReader(URL source) throws IOException {
BasicSupport support = BasicSupport.getSupport(source);
if (support == null) {
throw new IOException("URL not supported: " + source.toString());
}
story = support.process(source);
if (story == null) {
throw new IOException(
"Cannot retrieve story from external source: "
+ source.toString());
}
}
/**
* Read the information about the {@link Story}.
*/
public void read() {
String title = "";
String author = "";
MetaData meta = story.getMeta();
if (meta != null) {
if (meta.getTitle() != null) {
title = meta.getTitle();
}
if (meta.getAuthor() != null) {
author = "©" + meta.getAuthor();
if (meta.getDate() != null && !meta.getDate().isEmpty()) {
author = author + " (" + meta.getDate() + ")";
}
}
}
System.out.println(title);
System.out.println(author);
System.out.println("");
for (Chapter chap : story) {
if (chap.getName() != null && !chap.getName().isEmpty()) {
System.out.println(Instance.getTrans().getString(
StringId.CHAPTER_NAMED, chap.getNumber(),
chap.getName()));
} else {
System.out.println(Instance.getTrans().getString(
StringId.CHAPTER_UNNAMED, chap.getNumber()));
}
}
}
/**
* Read the selected chapter (starting at 1).
*
* @param chapter
* the chapter
*/
public void read(int chapter) {
if (chapter > story.getChapters().size()) {
System.err.println("Chapter " + chapter + ": no such chapter");
} else {
Chapter chap = story.getChapters().get(chapter - 1);
System.out.println("Chapter " + chap.getNumber() + ": "
+ chap.getName());
for (Paragraph para : chap) {
System.out.println(para.getContent());
System.out.println("");
}
}
}
/**
* List all the stories available in the {@link Library} by
* {@link OutputType} (or all of them if the given type is NULL)
*
* @param type
* the {@link OutputType} or NULL for all stories
*/
public static void list(SupportType type) {
List