package net.sourceforge.pmd.renderers;

import net.sourceforge.pmd.Report;
import net.sourceforge.pmd.RuleViolation;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.Properties;

public class PGReport extends AbstractRenderer implements Renderer {

    public String render(Report report) {
        try {
            Class.forName("org.postgresql.Driver");
            String url = "jdbc:postgresql://localhost/pmd";
            Properties props = new Properties();
            props.setProperty("user","tom");
            Connection conn = DriverManager.getConnection(url, props);
            Statement st = conn.createStatement();
            for (Iterator i = report.iterator(); i.hasNext(); ) {
                RuleViolation rv = (RuleViolation)i.next();
                String clean_desc = rv.getDescription().replace('\'', '\"');
                Object[] values = {rv.getFilename(), clean_desc, String.valueOf(rv.getNode().getBeginLine())};
                String format = "INSERT INTO problems VALUES (''{0}'', ''{1}'', {2})";
                String sql = MessageFormat.format(format, values);
                st.executeUpdate(sql);
            }
            st.close();
            conn.close();

            String result = "Report creation succeeded!";
            if (showSuppressedViolations) {
                result = result + "  Incidentally, there are some suppressed violations; those weren't inserted into the database.";
            }
            return result;
        } catch (Exception e){
            return "Report created failed: " + e.getMessage();
        }
    }
}
