OpenConcerto

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

svn://code.openconcerto.org/openconcerto

Rev

Rev 144 | Details | Compare with Previous | Last modification | View Log | RSS feed

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