1 package eu
.etaxonomy
.cdm
.vaadin
.container
;
3 import java
.sql
.DatabaseMetaData
;
4 import java
.sql
.SQLException
;
7 import org
.apache
.logging
.log4j
.LogManager
;
8 import org
.apache
.logging
.log4j
.Logger
;
10 import com
.vaadin
.data
.Property
;
11 import com
.vaadin
.data
.util
.sqlcontainer
.SQLContainer
;
12 import com
.vaadin
.data
.util
.sqlcontainer
.query
.QueryDelegate
;
14 import eu
.etaxonomy
.cdm
.vaadin
.util
.CdmQueryFactory
;
15 import eu
.etaxonomy
.cdm
.vaadin
.util
.CdmSpringContextHelper
;
16 import eu
.etaxonomy
.cdm
.vaadin
.util
.SQLUtils
;
18 public class CdmSQLContainer
extends SQLContainer
{
20 private static final long serialVersionUID
= 2828992538007070061L;
22 private final static Logger logger
= LogManager
.getLogger();
24 private DatabaseMetaData databaseMetaData
;
26 public static final int DEFAULT_LIMIT
= 5000;
27 boolean checkPropertyIdCase
= false;
29 public CdmSQLContainer(QueryDelegate delegate
) throws SQLException
{
31 databaseMetaData
= CdmSpringContextHelper
.getDatabaseMetaData();
32 setPageLength(DEFAULT_LIMIT
);
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");
40 CdmSQLContainer container
= new CdmSQLContainer(CdmQueryFactory
.generateTableQuery(tableName
));
41 container
.checkPropertyIdCase
= true;
45 public UUID
getUuid(Object itemId
) {
46 return UUID
.fromString((String
)getProperty(itemId
,CdmQueryFactory
.UUID_ID
).getValue());
49 public Property
<?
> getProperty(Object itemId
, Object propertyId
) {
50 if(checkPropertyIdCase
) {
52 return getItem(itemId
).getItemProperty(SQLUtils
.correctCase(propertyId
.toString(), databaseMetaData
));
53 } catch (SQLException e
) {
54 logger
.warn("Error getting property", e
);
58 return getItem(itemId
).getItemProperty(propertyId
);