273a19d0fa50978f71e030fa931c38aabca2c832
[cdm-vaadin.git] / src / main / java / eu / etaxonomy / cdm / vaadin / container / CdmSQLContainer.java
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.logging.log4j.LogManager;
8 import org.apache.logging.log4j.Logger;
9
10 import com.vaadin.data.Property;
11 import com.vaadin.data.util.sqlcontainer.SQLContainer;
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 long serialVersionUID = 2828992538007070061L;
21
22 private final static Logger logger = LogManager.getLogger();
23
24 private 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.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 public UUID getUuid(Object itemId) {
46 return UUID.fromString((String)getProperty(itemId,CdmQueryFactory.UUID_ID).getValue());
47 }
48
49 public Property<?> getProperty(Object itemId, Object propertyId) {
50 if(checkPropertyIdCase) {
51 try {
52 return getItem(itemId).getItemProperty(SQLUtils.correctCase(propertyId.toString(), databaseMetaData));
53 } catch (SQLException e) {
54 logger.warn("Error getting property", e);
55 return null;
56 }
57 } else {
58 return getItem(itemId).getItemProperty(propertyId);
59 }
60 }
61
62 }