package yuku.alkitabconverter.reading_plan; import yuku.alkitabconverter.util.DesktopVerseFinder; import yuku.alkitabconverter.util.DesktopVerseParser; import yuku.alkitabconverter.util.IntArrayList; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class RpaConverter { private final static String FILE_NAME = "blueletter_one_year_canonical"; private final static String FILE_INPUT = System.getProperty("user.dir") + "/AlkitabConverter/file/" + FILE_NAME + ".txt"; private final static String FILE_OUTPUT = System.getProperty("user.dir") + "/AlkitabConverter/file/" + FILE_NAME + ".rpa"; public static void main(String[] args) { RpaConverter processor = new RpaConverter(); processor.convert(); } public void convert() { File file = new File(FILE_OUTPUT); try { if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); writeInfo(bw); writePlan(bw); bw.close(); }catch(IOException e) { e.printStackTrace(); } } private void writeInfo(BufferedWriter bufferedWriter) { try { StringBuilder info = new StringBuilder(); info.append("info\tversion\t1\n"); info.append("info\ttitle\t" + "Blue Letter One Year Canonical Plan\n"); info.append("info\tdescription\t" + "This plan goes straight through the Bible from Genesis to Revelation. You will be supplied with reading for each day of the week as a steady guide toward finishing the entire Bible in one calendar year.\n"); info.append("info\tduration\t" + 365 + "\n"); bufferedWriter.write(info.toString()); } catch (IOException e) { e.printStackTrace(); } } private void writePlan(final BufferedWriter bufferedWriter) { try { Scanner scanner = new Scanner(new File(FILE_INPUT)); while (scanner.hasNextLine()) { final String line = scanner.nextLine(); final IntArrayList ariRanges = new IntArrayList(); DesktopVerseFinder.findInText(line, new DesktopVerseFinder.DetectorListener() { @Override public boolean onVerseDetected(final int start, final int end, final String verse) { final IntArrayList aris = DesktopVerseParser.verseStringToAri(verse); for (int i = 0; i < aris.size(); i++) { ariRanges.add(aris.get(i)); } return true; } @Override public void onNoMoreDetected() { String ariText = ""; for (int i = 0; i < ariRanges.size(); i++) { ariText += "\t" + ariRanges.get(i); } int length = ariRanges.size() / 2; ariText += "\n"; String dailyPlan = "plan\t" + length + ariText; try { bufferedWriter.write(dailyPlan); } catch (IOException e) { e.printStackTrace(); } } }); } } catch (IOException e) { e.printStackTrace(); } } }