| ... |
... |
@@ -67,11 +67,6 @@ public class NavigationTree extends JXTree { |
|
67
|
67
|
private static final Logger log = LogManager.getLogger(NavigationTree.class);
|
|
68
|
68
|
private final ImmutableList<SelectNodeStrategy> selectNodeStrategies;
|
|
69
|
69
|
|
|
70
|
|
- /**
|
|
71
|
|
- * To block node expand.
|
|
72
|
|
- */
|
|
73
|
|
- private boolean skipExpand;
|
|
74
|
|
-
|
|
75
|
70
|
public NavigationTree() {
|
|
76
|
71
|
super(new NavigationTreeModel(NavigationTreeModelInitializerApplicationComponent.value()));
|
|
77
|
72
|
|
| ... |
... |
@@ -88,29 +83,8 @@ public class NavigationTree extends JXTree { |
|
88
|
83
|
|
|
89
|
84
|
@Override
|
|
90
|
85
|
public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException {
|
|
|
86
|
+ //FIXME check this is working ?
|
|
91
|
87
|
getSelectionModel().fireTreeWillCollapseEvent(event);
|
|
92
|
|
-// if (!(getModel() instanceof NavigationTreeModel)) {
|
|
93
|
|
-// return;
|
|
94
|
|
-// }
|
|
95
|
|
-// NavigationTreeNodeSupport node = (NavigationTreeNodeSupport) event.getPath().getLastPathComponent();
|
|
96
|
|
-//
|
|
97
|
|
-// // le seul posant problème est la fermeture d'un noeud parent
|
|
98
|
|
-// // du noeud courant : cela va changer la selection
|
|
99
|
|
-// NavigationTreeNodeSupport selectedNode = getSelectedNode();
|
|
100
|
|
-// if (selectedNode == null) {
|
|
101
|
|
-// // pas de noeud selectionne
|
|
102
|
|
-// return;
|
|
103
|
|
-// }
|
|
104
|
|
-//
|
|
105
|
|
-// if (selectedNode.equals(node) || !selectedNode.isNodeAncestor(node)) {
|
|
106
|
|
-// return;
|
|
107
|
|
-// }
|
|
108
|
|
- //FIXME Move this in a listener
|
|
109
|
|
-// boolean canChange = contentUIManager.closeSelectedContentUI();
|
|
110
|
|
-// if (!canChange) {
|
|
111
|
|
-// throw new ExpandVetoException(event, "Can not collapse node " + event.getPath());
|
|
112
|
|
-// }
|
|
113
|
|
-
|
|
114
|
88
|
}
|
|
115
|
89
|
});
|
|
116
|
90
|
addTreeSelectionListener(e -> {
|
| ... |
... |
@@ -142,16 +116,7 @@ public class NavigationTree extends JXTree { |
|
142
|
116
|
}
|
|
143
|
117
|
|
|
144
|
118
|
private void openNode(TreePath path) {
|
|
145
|
|
-// TreePath path = e.getPath();
|
|
146
|
|
- NavigationTreeNodeSupport selectedNode = (NavigationTreeNodeSupport) path.getLastPathComponent();
|
|
147
|
|
- try {
|
|
148
|
|
- getModel().open((NavigationTreeNodeSupport) path.getLastPathComponent());
|
|
149
|
|
- } finally {
|
|
150
|
|
- if (!isSkipExpand() && !selectedNode.isLeaf()) {
|
|
151
|
|
- log.info(String.format("will expand node: %s from selection.", path));
|
|
152
|
|
- SwingUtilities.invokeLater(() -> expandPath(path));
|
|
153
|
|
- }
|
|
154
|
|
- }
|
|
|
119
|
+ getModel().open((NavigationTreeNodeSupport<?>) path.getLastPathComponent());
|
|
155
|
120
|
}
|
|
156
|
121
|
|
|
157
|
122
|
@Override
|
| ... |
... |
@@ -164,24 +129,17 @@ public class NavigationTree extends JXTree { |
|
164
|
129
|
return (NavigationTreeSelectionModel) super.getSelectionModel();
|
|
165
|
130
|
}
|
|
166
|
131
|
|
|
167
|
|
- public boolean isSkipExpand() {
|
|
168
|
|
- return skipExpand;
|
|
169
|
|
- }
|
|
170
|
|
-
|
|
171
|
|
- public void setSkipExpand(boolean skipExpand) {
|
|
172
|
|
- this.skipExpand = skipExpand;
|
|
173
|
|
- }
|
|
174
|
|
-
|
|
175
|
132
|
public void addNavigationTreeSelectionListener(NavigationTreeSelectionListener x) {
|
|
176
|
133
|
getSelectionModel().addNavigationTreeSelectionListener(x);
|
|
177
|
134
|
}
|
|
178
|
135
|
|
|
|
136
|
+ @SuppressWarnings("unused")
|
|
179
|
137
|
public void removeNavigationTreeSelectionListener(NavigationTreeSelectionListener x) {
|
|
180
|
138
|
getSelectionModel().removeNavigationTreeSelectionListener(x);
|
|
181
|
139
|
}
|
|
182
|
140
|
|
|
183
|
|
- public NavigationTreeNodeSupport getSelectedNode() {
|
|
184
|
|
- return isSelectionEmpty() ? null : (NavigationTreeNodeSupport) getSelectionPath().getLastPathComponent();
|
|
|
141
|
+ public NavigationTreeNodeSupport<?> getSelectedNode() {
|
|
|
142
|
+ return isSelectionEmpty() || getSelectionPath() == null ? null : (NavigationTreeNodeSupport<?>) getSelectionPath().getLastPathComponent();
|
|
185
|
143
|
}
|
|
186
|
144
|
|
|
187
|
145
|
/**
|
| ... |
... |
@@ -204,18 +162,18 @@ public class NavigationTree extends JXTree { |
|
204
|
162
|
}
|
|
205
|
163
|
|
|
206
|
164
|
/**
|
|
207
|
|
- * Selects the given {@code node} in the registred tree.
|
|
|
165
|
+ * Selects the given {@code node} in the registered tree.
|
|
208
|
166
|
*
|
|
209
|
167
|
* @param node the node to select
|
|
210
|
168
|
*/
|
|
211
|
|
- public void selectNode(NavigationTreeNodeSupport node) {
|
|
|
169
|
+ public void selectNode(NavigationTreeNodeSupport<?> node) {
|
|
212
|
170
|
log.info("try to select node [" + node + "]");
|
|
213
|
171
|
TreePath path = new TreePath(getModel().getPathToRoot(node));
|
|
214
|
172
|
setSelectionPath(path);
|
|
215
|
173
|
SwingUtilities.invokeLater(() -> scrollPathToVisible(path));
|
|
216
|
174
|
}
|
|
217
|
175
|
|
|
218
|
|
- public NavigationTreeNodeSupport getChild(NavigationTreeNodeSupport node, String id) {
|
|
|
176
|
+ public NavigationTreeNodeSupport<?> getChild(NavigationTreeNodeSupport<?> node, String id) {
|
|
219
|
177
|
return node.findChildById(id);
|
|
220
|
178
|
}
|
|
221
|
179
|
|
| ... |
... |
@@ -239,20 +197,13 @@ public class NavigationTree extends JXTree { |
|
239
|
197
|
insertNode(parentNode, node, position);
|
|
240
|
198
|
}
|
|
241
|
199
|
|
|
242
|
|
- public void clearModel() {
|
|
243
|
|
- getModel().clear();
|
|
244
|
|
- }
|
|
245
|
|
-
|
|
246
|
200
|
/**
|
|
247
|
|
- * Sélectionne le noeud dans l'arbre de navigation.
|
|
248
|
|
- *
|
|
249
|
|
- * <b>Note:</b> cette méthode doit être appelée après un rechargement du
|
|
250
|
|
- * modèle de navigation.
|
|
|
201
|
+ * Select initial node when data source just opened.
|
|
251
|
202
|
*/
|
|
252
|
203
|
public void selectInitialNode() {
|
|
253
|
204
|
|
|
254
|
205
|
log.debug("Will select initial node...");
|
|
255
|
|
- NavigationTreeNodeSupport selectedNode = null;
|
|
|
206
|
+ NavigationTreeNodeSupport<?> selectedNode = null;
|
|
256
|
207
|
for (SelectNodeStrategy selectNodeStrategy : selectNodeStrategies) {
|
|
257
|
208
|
Optional<NavigationTreeNodeSupport<?>> optionalSelectedNode = selectNodeStrategy.get();
|
|
258
|
209
|
if (optionalSelectedNode.isPresent()) {
|
| ... |
... |
@@ -267,28 +218,12 @@ public class NavigationTree extends JXTree { |
|
267
|
218
|
SwingUtilities.invokeLater(this::grabFocus);
|
|
268
|
219
|
}
|
|
269
|
220
|
|
|
270
|
|
-// public void reloadNodeSubTree(NavigationTreeNodeSupport node) {
|
|
271
|
|
-// Objects.requireNonNull(node, "node is null, we can not reload its structure");
|
|
272
|
|
-//
|
|
273
|
|
-// // 1. Let's clear node structure
|
|
274
|
|
-// while (node.getChildCount() > 0) {
|
|
275
|
|
-// removeNode((NavigationTreeNodeSupport) node.getFirstChild());
|
|
276
|
|
-// }
|
|
277
|
|
-//
|
|
278
|
|
-// // 3. Let's re-generate node's value by populating the node : this will call the child loaders.
|
|
279
|
|
-// node.updateNode();
|
|
280
|
|
-//
|
|
281
|
|
-// // Fix bug (if no child in parent node, it will not expand...)
|
|
282
|
|
-// fireTreeExpanded(new TreePath(node.getPath()));
|
|
283
|
|
-//
|
|
284
|
|
-// }
|
|
285
|
|
-
|
|
286
|
221
|
public void reloadNode(MutableTreeNode node, boolean deep) {
|
|
287
|
222
|
|
|
288
|
|
- log.debug("Will refresh (deep ? " + deep + ") node " + node);
|
|
|
223
|
+ log.debug(String.format("Will refresh (deep ? %s) node %s", deep, node));
|
|
289
|
224
|
getModel().nodeChanged(node);
|
|
290
|
225
|
if (deep) {
|
|
291
|
|
- // repaint childs nodes
|
|
|
226
|
+ // repaint children nodes
|
|
292
|
227
|
@SuppressWarnings("unchecked")
|
|
293
|
228
|
Enumeration<NavigationTreeNodeSupport<?>> e = (Enumeration<NavigationTreeNodeSupport<?>>) node.children();
|
|
294
|
229
|
while (e.hasMoreElements()) {
|
| ... |
... |
@@ -299,24 +234,24 @@ public class NavigationTree extends JXTree { |
|
299
|
234
|
|
|
300
|
235
|
}
|
|
301
|
236
|
|
|
302
|
|
- public void reloadSelectedNode(boolean refreshFromParent, boolean refreshChilds) {
|
|
303
|
|
- NavigationTreeNodeSupport node = getSelectedNode();
|
|
|
237
|
+ public void reloadSelectedNode(boolean refreshFromParent, boolean refreshChildren) {
|
|
|
238
|
+ NavigationTreeNodeSupport<?> node = getSelectedNode();
|
|
304
|
239
|
node.setLoaded(false);
|
|
305
|
240
|
|
|
306
|
241
|
if (refreshFromParent) {
|
|
307
|
242
|
node = node.getParent();
|
|
308
|
243
|
}
|
|
309
|
|
- reloadNode(node, refreshChilds);
|
|
|
244
|
+ reloadNode(node, refreshChildren);
|
|
310
|
245
|
}
|
|
311
|
246
|
|
|
312
|
247
|
public <D extends IdDto, R extends DtoReference<D, R>> void addUnsavedNode(MultipleReferenceContainerNode<D, R> parentNode) {
|
|
313
|
|
- ReferenceNode<D, R> result = parentNode.newChildNode(((NavigationTreeNodeSupport) parentNode).getId());
|
|
|
248
|
+ ReferenceNode<D, R> result = parentNode.newChildNode(((NavigationTreeNodeSupport<?>) parentNode).getId());
|
|
314
|
249
|
insertNode(parentNode, result);
|
|
315
|
250
|
afterAddUnsavedNode(parentNode, result);
|
|
316
|
251
|
}
|
|
317
|
252
|
|
|
318
|
253
|
public void addUnsavedNode(SingleReferenceContainerNode<?, ?> parentNode) {
|
|
319
|
|
- ReferenceNode<?, ?> result = parentNode.newSingleChildNode(((NavigationTreeNodeSupport) parentNode).getId());
|
|
|
254
|
+ ReferenceNode<?, ?> result = parentNode.newSingleChildNode(((NavigationTreeNodeSupport<?>) parentNode).getId());
|
|
320
|
255
|
insertNode(parentNode, result, parentNode.getChildCount());
|
|
321
|
256
|
afterAddUnsavedNode(parentNode, result);
|
|
322
|
257
|
}
|
| ... |
... |
@@ -326,7 +261,7 @@ public class NavigationTree extends JXTree { |
|
326
|
261
|
afterAddUnsavedNode(parentNode, result);
|
|
327
|
262
|
}
|
|
328
|
263
|
|
|
329
|
|
- private void afterAddUnsavedNode(MutableTreeNode parentNode, ReferenceNode result) {
|
|
|
264
|
+ private void afterAddUnsavedNode(MutableTreeNode parentNode, ReferenceNode<?,?> result) {
|
|
330
|
265
|
|
|
331
|
266
|
// refresh parent node (render of parent can have changed)
|
|
332
|
267
|
reloadNode(parentNode, true);
|
| ... |
... |
@@ -342,7 +277,7 @@ public class NavigationTree extends JXTree { |
|
342
|
277
|
return getModel().getRoot();
|
|
343
|
278
|
}
|
|
344
|
279
|
|
|
345
|
|
- public void updateNode(NavigationTreeNodeSupport node) {
|
|
|
280
|
+ public void updateNode(NavigationTreeNodeSupport<?> node) {
|
|
346
|
281
|
node.updateNode();
|
|
347
|
282
|
getModel().nodeStructureChanged(node);
|
|
348
|
283
|
}
|
| ... |
... |
@@ -360,12 +295,12 @@ public class NavigationTree extends JXTree { |
|
360
|
295
|
getModel().nodeStructureChanged(parentNode);
|
|
361
|
296
|
}
|
|
362
|
297
|
|
|
363
|
|
- public NavigationTreeNodeSupport getReferentialNode(String name) {
|
|
|
298
|
+ public NavigationTreeNodeSupport<?> getReferentialNode(String name) {
|
|
364
|
299
|
RootNavigationTreeNode root = getModel().getRoot();
|
|
365
|
300
|
return getModel().findNode(root, name);
|
|
366
|
301
|
}
|
|
367
|
302
|
|
|
368
|
|
- public NavigationTreeNodeSupport getEditNode(ObserveNavigationNode<?> editNode) {
|
|
|
303
|
+ public NavigationTreeNodeSupport<?> getEditNode(ObserveNavigationNode<?> editNode) {
|
|
369
|
304
|
ImmutableList<ObserveNavigationNode<?>> nodesFromRoot = editNode.getNodesFromRoot();
|
|
370
|
305
|
NavigationTreeNodeSupport<?> result = getModel().getRoot();
|
|
371
|
306
|
for (ObserveNavigationNode<?> currentEditNode : nodesFromRoot) {
|
| ... |
... |
@@ -386,20 +321,13 @@ public class NavigationTree extends JXTree { |
|
386
|
321
|
Class<R> referenceType = DtoModelHelper.getReferenceType(editNode.getType());
|
|
387
|
322
|
// got to container
|
|
388
|
323
|
MultipleReferenceContainerNode<D, R> containerNode = MultipleReferenceContainerNode.downToReferenceContainerNode(referenceType, selectedNode);
|
|
389
|
|
- if (!((NavigationTreeNodeSupport) containerNode).isLoaded()) {
|
|
390
|
|
- ((NavigationTreeNodeSupport) containerNode).populateChildren();
|
|
|
324
|
+ if (!((NavigationTreeNodeSupport<?>) containerNode).isLoaded()) {
|
|
|
325
|
+ ((NavigationTreeNodeSupport<?>) containerNode).populateChildren();
|
|
391
|
326
|
}
|
|
392
|
327
|
// got to reference
|
|
393
|
328
|
return ReferenceNode.downToReferenceNode(referenceType, editNode.getId(), containerNode);
|
|
394
|
329
|
}
|
|
395
|
330
|
|
|
396
|
|
-
|
|
397
|
|
-// public void refreshSelectedNode() {
|
|
398
|
|
-// NavigationTreeNodeSupport selectedNode = getSelectedNode();
|
|
399
|
|
-// selectedNode.reload();
|
|
400
|
|
-// getTreeModel().nodeChanged(selectedNode);
|
|
401
|
|
-// }
|
|
402
|
|
-
|
|
403
|
331
|
interface SelectNodeStrategy extends Supplier<Optional<NavigationTreeNodeSupport<?>>> {
|
|
404
|
332
|
}
|
|
405
|
333
|
|
| ... |
... |
@@ -409,7 +337,7 @@ public class NavigationTree extends JXTree { |
|
409
|
337
|
public Optional<NavigationTreeNodeSupport<?>> get() {
|
|
410
|
338
|
NavigationTreeNodeSupport<?> selectedNode = getModel().getRoot();
|
|
411
|
339
|
if (!selectedNode.isLeaf()) {
|
|
412
|
|
- selectedNode = (NavigationTreeNodeSupport) selectedNode.getFirstChild();
|
|
|
340
|
+ selectedNode = (NavigationTreeNodeSupport<?>) selectedNode.getFirstChild();
|
|
413
|
341
|
}
|
|
414
|
342
|
return Optional.ofNullable(selectedNode);
|
|
415
|
343
|
}
|