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.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
53
54
55
56
57 public class GenericFormatImportUIHandler extends AbstractTuttiUIHandler<GenericFormatImportUIModel, GenericFormatImportUI> implements CloseableUI {
58
59
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
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 }