1 package fr.ifremer.dali.ui.swing.content.synchro.changes;
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.decorator.DecoratorService;
27 import fr.ifremer.dali.dto.system.synchronization.SynchroChangesDTO;
28 import fr.ifremer.dali.dto.system.synchronization.SynchroTableDTO;
29 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableModel;
30 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
31 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
32 import org.apache.commons.collections4.CollectionUtils;
33 import org.jdesktop.swingx.table.TableColumnExt;
34 import org.nuiton.i18n.I18n;
35
36 import javax.swing.JScrollPane;
37 import javax.swing.SortOrder;
38
39
40
41
42 public class SynchroChangesUIHandler extends AbstractDaliTableUIHandler<SynchroChangesRowModel, SynchroChangesUIModel, SynchroChangesUI> {
43
44
45 @Override
46 public void beforeInit(final SynchroChangesUI ui) {
47 super.beforeInit(ui);
48
49
50 final SynchroChangesUIModel model = new SynchroChangesUIModel();
51 ui.setContextValue(model);
52 }
53
54
55 @Override
56 public void afterInit(SynchroChangesUI ui) {
57
58
59 initUI(ui);
60
61
62 initList();
63
64
65 initTable();
66
67
68
69
70 getTable().packAll();
71 }
72
73 @SuppressWarnings("unchecked")
74 private void initList() {
75 getUI().getEntityTypeList().setCellRenderer(newListCellRender(SynchroTableDTO.class, DecoratorService.WITH_COUNT));
76
77 getModel().addPropertyChangeListener(SynchroChangesUIModel.PROPERTY_CHANGES, evt -> populateList());
78
79 getUI().getEntityTypeList().addListSelectionListener(e -> {
80 SynchroTableDTO selectedTable = getUI().getEntityTypeList().getSelectedValue();
81 populateTable(selectedTable);
82 });
83 }
84
85
86
87
88 private void initTable() {
89
90
91 final SwingTable table = getTable();
92
93
94 TableColumnExt operationTypeColumm = addColumn(
95 null,
96 new SynchroOperationTypeIconCellRenderer(getContext()),
97 SynchroChangesTableModel.OPERATION_TYPE);
98 operationTypeColumm.setSortable(true);
99 operationTypeColumm.setMinWidth(30);
100 operationTypeColumm.setMaxWidth(30);
101 operationTypeColumm.setResizable(false);
102
103
104 final TableColumnExt columnName = addColumn(
105 SynchroChangesTableModel.NAME);
106 columnName.setSortable(true);
107
108
109 final SynchroChangesTableModel tableModel = new SynchroChangesTableModel(getTable().getColumnModel());
110 table.setModel(tableModel);
111
112
113 columnName.setHideable(false);
114
115 table.setEditable(false);
116
117
118 initTable(table);
119
120
121 table.setSortOrder(SynchroChangesTableModel.NAME, SortOrder.ASCENDING);
122
123 getUI().getTableParent().setVisible(false);
124 }
125
126
127
128
129
130 private void populateList() {
131
132 SynchroChangesDTO synchroChanges = getModel().getChanges();
133 if (synchroChanges != null && CollectionUtils.isNotEmpty(synchroChanges.getTables())) {
134 SynchroTableDTO[] tables = synchroChanges.getTables().toArray(new SynchroTableDTO[synchroChanges.getTables().size()]);
135 getUI().getEntityTypeList().setListData(tables);
136 }
137 else {
138 getUI().getEntityTypeList().setListData(new SynchroTableDTO[0]);
139 }
140
141 getModel().setValid(false);
142
143 getTableParent().setVisible(false);
144 }
145
146
147
148
149
150
151 private void populateTable(SynchroTableDTO synchroTable) {
152
153 TableColumnExt nameColumn = getTable().getColumnExt(SynchroChangesTableModel.NAME);
154
155 if (synchroTable == null
156 || CollectionUtils.isEmpty(synchroTable.getRows())) {
157 getTableParent().setVisible(false);
158 nameColumn.setTitle(I18n.t("dali.synchro.changes.name.short.default"));
159 }
160 else {
161
162 getTableParent().setVisible(true);
163 getUI().updateUI();
164 nameColumn.setTitle(I18n.t("dali.synchro.changes.name.short", decorate(synchroTable)));
165 getModel().setBeans(synchroTable.getRows());
166 }
167 }
168
169
170
171
172 @Override
173 public AbstractDaliTableModel<SynchroChangesRowModel> getTableModel() {
174 return (SynchroChangesTableModel) getTable().getModel();
175 }
176
177
178 @Override
179 public SwingTable getTable() {
180 return getUI().getTable();
181 }
182
183
184
185
186
187
188 private JScrollPane getTableParent() {
189 return getUI().getTableParent();
190 }
191
192
193
194
195 public void cancel() {
196 getModel().setChangesValidated(false);
197 closeDialog();
198 }
199
200
201
202
203 public void confirm() {
204 getModel().setChangesValidated(true);
205 closeDialog();
206 }
207
208
209 }