View Javadoc
1   package fr.ifremer.dali.ui.swing.content.extraction.config;
2   
3   /*-
4    * #%L
5    * Dali :: UI
6    * %%
7    * Copyright (C) 2017 Ifremer
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU Affero General Public License as published by
11   * the Free Software Foundation, either version 3 of the License, or
12   * (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Public License for more details.
18   * 
19   * You should have received a copy of the GNU Affero General Public License
20   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21   * #L%
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   * @author peck7 on 21/11/2017.
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              // build text
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             // empty and disable
124             getModel().fromBean(null);
125 
126         } else {
127             // load parameter
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         // get all pmfm strategies for the actual filters
141         Set<PmfmDTO> allPmfms = getParentContainer(ExtractionUI.class).getHandler().getPmfmsForSelectedExtraction(null, null);
142 
143         // parse
144         List<PmfmDTO> qualitativePmfms = DaliBeans.filterQualitativePmfms(allPmfms);
145         List<PmfmDTO> numericalPmfms = DaliBeans.filterNumericalPmfms(allPmfms);
146 
147         // if no pmfm found
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         // set available pmfms
164         presetUIModel.setAvailablePmfms(qualitativePmfms);
165         presetUIModel.setAvailableResultPmfms(numericalPmfms);
166 
167         // Set presets if exists, AFTER available pmfms
168         presetUIModel.setInitialPmfmPresets(new ArrayList<>(getModel().getPmfmPresets()));
169 
170         // Set result pmfms if exists
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             // Force modify state
181             getModel().firePropertyChanged(AbstractBeanUIModel.PROPERTY_MODIFY, null, true);
182         }
183 
184     }
185 
186 }