diff --git a/magnolia-ui-dialog/src/main/java/info/magnolia/ui/dialog/setup/DialogMigrationTask.java b/magnolia-ui-dialog/src/main/java/info/magnolia/ui/dialog/setup/DialogMigrationTask.java index 6a5a7be..053097e 100644 --- a/magnolia-ui-dialog/src/main/java/info/magnolia/ui/dialog/setup/DialogMigrationTask.java +++ b/magnolia-ui-dialog/src/main/java/info/magnolia/ui/dialog/setup/DialogMigrationTask.java @@ -78,6 +78,7 @@ private final String moduleName; private static final String propertyNameExtends = "extends"; private static final String propertyNameReference = "reference"; + private static final String propertyValueParentPath = "../"; private final HashSet extendsAndReferenceProperty = new HashSet(); private ControlMigratorsRegistry controlMigratorsRegistry; @@ -252,7 +253,7 @@ */ private void handleAction(Node dialog) throws RepositoryException { // Create actions node - dialog.addNode("actions", NodeTypes.ContentNode.NAME); + NodeUtil.createPath(dialog, "actions", NodeTypes.ContentNode.NAME); Node actionsNode = dialog.getNode("actions"); List actions = dialogActionsToMigrate.get(defaultDialogActions); @@ -271,9 +272,9 @@ * Handle Tabs. */ private void handleTabs(Node dialog, Iterator tabNodes) throws RepositoryException { - Node form = dialog.addNode("form", NodeTypes.ContentNode.NAME); + Node form = NodeUtil.createPath(dialog, "form", NodeTypes.ContentNode.NAME); handleFormLabels(dialog, form); - Node dialogTabs = form.addNode("tabs", NodeTypes.ContentNode.NAME); + Node dialogTabs = NodeUtil.createPath(form, "tabs", NodeTypes.ContentNode.NAME); while (tabNodes.hasNext()) { Node tab = tabNodes.next(); // Handle Fields Tab @@ -307,29 +308,28 @@ * Handle a Tab. */ private void handleTab(Node tab) throws RepositoryException { - if ((tab.hasProperty("controlType") && StringUtils.equals(tab.getProperty("controlType").getString(), "tab")) || (tab.getParent().hasProperty(propertyNameExtends))) { - if (tab.hasProperty("controlType") && StringUtils.equals(tab.getProperty("controlType").getString(), "tab")) { - // Remove controlType Property - tab.getProperty("controlType").remove(); - } - // get all controls to be migrated - Iterator controls = NodeUtil.getNodes(tab, NodeTypes.ContentNode.NAME).iterator(); - // create a fields Node - Node fields = tab.addNode("fields", NodeTypes.ContentNode.NAME); + handleTabConfig(tab); + // Handle inheritable + tab = tab.hasNode("inheritable") ? tab.getNode("inheritable") : tab; + handleExtendsAndReference(tab); + } - while (controls.hasNext()) { - Node control = controls.next(); - // Handle fields - handleField(control); - // Move to fields - NodeUtil.moveNode(control, fields); - } - } else if (tab.hasNode("inheritable")) { - // Handle inheritable - Node inheritable = tab.getNode("inheritable"); - handleExtendsAndReference(inheritable); - } else { - handleExtendsAndReference(tab); + private void handleTabConfig(Node tab) throws RepositoryException { + if (tab.hasProperty("controlType") && StringUtils.equals(tab.getProperty("controlType").getString(), "tab")) { + // Remove controlType Property + tab.getProperty("controlType").remove(); + } + // get all controls to be migrated + Iterator controls = NodeUtil.getNodes(tab, NodeTypes.ContentNode.NAME).iterator(); + // create a fields Node + Node fields = NodeUtil.createPath(tab, "fields", NodeTypes.ContentNode.NAME); + + while (controls.hasNext()) { + Node control = controls.next(); + // Handle fields + handleField(control); + // Move to fields + NodeUtil.moveNode(control, fields); } } @@ -351,10 +351,9 @@ } log.warn("No field defined for control '{}' for node '{}'", controlTypeName, fieldNode.getPath()); } - } else { - // Handle Field Extends/Reference - handleExtendsAndReference(fieldNode); } + // Handle Field Extends/Reference + handleExtendsAndReference(fieldNode); } @@ -394,9 +393,17 @@ if (path.equals("override")) { continue; } + if (!isAbsoulutePath(p, path)) { - log.warn("Reference from propertyName '{}' to '{}' is an relative path and could not be linked. The initial value will be keeped", p.getPath(), path); - continue; + try { + String newPath = p.getNode().getNode(path).getPath(); + p.setValue(newPath); + log.info("Updated extends from parent relative path of node '{}' with original path '{}' by new path '{}'.", p.getPath(), path, newPath); + path = newPath; + } catch (RepositoryException re) { + log.warn("Reference from propertyName '{}' to '{}' is an relative path and could not be linked. The initial value will be keeped", p.getPath(), path); + continue; + } } if (!p.getSession().nodeExists(path)) { diff --git a/magnolia-ui-dialog/src/test/java/info/magnolia/ui/dialog/setup/DialogMigrationTaskTest.java b/magnolia-ui-dialog/src/test/java/info/magnolia/ui/dialog/setup/DialogMigrationTaskTest.java index 39463f4..12290bf 100644 --- a/magnolia-ui-dialog/src/test/java/info/magnolia/ui/dialog/setup/DialogMigrationTaskTest.java +++ b/magnolia-ui-dialog/src/test/java/info/magnolia/ui/dialog/setup/DialogMigrationTaskTest.java @@ -233,6 +233,7 @@ assertEquals("Check relative path reference", "/modules/testModule/dialogs/generic/teasers/highlighted", dialogNode.getNode("generic/master/baseTeaserList/form/tabs/tabTeaser/fields/highlighted").getProperty("extends").getString()); assertTrue(dialogNode.hasNode("generic/master/basePageProperties/form/tabs/tabMetaData")); assertEquals("/modules/testModule/dialogs/generic/pages/tabMetaData", dialogNode.getNode("generic/master/basePageProperties/form/tabs/tabMetaData").getProperty("extends").getString()); - assertEquals("Do not change invalid path", "../../../teasers/highlighted", dialogNode.getNode("generic/master/baseTeaserGroup/form/tabs/tabTeaser/fields/highlighted").getProperty("extends").getString()); + assertEquals("Change valid path", "/modules/testModule/dialogs/generic/teasers/highlighted", dialogNode.getNode("generic/master/baseTeaserGroup/form/tabs/tabTeaser/fields/highlighted").getProperty("extends").getString()); + } } diff --git a/magnolia-ui-dialog/src/test/resources/config.modules.standard-templating-kit.dialogs.generic.xml b/magnolia-ui-dialog/src/test/resources/config.modules.standard-templating-kit.dialogs.generic.xml index 8d4f2f8..49bd6ac 100644 --- a/magnolia-ui-dialog/src/test/resources/config.modules.standard-templating-kit.dialogs.generic.xml +++ b/magnolia-ui-dialog/src/test/resources/config.modules.standard-templating-kit.dialogs.generic.xml @@ -2693,7 +2693,7 @@ d03ef51c-ff87-4c9e-aa76-a80bbe1c5929 - ../../../teasers/highlightedaaaa + ../../../../teasers/highlightedaaaa admin @@ -3934,7 +3934,7 @@ 23851ef6-71a1-4f0f-b668-09da4419311a - /modules/testModule/dialogs/generic/teasers/highlighted + ../../../baseTeaserGroup/tabTeaser/title admin