View Javadoc
1   package fr.ifremer.dali.ui.swing.content.synchro.changes;
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.decorator.DecoratorService;
27  import fr.ifremer.dali.dto.system.synchronization.SynchroChangesDTO;
28  import fr.ifremer.dali.dto.system.synchronization.SynchroTableDTO;
29  import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableModel;
30  import fr.ifremer.dali.ui.swing.util.table.AbstractDaliTableUIHandler;
31  import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
32  import org.apache.commons.collections4.CollectionUtils;
33  import org.jdesktop.swingx.table.TableColumnExt;
34  import org.nuiton.i18n.I18n;
35  
36  import javax.swing.JScrollPane;
37  import javax.swing.SortOrder;
38  
39  /**
40   * Controleur pour la zone des programmes.
41   */
42  public class SynchroChangesUIHandler extends AbstractDaliTableUIHandler<SynchroChangesRowModel, SynchroChangesUIModel, SynchroChangesUI> {
43  
44      /** {@inheritDoc} */
45      @Override
46      public void beforeInit(final SynchroChangesUI ui) {
47          super.beforeInit(ui);
48  
49          // create model and register to the JAXX context
50          final SynchroChangesUIModel model = new SynchroChangesUIModel();
51          ui.setContextValue(model);
52      }
53  
54      /** {@inheritDoc} */
55      @Override
56      public void afterInit(SynchroChangesUI ui) {
57  
58          // Init UI
59          initUI(ui);
60  
61          // Init list
62          initList();
63  
64          // Init table
65          initTable();
66  
67          // load change log?
68          //getModel().setBeans(programs);
69  
70          getTable().packAll();
71      }
72  
73      @SuppressWarnings("unchecked")
74      private void initList() {
75          getUI().getEntityTypeList().setCellRenderer(newListCellRender(SynchroTableDTO.class, DecoratorService.WITH_COUNT));
76  
77          getModel().addPropertyChangeListener(SynchroChangesUIModel.PROPERTY_CHANGES, evt -> populateList());
78  
79          getUI().getEntityTypeList().addListSelectionListener(e -> {
80              SynchroTableDTO selectedTable = getUI().getEntityTypeList().getSelectedValue();
81              populateTable(selectedTable);
82          });
83      }
84  
85      /**
86       * Initialisation de le tableau.
87       */
88      private void initTable() {
89  
90          // Get the main table
91          final SwingTable table = getTable();
92  
93          // Operation type
94          TableColumnExt operationTypeColumm = addColumn(
95                  null,
96                  new SynchroOperationTypeIconCellRenderer(getContext()),
97                  SynchroChangesTableModel.OPERATION_TYPE);
98          operationTypeColumm.setSortable(true);
99          operationTypeColumm.setMinWidth(30);
100         operationTypeColumm.setMaxWidth(30);
101         operationTypeColumm.setResizable(false);
102 
103         // Column name
104         final TableColumnExt columnName = addColumn(
105                 SynchroChangesTableModel.NAME);
106         columnName.setSortable(true);
107 
108         // Modele de la table
109         final SynchroChangesTableModel tableModel = new SynchroChangesTableModel(getTable().getColumnModel());
110         table.setModel(tableModel);
111 
112         // Les columns obligatoire sont toujours presentes
113         columnName.setHideable(false);
114 
115         table.setEditable(false);
116 
117         // Initialisation de la table
118         initTable(table);
119 
120         // Tri par defaut
121         table.setSortOrder(SynchroChangesTableModel.NAME, SortOrder.ASCENDING);
122 
123         getUI().getTableParent().setVisible(false);
124     }
125 
126 
127     /**
128      * <p>populateList.</p>
129      */
130     private void populateList() {
131         // Set tables from model, to the JList
132         SynchroChangesDTO synchroChanges = getModel().getChanges();
133         if (synchroChanges != null && CollectionUtils.isNotEmpty(synchroChanges.getTables())) {
134             SynchroTableDTO[] tables = synchroChanges.getTables().toArray(new SynchroTableDTO[synchroChanges.getTables().size()]);
135             getUI().getEntityTypeList().setListData(tables);
136         }
137         else {
138             getUI().getEntityTypeList().setListData(new SynchroTableDTO[0]);
139         }
140 
141         getModel().setValid(false);
142         //getUI().updateUI();
143         getTableParent().setVisible(false);
144     }
145 
146     /**
147      * <p>populateTable.</p>
148      *
149      * @param synchroTable a {@link fr.ifremer.dali.dto.system.synchronization.SynchroTableDTO} object.
150      */
151     private void populateTable(SynchroTableDTO synchroTable) {
152 
153         TableColumnExt nameColumn = getTable().getColumnExt(SynchroChangesTableModel.NAME);
154 
155         if (synchroTable == null
156                 || CollectionUtils.isEmpty(synchroTable.getRows())) {
157             getTableParent().setVisible(false);
158             nameColumn.setTitle(I18n.t("dali.synchro.changes.name.short.default"));
159         }
160         else {
161 
162             getTableParent().setVisible(true);
163             getUI().updateUI();
164             nameColumn.setTitle(I18n.t("dali.synchro.changes.name.short", decorate(synchroTable)));
165             getModel().setBeans(synchroTable.getRows());
166         }
167     }
168 
169 
170 
171     /** {@inheritDoc} */
172     @Override
173     public AbstractDaliTableModel<SynchroChangesRowModel> getTableModel() {
174         return (SynchroChangesTableModel) getTable().getModel();
175     }
176 
177     /** {@inheritDoc} */
178     @Override
179     public SwingTable getTable() {
180         return getUI().getTable();
181     }
182 
183     /**
184      * <p>getTableParent.</p>
185      *
186      * @return a {@link javax.swing.JScrollPane} object.
187      */
188     private JScrollPane getTableParent() {
189         return getUI().getTableParent();
190     }
191 
192     /**
193      * <p>cancel.</p>
194      */
195     public void cancel() {
196         getModel().setChangesValidated(false);
197         closeDialog();
198     }
199 
200     /**
201      * <p>confirm.</p>
202      */
203     public void confirm() {
204         getModel().setChangesValidated(true);
205         closeDialog();
206     }
207 
208     /* -- Internal methods -- */
209 }