OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

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

Rev 156 Rev 174
Line 12... Line 12...
12
 */
12
 */
13
 
13
 
14
 package org.openconcerto.sql.ui.light;
14
 package org.openconcerto.sql.ui.light;
15
 
15
 
16
import org.openconcerto.sql.Configuration;
16
import org.openconcerto.sql.Configuration;
-
 
17
import org.openconcerto.sql.model.FieldPath;
-
 
18
import org.openconcerto.sql.model.FieldRef;
-
 
19
import org.openconcerto.sql.model.SQLFunctionField;
-
 
20
import org.openconcerto.sql.model.SQLFunctionField.SQLFunction;
17
import org.openconcerto.sql.model.SQLRowAccessor;
21
import org.openconcerto.sql.model.SQLRowAccessor;
-
 
22
import org.openconcerto.sql.model.SQLRowValues;
18
import org.openconcerto.sql.model.SQLSelect;
23
import org.openconcerto.sql.model.SQLSelect;
-
 
24
import org.openconcerto.sql.model.Where;
19
import org.openconcerto.sql.view.list.ITableModel;
25
import org.openconcerto.sql.view.list.ITableModel;
20
import org.openconcerto.sql.view.list.ListSQLLine;
26
import org.openconcerto.sql.view.list.ListSQLLine;
21
import org.openconcerto.sql.view.list.SQLTableModelColumn;
27
import org.openconcerto.sql.view.list.SQLTableModelColumn;
22
import org.openconcerto.sql.view.list.SQLTableModelSourceOnline;
28
import org.openconcerto.sql.view.list.SQLTableModelSourceOnline;
23
import org.openconcerto.ui.SwingThreadUtils;
29
import org.openconcerto.ui.SwingThreadUtils;
24
import org.openconcerto.ui.light.ColumnSpec;
30
import org.openconcerto.ui.light.ColumnSpec;
25
import org.openconcerto.ui.light.ColumnsSpec;
31
import org.openconcerto.ui.light.ColumnsSpec;
26
import org.openconcerto.ui.light.LightUIElement;
32
import org.openconcerto.ui.light.LightUIElement;
27
import org.openconcerto.ui.light.LightUITable;
33
import org.openconcerto.ui.light.LightUITable;
28
import org.openconcerto.ui.light.Row;
34
import org.openconcerto.ui.light.Row;
-
 
35
import org.openconcerto.ui.light.TableSearchParameter;
-
 
36
import org.openconcerto.ui.light.TableSearchParameterType;
-
 
37
import org.openconcerto.ui.light.UserSearch;
29
import org.openconcerto.ui.light.SearchSpec;
38
import org.openconcerto.ui.light.UserSearchItem;
30
import org.openconcerto.utils.NumberUtils;
39
import org.openconcerto.utils.NumberUtils;
31
import org.openconcerto.utils.cc.ITransformer;
40
import org.openconcerto.utils.cc.ITransformer;
32
 
41
 
33
import java.util.ArrayList;
42
import java.util.ArrayList;
-
 
43
import java.util.Collections;
-
 
44
import java.util.HashMap;
-
 
45
import java.util.HashSet;
34
import java.util.List;
46
import java.util.List;
-
 
47
import java.util.Locale;
-
 
48
import java.util.Map;
-
 
49
import java.util.Set;
35
import java.util.concurrent.Callable;
50
import java.util.concurrent.Callable;
36
 
51
 
37
import javax.swing.SwingUtilities;
52
import javax.swing.SwingUtilities;
38
import javax.swing.event.TableModelListener;
53
import javax.swing.event.TableModelListener;
39
 
54
 
Line 53... Line 68...
53
 
68
 
54
    private transient ITableModel model;
69
    private transient ITableModel model;
55
 
70
 
56
    private transient ITransformer<SQLSelect, SQLSelect> orginTransformer;
71
    private transient ITransformer<SQLSelect, SQLSelect> orginTransformer;
57
 
72
 
58
    private transient List<TableModelListener> tableModelListeners = new ArrayList<TableModelListener>();
73
    private transient List<TableModelListener> tableModelListeners = new ArrayList<>();
-
 
74
 
-
 
75
    private Map<TableSearchParameter, TableSearchMatcher> searchMap = new HashMap<>();
59
 
76
 
60
    public LightRowValuesTable() {
77
    public LightRowValuesTable() {
61
        // Serialization
78
        // Serialization
62
    }
79
    }
63
 
80
 
Line 70... Line 87...
70
        this.getTableSpec().setColumns(columnsSpec);
87
        this.getTableSpec().setColumns(columnsSpec);
71
 
88
 
