View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.manage.rule.department;
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 fr.ifremer.quadrige3.ui.swing.table.SwingTable;
27  import fr.ifremer.reefdb.dto.enums.FilterTypeValues;
28  import fr.ifremer.reefdb.dto.referential.DepartmentDTO;
29  import fr.ifremer.reefdb.ui.swing.content.manage.filter.select.SelectFilterUI;
30  import fr.ifremer.reefdb.ui.swing.util.AbstractReefDbBeanUIModel;
31  import fr.ifremer.reefdb.ui.swing.util.table.AbstractReefDbTableModel;
32  import fr.ifremer.reefdb.ui.swing.util.table.AbstractReefDbTableUIHandler;
33  import org.jdesktop.swingx.table.TableColumnExt;
34  
35  import java.awt.Dimension;
36  import java.util.Collection;
37  import java.util.List;
38  import java.util.stream.Collectors;
39  
40  import static org.nuiton.i18n.I18n.t;
41  
42  /**
43   * Controller pour le tableau des services.
44   */
45  public class ControlDepartmentTableUIHandler extends
46          AbstractReefDbTableUIHandler<ControlDepartmentTableRowModel, ControlDepartmentTableUIModel, ControlDepartmentTableUI> {
47  
48      /** {@inheritDoc} */
49      @Override
50      public void beforeInit(final ControlDepartmentTableUI ui) {
51          super.beforeInit(ui);
52  
53          // create model and register to the JAXX context
54          final ControlDepartmentTableUIModel model = new ControlDepartmentTableUIModel();
55          ui.setContextValue(model);
56      }
57  
58      /** {@inheritDoc} */
59      @Override
60      public void afterInit(final ControlDepartmentTableUI ui) {
61  
62          // Initialisation de l ecran
63          initUI(ui);
64  
65          // Desactivation des boutons
66          getUI().getAddDepartmentButton().setEnabled(false);
67          getUI().getRemoveDepartmentButton().setEnabled(false);
68  
69          // Initialisation du tableau
70          initialisationTableau();
71  
72      }
73  
74      /**
75       * Initialisation du tableau.
76       */
77      private void initialisationTableau() {
78  
79          // Code
80          TableColumnExt codeCol = addColumn(ControlDepartmentTableModel.CODE);
81          codeCol.setSortable(true);
82          codeCol.setEditable(false);
83  
84          // name
85          TableColumnExt nameCol = addColumn(ControlDepartmentTableModel.NAME);
86          nameCol.setSortable(true);
87          nameCol.setEditable(false);
88  
89          ControlDepartmentTableModel tableModel = new ControlDepartmentTableModel(getTable().getColumnModel());
90          getTable().setModel(tableModel);
91  
92          // Initialisation du tableau
93          initTable(getTable());
94  
95          // Number rows visible
96          getTable().setVisibleRowCount(3);
97      }
98  
99      /**
100      * <p>loadDepartments.</p>
101      *
102      * @param departments a {@link java.util.Collection} object.
103      */
104     public void loadDepartments(final Collection<DepartmentDTO> departments) {
105 
106         // Load les servicesControle dans le model
107         getModel().setBeans(departments);
108         getTable().setEditable(getModel().getParentModel().isEditable());
109 
110         // Activation du bouton nouveau
111         getUI().applyDataBinding(ControlDepartmentTableUI.BINDING_ADD_DEPARTMENT_BUTTON_ENABLED);
112 
113         recomputeRowsValidState(false);
114         getModel().setModify(false);
115     }
116 
117     /**
118      * <p>clearTable.</p>
119      */
120     public void clearTable() {
121 
122         // Suppression des servicesControle dans le model
123         getModel().setBeans(null);
124 
125         // Desactivation du bouton nouveau
126         getUI().getAddDepartmentButton().setEnabled(false);
127     }
128 
129     /** {@inheritDoc} */
130     @Override
131     public AbstractReefDbTableModel<ControlDepartmentTableRowModel> getTableModel() {
132         return (ControlDepartmentTableModel) getTable().getModel();
133     }
134 
135     /** {@inheritDoc} */
136     @Override
137     public SwingTable getTable() {
138         return ui.getControlDepartmentTable();
139     }
140 
141     /**
142      * <p>openAddDialog.</p>
143      */
144     void openAddDialog() {
145         SelectFilterUI dialog = new SelectFilterUI(getContext(), FilterTypeValues.DEPARTMENT.getFilterTypeId());
146         dialog.setTitle(t("reefdb.filter.department.addDialog.title"));
147         List<DepartmentDTO> departments = getModel().getBeans().stream()
148                 .sorted(getDecorator(DepartmentDTO.class, null).getCurrentComparator())
149                 // set existing referential as read only to 'fix' these beans on double list
150                 .peek(department -> department.setReadOnly(true))
151                 .collect(Collectors.toList());
152 
153         dialog.getModel().setSelectedElements(departments);
154 
155         if (!getModel().getParentModel().getSelectedRuleList().isLocal()) {
156             // filter only national programs if rule list is national
157             dialog.getHandler().getFilterElementUIHandler().forceLocal(false);
158         }
159 
160         openDialog(dialog, new Dimension(1024, 720));
161 
162         if (dialog.getModel().isValid()) {
163 
164             List<DepartmentDTO> newDepartments = dialog.getModel().getSelectedElements().stream()
165                     .map(element -> ((DepartmentDTO) element))
166                     .filter(newDepartment -> !getModel().getBeans().contains(newDepartment))
167                     .collect(Collectors.toList());
168 
169             if (!newDepartments.isEmpty()) {
170                 getModel().addBeans(newDepartments);
171                 getModel().setModify(true);
172                 saveToParentModel();
173             }
174         }
175     }
176 
177     /**
178      * <p>removeDepartments.</p>
179      */
180     void removeDepartments() {
181         getModel().deleteSelectedRows();
182         saveToParentModel();
183     }
184 
185     private void saveToParentModel() {
186         getModel().getParentModel().getSelectedRuleList().setDepartments(getModel().getBeans());
187         recomputeRowsValidState(false);
188 
189         getModel().firePropertyChanged(AbstractReefDbBeanUIModel.PROPERTY_MODIFY, null, true);
190 
191     }
192 
193 }