View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.referential.pmfm.qualitativevalue;
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 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   * Handler.
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       * {@inheritDoc}
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       * {@inheritDoc}
67       */
68      @Override
69      public void afterInit(QualitativeValueUI qualitativeValueUI) {
70  
71          initUI(qualitativeValueUI);
72  
73          // Init table columns and properties
74          initTable();
75  
76          initBeanList(getUI().getAssociatedQualitativeValuesDoubleList(), null, null);
77  
78          getModel().addPropertyChangeListener(QualitativeValueUIModel.PROPERTY_PARENT_ROW_MODEL, evt -> {
79  
80              // here, detect parentRowModel type , if PmfmDTO and local, set a DoubleList view
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                      // sort by label
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 //            getModel().setBeans(getQualitativeValuesFromRow(getModel().getParentRowModel()));
109         });
110     }
111 
112     private void initTable() {
113 
114         // La table des prelevements
115         final SwingTable table = getTable();
116 
117         // mnemonic
118         final TableColumnExt mnemonicCol = addColumn(QualitativeValueTableModel.MNEMONIC);
119         mnemonicCol.setSortable(true);
120 
121         // Description
122         final TableColumnExt descriptionCol = addColumn(QualitativeValueTableModel.DESCRIPTION);
123         descriptionCol.setSortable(true);
124 
125         // status
126         final TableColumnExt statusCol = addFilterableComboDataColumnToModel(
127             QualitativeValueTableModel.STATUS,
128             getContext().getReferentialService().getStatus(StatusFilter.ALL),
129             false);
130         statusCol.setSortable(true);
131 
132         // model for table
133         final QualitativeValueTableModel tableModel = new QualitativeValueTableModel(getTable().getColumnModel());
134         table.setModel(tableModel);
135 
136         initTable(table);
137         table.setEditable(false);
138 
139         // 5 lines visibles
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      * {@inheritDoc}
158      */
159     @Override
160     public AbstractDaliTableModel<QualitativeValueTableRowModel> getTableModel() {
161         return (QualitativeValueTableModel) getTable().getModel();
162     }
163 
164     /**
165      * {@inheritDoc}
166      */
167     @Override
168     public SwingTable getTable() {
169         return getUI().getAssociatedQualitativeValuesTable();
170     }
171 
172     /**
173      * {@inheritDoc}
174      */
175     @Override
176     public void cancel() {
177         closeDialog();
178     }
179 
180     public void valid() {
181 
182         // Replace the old associated qualitative value liste by the new list (no save here !)
183         // only for PmfmStrategy
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         // close the dialog box
192         closeDialog();
193     }
194 }