72
        if (model.getReq() instanceof SQLTableModelSourceOnline) {
89
        if (model.getReq() instanceof SQLTableModelSourceOnline) {
73
            final SQLTableModelSourceOnline source = (SQLTableModelSourceOnline) model.getReq();
90
            final SQLTableModelSourceOnline source = (SQLTableModelSourceOnline) model.getReq();
74
            this.orginTransformer = source.getReq().getSelectTransf();
91
            this.orginTransformer = source.getReq().getSelectTransf();
-
 
92
 
-
 
93
            List<SQLTableModelColumn> columns = model.getReq().getColumns();
-
 
94
            // all
-
 
95
            // TODO : traduire
-
 
96
            TableSearchParameter tableSearchParameterAll = new TableSearchParameter("all", "Tous");
-
 
97
 
-
 
98
            TableSearchMatcher m = new TableSearchMatcher() {
-
 
99
 
-
 
100
                @Override
-
 
101
                public boolean useMatch() {
-
 
102
                    return false;
-
 
103
                }
-
 
104
 
-
 
105
                @Override
-
 
106
                public boolean match(SQLRowValues r, TableSearchParameterType type, String txt) {
-
 
107
                    return true;
-
 
108
                }
-
 
109
 
-
 
110
                @Override
-
 
111
                public Where getWhere(SQLSelect sel, TableSearchParameterType type, String txt) {
-
 
112
                    final Set<FieldPath> fields = new HashSet<>();
-
 
113
                    for (SQLTableModelColumn col : columns) {
-
 
114
                        fields.addAll(col.getPaths());
-
 
115
                    }
-
 
116
                    final List<Where> wFields = new ArrayList<>(fields.size());
-
 
117
                    for (final FieldPath fpath : fields) {
-
 
118
                        if (fpath.getField().getType().getJavaType().equals(String.class)) {
-
 
119
                            final FieldRef fieldRef = sel.followFieldPath(fpath);
-
 
120
                            if (type.getType().equals(UserSearchItem.TYPE_CONTAINS)) {
-
 
121
                                final Where w = new Where(new SQLFunctionField(SQLFunction.LOWER, fieldRef), "LIKE", "%" + txt.toLowerCase() + "%");
-
 
122
                                wFields.add(w);
-
 
123
                            }
-
 
124
                            if (type.getType().equals(UserSearchItem.TYPE_STARTS_WITH)) {
-
 
125
                                final Where w = new Where(new SQLFunctionField(SQLFunction.LOWER, fieldRef), "LIKE", txt.toLowerCase() + "%");
-
 
126
                                wFields.add(w);
-
 
127
                            }
-
 
128
                            if (type.getType().equals(UserSearchItem.TYPE_IS)) {
-
 
129
                                final Where w = new Where(new SQLFunctionField(SQLFunction.LOWER, fieldRef), "LIKE", txt.toLowerCase());
-
 
130
                                wFields.add(w);
-
 
131
                            }
-
 
132
                        }
-
 
133
                    }
-
 
134
                    return Where.or(wFields);
-
 
135
                }
-
 
136
 
-
 
137
                @Override
-
 
138
                public List<FieldPath> getAdditionnalFieldsToFetch() {
-
 
139
                    return Collections.emptyList();
-
 
140
                }
-
 
141
            };
-
 
142
            tableSearchParameterAll.add(TableSearchParameterType.getContainsStringInstance(Locale.FRENCH));
-
 
143
            tableSearchParameterAll.add(TableSearchParameterType.getIsStringInstance(Locale.FRENCH));
-
 
144
 
-
 
145
            this.addSearchParameter(tableSearchParameterAll, m);
-
 
146
 
-
 
147
            //
-
 
148
            for (int i = 0; i < columns.size(); i++) {
-
 
149
                SQLTableModelColumn col = columns.get(i);
-
 
150
                TableSearchParameter tableSearchParameter = new TableSearchParameter("col" + i, col.getName());
-
 
151
                // FIXME : locale à recuperer depuis le user
-
 
152
                // TODO : mettre d'autres TableSearchParameterType en fonction du type de la colonne
-
 
153
                tableSearchParameter.add(TableSearchParameterType.getContainsStringInstance(Locale.FRENCH));
-
 
154
                tableSearchParameter.add(TableSearchParameterType.getIsStringInstance(Locale.FRENCH));
-
 
155
 
-
 
156
                TableSearchMatcher tableSearchMatcher = new TableSearchColumnMatcher(col);
-
 
157
                this.addSearchParameter(tableSearchParameter, tableSearchMatcher);
-
 
158
            }
-
 
159
 
75
        } else {
160
        } else {
76
            this.orginTransformer = null;
161
            this.orginTransformer = null;
77
        }
162
        }
