1 package fr.ifremer.dali.ui.swing.content.manage.referential.pmfm.qualitativevalue;
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 com.google.common.collect.Lists;
27 import fr.ifremer.dali.dto.configuration.programStrategy.PmfmStrategyDTO;
28 import fr.ifremer.dali.dto.referential.pmfm.ParameterDTO;
29 import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
30 import fr.ifremer.dali.dto.referential.pmfm.QualitativeValueDTO;
31 import fr.ifremer.dali.service.StatusFilter;
32 import fr.ifremer.dali.ui.swing.util.AbstractDaliBeanUIModel;
33 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliRowUIModel;
34 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableModel;
35 import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
36 import fr.ifremer.quadrige3.ui.core.dto.referential.BaseReferentialDTO;
37 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
38 import org.jdesktop.swingx.table.TableColumnExt;
39 import org.nuiton.jaxx.application.swing.util.Cancelable;
40
41 import java.util.Collection;
42 import java.util.Comparator;
43 import java.util.List;
44 import java.util.stream.Collectors;
45
46
47
48
49 public class QualitativeValueUIHandler extends AbstractDaliTableUIHandler<QualitativeValueTableRowModel, QualitativeValueUIModel, QualitativeValueUI> implements Cancelable {
50
51 public static final String DOUBLE_LIST = "doubleList";
52 public static final String TABLE = "table";
53
54
55
56
57 @Override
58 public void beforeInit(QualitativeValueUI ui) {
59 super.beforeInit(ui);
60
61 QualitativeValueUIModel model = new QualitativeValueUIModel();
62 ui.setContextValue(model);
63 }
64
65
66
67
68 @Override
69 public void afterInit(QualitativeValueUI qualitativeValueUI) {
70
71 initUI(qualitativeValueUI);
72
73
74 initTable();
75
76 initBeanList(getUI().getAssociatedQualitativeValuesDoubleList(), null, null);
77
78 getModel().addPropertyChangeListener(QualitativeValueUIModel.PROPERTY_PARENT_ROW_MODEL, evt -> {
79
80
81 getModel().setDoubleList(PmfmStrategyDTO.class.isAssignableFrom(getModel().getParentRowModel().getClass()) && getModel().isEditable());
82
83 if (getModel().isDoubleList()) {
84 PmfmStrategyDTO pmfmStrategy = (PmfmStrategyDTO) getModel().getParentRowModel();
85 List<QualitativeValueDTO> universeValues = null;
86 if (pmfmStrategy.getPmfm() != null && pmfmStrategy.getPmfm().getParameter() != null) {
87 List<QualitativeValueDTO> qualitativeValues = pmfmStrategy.getPmfm().getQualitativeValues();
88
89 universeValues = qualitativeValues.stream().sorted(Comparator.comparing(BaseReferentialDTO::getName)).collect(Collectors.toList());
90 }
91 List<QualitativeValueDTO> selectedValues = Lists.newArrayList(pmfmStrategy.getQualitativeValues());
92
93 getUI().getAssociatedQualitativeValuesDoubleList().getModel().setUniverse(universeValues);
94 getUI().getAssociatedQualitativeValuesDoubleList().getModel().setSelected(selectedValues);
95
96 getUI().getListPanelLayout().setSelected(DOUBLE_LIST);
97 } else {
98 Collection<QualitativeValueDTO> qualitativeValues = getQualitativeValuesFromRow(getModel().getParentRowModel());
99 if (qualitativeValues != null) {
100 qualitativeValues = qualitativeValues.stream()
101 .sorted(Comparator.comparing(BaseReferentialDTO::getName))
102 .collect(Collectors.toList());
103 }
104 getModel().setBeans(qualitativeValues);
105 getUI().getListPanelLayout().setSelected(TABLE);
106 }
107
108
109 });
110 }
111
112 private void initTable() {
113
114
115 final SwingTable table = getTable();
116
117
118 final TableColumnExt mnemonicCol = addColumn(QualitativeValueTableModel.MNEMONIC);
119 mnemonicCol.setSortable(true);
120
121
122 final TableColumnExt descriptionCol = addColumn(QualitativeValueTableModel.DESCRIPTION);
123 descriptionCol.setSortable(true);
124
125
126 final TableColumnExt statusCol = addFilterableComboDataColumnToModel(
127 QualitativeValueTableModel.STATUS,
128 getContext().getReferentialService().getStatus(StatusFilter.ALL),
129 false);
130 statusCol.setSortable(true);
131
132
133 final QualitativeValueTableModel tableModel = new QualitativeValueTableModel(getTable().getColumnModel());
134 table.setModel(tableModel);
135
136 initTable(table);
137 table.setEditable(false);
138
139
140 table.setVisibleRowCount(5);
141 }
142
143 private Collection<QualitativeValueDTO> getQualitativeValuesFromRow(AbstractDaliRowUIModel rowModel) {
144 if (ParameterDTO.class.isAssignableFrom(rowModel.getClass())) {
145 return ((ParameterDTO) rowModel).getQualitativeValues();
146 }
147 if (PmfmDTO.class.isAssignableFrom(rowModel.getClass())) {
148 return ((PmfmDTO) rowModel).getQualitativeValues();
149 }
150 if (PmfmStrategyDTO.class.isAssignableFrom(rowModel.getClass())) {
151 return ((PmfmStrategyDTO) rowModel).getQualitativeValues();
152 }
153 return null;
154 }
155
156
157
158
159 @Override
160 public AbstractDaliTableModel<QualitativeValueTableRowModel> getTableModel() {
161 return (QualitativeValueTableModel) getTable().getModel();
162 }
163
164
165
166
167 @Override
168 public SwingTable getTable() {
169 return getUI().getAssociatedQualitativeValuesTable();
170 }
171
172
173
174
175 @Override
176 public void cancel() {
177 closeDialog();
178 }
179
180 public void valid() {
181
182
183
184 if (PmfmStrategyDTO.class.isAssignableFrom(getModel().getParentRowModel().getClass()) && getModel().isDoubleList() && getModel().isEditable()) {
185 ((PmfmStrategyDTO) getModel().getParentRowModel()).setQualitativeValues(
186 getUI().getAssociatedQualitativeValuesDoubleList().getModel().getSelected()
187 );
188 getModel().getParentRowModel().firePropertyChanged(AbstractDaliBeanUIModel.PROPERTY_MODIFY, null, true);
189 }
190
191
192 closeDialog();
193 }
194 }