Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.db / org.gvsig.fmap.dal.db.jdbc / src / main / java / org / gvsig / fmap / dal / store / jdbc2 / spi / operations / CreateTableOperation.java @ 43114

History | View | Annotate | Download (3.98 KB)

1
package org.gvsig.fmap.dal.store.jdbc2.spi.operations;
2

    
3
import java.sql.Connection;
4
import java.sql.SQLException;
5
import java.sql.Statement;
6
import java.util.List;
7
import org.apache.commons.lang3.tuple.Pair;
8
import org.gvsig.fmap.dal.exception.DataException;
9
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
10
import org.gvsig.fmap.dal.feature.FeatureType;
11
import org.gvsig.fmap.dal.SQLBuilder;
12
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
13
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
14
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException;
15
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
16
import org.gvsig.fmap.geom.DataTypes;
17

    
18
public class CreateTableOperation extends AbstractConnectionOperation {
19

    
20
    private final String schemaName;
21
    private final String tableName;
22
    private final FeatureType type;
23
    private final List<Pair<String, SQLBuilder.Privilege>> userAndPrivileges;
24
    private final List<String> additionalSQLs;
25
    private final String dbName;
26

    
27
    public CreateTableOperation(
28
            JDBCHelper helper
29
        ) {
30
        this(helper, null, null, null, null, null, null);
31
    }
32
    
33
    public CreateTableOperation(
34
            JDBCHelper helper,
35
            String dbName,
36
            String schemaName,
37
            String tableName,
38
            FeatureType type,
39
            List<Pair<String, SQLBuilder.Privilege>> userAndPrivileges,
40
            List<String> additionalSQLs
41
        ) {
42
        super(helper);
43
        this.dbName = dbName;
44
        this.schemaName = schemaName;
45
        this.tableName = tableName;
46
        this.type = type;
47
        this.userAndPrivileges = userAndPrivileges;
48
        this.additionalSQLs = additionalSQLs;
49
    }
50

    
51
    @Override
52
    public final Object perform(Connection conn) throws DataException {
53
        return this.performCreateTable(conn, 
54
                dbName, schemaName, tableName,
55
                type, userAndPrivileges, additionalSQLs);
56
    }
57

    
58
    public boolean performCreateTable(Connection conn,
59
            String dbName, 
60
            String schemaName,
61
            String tableName,
62
            FeatureType type,
63
            List<Pair<String, SQLBuilder.Privilege>> rolesAndPrivileges,
64
            List<String> additionalSQLs) throws DataException {
65

    
66
        JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
67
        sqlbuilder.create_table().table().database(dbName).schema(schemaName).name(tableName);
68
        for (FeatureAttributeDescriptor attr : type) {
69
            if( attr.getType()==DataTypes.GEOMETRY ) {
70
                sqlbuilder.create_table().add_geometry_column(
71
                        attr.getName(),
72
                        attr.getGeomType().getType(),
73
                        attr.getGeomType().getSubType(),
74
                        attr.getSRS(),
75
                        attr.allowNull()
76
                );
77
            } else {
78
                sqlbuilder.create_table().add_column(
79
                        attr.getName(),
80
                        attr.getType(),
81
                        attr.getSize(),
82
                        attr.getPrecision(),
83
                        attr.isPrimaryKey(),
84
                        attr.allowNull(),
85
                        attr.isAutomatic(),
86
                        attr.getDefaultValue()
87
                );
88
            }
89
        }
90
        for (Pair<String, SQLBuilder.Privilege> roleAndPrivilege : rolesAndPrivileges) {
91
            sqlbuilder.grant().role(roleAndPrivilege.getLeft()).privilege(roleAndPrivilege.getRight());
92
        }
93

    
94
        List<String> sqls;
95
        sqls = sqlbuilder.create_table().toStrings();
96
        sqls.addAll(sqlbuilder.grant().toStrings());
97
        sqls.addAll(additionalSQLs);
98

    
99
        Statement st = null;
100
        try {
101
            st = conn.createStatement();
102
            for (String sql : sqls) {
103
                
104
                JDBCUtils.execute(st, sql);
105
            }
106
        } catch (SQLException ex) {
107
            throw new JDBCSQLException(ex);
108
        } finally {
109
            JDBCUtils.closeQuietly(st);
110
        }
111
        return true;
112
    }
113
}