Project

General

Profile

Download (2.2 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.vaadin.container;
2

    
3
import java.sql.DatabaseMetaData;
4
import java.sql.SQLException;
5
import java.util.UUID;
6

    
7
import org.apache.log4j.Logger;
8

    
9
import com.vaadin.data.Property;
10
import com.vaadin.data.util.sqlcontainer.SQLContainer;
11
import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool;
12
import com.vaadin.data.util.sqlcontainer.query.QueryDelegate;
13

    
14
import eu.etaxonomy.cdm.vaadin.util.CdmQueryFactory;
15
import eu.etaxonomy.cdm.vaadin.util.CdmSpringContextHelper;
16
import eu.etaxonomy.cdm.vaadin.util.SQLUtils;
17

    
18
public class CdmSQLContainer extends SQLContainer {
19

    
20
    private static final Logger logger = Logger.getLogger(CdmSQLContainer.class);
21

    
22
    JDBCConnectionPool pool;
23

    
24
    DatabaseMetaData databaseMetaData;
25

    
26
    public static final int DEFAULT_LIMIT = 5000;
27
    boolean checkPropertyIdCase = false;
28

    
29
    public CdmSQLContainer(QueryDelegate delegate) throws SQLException {
30
        super(delegate);
31
        databaseMetaData = CdmSpringContextHelper.getCurrent().getDatabaseMetaData();
32
        setPageLength(DEFAULT_LIMIT);
33
    }
34

    
35
    public static CdmSQLContainer newInstance(String tableName) throws SQLException {
36
        // TODO : currently the sql generator is for h2, need to make this compatible for all flavours
37
        //TableQuery tq = new TableQuery(tableName, CdmSpringContextHelper.getCurrent().getConnectionPool(), new DefaultSQLGenerator());
38
        //tq.setVersionColumn("updated");
39

    
40
        CdmSQLContainer container = new CdmSQLContainer(CdmQueryFactory.generateTableQuery(tableName));
41
        container.checkPropertyIdCase = true;
42
        return container;
43
    }
44

    
45

    
46

    
47
    public UUID getUuid(Object itemId) {
48
        return UUID.fromString((String)getProperty(itemId,CdmQueryFactory.UUID_ID).getValue());
49
    }
50

    
51
    public Property<?> getProperty(Object itemId, Object propertyId) {
52
        if(checkPropertyIdCase) {
53
            try {
54
                return getItem(itemId).getItemProperty(SQLUtils.correctCase(propertyId.toString(), databaseMetaData));
55
            } catch (SQLException e) {
56
                logger.warn("Error getting property", e);
57
                return null;
58
            }
59
        } else {
60
            return getItem(itemId).getItemProperty(propertyId);
61
        }
62
    }
63

    
64
}
(1-1/4)