| | |
| | | * the <a href="http://www.gnu.org/licenses/" target="_blank">GNU General Public License</a> |
| | | */ |
| | | public class GenericRecord implements Record { |
| | | private static final Logger logger = Logger.getLogger(GenericRecord.class.getName()); |
| | | |
| | | /** default getter method indicator */ |
| | | public static final String GETTER_NAME = "get"; |
| | |
| | | * @param c the class to persist |
| | | */ |
| | | public GenericRecord(Class<?> c) { |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(c.getName()); |
| | | logger.finest(c.getName()); |
| | | this.recordClass = c; |
| | | |
| | | DBTable table = c.getAnnotation(DBTable.class); |
| | | if(table != null) { |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(tableName); |
| | | logger.finest(tableName); |
| | | tableName = table.name(); |
| | | } else { |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).severe("missing table annotation"); |
| | | logger.severe("missing table annotation"); |
| | | } |
| | | |
| | | primaryKeyColNames = new ArrayList<String>(); |
| | |
| | | if(primaryKey != null) { |
| | | String[] names = primaryKey.value(); |
| | | for(int i = 0; i < names.length; i++) { |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(names[i]); |
| | | logger.finest(names[i]); |
| | | primaryKeyColNames.add(names[i]); |
| | | } |
| | | } else { |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).severe("missing primary key annotation"); |
| | | logger.severe("missing primary key annotation"); |
| | | } |
| | | |
| | | columns = new Hashtable<String,Field>(); |
| | |
| | | String fieldName = field.name(); |
| | | mapper.setColumnType(field.type()); |
| | | mapper.setColumnName(fieldName); |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(fieldName); |
| | | logger.finest(fieldName); |
| | | String methodName = method.getName(); |
| | | if(methodName.startsWith(GETTER_NAME)) { |
| | | String fieldMethod = methodName.substring(3); |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(fieldMethod); |
| | | logger.finest(fieldMethod); |
| | | Class<?> returnType = method.getReturnType(); |
| | | try { |
| | | mapper.setSetter(c.getMethod(SETTER_NAME + fieldMethod, returnType)); |
| | | } catch (Exception e) { |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, e.getLocalizedMessage(), e); |
| | | logger.log(Level.SEVERE, e.getLocalizedMessage(), e); |
| | | } |
| | | mapper.setGetter(method); |
| | | } |
| | |
| | | sql.append(tableName); |
| | | sql.append(" where "); |
| | | appendPrimaryKeyFields(sql); |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(sql.toString()); |
| | | logger.finest(sql.toString()); |
| | | PreparedStatement ps = c.prepareStatement(sql.toString()); |
| | | prepareFields(0, primaryKeyColNames, ps, record); |
| | | return ps; |
| | |
| | | sql.append(" values (");//?, ?)"); |
| | | sql.append(valueList); |
| | | sql.append(")"); |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(sql.toString()); |
| | | logger.finest(sql.toString()); |
| | | PreparedStatement ps = c.prepareStatement(sql.toString(), autoGeneratedKeys); |
| | | prepareFields(0, ps, record); |
| | | return ps; |
| | |
| | | sql.append(fieldList); |
| | | sql.append(" where "); |
| | | appendPrimaryKeyFields(sql); |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(sql.toString()); |
| | | logger.finest(sql.toString()); |
| | | PreparedStatement ps = c.prepareStatement(sql.toString()); |
| | | prepareFields(0, ps, record); |
| | | prepareFields(columns.size(), primaryKeyColNames, ps, record); |
| | |
| | | * @throws Exception |
| | | */ |
| | | public Object toObject(ResultSet resultSet, boolean includeBlobs) throws Exception { |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(recordClass.getName()); |
| | | logger.finest(recordClass.getName()); |
| | | Object o = recordClass.newInstance(); |
| | | Enumeration<String> fieldNames = columns.keys(); |
| | | while(fieldNames.hasMoreElements()) { |
| | | String columnName = fieldNames.nextElement(); |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(columnName); |
| | | logger.finest(columnName); |
| | | Field mapper = columns.get(columnName); |
| | | Method setter = mapper.getSetter(); |
| | | if(setter != null) { |
| | |
| | | } |
| | | } else { |
| | | data = resultSet.getObject(columnName); |
| | | Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).finest(data.toString()); |
| | | logger.finest(data.toString()); |
| | | setter.invoke(o, data); |
| | | } |
| | | } |
| | |
| | | ps.setBinaryStream(i+offset, new ByteArrayInputStream(content.getBytes()), content.length()); |
| | | } else { |
| | | ps.setObject(i+offset, o); |
| | | int nr = i + offset; |
| | | logger.finest(nr + " " + o.toString()); |
| | | } |
| | | i++; |
| | | } |