1 package fr.ifremer.reefdb.ui.swing.content.manage.rule.department;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
27 import fr.ifremer.reefdb.dto.enums.FilterTypeValues;
28 import fr.ifremer.reefdb.dto.referential.DepartmentDTO;
29 import fr.ifremer.reefdb.ui.swing.content.manage.filter.select.SelectFilterUI;
30 import fr.ifremer.reefdb.ui.swing.util.AbstractReefDbBeanUIModel;
31 import fr.ifremer.reefdb.ui.swing.util.table.AbstractReefDbTableModel;
32 import fr.ifremer.reefdb.ui.swing.util.table.AbstractReefDbTableUIHandler;
33 import org.jdesktop.swingx.table.TableColumnExt;
34
35 import java.awt.Dimension;
36 import java.util.Collection;
37 import java.util.List;
38 import java.util.stream.Collectors;
39
40 import static org.nuiton.i18n.I18n.t;
41
42
43
44
45 public class ControlDepartmentTableUIHandler extends
46 AbstractReefDbTableUIHandler<ControlDepartmentTableRowModel, ControlDepartmentTableUIModel, ControlDepartmentTableUI> {
47
48
49 @Override
50 public void beforeInit(final ControlDepartmentTableUI ui) {
51 super.beforeInit(ui);
52
53
54 final ControlDepartmentTableUIModel model = new ControlDepartmentTableUIModel();
55 ui.setContextValue(model);
56 }
57
58
59 @Override
60 public void afterInit(final ControlDepartmentTableUI ui) {
61
62
63 initUI(ui);
64
65
66 getUI().getAddDepartmentButton().setEnabled(false);
67 getUI().getRemoveDepartmentButton().setEnabled(false);
68
69
70 initialisationTableau();
71
72 }
73
74
75
76
77 private void initialisationTableau() {
78
79
80 TableColumnExt codeCol = addColumn(ControlDepartmentTableModel.CODE);
81 codeCol.setSortable(true);
82 codeCol.setEditable(false);
83
84
85 TableColumnExt nameCol = addColumn(ControlDepartmentTableModel.NAME);
86 nameCol.setSortable(true);
87 nameCol.setEditable(false);
88
89 ControlDepartmentTableModel tableModel = new ControlDepartmentTableModel(getTable().getColumnModel());
90 getTable().setModel(tableModel);
91
92
93 initTable(getTable());
94
95
96 getTable().setVisibleRowCount(3);
97 }
98
99
100
101
102
103
104 public void loadDepartments(final Collection<DepartmentDTO> departments) {
105
106
107 getModel().setBeans(departments);
108 getTable().setEditable(getModel().getParentModel().isEditable());
109
110
111 getUI().applyDataBinding(ControlDepartmentTableUI.BINDING_ADD_DEPARTMENT_BUTTON_ENABLED);
112
113 recomputeRowsValidState(false);
114 getModel().setModify(false);
115 }
116
117
118
119
120 public void clearTable() {
121
122
123 getModel().setBeans(null);
124
125
126 getUI().getAddDepartmentButton().setEnabled(false);
127 }
128
129
130 @Override
131 public AbstractReefDbTableModel<ControlDepartmentTableRowModel> getTableModel() {
132 return (ControlDepartmentTableModel) getTable().getModel();
133 }
134
135
136 @Override
137 public SwingTable getTable() {
138 return ui.getControlDepartmentTable();
139 }
140
141
142
143
144 void openAddDialog() {
145 SelectFilterUI dialog = new SelectFilterUI(getContext(), FilterTypeValues.DEPARTMENT.getFilterTypeId());
146 dialog.setTitle(t("reefdb.filter.department.addDialog.title"));
147 List<DepartmentDTO> departments = getModel().getBeans().stream()
148 .sorted(getDecorator(DepartmentDTO.class, null).getCurrentComparator())
149
150 .peek(department -> department.setReadOnly(true))
151 .collect(Collectors.toList());
152
153 dialog.getModel().setSelectedElements(departments);
154
155 if (!getModel().getParentModel().getSelectedRuleList().isLocal()) {
156
157 dialog.getHandler().getFilterElementUIHandler().forceLocal(false);
158 }
159
160 openDialog(dialog, new Dimension(1024, 720));
161
162 if (dialog.getModel().isValid()) {
163
164 List<DepartmentDTO> newDepartments = dialog.getModel().getSelectedElements().stream()
165 .map(element -> ((DepartmentDTO) element))
166 .filter(newDepartment -> !getModel().getBeans().contains(newDepartment))
167 .collect(Collectors.toList());
168
169 if (!newDepartments.isEmpty()) {
170 getModel().addBeans(newDepartments);
171 getModel().setModify(true);
172 saveToParentModel();
173 }
174 }
175 }
176
177
178
179
180 void removeDepartments() {
181 getModel().deleteSelectedRows();
182 saveToParentModel();
183 }
184
185 private void saveToParentModel() {
186 getModel().getParentModel().getSelectedRuleList().setDepartments(getModel().getBeans());
187 recomputeRowsValidState(false);
188
189 getModel().firePropertyChanged(AbstractReefDbBeanUIModel.PROPERTY_MODIFY, null, true);
190
191 }
192
193 }