View Javadoc
1   package fr.ifremer.tutti.ui.swing.content.genericformat;
2   
3   /*
4    * #%L
5    * Tutti :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2012 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU General Public License as
13   * published by the Free Software Foundation, either version 3 of the
14   * License, or (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 General Public
22   * License along with this program.  If not, see
23   * <http://www.gnu.org/licenses/gpl-3.0.html>.
24   * #L%
25   */
26  
27  import com.google.common.collect.Lists;
28  import com.google.common.collect.Sets;
29  import fr.ifremer.tutti.persistence.entities.data.Program;
30  import fr.ifremer.tutti.persistence.model.ProgramDataModel;
31  import fr.ifremer.tutti.service.genericformat.GenericFormatValidateFileResult;
32  import fr.ifremer.tutti.ui.swing.content.genericformat.tree.DataSelectTreeModel;
33  import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode;
34  import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
35  import jaxx.runtime.validator.swing.SwingValidator;
36  import org.apache.commons.logging.Log;
37  import org.apache.commons.logging.LogFactory;
38  import org.nuiton.jaxx.application.swing.util.CloseableUI;
39  
40  import javax.swing.JComponent;
41  import javax.swing.JTree;
42  import javax.swing.ToolTipManager;
43  import javax.swing.event.TreeModelEvent;
44  import javax.swing.event.TreeModelListener;
45  import javax.swing.tree.DefaultTreeModel;
46  import javax.swing.tree.TreeSelectionModel;
47  import java.beans.PropertyChangeEvent;
48  import java.beans.PropertyChangeListener;
49  import java.util.Set;
50  
51  /**
52   * Created on 2/24/15.
53   *
54   * @author Tony Chemit - chemit@codelutin.com
55   * @since 3.14
56   */
57  public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<GenericFormatImportUIModel, GenericFormatImportUI> implements CloseableUI {
58  
59      /** Logger. */
60      private static final Log log = LogFactory.getLog(GenericFormatImportUIHandler.class);
61  
62      @Override
63      public void beforeInit(GenericFormatImportUI ui) {
64  
65          super.beforeInit(ui);
66  
67          getDataContext().resetValidationDataContext();
68  
69          GenericFormatImportUIModel model = new GenericFormatImportUIModel();
70  
71          if (getContext().isProgramFilled()) {
72  
73              String programId = getContext().getProgramId();
74  
75              if (log.isInfoEnabled()) {
76                  log.info("Using selected program " + programId);
77              }
78              // load existing program
79              Program program = getPersistenceService().getProgram(programId);
80  
81              model.setProgram(program);
82          }
83  
84          ui.setContextValue(model);
85  
86          model.addPropertyChangeListener(new PropertyChangeListener() {
87  
88              final Set<String> propertyNamesToCanValidate = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_IMPORT_FILE,
89                      GenericFormatImportUIModel.PROPERTY_PROGRAM,
90                      GenericFormatImportUIModel.PROPERTY_AUTHORIZE_OBSOLETE_REFERENTIALS);
91  
92              final Set<String> propertyNamesToCanImport = Sets.newHashSet(GenericFormatImportUIModel.PROPERTY_VALIDATE_DONE,
93                      GenericFormatImportUIModel.PROPERTY_PROGRAM,
94                      GenericFormatImportUIModel.PROPERTY_VALIDATE_RESULT,
95                      GenericFormatImportUIModel.PROPERTY_DATA_SELECTED);
96  
97              @Override
98              public void propertyChange(PropertyChangeEvent evt) {
99                  GenericFormatImportUIModel source = (GenericFormatImportUIModel) evt.getSource();
100                 String propertyName = evt.getPropertyName();
101 
102                 if (propertyNamesToCanValidate.contains(propertyName)) {
103 
104                     boolean canValidate = source.computeIsCanValidate();
105                     source.setCanValidate(canValidate);
106                     source.setValidateResult(null);
107                     source.setValidateReportFile(null);
108 
109                 }
110 
111                 if (propertyNamesToCanImport.contains(propertyName)) {
112 
113                     boolean canImport = source.computeIsCanImport();
114                     source.setCanImport(canImport);
115                     source.setImportResult(null);
116                     source.setImportReportFile(null);
117 
118                 }
119 
120                 if (GenericFormatImportUIModel.PROPERTY_CAN_VALIDATE.equals(propertyName)) {
121 
122                     if (!(boolean) evt.getNewValue()) {
123                         getUI().getValidateResultPanel().setVisible(false);
124                     }
125                 }
126 
127                 if (GenericFormatImportUIModel.PROPERTY_CAN_IMPORT.equals(propertyName)) {
128 
129                     if (!(boolean) evt.getNewValue()) {
130                         getUI().getImportResultPanel().setVisible(false);
131                     }
132                 }
133 
134                 if (GenericFormatImportUIModel.PROPERTY_VALIDATE_RESULT.equals(propertyName)) {
135 
136                     onValidateResultChanged((GenericFormatValidateFileResult) evt.getNewValue());
137 
138                 }
139             }
140         });
141 
142     }
143 
144     @Override
145     public void afterInit(GenericFormatImportUI ui) {
146 
147         initUI(ui);
148 
149         JTree tree = ui.getDataSelectionTree();
150         tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
151         ToolTipManager.sharedInstance().registerComponent(tree);
152         DataSelectTreeModel.installDataSelectionHandler(tree);
153 
154         DataSelectTreeModel treeModel = ui.getTreeModel();
155         treeModel.addTreeModelListener(new TreeModelListener() {
156             @Override
157             public void treeNodesChanged(TreeModelEvent e) {
158 
159                 DataSelectTreeModel source = (DataSelectTreeModel) e.getSource();
160                 boolean dataSelected = source.isDataSelected();
161                 getModel().setDataSelected(dataSelected);
162 
163             }
164 
165             @Override
166             public void treeNodesInserted(TreeModelEvent e) {
167             }
168 
169             @Override
170             public void treeNodesRemoved(TreeModelEvent e) {
171             }
172 
173             @Override
174             public void treeStructureChanged(TreeModelEvent e) {
175 
176                 DataSelectTreeModel source = (DataSelectTreeModel) e.getSource();
177                 boolean dataSelected = source.isDataSelected();
178                 getModel().setDataSelected(dataSelected);
179 
180             }
181         });
182 
183         GenericFormatImportUIModel model = getModel();
184         initBeanFilterableComboBox(ui.getProgramComboBox(),
185                 Lists.newArrayList(getPersistenceService().getAllProgram()),
186                 model.getProgram());
187 
188         SwingValidator validator = ui.getValidator();
189 
190         registerValidators(validator);
191 
192     }
193 
194     @Override
195     protected JComponent getComponentToFocus() {
196         return getUI().getProgramComboBox();
197     }
198 
199     @Override
200     public void onCloseUI() {
201         if (log.isDebugEnabled()) {
202             log.debug("closing: " + ui);
203         }
204         clearValidators();
205     }
206 
207     @Override
208     public boolean quitUI() {
209         return true;
210     }
211 
212     @Override
213     public SwingValidator<GenericFormatImportUIModel> getValidator() {
214         return ui.getValidator();
215     }
216 
217     private void onValidateResultChanged(GenericFormatValidateFileResult validateFileResult) {
218 
219         ProgramSelectTreeNode root;
220         if (validateFileResult == null) {
221 
222             root = null;
223 
224         } else {
225 
226             ProgramDataModel dataModel = validateFileResult.getDataModel();
227             root = new ProgramSelectTreeNode(dataModel);
228 
229         }
230 
231         DefaultTreeModel treeModel = (DefaultTreeModel) ui.getDataSelectionTree().getModel();
232         treeModel.setRoot(root);
233         getModel().setRootNode(root);
234 
235     }
236 
237 }