1 package fr.ifremer.dali.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.dali.dto.enums.FilterTypeValues;
27 import fr.ifremer.dali.dto.referential.DepartmentDTO;
28 import fr.ifremer.dali.ui.swing.content.manage.filter.select.SelectFilterUI;
29 import fr.ifremer.dali.ui.swing.util.AbstractDaliBeanUIModel;
30 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableModel;
31 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
32 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
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 AbstractDaliTableUIHandler<ControlDepartmentTableRowModel, ControlDepartmentTableUIModel, ControlDepartmentTableUI> {
47
48
49
50
51 @Override
52 public void beforeInit(final ControlDepartmentTableUI ui) {
53 super.beforeInit(ui);
54
55
56 final ControlDepartmentTableUIModel model = new ControlDepartmentTableUIModel();
57 ui.setContextValue(model);
58 }
59
60
61
62
63 @Override
64 public void afterInit(final ControlDepartmentTableUI ui) {
65
66 initUI(ui);
67
68
69 getUI().getAddDepartmentButton().setEnabled(false);
70 getUI().getRemoveDepartmentButton().setEnabled(false);
71
72
73 initTable();
74
75 }
76
77
78
79
80 private void initTable() {
81
82
83 final SwingTable table = getTable();
84
85
86 TableColumnExt codeCol = addColumn(ControlDepartmentTableModel.CODE);
87 codeCol.setSortable(true);
88 codeCol.setEditable(false);
89
90
91 TableColumnExt nameCol = addColumn(ControlDepartmentTableModel.NAME);
92 nameCol.setSortable(true);
93 nameCol.setEditable(false);
94
95 ControlDepartmentTableModel tableModel = new ControlDepartmentTableModel(getTable().getColumnModel());
96 table.setModel(tableModel);
97
98
99 initTable(table);
100
101
102 table.setVisibleRowCount(3);
103 }
104
105
106
107
108
109
110
111 public void loadDepartments(final Collection<DepartmentDTO> departments, boolean readOnly) {
112
113
114 getModel().setBeans(departments);
115 getTable().setEditable(!readOnly);
116
117
118 getUI().getAddDepartmentButton().setEnabled(!readOnly);
119
120 recomputeRowsValidState(false);
121 }
122
123
124
125
126 public void clearTable() {
127
128 getModel().setBeans(null);
129
130 getUI().getAddDepartmentButton().setEnabled(false);
131 }
132
133
134
135
136 @Override
137 public AbstractDaliTableModel<ControlDepartmentTableRowModel> getTableModel() {
138 return (ControlDepartmentTableModel) getTable().getModel();
139 }
140
141
142
143
144 @Override
145 public SwingTable getTable() {
146 return ui.getControlDepartmentTable();
147 }
148
149
150
151
152 public void openAddDialog() {
153 SelectFilterUI dialog = new SelectFilterUI(getContext(), FilterTypeValues.DEPARTMENT.getFilterTypeId());
154 dialog.setTitle(t("dali.filter.department.addDialog.title"));
155 List<DepartmentDTO> departments = getModel().getBeans().stream()
156 .sorted(getDecorator(DepartmentDTO.class, null).getCurrentComparator())
157
158 .peek(department -> department.setReadOnly(true))
159 .collect(Collectors.toList());
160 dialog.getModel().setSelectedElements(departments);
161
162 openDialog(dialog, new Dimension(1024, 720));
163
164 if (dialog.getModel().isValid()) {
165
166 List<DepartmentDTO> newDepartments = dialog.getModel().getSelectedElements().stream()
167 .map(element -> ((DepartmentDTO) element))
168 .filter(newDepartment -> !getModel().getBeans().contains(newDepartment))
169 .collect(Collectors.toList());
170
171 if (!newDepartments.isEmpty()) {
172 getModel().addBeans(newDepartments);
173 getModel().setModify(true);
174 saveToParentModel();
175 }
176 }
177 }
178
179
180
181
182 public void removeDepartments() {
183 getModel().deleteSelectedRows();
184 saveToParentModel();
185 }
186
187 private void saveToParentModel() {
188 getModel().getParentModel().getRuleListUIModel().getSingleSelectedRow().setDepartments(getModel().getBeans());
189 recomputeRowsValidState(false);
190
191 getModel().firePropertyChanged(AbstractDaliBeanUIModel.PROPERTY_MODIFY, null, true);
192
193 }
194
195 }