OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 144 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 144 Rev 156
1
/*
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 * 
3
 * 
4
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
4
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
5
 * 
5
 * 
6
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
6
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
7
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
7
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
8
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
8
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
9
 * language governing permissions and limitations under the License.
9
 * language governing permissions and limitations under the License.
10
 * 
10
 * 
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.task.ui;
14
 package org.openconcerto.task.ui;
15
 
15
 
16
import org.openconcerto.sql.model.DBRoot;
16
import org.openconcerto.sql.model.DBRoot;
17
import org.openconcerto.sql.model.SQLRow;
17
import org.openconcerto.sql.model.SQLRow;
18
import org.openconcerto.sql.model.SQLRowListRSH;
18
import org.openconcerto.sql.model.SQLRowListRSH;
19
import org.openconcerto.sql.model.SQLRowValues;
19
import org.openconcerto.sql.model.SQLRowValues;
20
import org.openconcerto.sql.model.SQLSelect;
20
import org.openconcerto.sql.model.SQLSelect;
21
import org.openconcerto.sql.model.SQLTable;
21
import org.openconcerto.sql.model.SQLTable;
22
import org.openconcerto.sql.model.Where;
22
import org.openconcerto.sql.model.Where;
23
import org.openconcerto.sql.users.User;
23
import org.openconcerto.sql.users.User;
24
import org.openconcerto.sql.users.UserManager;
24
import org.openconcerto.sql.users.UserManager;
25
import org.openconcerto.task.UserTaskRight;
25
import org.openconcerto.task.UserTaskRight;
26
import org.openconcerto.ui.DisplayabilityListener;
26
import org.openconcerto.ui.DisplayabilityListener;
27
import org.openconcerto.utils.ExceptionHandler;
27
import org.openconcerto.utils.ExceptionHandler;
28
 
28
 
29
import java.awt.Component;
29
import java.awt.Component;
30
import java.awt.Font;
30
import java.awt.Font;
31
import java.awt.GridBagConstraints;
31
import java.awt.GridBagConstraints;
32
import java.awt.GridBagLayout;
32
import java.awt.GridBagLayout;
33
import java.awt.Insets;
33
import java.awt.Insets;
34
import java.awt.event.MouseAdapter;
34
import java.awt.event.MouseAdapter;
35
import java.awt.event.MouseEvent;
35
import java.awt.event.MouseEvent;
36
import java.sql.SQLException;
36
import java.sql.SQLException;
37
import java.util.List;
37
import java.util.List;
38
 
38
 
39
import javax.swing.ImageIcon;
39
import javax.swing.ImageIcon;
40
import javax.swing.JLabel;
40
import javax.swing.JLabel;
41
import javax.swing.JList;
41
import javax.swing.JList;
42
import javax.swing.JPanel;
42
import javax.swing.JPanel;
43
import javax.swing.JScrollPane;
43
import javax.swing.JScrollPane;
44
import javax.swing.JSeparator;
44
import javax.swing.JSeparator;
45
import javax.swing.ListModel;
45
import javax.swing.ListModel;
46
 
46
 
47
public class UserRightPanelDetail extends JPanel {
47
public class UserRightPanelDetail extends JPanel {
48
 
48
 
49
    JLabel labelDocumentation1 = new JLabel("");
49
    JLabel labelDocumentation1 = new JLabel("");
50
    JLabel labelDocumentation2 = new JLabel("");
50
    JLabel labelDocumentation2 = new JLabel("");
51
    private final UserListModel model;
51
    private final UserListModel model;
52
    private final SQLTable tableTacheRights;
52
    private final SQLTable tableTacheRights;
53
    UserTaskRightListCellRenderer cellRenderer1 = new UserTaskRightListCellRenderer(UserTaskRightListCellRenderer.READ);
53
    UserTaskRightListCellRenderer cellRenderer1 = new UserTaskRightListCellRenderer(UserTaskRightListCellRenderer.READ);
54
    UserTaskRightListCellRenderer cellRenderer2 = new UserTaskRightListCellRenderer(UserTaskRightListCellRenderer.MODIFY);
54
    UserTaskRightListCellRenderer cellRenderer2 = new UserTaskRightListCellRenderer(UserTaskRightListCellRenderer.MODIFY);
55
    UserTaskRightListCellRenderer cellRenderer3 = new UserTaskRightListCellRenderer(UserTaskRightListCellRenderer.ADD);
55
    UserTaskRightListCellRenderer cellRenderer3 = new UserTaskRightListCellRenderer(UserTaskRightListCellRenderer.ADD);
56
    UserTaskRightListCellRenderer cellRenderer4 = new UserTaskRightListCellRenderer(UserTaskRightListCellRenderer.VALIDATE);
56
    UserTaskRightListCellRenderer cellRenderer4 = new UserTaskRightListCellRenderer(UserTaskRightListCellRenderer.VALIDATE);
57
    private User selectedUser;
57
    private User selectedUser;
58
    private JList list1;
58
    private JList list1;
59
    private JList list2;
59
    private JList list2;
60
    private JList list3;
60
    private JList list3;
61
    private JList list4;
61
    private JList list4;
62
 
62
 
63
    UserRightPanelDetail(final UserManager uMngr, final DBRoot root) {
63
    UserRightPanelDetail(final UserManager uMngr, final DBRoot root) {
64
        this.model = new UserListModel(uMngr);
64
        this.model = new UserListModel(uMngr);
65
        this.tableTacheRights = root.getTable("TACHE_RIGHTS");
65
        this.tableTacheRights = root.getTable("TACHE_RIGHTS");
66
        this.setLayout(new GridBagLayout());
66
        this.setLayout(new GridBagLayout());
67
        GridBagConstraints c = new GridBagConstraints();
67
        GridBagConstraints c = new GridBagConstraints();
68
        c.insets = new Insets(4, 10, 2, 2);
68
        c.insets = new Insets(4, 10, 2, 2);
69
        c.fill = GridBagConstraints.HORIZONTAL;
69
        c.fill = GridBagConstraints.HORIZONTAL;
70
        c.gridx = 0;
70
        c.gridx = 0;
71
        c.gridy = 0;
71
        c.gridy = 0;
72
        c.gridwidth = 4;
72
        c.gridwidth = 4;
73
        labelDocumentation1.setFont(labelDocumentation1.getFont().deriveFont(Font.BOLD));
73
        labelDocumentation1.setFont(labelDocumentation1.getFont().deriveFont(Font.BOLD));
74
        this.add(labelDocumentation1, c);
74
        this.add(labelDocumentation1, c);
75
        c.gridy++;
75
        c.gridy++;
76
        c.insets = new Insets(0, 10, 10, 2);
76
        c.insets = new Insets(0, 10, 10, 2);
77
        this.add(labelDocumentation2, c);
77
        this.add(labelDocumentation2, c);
78
        c.gridy++;
78
        c.gridy++;
79
        c.insets = new Insets(0, 0, 0, 0);
79
        c.insets = new Insets(0, 0, 0, 0);
80
        this.add(new JSeparator(JSeparator.HORIZONTAL), c);
80
        this.add(new JSeparator(JSeparator.HORIZONTAL), c);
81
 
81
 
82
        c.fill = GridBagConstraints.BOTH;
82
        c.fill = GridBagConstraints.BOTH;
83
        c.insets = new Insets(2, 10, 2, 10);
83
        c.insets = new Insets(2, 10, 2, 10);
84
        //
84
        //
85
        c.gridwidth = 1;
85
        c.gridwidth = 1;
86
        c.weightx = 1;
86
        c.weightx = 1;
87
        int YTOP = c.gridy + 1;
87
        int YTOP = c.gridy + 1;
88
 
88
 
89
        c.gridy = YTOP;
89
        c.gridy = YTOP;
90
        c.weighty = 0;
90
        c.weighty = 0;
91
        JLabel label1 = new JLabel("Voir les tâches assignées à:");
91
        JLabel label1 = new JLabel("Voir les tâches assignées à:");
92
        this.add(label1, c);
92
        this.add(label1, c);
93
        c.gridy++;
93
        c.gridy++;
94
        list1 = new JList(model);
94
        list1 = new JList(model);
95
        list1.addMouseListener(new MouseAdapter() {
95
        list1.addMouseListener(new MouseAdapter() {
96
            public void mouseClicked(MouseEvent e) {
96
            public void mouseClicked(MouseEvent e) {
97
                swapOnDoubleClick(list1, e, "READ");
97
                swapOnDoubleClick(list1, e, "READ");
98
            }
98
            }
99
        });
99
        });
100
        list1.setCellRenderer(cellRenderer1);
100
        list1.setCellRenderer(cellRenderer1);
101
        c.weighty = 1;
101
        c.weighty = 1;
102
        this.add(new JScrollPane(list1), c);
102
        this.add(new JScrollPane(list1), c);
103
        //
103
        //
104
        c.gridx++;
104
        c.gridx++;
105
        c.gridy = YTOP;
105
        c.gridy = YTOP;
106
        c.weighty = 0;
106
        c.weighty = 0;
107
        JLabel label2 = new JLabel("Modifier les tâches créées par:");
107
        JLabel label2 = new JLabel("Modifier les tâches créées par:");
108
 
108
 
109
        this.add(label2, c);
109
        this.add(label2, c);
110
        c.gridy++;
110
        c.gridy++;
111
        list2 = new JList(model);
111
        list2 = new JList(model);
112
        list2.addMouseListener(new MouseAdapter() {
112
        list2.addMouseListener(new MouseAdapter() {
113
            public void mouseClicked(MouseEvent e) {
113
            public void mouseClicked(MouseEvent e) {
114
                swapOnDoubleClick(list2, e, "MODIFY");
114
                swapOnDoubleClick(list2, e, "MODIFY");
115
            }
115
            }
116
        });
116
        });
117
        list2.setCellRenderer(cellRenderer2);
117
        list2.setCellRenderer(cellRenderer2);
118
        c.weighty = 1;
118
        c.weighty = 1;
119
        this.add(new JScrollPane(list2), c);
119
        this.add(new JScrollPane(list2), c);
120
        //
120
        //
121
        c.gridx++;
121
        c.gridx++;
122
        c.gridy = YTOP;
122
        c.gridy = YTOP;
123
        c.weighty = 0;
123
        c.weighty = 0;
124
        JLabel label3 = new JLabel("Assigner des tâches à:");
124
        JLabel label3 = new JLabel("Assigner des tâches à:");
125
        this.add(label3, c);
125
        this.add(label3, c);
126
        c.gridy++;
126
        c.gridy++;
127
        list3 = new JList(model);
127
        list3 = new JList(model);
128
        list3.addMouseListener(new MouseAdapter() {
128
        list3.addMouseListener(new MouseAdapter() {
129
            public void mouseClicked(MouseEvent e) {
129
            public void mouseClicked(MouseEvent e) {
130
                swapOnDoubleClick(list3, e, "ADD");
130
                swapOnDoubleClick(list3, e, "ADD");
131
            }
131
            }
132
        });
132
        });
133
        list3.setCellRenderer(cellRenderer3);
133
        list3.setCellRenderer(cellRenderer3);
134
        c.weighty = 1;
134
        c.weighty = 1;
135
        this.add(new JScrollPane(list3), c);
135
        this.add(new JScrollPane(list3), c);
136
        //
136
        //
137
        c.gridx++;
137
        c.gridx++;
138
        c.gridy = YTOP;
138
        c.gridy = YTOP;
139
        c.weighty = 0;
139
        c.weighty = 0;
140
        JLabel label4 = new JLabel("Valider les tâches de:");
140
        JLabel label4 = new JLabel("Valider les tâches de:");
141
        this.add(label4, c);
141
        this.add(label4, c);
142
        c.gridy++;
142
        c.gridy++;
143
        list4 = new JList(model);
143
        list4 = new JList(model);
144
        list4.addMouseListener(new MouseAdapter() {
144
        list4.addMouseListener(new MouseAdapter() {
145
            public void mouseClicked(MouseEvent e) {
145
            public void mouseClicked(MouseEvent e) {
146
                swapOnDoubleClick(list4, e, "VALIDATE");
146
                swapOnDoubleClick(list4, e, "VALIDATE");
147
            }
147
            }
148
        });
148
        });
149
        list4.setCellRenderer(cellRenderer4);
149
        list4.setCellRenderer(cellRenderer4);
150
        c.weighty = 1;
150
        c.weighty = 1;
151
        this.add(new JScrollPane(list4), c);
151
        this.add(new JScrollPane(list4), c);
152
 
152
 
153
        c.weighty = 0;
153
        c.weighty = 0;
154
        c.gridy++;
154
        c.gridy++;
155
        c.fill = GridBagConstraints.HORIZONTAL;
155
        c.fill = GridBagConstraints.HORIZONTAL;
156
        c.gridx = 0;
156
        c.gridx = 0;
157
        c.gridwidth = 4;
157
        c.gridwidth = 4;
158
        JLabel labelHelp = new JLabel("Une autorisation désactivée apparait en gris clair");
158
        JLabel labelHelp = new JLabel("Une autorisation désactivée apparait en gris clair");
159
        labelHelp.setIcon(new ImageIcon(UserRightPanelDetail.class.getResource("toc_open.gif")));
159
        labelHelp.setIcon(new ImageIcon(UserRightPanelDetail.class.getResource("toc_open.gif")));
160
        this.add(labelHelp, c);
160
        this.add(labelHelp, c);
161
 
161
 
162
        this.addHierarchyListener(new DisplayabilityListener() {
162
        this.addHierarchyListener(new DisplayabilityListener() {
163
            @Override
163
            @Override
164
            protected void displayabilityChanged(Component c) {
164
            protected void displayabilityChanged(Component c) {
165
                if (c.isDisplayable())
165
                if (c.isDisplayable())
166
                    model.start();
166
                    model.start();
167
                else
167
                else
168
                    model.stop();
168
                    model.stop();
169
            }
169
            }
170
        });
170
        });
171
 
171
 
172
        setUser(null);
172
        setUser(null);
173
    }
173
    }
174
 
174
 
175
    /**
175
    /**
176
     * @param list
176
     * @param list
177
     * @param e
177
     * @param e
178
     */
