samples/livedb/src/org/apidesign/livedb/impl/LiveDBProcessor.java
branchlivedb
changeset 357 837370f791ba
parent 355 d1e7424dc988
child 358 afdd66815ee3
     1.1 --- a/samples/livedb/src/org/apidesign/livedb/impl/LiveDBProcessor.java	Tue Jun 01 12:08:47 2010 +0200
     1.2 +++ b/samples/livedb/src/org/apidesign/livedb/impl/LiveDBProcessor.java	Wed Jul 14 20:56:33 2010 +0200
     1.3 @@ -7,6 +7,14 @@
     1.4  
     1.5  import java.io.IOException;
     1.6  import java.io.Writer;
     1.7 +import java.sql.CallableStatement;
     1.8 +import java.sql.Connection;
     1.9 +import java.sql.Driver;
    1.10 +import java.sql.DriverManager;
    1.11 +import java.sql.ResultSet;
    1.12 +import java.sql.ResultSetMetaData;
    1.13 +import java.sql.SQLException;
    1.14 +import java.util.Enumeration;
    1.15  import java.util.Set;
    1.16  import javax.annotation.processing.AbstractProcessor;
    1.17  import javax.annotation.processing.Processor;
    1.18 @@ -38,16 +46,69 @@
    1.19              try {
    1.20                  JavaFileObject src = processingEnv.getFiler().createSourceFile(clsName, pe);
    1.21                  Writer w = src.openWriter();
    1.22 +                Connection c = DriverManager.getConnection(db.url(), db.user(), db.password());
    1.23 +                CallableStatement s = c.prepareCall(db.query());
    1.24 +                ResultSet rs = s.executeQuery();
    1.25 +                ResultSetMetaData md = rs.getMetaData();
    1.26                  w.append("package " + pe.getQualifiedName() + ";\n");
    1.27 +                w.append("import java.util.List;\n");
    1.28 +                w.append("import java.util.ArrayList;\n");
    1.29 +                w.append("import java.sql.*;\n");
    1.30                  w.append("class " + db.classname() + " {\n");
    1.31 -                w.append("  public String " + db.field() + ";\n");
    1.32 +                for (int i = 1; i <= md.getColumnCount(); i++) {
    1.33 +                    w.append("  public final " + md.getColumnClassName(i) + " " + md.getColumnName(i) + ";\n");
    1.34 +                }
    1.35 +                w.append("  private " + db.classname() + "(\n");
    1.36 +                for (int i = 1; i <= md.getColumnCount(); i++) {
    1.37 +                    w.append("    " + md.getColumnClassName(i) + " " + md.getColumnName(i));
    1.38 +                    if (i < md.getColumnCount()) {
    1.39 +                        w.append(",\n");
    1.40 +                    } else {
    1.41 +                        w.append("\n");
    1.42 +                    }
    1.43 +                }
    1.44 +                w.append("  ) {\n");
    1.45 +                for (int i = 1; i <= md.getColumnCount(); i++) {
    1.46 +                    w.append("    this." + md.getColumnName(i) + " = " + md.getColumnName(i) + ";\n");
    1.47 +                }
    1.48 +                w.append("  }\n");
    1.49 +                w.append("  public static List<" + db.classname() + "> query() throws SQLException {\n");
    1.50 +                w.append("    Connection c = DriverManager.getConnection(\"" + db.url() + "\", \"" + db.user() + "\", \"" + db.password() +"\");\n");
    1.51 +                w.append("    List<" + db.classname() + "> res = new ArrayList<" + db.classname() + ">();\n");
    1.52 +                w.append("    CallableStatement s = c.prepareCall(\"" + db.query() + "\");\n");
    1.53 +                w.append("    ResultSet rs = s.executeQuery();\n");
    1.54 +                w.append("    ResultSetMetaData md = rs.getMetaData();\n");
    1.55 +                w.append("    while (rs.next()) {\n");
    1.56 +                w.append("      res.add(new " + db.classname() + "(\n");
    1.57 +                for (int i = 1; i <= md.getColumnCount(); i++) {
    1.58 +                    w.append("        (" + md.getColumnClassName(i) + ")rs.getObject(" + i + ")");
    1.59 +                    if (i < md.getColumnCount()) {
    1.60 +                        w.append(",\n");
    1.61 +                    } else {
    1.62 +                        w.append("\n");
    1.63 +                    }
    1.64 +                }
    1.65 +                w.append("      ));\n");
    1.66 +                w.append("    };\n");
    1.67 +                w.append("    return res;\n");
    1.68 +                w.append("  }");
    1.69                  w.append("}");
    1.70                  w.close();
    1.71              } catch (IOException ex) {
    1.72                  throw new IllegalStateException(ex);
    1.73 +            } catch (SQLException ex) {
    1.74 +                throw new IllegalStateException(ex);
    1.75              }
    1.76          }
    1.77          return true;
    1.78      }
    1.79  
    1.80 +    static {
    1.81 +        // init drivers
    1.82 +        Enumeration<Driver> en;
    1.83 +        en = DriverManager.getDrivers();
    1.84 +        while (en.hasMoreElements()) {
    1.85 +            Driver driver = en.nextElement();
    1.86 +        }
    1.87 +    }
    1.88  }