Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extOracleSpatial / src / org / gvsig / oraclespatial / driver / OracleFieldManager.java @ 29455

History | View | Annotate | Download (2.71 KB)

1
package org.gvsig.oraclespatial.driver;
2

    
3
import java.sql.Connection;
4
import java.sql.SQLException;
5
import java.sql.Statement;
6
import java.util.ArrayList;
7

    
8
import org.slf4j.Logger;
9
import org.slf4j.LoggerFactory;
10

    
11

    
12

    
13
public class OracleFieldManager extends AbstractFieldManager {
14
        
15
        private static Logger logger = LoggerFactory.getLogger(OracleFieldManager.class.getName());
16
        private Connection conn;
17
        private String tableName;
18
        
19
        private String[] forbiddenNames;
20

    
21
        public OracleFieldManager(Connection c, String tn, String[] forbidden) {
22
                conn = c;
23
                tableName = tn;
24
                forbiddenNames = forbidden;
25
        }
26
        
27
        private boolean isOneOf(String str, String[] arr) {
28
                
29
                for (int i=0; i<arr.length; i++) {
30
                        if (str.compareToIgnoreCase(arr[i]) == 0) return true;
31
                }
32
                return false;
33
                
34
                
35
        }
36
        public void setOriginalFields(FieldDescription[] flds) {
37
                
38
                ArrayList aux = new ArrayList();
39
                for (int i=0; i<flds.length; i++) {
40
                        if (!isOneOf(flds[i].getFieldName(), forbiddenNames)) {
41
                                aux.add(flds[i]);
42
                        }
43
                }
44
                originalFields = (FieldDescription[]) aux.toArray(new FieldDescription[0]);
45
        }        
46

    
47
        public boolean alterTable() throws WriteDriverException{
48
        
49
                String sql = "";
50
                Statement st;
51
                try {
52
                        st = conn.createStatement();
53

    
54
                        for (int i = 0; i < fieldCommands.size(); i++) {
55
                                FieldCommand fc = (FieldCommand) fieldCommands.get(i);
56
                                if (fc instanceof AddFieldCommand) {
57
                                        AddFieldCommand addFC = (AddFieldCommand) fc;
58

    
59
                                        // ALTER TABLE STAFF_OPTIONS ADD SO_INSURANCE_PROVIDER Varchar2(35);
60
                                        sql = "ALTER TABLE "
61
                                                        + tableName
62
                                                        + " ADD "
63
                                                        + addFC.getFieldDesc().getFieldName()
64
                                                        + " "
65
                                                        + OracleSpatialDriver.fieldTypeToSqlStringType(addFC.getFieldDesc())
66
                                                        + " "
67
                                                        + "DEFAULT " + addFC.getFieldDesc().getDefaultValue().getStringValue(ValueWriter.internalValueWriter)
68
                                                        + "";
69
                                        st.execute(sql);
70
                                }
71
                                if (fc instanceof RemoveFieldCommand) {
72
                                        RemoveFieldCommand deleteFC = (RemoveFieldCommand) fc;
73
                                        sql = "ALTER TABLE " + tableName + " DROP "
74
                                                        + deleteFC.getFieldName();
75
                                        st.execute(sql);
76
                                }
77
                                if (fc instanceof RenameFieldCommand) {
78
                                        RenameFieldCommand renFC = (RenameFieldCommand) fc;
79
                                        sql = "ALTER TABLE " + tableName + " RENAME COLUMN "
80
                                        + renFC.getAntName() + " TO " + renFC.getNewName();
81
                                        st.execute(sql);
82
                                }
83
                                logger.debug("Alter Table: " + sql);
84
                        }
85
                        conn.commit();
86
                } catch (SQLException e) {
87
                        logger.error("Alter Table: " + sql);
88
                        e.printStackTrace();
89
                        try {
90
                                conn.rollback();
91
                                conn.setAutoCommit(false);
92
                        } catch (SQLException e1) {
93
                                e1.printStackTrace();
94
                        }
95
                        throw new WriteDriverException("JDBC",e);
96
                }
97

    
98
                return false;
99
        }        
100

    
101
}