OpenConcerto

Dépôt officiel du code source de l'ERP OpenConcerto
sonarqube

svn://code.openconcerto.org/openconcerto

Rev

Rev 174 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 174 Rev 177
Line 11... Line 11...
11
 * When distributing the software, include this License Header Notice in each file.
11
 * When distributing the software, include this License Header Notice in each file.
12
 */
12
 */
13
 
13
 
14
 package org.openconcerto.sql.model;
14
 package org.openconcerto.sql.model;
15
 
15
 
-
 
16
import org.openconcerto.sql.users.User;
-
 
17
 
16
import java.io.IOException;
18
import java.io.IOException;
17
import java.io.StringReader;
19
import java.io.StringReader;
18
import java.sql.Connection;
20
import java.sql.Connection;
19
import java.sql.SQLException;
21
import java.sql.SQLException;
-
 
22
import java.sql.Timestamp;
20
import java.util.ArrayList;
23
import java.util.ArrayList;
-
 
24
import java.util.Collections;
21
import java.util.HashMap;
25
import java.util.HashMap;
22
import java.util.List;
26
import java.util.List;
23
import java.util.Map;
27
import java.util.Map;
24
import java.util.Map.Entry;
28
import java.util.Map.Entry;
25
 
29
 
Line 30... Line 34...
30
public class SQLInsert {
34
public class SQLInsert {
31
    private List<SQLField> fields = new ArrayList<>();
35
    private List<SQLField> fields = new ArrayList<>();
32
    private List<Object> values = new ArrayList<>();
36
    private List<Object> values = new ArrayList<>();
33
    private SQLTable table;
37
    private SQLTable table;
34
 
38
 
-
 
39
    public void importValuesFrom(SQLRowAccessor row) {
-
 
40
        SQLField pk = row.getTable().getKey();
-
 
41
        for (String field : row.getFields()) {
-
 
42
            final SQLField sqlField = row.getTable().getField(field);
-
 
43
            if (!pk.equals(sqlField)) {
-
 
44
                if (sqlField.isForeignKey()) {
-
 
45
                    add(sqlField, row.getForeignIDNumber(field));
-
 
46
                } else {
-
 
47
                    add(sqlField, row.getObject(field));
-
 
48
                }
-
 
49
            }
-
 
50
        }
-
 
51
    }
-
 
52
 
-
 
53
    public int getFieldsSize() {
-
 
54
        return this.fields.size();
-
 
55
    }
-
 
56
 
-
 
57
    public List<SQLField> getFields() {
-
 
58
        return Collections.unmodifiableList(this.fields);
-
 
59
    }
-
 
60
 
35
    public void add(SQLField field, Object value) {
61
    public void add(SQLField field, Object value) {
36
        if (this.table == null) {
62
        if (this.table == null) {
37
            this.table = field.getTable();
63
            this.table = field.getTable();
38
        } else {
64
        } else {
39
            if (!this.table.equals(field.getTable())) {
65
            if (!this.table.equals(field.getTable())) {
40
                throw new IllegalArgumentException(field + " is not in table " + this.table.toString());
66
                throw new IllegalArgumentException(field + " is not in table " + this.table.toString());
41
            }
67
            }
42
        }
68
        }
-
 
69
        int index = this.fields.indexOf(field);
-
 
70
        if (index >= 0) {
-
 
71
            throw new IllegalArgumentException(field + " field already in list");
-
 
72
        }
43
        this.fields.add(field);
73
        this.fields.add(field);
44
        this.values.add(value);
74
        this.values.add(value);
45
    }
75
    }
46
 
76
 
47
    public void set(SQLField field, Object value) {
77
    public void set(SQLField field, Object value) {
Line 57... Line 87...
57
            throw new IllegalArgumentException(field + " not in field list");
87
            throw new IllegalArgumentException(field + " not in field list");
58
        }
88
        }
59
        this.values.set(index, value);
89
        this.values.set(index, value);
60
    }
90
    }
61
 
91
 
-
 
92
    public void addCreationTrackedField(User u, SQLTable table) {
-
 
93
        Timestamp now = new Timestamp(System.currentTimeMillis());
-
 
94
        final SQLField creationDateField = table.getCreationDateField();
-
 
95
        final SQLField creationUserField = table.getCreationUserField();
-
 
96
        if (creationDateField != null && creationUserField != null) {
-
 
97
            add(creationDateField, now);
-
 
98
            add(creationUserField, u.getId());
-
 
99
        }
-
 
100
 
-
 
101
        final SQLField modifDateField = table.getModifDateField();
-
 
102
        final SQLField modifUserField = table.getModifUserField();
-
 
103
        if (modifDateField != null && modifUserField != null) {
-
 
104
            add(modifDateField, now);
-
 
105
            add(modifUserField, u.getId());
-
 
106
        }
-
 
107
    }
-
 
108
 
62
    public boolean contains(SQLField field) {
109
    public boolean contains(SQLField field) {
63
        return this.fields.indexOf(field) >= 0;
110
        return this.fields.indexOf(field) >= 0;
64
    }
111
    }
65
 
112
 
66
    public Object getValue(SQLField field) {
113
    public Object getValue(SQLField field) {
Line 93... Line 140...
93
        for (int i = 0; i < stop; i++) {
140
        for (int i = 0; i < stop; i++) {
94
            Object value = this.values.get(i);
141
            Object value = this.values.get(i);
95
            final SQLField field = this.fields.get(i);
142
            final SQLField field = this.fields.get(i);
96
            final Class<?> javaType = field.getType().getJavaType();
143
            final Class<?> javaType = field.getType().getJavaType();
97
            Object str = value;
144
            Object str = value;
-
 
145
 
-
 
146
            if (value != null) {
98
            if (value != null && !javaType.isInstance(value)) {
147
                if (!javaType.isInstance(value)) {
99
                str = SQLRowValues.convert(value.getClass(), value, javaType);
148
                    str = SQLRowValues.convert(value.getClass(), value, javaType);
100
            }
149
                }
101
            builder.append(field.getType().toString(str));
150
                builder.append(field.getType().toString(str));
-
 
151
            } else {
-
 
152
                builder.append("null");
102
 
153
            }
103
            if (i < stop - 1) {
154
            if (i < stop - 1) {
104
                builder.append(',');
155
                builder.append(',');
105
            }
156
            }
106
        }
157
        }
107
 
158