78
 
163
 
79
        this.setDynamicLoad(true);
164
        this.setDynamicLoad(true);
Line 106... Line 191...
106
        this.offset = offset;
191
        this.offset = offset;
107
    }
192
    }
108
 
193
 
109
    public final void addTableModelListener(final TableModelListener tableModelListener) {
194
    public final void addTableModelListener(final TableModelListener tableModelListener) {
110
        this.tableModelListeners.add(tableModelListener);
195
        this.tableModelListeners.add(tableModelListener);
-
 
196
        SwingUtilities.invokeLater(new Runnable() {
-
 
197
            @Override
-
 
198
            public void run() {
111
        this.model.addTableModelListener(tableModelListener);
199
                LightRowValuesTable.this.model.addTableModelListener(tableModelListener);
-
 
200
            }
-
 
201
        });
-
 
202
 
112
    }
203
    }
113
 
204
 
114
    public final void removeTableModelListener(final TableModelListener tableModelListener) {
205
    public final void removeTableModelListener(final TableModelListener tableModelListener) {
115
        this.tableModelListeners.remove(tableModelListener);
206
        this.tableModelListeners.remove(tableModelListener);
116
        this.model.removeTableModelListener(tableModelListener);
207
        this.model.removeTableModelListener(tableModelListener);
Line 268... Line 359...
268
 
359
 
269
        return cSpec;
360
        return cSpec;
270
    }
361
    }
271
 
362
 
272
    // TODO: merge with OpenConcerto List search system
363
    // TODO: merge with OpenConcerto List search system
273
    public abstract void doSearch(final Configuration configuration, final SearchSpec searchSpec, final int offset);
364
    public abstract void doSearch(final Configuration configuration, final UserSearch searchSpec, final int offset);
-
 
365
 
-
 
366
    public void addSearchParameter(TableSearchParameter tableSearchParameter, TableSearchMatcher tableSearchMatcher) {
-
 
367
        this.searchMap.put(tableSearchParameter, tableSearchMatcher);
-
 
368
        this.getTableSpec().addSearchParameter(tableSearchParameter);
-
 
369
    }
-
 
370
 
-
 
371
    protected TableSearchMatcher getSearchMatcher(String colId, String searchType) {
-
 
372
        for (TableSearchParameter p : this.searchMap.keySet()) {
-
 
373
            if (p.getId().equals(colId)) {
-
 
374
                for (TableSearchParameterType t : p.getTypes()) {
-
 
375
                    if (t.getType().equals(searchType)) {
-
 
376
                        return this.searchMap.get(p);
-
 
377
                    }
-
 
378
                }
-
 
379
            }
-
 
380
        }
-
 
381
        return null;
-
 
382
    }
274
 
383
 
275
    @Override
384
    @Override
276
    public Row getRowById(Number rowId) {
385
    public Row getRowById(Number rowId) {
277
        for (int i = 0; i < this.model.getRowCount(); i++) {
386
        for (int i = 0; i < this.model.getRowCount(); i++) {
278
            if (NumberUtils.areNumericallyEqual(this.model.getRow(i).getID(), rowId)) {
387
            if (NumberUtils.areNumericallyEqual(this.model.getRow(i).getID(), rowId)) {
Line 312... Line 421...
312
        // TODO: clean swing
421
        // TODO: clean swing
313
        try {
422
        try {
314
            SwingUtilities.invokeAndWait(new Runnable() {
423
            SwingUtilities.invokeAndWait(new Runnable() {
315
                @Override
424
                @Override
316
                public void run() {
425
                public void run() {
-
 
426
 
317
                    final List<TableModelListener> tableModelListeners = LightRowValuesTable.this.tableModelListeners;
427
                    final List<TableModelListener> listeners = LightRowValuesTable.this.tableModelListeners;
318
                    for (int i = tableModelListeners.size() - 1; i > -1; i--) {
428
                    for (int i = listeners.size() - 1; i > -1; i--) {
319
                        LightRowValuesTable.this.removeTableModelListener(tableModelListeners.get(i));
429
                        LightRowValuesTable.this.removeTableModelListener(listeners.get(i));
320
                    }
430
                    }
321
                }
431
                }
322
            });
432
            });
323
        } catch (final Exception ex) {
433
        } catch (final Exception ex) {
324
            throw new IllegalStateException(ex);
434
            throw new IllegalStateException(ex);
325
        }
435
        }
326
 
436
 
327
        this.clearRows();
437
        this.clearRows();
-
 
438
 
328
    }
439
    }
329
}
440
}