1 package fr.ifremer.dali.ui.swing.content.extraction.config;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import fr.ifremer.dali.decorator.DecoratorService;
25 import fr.ifremer.dali.dto.DaliBeans;
26 import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
27 import fr.ifremer.dali.dto.system.extraction.PmfmPresetDTO;
28 import fr.ifremer.dali.ui.swing.content.extraction.ExtractionUI;
29 import fr.ifremer.dali.ui.swing.content.extraction.config.preset.PmfmPresetUI;
30 import fr.ifremer.dali.ui.swing.content.extraction.config.preset.PmfmPresetUIModel;
31 import fr.ifremer.dali.ui.swing.util.AbstractDaliUIHandler;
32 import fr.ifremer.quadrige3.ui.swing.model.AbstractBeanUIModel;
33 import org.apache.commons.collections4.CollectionUtils;
34
35 import java.awt.Dimension;
36 import java.awt.event.MouseAdapter;
37 import java.awt.event.MouseEvent;
38 import java.beans.PropertyChangeListener;
39 import java.util.ArrayList;
40 import java.util.List;
41 import java.util.Set;
42 import java.util.StringJoiner;
43
44 import static org.nuiton.i18n.I18n.t;
45
46
47
48
49 public class ExtractionConfigUIHandler extends AbstractDaliUIHandler<ExtractionConfigUIModel, ExtractionConfigUI> {
50
51 @Override
52 public void beforeInit(ExtractionConfigUI ui) {
53 super.beforeInit(ui);
54 ui.setContextValue(new ExtractionConfigUIModel());
55 }
56
57 @Override
58 public void afterInit(ExtractionConfigUI ui) {
59
60 initUI(ui);
61 initListeners();
62 loadConfig();
63 getModel().setEnabled(false);
64
65 }
66
67 private void initListeners() {
68
69 PropertyChangeListener configListener = evt -> {
70
71
72 buildPmfmPresetText();
73
74 if (!getModel().isLoading()) getModel().setModify(true);
75
76 };
77 getModel().addPropertyChangeListener(ExtractionConfigUIModel.PROPERTY_PMFM_PRESETS, configListener);
78 getModel().addPropertyChangeListener(ExtractionConfigUIModel.PROPERTY_PMFM_RESULTS, configListener);
79
80 getUI().getPmfmPresetTextField().addMouseListener(new MouseAdapter() {
81 @Override
82 public void mouseClicked(MouseEvent e) {
83 if (e.getClickCount() >= 2) {
84 openConfig();
85 }
86 }
87 });
88
89 }
90
91 private void buildPmfmPresetText() {
92
93 String text = null;
94 if (!getModel().isPmfmPresetsEmpty() && !getModel().isPmfmResultsEmpty()) {
95
96 StringJoiner resultPmfmJoiner = new StringJoiner(", ");
97 for (PmfmDTO resultPmfm : getModel().getPmfmResults()) {
98 resultPmfmJoiner.add(decorate(resultPmfm, DecoratorService.NAME));
99 }
100
101 StringJoiner pmfmPresetJoiner = new StringJoiner(" " + t("dali.extraction.config.pmfmPreset.text.and") + " ");
102 for (PmfmPresetDTO pmfmPreset : getModel().getPmfmPresets()) {
103 if (pmfmPreset.isQualitativeValuesEmpty()) continue;
104 pmfmPresetJoiner.add(String.format("%s%s",
105 decorate(pmfmPreset.getPmfm(), DecoratorService.NAME),
106 pmfmPreset.sizeQualitativeValues() == pmfmPreset.getPmfm().sizeQualitativeValues() ? "" :
107 String.format(" (%s,...)", decorate(pmfmPreset.getQualitativeValues(0)))));
108 }
109
110 text = t("dali.extraction.config.pmfmPreset.text", resultPmfmJoiner.toString(), pmfmPresetJoiner.toString());
111
112 }
113
114 getUI().getPmfmPresetTextField().setText(text);
115
116 }
117
118 public void loadConfig() {
119
120 getModel().setLoading(true);
121 if (getModel().getSelectedExtraction() == null) {
122
123
124 getModel().fromBean(null);
125
126 } else {
127
128 getModel().fromBean(getModel().getSelectedExtraction().getParameter());
129
130 }
131 getModel().setModify(false);
132 getModel().setLoading(false);
133 }
134
135 public void openConfig() {
136
137 PmfmPresetUI pmfmPresetUI = new PmfmPresetUI(getContext());
138 PmfmPresetUIModel presetUIModel = pmfmPresetUI.getModel();
139
140
141 Set<PmfmDTO> allPmfms = getParentContainer(ExtractionUI.class).getHandler().getPmfmsForSelectedExtraction(null, null);
142
143
144 List<PmfmDTO> qualitativePmfms = DaliBeans.filterQualitativePmfms(allPmfms);
145 List<PmfmDTO> numericalPmfms = DaliBeans.filterNumericalPmfms(allPmfms);
146
147
148 if (CollectionUtils.isEmpty(qualitativePmfms)) {
149
150 getContext().getDialogHelper().showWarningDialog(
151 t("dali.extraction.config.missing.qualitativePmfms"),
152 t("dali.extraction.config.title"));
153 return;
154 }
155 if (CollectionUtils.isEmpty(numericalPmfms)) {
156
157 getContext().getDialogHelper().showWarningDialog(
158 t("dali.extraction.config.missing.numericalPmfms"),
159 t("dali.extraction.config.title"));
160 return;
161 }
162
163
164 presetUIModel.setAvailablePmfms(qualitativePmfms);
165 presetUIModel.setAvailableResultPmfms(numericalPmfms);
166
167
168 presetUIModel.setInitialPmfmPresets(new ArrayList<>(getModel().getPmfmPresets()));
169
170
171 presetUIModel.setInitialResultPmfms(new ArrayList<>(getModel().getPmfmResults()));
172
173 openDialog(pmfmPresetUI, new Dimension(1000, (int) (getContext().getMainUI().getHeight() * 0.95)));
174
175 if (presetUIModel.isValid()) {
176
177 getModel().setPmfmResults(presetUIModel.getSelectedResultPmfms());
178 getModel().setPmfmPresets(presetUIModel.getBeans());
179
180
181 getModel().firePropertyChanged(AbstractBeanUIModel.PROPERTY_MODIFY, null, true);
182 }
183
184 }
185
186 }