1 package fr.ifremer.tutti.ui.swing.content.genericformat;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
52
53
54
55
56 public class GenericFormatExportUIHandler extends AbstractTuttiUIHandler<GenericFormatExportUIModel, GenericFormatExportUI> implements CloseableUI {
57
58
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
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 }