/*
 * RSS2MT.java
 * http://www.gra2.com
 *
 *
 */

import java.io.*;
import java.nio.charset.Charset;
import java.util.*;
import java.text.*;
import java.util.regex.Pattern;

/**
 *
 * @author Daniel (http://www.gra2.com)
 */
public class RSS2MT {
    
    /** Creates a new instance of Main */
    public RSS2MT(String rss2, String dest) {  
        try {
        BufferedReader in = new BufferedReader(new FileReader(rss2));

        FileOutputStream fos = new FileOutputStream(dest);
        DataOutputStream fout = new DataOutputStream(fos);
        PrintStream out = new PrintStream(fout);
        
        String line = in.readLine();
        while(line!=null) {
                System.out.println(line);
                //Post starts after <item>
                while(!line.startsWith("<item>")) { 
                    line = in.readLine();
                    //Reached end of RSS file.
                    if(line.startsWith("</rss>")) return;
                }

                while(!line.startsWith("<title>")) { line = in.readLine(); }
                //Got post title.

                String title = line.substring("<title>".length());
                title = title.substring(0, title.length()-"</title>".length());
                out.println("TITLE: " + parseHTMLTags(title));
                
                while(!line.startsWith("<pubDate>")) { line = in.readLine(); }
                //Got date.

                String date = line.substring("<pubDate>".length());
                date = date.substring(0, date.length()-"</pubDate>".length());
                
                //Convert RSS date format to MT
                SimpleDateFormat dateParser = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
                Date formattedDate = dateParser.parse(date);
                dateParser.applyPattern("MM/dd/yyyy HH:mm:ss");
                
                out.println("DATE: " + dateParser.format(formattedDate));
                
                while(!line.startsWith("<dc:subject>")) { line = in.readLine(); }
                //Got category.
                
                String text = line.substring("<dc:subject>".length());                
                out.println("CATEGORY: " + parseHTMLTags(text.substring(0, text.length()-"</dc:subject>".length())));
                out.println("-----");
                
                while(!line.startsWith("<description>")) { line = in.readLine(); }
                //Got body of post.

                text = line.substring("<description>".length());
                //System.out.println(text);            

                out.println("BODY:");                    
                if(!text.contains("</description>")) {
                    //Post is multi-lined
                    
                    out.println(parseHTMLTags(text)); //First line will not contain a </description> tag.
                    line = in.readLine();
                    while(!line.contains("</description>")) {
                        out.println(parseHTMLTags(line));
                        line = in.readLine();
                    }
                    
                    out.println(parseHTMLTags(line.substring(0, line.length()-"</description>".length())));
                    
                } else {
                    //Post has a single line.
                    out.println("BODY:");
                    out.println(parseHTMLTags(text.substring(0, text.length()-"</description>".length())));         
                }
                out.println("--------");

        }
        in.close();
        out.close();
        
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public String parseHTMLTags(String line) {
        line = line.replace("&lt;", "<");
        line = line.replace("&gt;", ">");
        line = line.replace("&lt;", "<");
        line = line.replace("&quot;", "'");
        line = line.replace("á", "&aacute;");
        line = line.replace("é", "&eacute;");       
        line = line.replace("í", "&iacute;");     
        line = line.replace("ó", "&oacute;");     
        line = line.replace("ú", "&uacute;");     
        
        line = line.replace("Á", "&Aacute;");
        line = line.replace("É", "&Eacute;");       
        line = line.replace("Í", "&Iacute;");     
        line = line.replace("Ó", "&Oacute;");     
        line = line.replace("Ú", "&Uacute;");     
        
        line = line.replace("à", "&agrave;");
        line = line.replace("è", "&egrave;");       
        line = line.replace("ì", "&igrave;");     
        line = line.replace("ò", "&ograve;");     
        line = line.replace("ù", "&ugrave;");     
        
        line = line.replace("À", "&Agrave;");
        line = line.replace("È", "&Egrave;");       
        line = line.replace("Ì", "&Igrave;");     
        line = line.replace("Ò", "&Ograve;");     
        line = line.replace("Ù", "&Ugrave;");         
        
        return line;
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if(args.length<2) System.out.println("Syntax: java rss2mt RSS2File OutputFile");
        else new RSS2MT(args[0], args[1]);
    }
    
}
