OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 177 | Rev 182 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 177 Rev 180
Line 39... Line 39...
39
 
39
 
40
import javax.swing.JLabel;
40
import javax.swing.JLabel;
41
import javax.swing.JPanel;
41
import javax.swing.JPanel;
42
import javax.swing.SwingConstants;
42
import javax.swing.SwingConstants;
43
import javax.swing.event.EventListenerList;
43
import javax.swing.event.EventListenerList;
-
 
44
import javax.swing.event.ListSelectionEvent;
-
 
45
import javax.swing.event.ListSelectionListener;
44
import javax.swing.event.TableModelEvent;
46
import javax.swing.event.TableModelEvent;
45
import javax.swing.event.TableModelListener;
47
import javax.swing.event.TableModelListener;
46
import javax.swing.table.TableModel;
48
import javax.swing.table.TableModel;
47
 
49
 
48
public class IListTotalPanel extends JPanel {
50
public class IListTotalPanel extends JPanel {
Line 91... Line 93...
91
        }
93
        }
92
        return lFinal;
94
        return lFinal;
93
    }
95
    }
94
 
96
 
95
    public IListTotalPanel(IListe l, final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, String title) {
97
    public IListTotalPanel(IListe l, final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, String title) {
96
        this(l, listField, filters, null, title);
98
        this(l, listField, filters, null, title, false);
97
    }
99
    }
98
 
100
 
-
 
101
    public IListTotalPanel(IListe l, final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, final List<Tuple2<SQLField, ?>> filtersNot,
-
 
102
            String title) {
-
 
103
        this(l, listField, filters, filtersNot, title, false);
-
 
104
    }
-
 
105
 
-
 
106
    private final boolean onSelection;
-
 
107
 
99
    /**
108
    /**
100
     * 
109
     * 
101
     * @param l
110
     * @param l
102
     * @param listField Liste des fields à totaliser
111
     * @param listField Liste des fields à totaliser
103
     * @param filters filtre ex : Tuple((SQLField)NATEXIER,(Boolean)FALSE)
112
     * @param filters filtre ex : Tuple((SQLField)NATEXIER,(Boolean)FALSE)
104
     */
113
     */
105
    public IListTotalPanel(IListe l, final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, final List<Tuple2<SQLField, ?>> filtersNot,
114
    public IListTotalPanel(IListe l, final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, final List<Tuple2<SQLField, ?>> filtersNot,
106
            String title) {
115
            String title, boolean onSelection) {
107
        super(new GridBagLayout());
116
        super(new GridBagLayout());
108
        this.list = l;
117
        this.list = l;
109
        this.setOpaque(false);
118
        this.setOpaque(false);
110
 
-
 
-
 
119
        this.onSelection = onSelection;
111
        GridBagConstraints c = new DefaultGridBagConstraints();
120
        GridBagConstraints c = new DefaultGridBagConstraints();
112
        c.gridx = GridBagConstraints.RELATIVE;
121
        c.gridx = GridBagConstraints.RELATIVE;
113
        c.weightx = 0;
122
        c.weightx = 0;
114
        if (title != null && title.trim().length() > 0) {
123
        if (title != null && title.trim().length() > 0) {
115
            JLabel sep = new JLabel(title);
124
            JLabel sep = new JLabel(title);
Line 141... Line 150...
141
                this.add(new JLabelBold("%"), c);
150
                this.add(new JLabelBold("%"), c);
142
            }
151
            }
143
            c.gridy++;
152
            c.gridy++;
144
        }
153
        }
145
 
154
 
-
 
