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 }