diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesController.java index 6f379964b..d986c5dbd 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesController.java @@ -122,6 +122,8 @@ public class OrderTemplatesController extends GenericForwardComposer implements } private void showEditWindow() { + // openTemplateTree is not called if it's the first tab shown + bindTemplatesTreeWithModel(); bindAdvancesComponentWithCurrentTemplate(); bindMaterialsControllerWithCurrentTemplate(); bindCriterionRequirementControllerWithCurrentTemplate(); @@ -219,6 +221,7 @@ public class OrderTemplatesController extends GenericForwardComposer implements if (isAllValid()) { model.confirmSave(); model.initEdit(getTemplate()); + bindTemplatesTreeWithModel(); messagesForUser.showMessage(Level.INFO, _("Template saved")); } } @@ -273,25 +276,40 @@ public class OrderTemplatesController extends GenericForwardComposer implements breadcrumbs.appendChild(new Label(_("Project Templates"))); } + /** + * Ensures that the tree component is correctly initialized. It's called + * from templates.zul page when selecting the tab. + *

+ * Please not that this method is not called if the first tab shown is the + * templates tree tab. + *

+ */ public void openTemplateTree() { if (treeComponent == null) { final TemplatesTreeController treeController = new TemplatesTreeController( model, this); treeComponent = (TreeComponent) editWindow.getFellow("orderElementTree"); treeComponent.useController(treeController); + controlSelectionWithOnClick(getTreeFrom(treeComponent)); treeController.setReadOnly(false); - } - - final Tree tree = (Tree) treeComponent.getFellowIfAny("tree"); - if (tree.getModel() == null) { setTreeRenderer(treeComponent); - reloadTree(treeComponent); } + bindTemplatesTreeWithModel(); } - private void reloadTree(TreeComponent orderElementsTree) { - final Tree tree = (Tree) orderElementsTree.getFellowIfAny("tree"); - tree.setModel(orderElementsTree.getController().getTreeModel()); + private void bindTemplatesTreeWithModel() { + if (treeComponent == null) { + // if the tree is not initialized yet no bind has to be done + return; + } + treeComponent.getController().bindModelIfNeeded(); + } + + private Tree getTreeFrom(TreeComponent treeComponent) { + return (Tree) treeComponent.getFellowIfAny("tree"); + } + + private void controlSelectionWithOnClick(final Tree tree) { tree.addEventListener(Events.ON_SELECT, new EventListener() { @Override public void onEvent(Event event) throws Exception { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeController.java index ff36f00c0..29dd4d744 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/tree/TreeController.java @@ -108,6 +108,12 @@ public abstract class TreeController> extends return (getModel() != null) ? getModel().asTree() : null; } + public void bindModelIfNeeded() { + if (tree.getModel() != getTreeModel()) { + tree.setModel(getTreeModel()); + } + } + protected abstract EntitiesTree getModel(); public void unindent() {