POC: lazy loading outline (WIP)
diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
index 122eb38..e33f60f 100644
--- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
+++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
@@ -707,7 +707,7 @@
* Runtime
*/
@Override
- protected final void initInternal() {
+ protected void initInternal() {
super.initInternal();
initTreeInternal();
interceptInitTree();
@@ -1097,7 +1097,7 @@
if (m_rootNode != null) {
m_rootNode.setTreeInternal(null, true);
// inform root of remove
- root.nodeRemovedNotify();
+ m_rootNode.nodeRemovedNotify();
}
m_rootNode = root;
if (m_rootNode != null) {
diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
index e0ca703..f035d00 100644
--- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
+++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
@@ -1208,7 +1208,10 @@
BEANS.get(ExceptionHandler.class).handle(e);
}
}
- m_outline.setNodeExpanded(m_outline.getRootNode(), true);
+ if (m_outline.getRootNode() != null) {
+ // XXX CGU Wieso macht man das hier und nicht in activate?
+ m_outline.setNodeExpanded(m_outline.getRootNode(), true);
+ }
setPageDetailForm(m_outline.getDetailForm());
setPageDetailTable(m_outline.getDetailTable());
setPageSearchForm(m_outline.getSearchForm(), true);
diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutline.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutline.java
index 23d9384..7878cab 100644
--- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutline.java
+++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutline.java
@@ -112,6 +112,14 @@
}
@Override
+ protected void initInternal() {
+ if (getRootNode() == null) {
+ return;
+ }
+ super.initInternal();
+ }
+
+ @Override
public ClientRunContext createDisplayParentRunContext() {
return ClientRunContexts
.copyCurrent()
@@ -301,14 +309,11 @@
TreeEvent.TYPE_NODES_CHECKED);
addNodeFilter(new P_TableFilterBasedTreeNodeFilter());
super.initConfig();
- IPage<?> rootPage = interceptCreateRootPage();
- setRootNode(rootPage);
+ setRootNode(null);
setVisible(getConfiguredVisible());
setOrder(calculateViewOrder());
setNavigateButtonsVisible(getConfiguredNavigateButtonsVisible());
setOutlineOverviewVisible(getConfiguredOutlineOverviewVisible());
- ensureDefaultDetailFormCreated();
- ensureDefaultDetailFormStarted();
}
@Override
@@ -814,6 +819,13 @@
@Override
public void activate() {
+ if (getRootNode() == null) {
+ IPage<?> rootPage = interceptCreateRootPage();
+ setRootNode(rootPage);
+ ensureDefaultDetailFormCreated();
+ ensureDefaultDetailFormStarted();
+ initInternal();
+ }
interceptActivated();
}
diff --git a/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/tree/JsonTree.java b/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/tree/JsonTree.java
index 21c245c..6a15ca2 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/tree/JsonTree.java
+++ b/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/tree/JsonTree.java
@@ -894,6 +894,9 @@
protected List<ITreeNode> getTopLevelNodes() {
ITreeNode rootNode = getModel().getRootNode();
+ if (rootNode == null) {
+ return new ArrayList<>();
+ }
if (getModel().isRootNodeVisible()) {
return CollectionUtility.arrayList(rootNode);
}