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.ui.swing.content.genericformat.tree.DataSelectTreeModel;
32  import fr.ifremer.tutti.ui.swing.content.genericformat.tree.ProgramSelectTreeNode;
33  import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler;
34  import jaxx.runtime.validator.swing.SwingValidator;
35  import org.apache.commons.logging.Log;
36  import org.apache.commons.logging.LogFactory;
37  import org.nuiton.jaxx.application.swing.util.CloseableUI;
38  
39  import javax.swing.JComponent;
40  import javax.swing.JTree;
41  import javax.swing.ToolTipManager;
42  import javax.swing.event.TreeModelEvent;
43  import javax.swing.event.TreeModelListener;
44  import javax.swing.tree.DefaultTreeModel;
45  import javax.swing.tree.TreeSelectionModel;
46  import java.beans.PropertyChangeEvent;
47  import java.beans.PropertyChangeListener;
48  import java.util.Set;
49  
50  /**
51   * Created on 3/29/15.
52   *
53   * @author Tony Chemit - chemit@codelutin.com
54   * @since 3.14.3
55   */
56  public class GenericFormatExportUIHandler extends AbstractTuttiUIHandler<GenericFormatExportUIModel, GenericFormatExportUI> implements CloseableUI {
57  
58      /** Logger. */
59      private static final Log log = LogFactory.getLog(GenericFormatExportUIHandler.class);
60  
61      @Override
62      public void beforeInit(GenericFormatExportUI ui) {
63  
64          super.beforeInit(ui);
65  
66          getDataContext().resetValidationDataContext();
67  
68          GenericFormatExportUIModel model = new GenericFormatExportUIModel();
69  
70          ui.setContextValue(model);
71  
72          model.addPropertyChangeListener(new PropertyChangeListener() {
73  
74              final Set<String> propertyNamesToCanExport = Sets.newHashSet(GenericFormatExportUIModel.PROPERTY_PROGRAM,
75                                                                           GenericFormatExportUIModel.PROPERTY_DATA_SELECTED);
76  
77              @Override
78              public void propertyChange(PropertyChangeEvent evt) {
79                  GenericFormatExportUIModel source = (GenericFormatExportUIModel) evt.getSource();
80                  String propertyName = evt.getPropertyName();
81  
82                  if (propertyNamesToCanExport.contains(propertyName)) {
83  
84                      boolean canExport = source.computeIsCanExport();
85                      source.setCanExport(canExport);
86  
87                  }
88  
89                  if (GenericFormatExportUIModel.PROPERTY_PROGRAM.equals(propertyName)) {
90  
91                      // Reload data + remove selection
92                      Program program = (Program) evt.getNewValue();
93                      onProgramChanged(program);
94  
95                  }
96  
97              }
98          });
99  
100     }
101 
102     @Override
103     public void afterInit(GenericFormatExportUI ui) {
104 
105         initUI(ui);
106 
107         GenericFormatExportUIModel model = getModel();
108         initBeanFilterableComboBox(ui.getProgramComboBox(),
109                                    Lists.newArrayList(getPersistenceService().getAllProgram()),
110                                    model.getProgram());
111 
112         SwingValidator validator = ui.getValidator();
113 
114         registerValidators(validator);
115 
116         JTree tree = ui.getDataSelectionTree();
117         tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
118         ToolTipManager.sharedInstance().registerComponent(tree);
119         DataSelectTreeModel.installDataSelectionHandler(tree);
120 
121         DataSelectTreeModel treeModel = ui.getTreeModel();
122         treeModel.addTreeModelListener(new TreeModelListener() {
123             @Override
124             public void treeNodesChanged(TreeModelEvent e) {
125 
126                 DataSelectTreeModel source = (DataSelectTreeModel) e.getSource();
127                 boolean dataSelected = source.isDataSelected();
128                 getModel().setDataSelected(dataSelected);
129 
130             }
131 
132             @Override
133             public void treeNodesInserted(TreeModelEvent e) {
134             }
135 
136             @Override
137             public void treeNodesRemoved(TreeModelEvent e) {
138             }
139 
140             @Override
141             public void treeStructureChanged(TreeModelEvent e) {
142 
143                 DataSelectTreeModel source = (DataSelectTreeModel) e.getSource();
144                 boolean dataSelected = source.isDataSelected();
145                 getModel().setDataSelected(dataSelected);
146 
147             }
148         });
149 
150         if (getDataContext().isProgramFilled()) {
151 
152             Program program = getDataContext().getProgram();
153 
154             if (log.isInfoEnabled()) {
155                 log.info("Using selected program " + program);
156             }
157 
158             model.setProgram(program);
159 
160         }
161 
162     }
163 
164     @Override
165     protected JComponent getComponentToFocus() {
166         return getUI().getProgramComboBox();
167     }
168 
169     @Override
170     public void onCloseUI() {
171         if (log.isDebugEnabled()) {
172             log.debug("closing: " + ui);
173         }
174         clearValidators();
175     }
176 
177     @Override
178     public boolean quitUI() {
179         return true;
180     }
181 
182     @Override
183     public SwingValidator<GenericFormatExportUIModel> getValidator() {
184         return ui.getValidator();
185     }
186 
187     protected void onProgramChanged(Program program) {
188 
189         if (log.isInfoEnabled()) {
190             log.info("Program changed: " + program);
191         }
192 
193         ProgramSelectTreeNode root;
194         if (program == null) {
195 
196             root = null;
197 
198         } else {
199 
200             ProgramDataModel dataModel = getPersistenceService().loadProgram(program.getId(), true);
201             root = new ProgramSelectTreeNode(dataModel);
202 
203         }
204 
205         DefaultTreeModel treeModel = (DefaultTreeModel) ui.getDataSelectionTree().getModel();
206         treeModel.setRoot(root);
207         getModel().setRootNode(root);
208 
209     }
210 
211 }