View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.observation.survey.measurement.grouped;
2   
3   /*
4    * #%L
5    * Reef DB :: 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.ImmutableList;
27  import fr.ifremer.quadrige3.ui.swing.table.ColumnIdentifier;
28  import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
29  import fr.ifremer.reefdb.dto.data.measurement.MeasurementAware;
30  import fr.ifremer.reefdb.ui.swing.content.observation.shared.AbstractMeasurementsGroupedTableModel;
31  import fr.ifremer.reefdb.ui.swing.content.observation.shared.AbstractMeasurementsGroupedTableUIHandler;
32  import fr.ifremer.reefdb.ui.swing.content.observation.survey.measurement.grouped.multiedit.SurveyMeasurementsMultiEditUI;
33  import jaxx.runtime.SwingUtil;
34  import org.jdesktop.swingx.table.TableColumnExt;
35  
36  import javax.swing.BorderFactory;
37  import javax.swing.JPanel;
38  import javax.swing.JToggleButton;
39  import javax.swing.RowFilter;
40  import javax.swing.border.Border;
41  import java.util.List;
42  
43  /**
44   * Controleur pour les mesures de l'observation.
45   */
46  public class SurveyMeasurementsGroupedTableUIHandler
47          extends AbstractMeasurementsGroupedTableUIHandler<SurveyMeasurementsGroupedRowModel, SurveyMeasurementsGroupedTableUIModel, SurveyMeasurementsGroupedTableUI> {
48  
49      // initial border of full screen toggle button
50      private Border initialToggleButtonBorder;
51  
52      /**
53       * <p>Constructor for SurveyMeasurementsGroupedTableUIHandler.</p>
54       */
55      public SurveyMeasurementsGroupedTableUIHandler() {
56          super(SurveyMeasurementsGroupedRowModel.PROPERTY_TAXON_GROUP,
57                  SurveyMeasurementsGroupedRowModel.PROPERTY_TAXON,
58                  SurveyMeasurementsGroupedRowModel.PROPERTY_INDIVIDUAL_PMFMS,
59                  SurveyMeasurementsGroupedRowModel.PROPERTY_COMMENT);
60      }
61  
62      /**
63       * {@inheritDoc}
64       */
65      @Override
66      public AbstractMeasurementsGroupedTableModel<SurveyMeasurementsGroupedRowModel> getTableModel() {
67          return (SurveyMeasurementsGroupedTableModel) getTable().getModel();
68      }
69  
70      /**
71       * {@inheritDoc}
72       */
73      @Override
74      public SwingTable getTable() {
75          return getUI().getSurveyGroupedMeasurementTable();
76      }
77  
78      @Override
79      protected SurveyMeasurementsGroupedTableUIModel createNewModel() {
80          return new SurveyMeasurementsGroupedTableUIModel();
81      }
82  
83      /**
84       * {@inheritDoc}
85       */
86      @Override
87      public void afterInit(final SurveyMeasurementsGroupedTableUI ui) {
88  
89          super.afterInit(ui);
90  
91          // Les boutons sont desactives
92          getUI().getDeleteButton().setEnabled(false);
93          getUI().getDuplicateButton().setEnabled(false);
94          SwingUtil.setLayerUI(ui.getTableauBasScrollPane(), ui.getTableBlockLayer());
95  
96          // Keep initial border
97          initialToggleButtonBorder = getUI().getFullScreenToggleButton().getBorder();
98  
99      }
100 
101     @Override
102     public void toggleFullScreen(JPanel panel, JToggleButton toggleButton) {
103         super.toggleFullScreen(panel, toggleButton);
104 
105         // Set highlight border when selected (Mantis #48592)
106         toggleButton.setBorder(
107                 toggleButton.isSelected()
108                         ? BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, getConfig().getColorHighlightButtonBorder()), initialToggleButtonBorder)
109                         : initialToggleButtonBorder
110         );
111 
112     }
113 
114     @Override
115     protected void filterMeasurements() {
116 
117         getTable().getColumnExt(SurveyMeasurementsGroupedTableModel.TAXON_GROUP).setEditable(getModel().getTaxonGroupFilter() == null);
118         getTable().getColumnExt(SurveyMeasurementsGroupedTableModel.TAXON).setEditable(getModel().getTaxonFilter() == null);
119 
120         if (getModel().getTaxonGroupFilter() == null && getModel().getTaxonFilter() == null) {
121             // remove filter
122             getTable().setRowFilter(null);
123         } else {
124             // add filter
125             getTable().setRowFilter(new RowFilter<SurveyMeasurementsGroupedTableModel, Integer>() {
126                 @Override
127                 public boolean include(Entry<? extends SurveyMeasurementsGroupedTableModel, ? extends Integer> entry) {
128                     return (getModel().getTaxonGroupFilter() == null
129                             || getModel().getTaxonGroupFilter().equals(entry.getValue(getTable().getColumnExt(SurveyMeasurementsGroupedTableModel.TAXON_GROUP).getModelIndex())))
130                             && (getModel().getTaxonFilter() == null
131                             || getModel().getTaxonFilter().equals(entry.getValue(getTable().getColumnExt(SurveyMeasurementsGroupedTableModel.TAXON).getModelIndex())));
132                 }
133             });
134         }
135     }
136 
137     @Override
138     protected List<? extends MeasurementAware> getMeasurementAwareModels() {
139         return ImmutableList.of(getModel().getSurvey());
140     }
141 
142     @Override
143     protected SurveyMeasurementsGroupedRowModel createNewRow(boolean readOnly, MeasurementAware parentBean) {
144         return new SurveyMeasurementsGroupedRowModel(readOnly);
145     }
146 
147     @Override
148     protected MeasurementAware getMeasurementAwareModelForRow(SurveyMeasurementsGroupedRowModel row) {
149         return getModel().getSurvey();
150     }
151 
152     /**
153      * Initialisation du tableau.
154      */
155     @Override
156     protected void initTable() {
157 
158         if (getConfig().isDebugMode()) {
159             TableColumnExt indivIdCol = addColumn((ColumnIdentifier<SurveyMeasurementsGroupedRowModel>) AbstractMeasurementsGroupedTableModel.INDIVIDUAL_ID);
160             indivIdCol.setSortable(true);
161             setDefaultColumnMinWidth(indivIdCol);
162         }
163 
164         // Colonne groupe taxon
165         final TableColumnExt colTaxonGroup = addColumn(
166                 taxonGroupCellEditor,
167                 newTableCellRender(SurveyMeasurementsGroupedTableModel.TAXON_GROUP),
168                 SurveyMeasurementsGroupedTableModel.TAXON_GROUP);
169         colTaxonGroup.setSortable(true);
170         setDefaultColumnMinWidth(colTaxonGroup);
171 
172         // Colonne taxon
173         final TableColumnExt colTaxon = addColumn(
174                 taxonCellEditor,
175                 newTableCellRender(SurveyMeasurementsGroupedTableModel.TAXON),
176                 SurveyMeasurementsGroupedTableModel.TAXON);
177         colTaxon.setSortable(true);
178         setDefaultColumnMinWidth(colTaxon);
179 
180         // Colonne taxon saisi
181         final TableColumnExt colInputTaxon = addColumn(SurveyMeasurementsGroupedTableModel.INPUT_TAXON_NAME);
182         colInputTaxon.setSortable(true);
183         colInputTaxon.setEditable(false);
184         setDefaultColumnMinWidth(colInputTaxon);
185 
186         // Colonne analyste
187         final TableColumnExt colAnalyst = addColumn(
188                 departmentCellEditor,
189                 newTableCellRender(AbstractMeasurementsGroupedTableModel.ANALYST),
190                 (ColumnIdentifier<SurveyMeasurementsGroupedRowModel>) AbstractMeasurementsGroupedTableModel.ANALYST);
191         colAnalyst.setSortable(true);
192         setDefaultColumnMinWidth(colAnalyst);
193 
194         // Colonne commentaire
195         final TableColumnExt colComment = addCommentColumn(SurveyMeasurementsGroupedTableModel.COMMENT);
196 
197         // Modele de la table
198         final SurveyMeasurementsGroupedTableModel tableModel = new SurveyMeasurementsGroupedTableModel(getTable().getColumnModel(), true);
199         tableModel.setNoneEditableCols();
200         getTable().setModel(tableModel);
201 
202         // Initialisation de la table
203         initTable(getTable());
204 
205         colComment.setVisible(false);
206         colAnalyst.setVisible(false);
207         colInputTaxon.setVisible(false);
208 
209         // border
210         addEditionPanelBorder();
211     }
212 
213     public void editSelectedMeasurements() {
214 
215         editSelectedMeasurements(new SurveyMeasurementsMultiEditUI(getUI()));
216 
217     }
218 }