178
     */
179
    private void swapOnDoubleClick(final JList list, MouseEvent e, String field) {
179
    private void swapOnDoubleClick(final JList list, MouseEvent e, String field) {
180
        if (e.getClickCount() == 2) {
180
        if (e.getClickCount() == 2) {
181
            int index = list.locationToIndex(e.getPoint());
181
            int index = list.locationToIndex(e.getPoint());
-
 
182
            if (index >= 0) {
182
            ListModel dlm = list.getModel();
183
                ListModel dlm = list.getModel();
183
            Object item = dlm.getElementAt(index);
184
                Object item = dlm.getElementAt(index);
184
            list.ensureIndexIsVisible(index);
185
                list.ensureIndexIsVisible(index);
185
            User toUser = (User) item;
186
                User toUser = (User) item;
186
            swapState(selectedUser, toUser, field);
187
                swapState(selectedUser, toUser, field);
187
 
188
            }
188
        }
189
        }
189
    }
190
    }
190
 
191
 
191
    protected void swapState(User user, User toUser, String field) {
192
    protected void swapState(User user, User toUser, String field) {
192
        final SQLSelect sel = new SQLSelect();
193
        final SQLSelect sel = new SQLSelect();
193
        sel.addSelectStar(tableTacheRights);
194
        sel.addSelectStar(tableTacheRights);
194
        Where where = new Where(tableTacheRights.getField("ID_USER_COMMON"), "=", user.getId());
195
        Where where = new Where(tableTacheRights.getField("ID_USER_COMMON"), "=", user.getId());
195
        where = where.and(new Where(tableTacheRights.getField("ID_USER_COMMON_TO"), "=", toUser.getId()));
196
        where = where.and(new Where(tableTacheRights.getField("ID_USER_COMMON_TO"), "=", toUser.getId()));
196
        sel.setWhere(where);
197
        sel.setWhere(where);
197
 
198
 
198
        final List<SQLRow> rows = SQLRowListRSH.execute(sel);
199
        final List<SQLRow> rows = SQLRowListRSH.execute(sel);
199
        final SQLRowValues rowV;
200
        final SQLRowValues rowV;
200
        if (rows.size() == 0) {
201
        if (rows.size() == 0) {
201
            rowV = new SQLRowValues(tableTacheRights);
202
            rowV = new SQLRowValues(tableTacheRights);
202
            rowV.put("ID_USER_COMMON", user.getId());
203
            rowV.put("ID_USER_COMMON", user.getId());
203
            rowV.put("ID_USER_COMMON_TO", toUser.getId());
204
            rowV.put("ID_USER_COMMON_TO", toUser.getId());
204
            rowV.put(field, Boolean.TRUE);
205
            rowV.put(field, Boolean.TRUE);
205
        } else if (rows.size() == 1) {
206
        } else if (rows.size() == 1) {
206
            final SQLRow row = rows.get(0);
207
            final SQLRow row = rows.get(0);
207
            rowV = row.createEmptyUpdateRow();
208
            rowV = row.createEmptyUpdateRow();
208
            rowV.put(field, !row.getBoolean(field));
209
            rowV.put(field, !row.getBoolean(field));
209
        } else {
210
        } else {
210
            throw new IllegalStateException("More than one row : " + rows);
211
            throw new IllegalStateException("More than one row : " + rows);
211
        }
212
        }
212
 
213
 
213
        try {
214
        try {
214
            rowV.commit();
215
            rowV.commit();
215
            setUser(this.selectedUser);
216
            setUser(this.selectedUser);
216
        } catch (SQLException e1) {
217
        } catch (SQLException e1) {
217
            ExceptionHandler.handle(this, "Impossible de changer la valeur", e1);
218
            ExceptionHandler.handle(this, "Impossible de changer la valeur", e1);
218
        }
219
        }
219
    }
220
    }
