Ignore:
Timestamp:
Jan 2, 2011, 8:51:21 PM (13 years ago)
Author:
fmguler
Message:

Refs #3 - Ven.save() is transferred to the new package. Save use case is completed. Convert.toDB() converts camel case object names to database names with underscores. Unchecked VenException is thrown by Ven methods. Liquibase changelog (test-db-changelog.xml) is changed to include only a simple object to test save operation. It creates a sample database table and inserts a sample row. On rollback it removes sample data. Using liquibase, Sample.java builds database, tests save operation and rolls back.

QueryGenerator generates insert and update queries for save and generates sequence query to assign ids to new objects. Ven calls query generator and runs the query using spring jdbc template.

Old codebase updated to run at Java 1.4

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/fmgVen/src/com/fmguler/ven/Ven.java

    r25 r26  
    1818package com.fmguler.ven; 
    1919 
     20import java.util.HashMap; 
    2021import java.util.List; 
    2122import javax.sql.DataSource; 
     23import org.springframework.beans.BeanWrapper; 
     24import org.springframework.beans.BeanWrapperImpl; 
     25import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource; 
    2226import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; 
     27import org.springframework.jdbc.core.namedparam.SqlParameterSource; 
    2328 
    2429/** 
     
    4449    } 
    4550 
    46     public Object get(int no, Class objectClass) { 
     51    public Object get(int id, Class objectClass) { 
    4752        return null; 
    4853    } 
    4954 
     55    /** 
     56     * Save the object. If it has a "id" property it will be updated. 
     57     * It will be inserted otherwise. 
     58     * <p> 
     59     * The object will be saved to a table with the same name as the object, 
     60     * The fields of object will be mapped to the table fields. 
     61     *  
     62     * @param object the object to be saved 
     63     */ 
    5064    public void save(Object object) { 
     65        String query = null; 
     66 
     67        if (isObjectNew(object)) { 
     68            //if this is a new object assign a new id first 
     69            generateId(object); 
     70            query = generator.generateInsertQuery(object); 
     71        } else { 
     72            query = generator.generateUpdateQuery(object); 
     73        } 
     74 
     75        //execute the insert/update query 
     76        SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(object); 
     77        template.update(query, parameterSource); 
    5178    } 
    5279 
    53     public void delete(int no, Class objectClass) { 
     80    public void delete(int id, Class objectClass) { 
    5481    } 
    5582 
    56     //SETTERS------------------------------------------------------------------- 
     83    //-------------------------------------------------------------------------- 
     84    //PRIVATE METHODS 
     85    //return true if the object id is zero or null false otherwise 
     86    private boolean isObjectNew(Object object) throws VenException { 
     87        BeanWrapper beanWrapper = new BeanWrapperImpl(object); 
     88        Object objectId = beanWrapper.getPropertyValue("id");  
     89        if (objectId == null) return true; 
     90        if (!(objectId instanceof Integer)) throw new VenException(VenException.EC_GENERATOR_OBJECT_ID_TYPE_INVALID); 
     91        return ((Integer)objectId).intValue() == 0; 
     92    } 
     93 
     94    //set new object id 
     95    private void generateId(Object object) { 
     96        Integer newObjectId = new Integer(template.queryForInt(generator.generateSequenceQuery(object), new HashMap())); 
     97        BeanWrapper beanWrapper = new BeanWrapperImpl(object); 
     98        beanWrapper.setPropertyValue("id", newObjectId); 
     99    } 
     100 
     101    //-------------------------------------------------------------------------- 
     102    //SETTERS 
    57103    public void setDataSource(DataSource dataSource) { 
    58104        if (dataSource == null) throw new RuntimeException("fmgVen - DataSource cannot be null"); 
Note: See TracChangeset for help on using the changeset viewer.