View Javadoc
1   package fr.ifremer.tutti.ui.swing.content.protocol.actions;
2   
3   /*
4    * #%L
5    * Tutti :: UI
6    * %%
7    * Copyright (C) 2012 - 2014 Ifremer
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU General Public License as
11   * published by the Free Software Foundation, either version 3 of the 
12   * License, or (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 General Public 
20   * License along with this program.  If not, see
21   * <http://www.gnu.org/licenses/gpl-3.0.html>.
22   * #L%
23   */
24  
25  import com.google.common.base.Preconditions;
26  import fr.ifremer.tutti.persistence.entities.referential.Species;
27  import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport;
28  import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesRowModel;
29  import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolSpeciesTableModel;
30  import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUI;
31  import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIHandler;
32  import fr.ifremer.tutti.ui.swing.content.protocol.EditProtocolUIModel;
33  import jaxx.runtime.SwingUtil;
34  import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox;
35  
36  import java.util.Collection;
37  
38  import static org.nuiton.i18n.I18n.t;
39  
40  /**
41   * To add a new benthos protocol.
42   *
43   * @author Tony Chemit - chemit@codelutin.com
44   * @since 1.0
45   */
46  public class AddBenthosProtocolAction extends LongActionSupport<EditProtocolUIModel, EditProtocolUI, EditProtocolUIHandler> {
47  
48      public AddBenthosProtocolAction(EditProtocolUIHandler handler) {
49          super(handler, false);
50      }
51  
52      protected Species species;
53  
54      protected EditProtocolSpeciesRowModel newRow;
55  
56      @Override
57      public void doAction() throws Exception {
58  
59          species = null;
60  
61          EditProtocolUI ui = getUI();
62  
63          BeanFilterableComboBox<Species> benthosComboBox = ui.getBenthosComboBox();
64  
65          species = (Species) benthosComboBox.getSelectedItem();
66          Preconditions.checkNotNull(
67                  species, "Can't add a benthosProtocol with a null species");
68          Preconditions.checkArgument(species.isReferenceTaxon(),
69                                      "Can't add a benthosProtocol with a not referent species");
70  
71          Integer taxonId = species.getReferenceTaxonId();
72          String taxonIdStr = String.valueOf(taxonId);
73  
74          // remove all synonyms of this taxon
75          Collection<Species> allSynonyms = getModel().getAllSynonyms(taxonIdStr);
76          getModel().getAllSynonyms().removeAll(allSynonyms);
77  
78          // add new row to model (do it after combo stuff for ui best display)
79          newRow = handler.createNewProtocolSpeciesRow();
80          newRow.setSpecies(species);
81          getModel().getBenthosRow().add(newRow);
82      }
83  
84      @Override
85      public void postSuccessAction() {
86          super.postSuccessAction();
87  
88          // update comboboxes
89          getUI().getBenthosComboBox().removeItem(species);
90          getUI().getSpeciesComboBox().removeItem(species);
91          getUI().getCalcifiedPiecesSamplingEditorUI().getSpeciesComboBox().addItem(species);
92  
93          // fire row was inserted in table model
94          EditProtocolSpeciesTableModel tableModel = getHandler().getBenthosTableModel();
95          tableModel.fireTableRowsInserted(newRow);
96  
97          // select this new row
98          int rowIndex = tableModel.getRowIndex(newRow);
99          SwingUtil.setSelectionInterval(handler.getBenthosTable(), rowIndex);
100 
101         // add notification
102         String speciesStr = decorate(species);
103         sendMessage(t("tutti.flash.info.benthos.add.to.protocol",
104                       speciesStr));
105     }
106 }