|  |  | 
 |  |  |  * 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++; | 
 |  |  |         } |