View Javadoc
1   package fr.ifremer.dali.ui.swing.content.extraction.config.preset;
2   
3   /*
4    * #%L
5    * Dali :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
27  import fr.ifremer.dali.dto.referential.pmfm.QualitativeValueDTO;
28  import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
29  import fr.ifremer.quadrige3.ui.swing.table.AbstractTableModel;
30  import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
31  import jaxx.runtime.validator.swing.SwingValidator;
32  import org.apache.commons.logging.Log;
33  import org.apache.commons.logging.LogFactory;
34  import org.jdesktop.swingx.table.TableColumnExt;
35  import org.nuiton.jaxx.application.swing.util.Cancelable;
36  
37  import java.awt.Dimension;
38  import java.util.ArrayList;
39  import java.util.HashMap;
40  import java.util.List;
41  import java.util.Map;
42  
43  /**
44   * <p>PmfmPresetUIHandler class.</p>
45   */
46  public class PmfmPresetUIHandler extends AbstractDaliTableUIHandler<PmfmPresetRowModel, PmfmPresetUIModel, PmfmPresetUI> implements Cancelable {
47  
48      public static final Log LOG = LogFactory.getLog(PmfmPresetUIHandler.class);
49  
50      /**
51       * {@inheritDoc}
52       */
53      @Override
54      public void beforeInit(PmfmPresetUI ui) {
55          super.beforeInit(ui);
56  
57          ui.setContextValue(new PmfmPresetUIModel());
58      }
59  
60      /**
61       * {@inheritDoc}
62       */
63      @Override
64      public void afterInit(PmfmPresetUI ui) {
65          initUI(ui);
66  
67          initTable();
68  
69          initBeanList(ui.getValueDoubleList(), null, null);
70          ui.getValueDoubleList().getHandler().addAdditionalControls();
71  
72          initBeanList(ui.getResultPmfmDoubleList(), null, new ArrayList<>());
73  
74          // fix preferred size (Mantis #40756)
75          Dimension size = ui.getResultPmfmDoubleList().getPreferredSize();
76          ui.getResultPmfmDoubleList().setPreferredSize(new Dimension(size.width, 130));
77  
78          initListeners();
79  
80          // Register validator
81          registerValidators(getValidator());
82          listenValidatorValid(getValidator(), getModel());
83  
84      }
85  
86      @Override
87      public SwingValidator<PmfmPresetUIModel> getValidator() {
88          return getUI().getValidator();
89      }
90  
91      private void initTable() {
92  
93          addColumn(PmfmPresetTableModel.PMFM);
94  
95          TableColumnExt valuesCol = addColumn(PmfmPresetTableModel.QUALITATIVE_VALUES);
96          fixColumnWidth(valuesCol, 50);
97  
98          PmfmPresetTableModel tableModel = new PmfmPresetTableModel(getTable().getColumnModel());
99          getTable().setModel(tableModel);
100 
101         initTable(getTable(), true);
102 
103         getTable().setHorizontalScrollEnabled(false);
104         getTable().setVisibleRowCount(6);
105         getTable().setEditable(false);
106     }
107 
108     private void initListeners() {
109 
110         getModel().addPropertyChangeListener(evt -> {
111 
112             switch (evt.getPropertyName()) {
113                 case PmfmPresetUIModel.PROPERTY_INITIAL_PMFM_PRESETS:
114 
115                     loadTable();
116                     break;
117 
118                 case PmfmPresetUIModel.PROPERTY_SINGLE_ROW_SELECTED:
119 
120                     updateDoubleList();
121                     break;
122 
123                 case PmfmPresetUIModel.PROPERTY_SELECTED_VALUES:
124 
125                     if (getModel().getSingleSelectedRow() != null) {
126                         // update row values
127                         getModel().getSingleSelectedRow().setQualitativeValues(
128                                 new ArrayList<>(getModel().getSelectedValues()));
129                     }
130                     break;
131 
132                 case PmfmPresetUIModel.PROPERTY_AVAILABLE_RESULT_PMFMS:
133 
134                     getUI().getResultPmfmDoubleList().getHandler().setUniverse(getModel().getAvailableResultPmfms());
135                     break;
136 
137                 case PmfmPresetUIModel.PROPERTY_INITIAL_RESULT_PMFMS:
138 
139                     getUI().getResultPmfmDoubleList().getHandler().setSelected(getModel().getInitialResultPmfms());
140                     break;
141             }
142         });
143     }
144 
145     private void loadTable() {
146 
147         getModel().setLoading(true);
148         List<PmfmPresetRowModel> rows = new ArrayList<>();
149 
150         Map<PmfmDTO, List<QualitativeValueDTO>> initialPmfmPresetMap = getModel().getInitialPmfmPresets().stream().collect(
151                 HashMap::new, (map, pmfmPreset) -> map.put(pmfmPreset.getPmfm(), pmfmPreset.getQualitativeValues()),
152                 HashMap::putAll
153         );
154 
155         // for each ordered list of available pmfms
156         for (PmfmDTO availablePmfm: getModel().getAvailablePmfms()) {
157             PmfmPresetRowModel row = getTableModel().createNewRow();
158             row.setPmfm(availablePmfm);
159             // add, if available, the initial list of qualitative values
160             row.setQualitativeValues(initialPmfmPresetMap.get(availablePmfm));
161             rows.add(row);
162         }
163 
164         getModel().setRows(rows);
165         recomputeRowsValidState();
166         getModel().setLoading(false);
167     }
168 
169     private void updateDoubleList() {
170 
171         List<QualitativeValueDTO> universeList = null;
172         List<QualitativeValueDTO> selectedList = null;
173 
174         if (getModel().getSingleSelectedRow() != null) {
175 
176             universeList = getModel().getSingleSelectedRow().getPmfm() == null
177                     ? null
178                     : getModel().getSingleSelectedRow().getPmfm().getQualitativeValues();
179             selectedList = new ArrayList<>(getModel().getSingleSelectedRow().getQualitativeValues());
180 
181         }
182 
183         getUI().getValueDoubleList().getHandler().setUniverse(universeList);
184         getUI().getValueDoubleList().getHandler().setSelected(selectedList);
185     }
186 
187     /**
188      * <p>valid.</p>
189      */
190     public void valid() {
191 
192         if (getModel().isValid()) {
193             stopListenValidatorValid(getValidator());
194             closeDialog();
195         }
196     }
197 
198     /**
199      * {@inheritDoc}
200      */
201     @Override
202     public void cancel() {
203         stopListenValidatorValid(getValidator());
204         getModel().setValid(false);
205         closeDialog();
206     }
207 
208     @Override
209     public AbstractTableModel<PmfmPresetRowModel> getTableModel() {
210         return (PmfmPresetTableModel) getTable().getModel();
211     }
212 
213     @Override
214     public SwingTable getTable() {
215         return getUI().getPmfmTable();
216     }
217 
218 }