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