Statistics
| Revision:

root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / edition / writers / gdbms / GdbmsWriter.java @ 10627

History | View | Annotate | Download (3.32 KB)

1
package com.iver.cit.gvsig.fmap.edition.writers.gdbms;
2

    
3
import java.sql.Types;
4

    
5
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
6
import com.hardcode.gdbms.driver.exceptions.WriteDriverException;
7
import com.hardcode.gdbms.engine.data.edition.DataWare;
8
import com.hardcode.gdbms.engine.values.Value;
9
import com.iver.cit.gvsig.exceptions.visitors.ProcessWriterVisitorException;
10
import com.iver.cit.gvsig.exceptions.visitors.StartWriterVisitorException;
11
import com.iver.cit.gvsig.exceptions.visitors.StopWriterVisitorException;
12
import com.iver.cit.gvsig.fmap.core.IRow;
13
import com.iver.cit.gvsig.fmap.drivers.ITableDefinition;
14
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
15
import com.iver.cit.gvsig.fmap.edition.writers.AbstractWriter;
16

    
17
public class GdbmsWriter extends AbstractWriter {
18
        DataWare dataWare;
19
        Value[] record;
20
        int numRecord;
21

    
22
        public GdbmsWriter(){
23
        }
24
        public void initialize(ITableDefinition tableDef){
25
        }
26
        public void setDataWare(DataWare dataWare)
27
        {
28
                this.dataWare = dataWare;
29
        }
30
        public void preProcess() throws StartWriterVisitorException {
31
                try {
32
                        dataWare.beginTrans();
33
                        numRecord = 0;
34
                } catch (ReadDriverException e) {
35
                        throw new StartWriterVisitorException(getName(),e);
36
                }
37
        }
38

    
39
        public void process(IRowEdited editedRow) throws ProcessWriterVisitorException {
40
                IRow row = editedRow.getLinkedRow();
41

    
42
                try {
43
                        /* System.out.println("Intento escribir el registro " +
44
                                        numRows + " de la capa " + lyrVect.getName()); */
45

    
46

    
47
                        switch (editedRow.getStatus())
48
                        {
49
                    case IRowEdited.STATUS_ADDED:
50
                            record=row.getAttributes();
51
                                    //record[i] = row.getAttribute(i);
52
                            dataWare.insertFilledRow(record);
53
                            break;
54
                    case IRowEdited.STATUS_MODIFIED:
55
                            record=row.getAttributes();
56
                            for (int i=0; i < record.length; i++)
57
                                    dataWare.setFieldValue(numRecord, i, record[i]);
58
                            break;
59
                    case IRowEdited.STATUS_ORIGINAL:
60
                            break;
61
                    case IRowEdited.STATUS_DELETED:
62
                        dataWare.deleteRow(numRecord);
63
                            break;
64
                        }
65
                        numRecord++;
66

    
67
                } catch (WriteDriverException e) {
68
                        throw new ProcessWriterVisitorException(getName(),e);
69
                } catch (ReadDriverException e) {
70
                        throw new ProcessWriterVisitorException(getName(),e);
71
                }
72

    
73
        }
74

    
75
        public void postProcess() throws StopWriterVisitorException {
76
                boolean exception=false;
77
                try {
78
                        dataWare.commitTrans();
79

    
80
                } catch (WriteDriverException e) {
81
                        exception=true;
82
                } catch (ReadDriverException e) {
83
                        exception=true;
84
                }
85
                if (exception) {
86
                        try {
87
                                dataWare.rollBackTrans();
88
                        } catch (WriteDriverException e1) {
89
                        } catch (ReadDriverException e) {
90
                        }
91
                        throw new StopWriterVisitorException(getName(),null);
92
                }
93
        }
94

    
95

    
96
        public String getName() {
97
                return "GDBMS Writer";
98
        }
99

    
100
        public boolean canWriteGeometry(int gvSIGgeometryType) {
101
                return false;
102
        }
103

    
104
        public boolean canWriteAttribute(int sqlType) {
105
                switch (sqlType)
106
                {
107
                case Types.DOUBLE:
108
                case Types.FLOAT:
109
                case Types.INTEGER:
110
                case Types.BIGINT:
111
                        return true;
112
                case Types.DATE:
113
                        return true;
114
                case Types.BIT:
115
                case Types.BOOLEAN:
116
                        return true;
117
                case Types.VARCHAR:
118
                case Types.CHAR:
119
                case Types.LONGVARCHAR:
120
                        return true; // TODO: Revisar esto, porque no creo que admita campos muy grandes
121

    
122
                }
123

    
124
                return false;
125
        }
126
        public boolean canAlterTable() {
127
                // TODO Auto-generated method stub
128
                return false;
129
        }
130
        public boolean canSaveEdits() {
131
                return false;
132
        }
133

    
134

    
135
}