155
        if (this.onSelection) {
146
        this.list.addListener(new TableModelListener() {
156
            this.list.getJTable().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
147
 
157
 
-
 
158
                @Override
148
            private Object getValueAt(final ListSQLLine line, final SQLTableModelColumn col, final List<SQLTableModelColumn> columns) {
159
                public void valueChanged(ListSelectionEvent e) {
-
 
160
 
149
                final int indexOf = columns.indexOf(col);
161
                    final List<ListSQLLine> listLines = list.getSelectedLines();
150
                final Object res = line.getValueAt(indexOf);
162
                    for (Tuple2<? extends SQLTableModelColumn, Type> field : listField) {
151
                if (res == null)
163
                        if (field.get1() == Type.COUNT) {
152
                    throw new IllegalStateException("Null value for " + col + " in " + line);
164
                            map.get(field.get0()).setText(String.valueOf(listLines.size()));
153
                return res;
-
 
154
            }
165
                        }
-
 
166
                    }
-
 
167
                    computeValues(listField, filters, filtersNot, listLines);
-
 
168
                }
-
 
169
            });
-
 
170
        } else {
-
 
171
 
-
 
172
            this.list.addListener(new TableModelListener() {
155
 
173
 
156
            @Override
174
                @Override
157
            public void tableChanged(TableModelEvent e) {
175
                public void tableChanged(TableModelEvent e) {
158
                final TableModel model = (TableModel) e.getSource();
176
                    final TableModel model = (TableModel) e.getSource();
159
                final ITableModel sqlModel;
177
                    final ITableModel sqlModel;
160
                if (model instanceof ITableModel)
178
                    if (model instanceof ITableModel)
161
                    sqlModel = (ITableModel) model;
179
                        sqlModel = (ITableModel) model;
162
                else
180
                    else
163
                    sqlModel = (ITableModel) ((TableSorter) model).getTableModel();
181
                        sqlModel = (ITableModel) ((TableSorter) model).getTableModel();
164
 
182
 
165
                Map<SQLTableModelColumn, BigDecimal> mapTotal = new HashMap<SQLTableModelColumn, BigDecimal>();
183
                    final List<ListSQLLine> listLines = new ArrayList<>();
166
                Map<SQLTableModelColumn, Double> mapPourcent = new HashMap<SQLTableModelColumn, Double>();
184
                    for (int i = 0; i < sqlModel.getRowCount(); i++) {
167
                Map<SQLTableModelColumn, Integer> mapPourcentSize = new HashMap<SQLTableModelColumn, Integer>();
185
                        listLines.add(sqlModel.getRow(i));
-
 
186
                    }
168
                for (Tuple2<? extends SQLTableModelColumn, Type> field : listField) {
187
                    for (Tuple2<? extends SQLTableModelColumn, Type> field : listField) {
169
                    if (field.get1() == Type.COUNT) {
188
                        if (field.get1() == Type.COUNT) {
170
                        map.get(field.get0()).setText(String.valueOf(model.getRowCount()));
189
                            map.get(field.get0()).setText(String.valueOf(model.getRowCount()));
171
                    }
190
                        }
172
                }
191
                    }
-
 
192
                    computeValues(listField, filters, filtersNot, listLines);
-
 
193
                }
-
 
194
 
-
 
195
            });
-
 
196
        }
-
 
197
    }
-
 
198
 
-
 
199
    public void fireUpdated() {
-
 
200
        for (PropertyChangeListener l : this.loadingListener.getListeners(PropertyChangeListener.class)) {
-
 
201
            l.propertyChange(null);
-
 
202
        }
-
 
203
    }
-
 
204
 
-
 
205
    public void addListener(PropertyChangeListener l) {
-
 
206
        this.loadingListener.add(PropertyChangeListener.class, l);
-
 
207
    }
-
 
208
 
-
 
209
    private Object getValueAt(final ListSQLLine line, final SQLTableModelColumn col, final List<SQLTableModelColumn> columns) {
-
 
210
        final int indexOf = columns.indexOf(col);
-
 
211
        final Object res = line.getValueAt(indexOf);
-
 
212
        if (res == null)
-
 
213
            throw new IllegalStateException("Null value for " + col + " in " + line);
-
 
214
        return res;
-
 
215
    }
-
 
216
 
-
 
217
    private void computeValues(final List<Tuple2<? extends SQLTableModelColumn, Type>> listField, final List<Tuple2<SQLField, ?>> filters, final List<Tuple2<SQLField, ?>> filtersNot,
-
 
218
            final List<ListSQLLine> listLines) {
-
 
219
        Map<SQLTableModelColumn, BigDecimal> mapTotal = new HashMap<SQLTableModelColumn, BigDecimal>();
-
 
220
        Map<SQLTableModelColumn, Double> mapPourcent = new HashMap<SQLTableModelColumn, Double>();
-
 
221
        Map<SQLTableModelColumn, Integer> mapPourcentSize = new HashMap<SQLTableModelColumn, Integer>();
-
 
222
 
-
 
223
        for (ListSQLLine line : listLines) {
173
 
224
 
174
                for (int i = 0; i < model.getRowCount(); i++) {
-
 
175
                    final ListSQLLine line = sqlModel.getRow(i);
-
 
176
                    final SQLRowValues rowAt = line.getRow();
225
            final SQLRowValues rowAt = line.getRow();
177
                    final List<SQLTableModelColumn> columns = line.getColumns().getColumns();
226
            final List<SQLTableModelColumn> columns = line.getColumns().getColumns();
178
 
227
 
179
                    for (final Tuple2<? extends SQLTableModelColumn, Type> field : listField) {
228
            for (final Tuple2<? extends SQLTableModelColumn, Type> field : listField) {
180
                        final Type type = field.get1();
229
                final Type type = field.get1();
Line 295... Line 344...
295
                        }
344
                }
296
                    }
345
            }
297
                }
346
        }
298
                fireUpdated();
347
        fireUpdated();
299
            }
348
    }
300
        });
-
 
301
    }
-
 
302
 
-
 
303
    public void fireUpdated() {
-
 
304
        for (PropertyChangeListener l : this.loadingListener.getListeners(PropertyChangeListener.class)) {
-
 
305
            l.propertyChange(null);
-
 
306
        }
-
 
307
    }
-
 
308
 
-
 
309
    public void addListener(PropertyChangeListener l) {
-
 
310
        this.loadingListener.add(PropertyChangeListener.class, l);
-
 
311
    }
-
 
312
 
-
 
313
}
349
}