public class SqlDataLoader implements DataLoader { @SuppressWarnings("unchecked") @Override public java.lang.Object load(fmpp.Engine arg0, List args) throws java.lang.Exception { if (args.size() < 5) { throw new IllegalArgumentException( "At least 5 argument (driverClassName, url, username, password, sql) needed."); }
Object obj = args.get(0); if (!(obj instanceof String)) { throw new IllegalArgumentException( "The 1st argument (driverClassName) must be a string."); } String driverClassName = obj.toString();
obj = args.get(1); if (!(obj instanceof String)) { throw new IllegalArgumentException( "The 1st argument (url) must be a string."); } String url = obj.toString();
obj = args.get(2); if (!(obj instanceof String)) { throw new IllegalArgumentException( "The 1st argument (username) must be a string."); } String username = obj.toString();
obj = args.get(3); if (!(obj instanceof String)) { throw new IllegalArgumentException( "The 1st argument (password) must be a string."); } String password = obj.toString();
obj = args.get(4); if (!(obj instanceof String)) { throw new IllegalArgumentException( "The 1st argument (sql) must be a string."); } String sql = obj.toString();
SqlTemplateModel model = new SqlTemplateModel(); model.load(driverClassName, url, username, password, sql); return model; } }
if (colCount > 0) { while (rs.next()) { TemplateModel[] row = new TemplateModel[colCount]; for (int column = 0; column < colCount; column++) { switch (headerTypes.get(column)) { case Types.VARCHAR: case Types.CHAR: case Types.LONGVARCHAR: String str = rs.getString(column + 1); if (rs.wasNull()) { row[column] = new SimpleScalar(""); // Field // IsNull } else { row[column] = new SimpleScalar(str); } break; case Types.SMALLINT: case Types.TINYINT: short s = rs.getShort(column + 1); if (rs.wasNull()) { row[column] = new SimpleNumber(0);// Field // IsNull } else { row[column] = new SimpleNumber(s); } break; case Types.INTEGER: int i = rs.getInt(column + 1); if (rs.wasNull()) { row[column] = new SimpleNumber(0);// Field // IsNull } else { row[column] = new SimpleNumber(i); } break; case Types.BIGINT: long l = rs.getLong(column + 1); if (rs.wasNull()) { row[column] = new SimpleNumber(0);// Field // IsNull } else { row[column] = new SimpleNumber(l); } break; case Types.REAL: case Types.FLOAT: float f = rs.getFloat(column + 1); if (rs.wasNull()) { row[column] = new SimpleNumber(0);// Field // IsNull } else { row[column] = new SimpleNumber(f); } break; case Types.DOUBLE: double d = rs.getDouble(column + 1); if (rs.wasNull()) { row[column] = new SimpleNumber(0);// Field // IsNull } else { row[column] = new SimpleNumber(d); } break; case Types.NUMERIC: case Types.DECIMAL: BigDecimal bd = rs.getBigDecimal(column + 1); if (rs.wasNull()) { row[column] = new SimpleNumber(0);// Field // IsNull } else { row[column] = new SimpleNumber(bd.doubleValue()); } break; case Types.DATE: java.sql.Date date = rs.getDate(column + 1); if (rs.wasNull()) { row[column] = new SimpleDate(new java.sql.Date( 0));// Field // IsNull } else { row[column] = new SimpleDate(date); } break; case Types.TIME: java.sql.Time t = rs.getTime(column + 1); if (rs.wasNull()) { row[column] = new SimpleDate(new java.sql.Time( 0)); // Field // IsNull } else { row[column] = new SimpleDate(t); } break; case Types.TIMESTAMP: java.sql.Timestamp ts = rs.getTimestamp(column + 1); if (rs.wasNull()) { row[column] = new SimpleDate( new java.sql.Timestamp(0)); // Field // IsNull } else { row[column] = new SimpleDate(ts); } break; case Types.CLOB: Clob clob = rs.getClob(column + 1); if (rs.wasNull()) { row[column] = new SimpleScalar(""); // Field // IsNull } else { row[column] = new SimpleScalar(clob .getSubString(1l, (int) clob.length())); } break; case Types.BIT: case Types.BOOLEAN: boolean b = rs.getBoolean(column + 1); if (rs.wasNull()) { row[column] = TemplateBooleanModel.FALSE; // Field // IsNull } else { row[column] = b ? TemplateBooleanModel.TRUE : TemplateBooleanModel.FALSE; } break; case Types.BLOB: Blob blob = rs.getBlob(column + 1); if (rs.wasNull()) { row[column] = new SimpleScalar(""); // Field // IsNull } else { row[column] = new SimpleScalar(new String(blob .getBytes(1l, (int) blob.length()))); } break; case Types.BINARY: case Types.VARBINARY: case Types.LONGVARBINARY: byte[] bs = rs.getBytes(column + 1); if (rs.wasNull()) { row[column] = new SimpleScalar(""); // Field // IsNull } else { row[column] = new SimpleScalar(new String(bs)); } break; default: row[column] = new SimpleScalar(""); // Unknow Type } } rows.add(new RowHash(row)); } } } }
private class RowHash implements TemplateHashModelEx, TemplateSequenceModel {