220
 
221
 
221
    public void setUser(User selectedUser) {
222
    public void setUser(User selectedUser) {
222
        if (selectedUser == null) {
223
        if (selectedUser == null) {
223
            labelDocumentation1.setText(" Veuillez sélectionner un utilisateur");
224
            labelDocumentation1.setText(" Veuillez sélectionner un utilisateur");
224
            labelDocumentation2.setText(" Pour cela, cliquez sur un nom de la liste de gauche");
225
            labelDocumentation2.setText(" Pour cela, cliquez sur un nom de la liste de gauche");
225
            list1.setEnabled(false);
226
            list1.setEnabled(false);
226
            list2.setEnabled(false);
227
            list2.setEnabled(false);
227
            list3.setEnabled(false);
228
            list3.setEnabled(false);
228
            list4.setEnabled(false);
229
            list4.setEnabled(false);
229
            return;
230
            return;
230
        }
231
        }
231
 
232
 
232
        this.selectedUser = selectedUser;
233
        this.selectedUser = selectedUser;
233
 
234
 
234
        labelDocumentation1.setText(" Autorisations de l'utilisateur " + selectedUser.getFirstName() + " " + selectedUser.getName());
235
        labelDocumentation1.setText(" Autorisations de l'utilisateur " + selectedUser.getFirstName() + " " + selectedUser.getName());
235
        labelDocumentation2.setText(" Double cliquez sur un nom d'une des colonnes suivantes pour activer/désactiver le droit correspondant.");
236
        labelDocumentation2.setText(" Double cliquez sur un nom d'une des colonnes suivantes pour activer/désactiver le droit correspondant.");
236
        List<UserTaskRight> l = UserTaskRight.getUserTaskRight(selectedUser);
237
        List<UserTaskRight> l = UserTaskRight.getUserTaskRight(selectedUser);
237
        cellRenderer1.setUserTaskRight(l);
238
        cellRenderer1.setUserTaskRight(l);
238
        cellRenderer2.setUserTaskRight(l);
239
        cellRenderer2.setUserTaskRight(l);
239
        cellRenderer3.setUserTaskRight(l);
240
        cellRenderer3.setUserTaskRight(l);
240
        cellRenderer4.setUserTaskRight(l);
241
        cellRenderer4.setUserTaskRight(l);
241
        model.clearAndReload();
242
        model.clearAndReload();
242
        list1.setEnabled(true);
243
        list1.setEnabled(true);
243
        list2.setEnabled(true);
244
        list2.setEnabled(true);
244
        list3.setEnabled(true);
245
        list3.setEnabled(true);
245
        list4.setEnabled(true);
246
        list4.setEnabled(true);
246
    }
247
    }
247
 
248
 
248
}
249
}