View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.referential.user.national;
2   
3   /*
4    * #%L
5    * Dali :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import fr.ifremer.dali.dto.referential.PersonDTO;
27  import fr.ifremer.dali.service.StatusFilter;
28  import fr.ifremer.dali.ui.swing.content.manage.referential.user.menu.UserMenuUIModel;
29  import fr.ifremer.dali.ui.swing.content.manage.referential.user.privileges.PrivilegesDialogUI;
30  import fr.ifremer.dali.ui.swing.content.manage.referential.user.table.UserRowModel;
31  import fr.ifremer.dali.ui.swing.content.manage.referential.user.table.UserTableModel;
32  import fr.ifremer.dali.ui.swing.content.manage.referential.user.table.UserTableUIModel;
33  import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableModel;
34  import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
35  import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
36  import fr.ifremer.quadrige3.ui.swing.table.editor.ButtonCellEditor;
37  import fr.ifremer.quadrige3.ui.swing.table.renderer.ButtonCellRenderer;
38  import org.jdesktop.swingx.table.TableColumnExt;
39  
40  import java.awt.Dimension;
41  import java.util.List;
42  
43  import static org.nuiton.i18n.I18n.t;
44  
45  /**
46   * Controlleur pour la gestion des Users au niveau national
47   */
48  public class ManageUsersNationalUIHandler extends AbstractDaliTableUIHandler<UserRowModel, UserTableUIModel, ManageUsersNationalUI> {
49  
50      /** {@inheritDoc} */
51      @Override
52      public void beforeInit(ManageUsersNationalUI ui) {
53          super.beforeInit(ui);
54          
55          // create model and register to the JAXX context
56          UserTableUIModel model = new UserTableUIModel();
57          ui.setContextValue(model);
58  
59      }
60  
61      /** {@inheritDoc} */
62      @Override
63      @SuppressWarnings("unchecked")
64      public void afterInit(ManageUsersNationalUI ui) {
65          initUI(ui);
66  
67          // hide 'apply filter'
68          ui.getUserMenuUI().getHandler().enableContextFilter(false);
69  
70          // listen to search results
71          ui.getUserMenuUI().getModel().addPropertyChangeListener(UserMenuUIModel.PROPERTY_RESULTS, evt -> getModel().setBeans((List<PersonDTO>) evt.getNewValue()));
72  
73          initTable();
74  
75      }
76  
77      private void initTable() {
78  
79          // Le tableau
80          final SwingTable table = getTable();
81  
82          // lastname
83          TableColumnExt lastnameCol = addColumn(UserTableModel.LASTNAME);
84          lastnameCol.setSortable(true);
85  
86          // firstname
87          TableColumnExt firstnameCol = addColumn(UserTableModel.FIRSTNAME);
88          firstnameCol.setSortable(true);
89  
90  
91          // department
92          TableColumnExt depCol = addFilterableComboDataColumnToModel(
93                  UserTableModel.DEPARTMENT,
94                  getContext().getReferentialService().getDepartments(StatusFilter.ALL),
95                  true);
96          depCol.setSortable(true);
97  
98          // email
99          TableColumnExt emailCol = addColumn(UserTableModel.EMAIL);
100         emailCol.setSortable(true);
101 
102         // phone
103         TableColumnExt phoneCol = addColumn(UserTableModel.PHONE);
104         phoneCol.setSortable(true);
105 
106         // Comment, creation and update dates
107         addCommentColumn(UserTableModel.COMMENT, false);
108         TableColumnExt creationDateCol = addDatePickerColumnToModel(UserTableModel.CREATION_DATE, getConfig().getDateTimeFormat(), false);
109         fixColumnWidth(creationDateCol, 120);
110         TableColumnExt updateDateCol = addDatePickerColumnToModel(UserTableModel.UPDATE_DATE, getConfig().getDateTimeFormat(), false);
111         fixColumnWidth(updateDateCol, 120);
112 
113         // status
114         TableColumnExt statusCol = addFilterableComboDataColumnToModel(
115                 UserTableModel.STATUS,
116                 getContext().getReferentialService().getStatus(StatusFilter.ALL),
117                 false);
118         statusCol.setSortable(true);
119 
120         // privileges
121         TableColumnExt privilegesCol = addColumn(
122                 new ButtonCellEditor() {
123                     @Override
124                     public void onButtonCellAction(int row, int column) {
125                         // show popup + set beans
126                         PrivilegesDialogUI dialog = new PrivilegesDialogUI(getContext());
127                         int rowModelIndex = getTable().convertRowIndexToModel(row);
128                         UserRowModel rowModel = getTableModel().getEntry(rowModelIndex);
129                         dialog.getModel().setUser(rowModel);
130                         dialog.getModel().setEditable(false);
131                         openDialog(dialog, new Dimension(600, 200));
132                     }
133 
134                 },
135                 new ButtonCellRenderer<Integer>(),
136                 UserTableModel.PRIVILEGES);
137         privilegesCol.setMaxWidth(100);
138         privilegesCol.setWidth(100);
139         privilegesCol.setSortable(false);
140 
141         /* non visible cols */
142 
143         // matricule
144         TableColumnExt idCol = addColumn(UserTableModel.REG_CODE);
145         idCol.setSortable(true);
146         fixColumnWidth(idCol, 80);
147 
148         // intranet login
149         TableColumnExt intranetLoginCol = addColumn(UserTableModel.INTRANET_LOGIN);
150         intranetLoginCol.setSortable(true);
151 
152         // extranet login
153         TableColumnExt extranetLoginCol = addColumn(UserTableModel.EXTRANET_LOGIN);
154         extranetLoginCol.setSortable(true);
155 
156         // address
157         TableColumnExt addressCol = addColumn(UserTableModel.ADDRESS);
158         addressCol.setSortable(true);
159 
160         // organism
161         TableColumnExt organismCol = addColumn(UserTableModel.ORGANISM);
162         organismCol.setSortable(true);
163 
164         // admin center
165         TableColumnExt adminCenterCol = addColumn(UserTableModel.ADMIN_CENTER);
166         adminCenterCol.setSortable(true);
167 
168         // site
169         TableColumnExt siteCol = addColumn(UserTableModel.SITE);
170         siteCol.setSortable(true);
171 
172 
173         UserTableModel tableModel = new UserTableModel(getTable().getColumnModel(), false);
174         table.setModel(tableModel);
175 
176         addExportToCSVAction(t("dali.property.user"), UserTableModel.PRIVILEGES);
177 
178         // Initialisation du tableau
179         initTable(table, true);
180 
181         // all columns cannot be edited
182         tableModel.setNoneEditableCols(
183                 UserTableModel.REG_CODE,
184                 UserTableModel.FIRSTNAME,
185                 UserTableModel.LASTNAME,
186                 UserTableModel.DEPARTMENT,
187                 UserTableModel.EMAIL,
188                 UserTableModel.PHONE,
189                 UserTableModel.STATUS,
190                 UserTableModel.ADDRESS,
191                 UserTableModel.INTRANET_LOGIN,
192                 UserTableModel.EXTRANET_LOGIN,
193                 UserTableModel.ORGANISM,
194                 UserTableModel.ADMIN_CENTER,
195                 UserTableModel.SITE);
196 
197         // optionnal columns are hidden
198         idCol.setVisible(false);
199         intranetLoginCol.setVisible(false);
200         extranetLoginCol.setVisible(false);
201         addressCol.setVisible(false);
202         organismCol.setVisible(false);
203         adminCenterCol.setVisible(false);
204         siteCol.setVisible(false);
205 
206         creationDateCol.setVisible(false);
207         updateDateCol.setVisible(false);
208 
209 
210         table.setVisibleRowCount(5);
211     }
212 
213     /** {@inheritDoc} */
214     @Override
215     public AbstractDaliTableModel<UserRowModel> getTableModel() {
216         return (UserTableModel) getTable().getModel();
217     }
218 
219     /** {@inheritDoc} */
220     @Override
221     public SwingTable getTable() {
222         return ui.getManageUsersNationalTable();
223     }
224 
225 }