Index: magnolia-content-translation/src/main/java/info/magnolia/translation/finder/DialogBasedPropertiesToTranslateFinder.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/magnolia-content-translation/src/main/java/info/magnolia/translation/finder/DialogBasedPropertiesToTranslateFinder.java b/magnolia-content-translation/src/main/java/info/magnolia/translation/finder/DialogBasedPropertiesToTranslateFinder.java --- a/magnolia-content-translation/src/main/java/info/magnolia/translation/finder/DialogBasedPropertiesToTranslateFinder.java (revision 2c7625ba885817a2c3f503820893860263bbafce) +++ b/magnolia-content-translation/src/main/java/info/magnolia/translation/finder/DialogBasedPropertiesToTranslateFinder.java (date 1611587622524) @@ -14,6 +14,7 @@ */ package info.magnolia.translation.finder; +import com.google.common.collect.Maps; import info.magnolia.config.registry.Registry; import info.magnolia.i18nsystem.I18nizer; import info.magnolia.jcr.util.NodeTypes; @@ -27,20 +28,18 @@ import info.magnolia.ui.dialog.FormDialogDefinition; import info.magnolia.ui.editor.FormDefinition; import info.magnolia.ui.form.definition.DefinitionConverter; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; -import javax.jcr.Node; -import javax.jcr.RepositoryException; - import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.collect.Maps; +import javax.inject.Inject; +import javax.jcr.Node; +import javax.jcr.RepositoryException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Finds the {@link javax.jcr.Property properties} to translate via {@link FormDialogDefinition dialogs}. @@ -66,7 +65,7 @@ * get it from the parent node.

*/ protected List determineDialogNames(Node node) { - final List dialogNames = new ArrayList<>(); + final Set dialogNames = new HashSet<>(); String templateName = null; boolean isArea = false; @@ -93,7 +92,7 @@ } if (StringUtils.isBlank(templateName)) { - return dialogNames; + return new ArrayList<>(dialogNames); } final TemplateDefinition templateDefinition = templateDefinitionRegistry.getProvider(templateName).get(); @@ -103,8 +102,23 @@ log.debug("Adding dialog {} to list of dialogNames", dialogName); dialogNames.add(dialogName); } + + try { + Map areas = getAreasFromRegistry(node); + areas.keySet() + .stream() + .filter(k -> !areas.get(k).getCreateAreaNode()) + .forEach(k->{ + String areaDialogName = areas.get(k).getDialog(); + if (StringUtils.isNotBlank(areaDialogName)) { + dialogNames.add(areaDialogName); + } + }); + } catch (RepositoryException e) { + log.debug("Could not get parent for node {}", NodeUtil.getNodePathIfPossible(node)); + } } - return dialogNames; + return new ArrayList<>(dialogNames); } /** @@ -137,23 +151,24 @@ private Map getAreasFromRegistry(Node node) throws RepositoryException { Node parentNode = node; do { - parentNode = parentNode.getParent(); final String template = Renderable.getTemplate(parentNode); - if (template == null) { - continue; - } + if (template != null) { - TemplateDefinition templateDefinition = null; - try { - templateDefinition = templateDefinitionRegistry.getProvider(template).get(); - } catch (Registry.NoSuchDefinitionException e) { - log.debug("No Registry found for node {}", parentNode, e); - } + TemplateDefinition templateDefinition = null; + try { + templateDefinition = templateDefinitionRegistry.getProvider(template).get(); + } catch (Registry.NoSuchDefinitionException e) { + log.debug("No Registry found for node {}", parentNode, e); + } - if (templateDefinition != null) { - return templateDefinition.getAreas(); + if (templateDefinition != null) { + return templateDefinition.getAreas(); + } } + + parentNode = parentNode.getParent(); + } while (!NodeUtil.isNodeType(parentNode, NodeTypes.Page.NAME)); return Maps.newHashMap(); @@ -161,6 +176,8 @@ @Override public List getPropertiesToTranslate(Node node) { + List propertyToTranslate = new ArrayList<>(); + List dialogNames = determineDialogNames(node); for (String dialogName : dialogNames) { @@ -169,7 +186,7 @@ FormDialogDefinition dialogDefinition = null; Object dialog = this.dialogDefinitionRegistry.getProvider(dialogName).get(); if (dialog instanceof info.magnolia.ui.dialog.definition.ConfiguredFormDialogDefinition) { - info.magnolia.ui.dialog.definition.ConfiguredFormDialogDefinition oldFormDialogDefinition = (info.magnolia.ui.dialog.definition.ConfiguredFormDialogDefinition)dialog; + info.magnolia.ui.dialog.definition.ConfiguredFormDialogDefinition oldFormDialogDefinition = (info.magnolia.ui.dialog.definition.ConfiguredFormDialogDefinition) dialog; dialogDefinition = (FormDialogDefinition) DefinitionConverter.DIALOG.convert(oldFormDialogDefinition); } else { dialogDefinition = (FormDialogDefinition) dialog; @@ -182,21 +199,21 @@ final String dialogLabel; try { final String decoratedDialogDefinitionLabel = decoratedDialogDefinition.getLabel(); - + if (StringUtils.isNotBlank(decoratedDialogDefinitionLabel) && !isMessageKey(dialogName, decoratedDialogDefinitionLabel)) { dialogLabel = decoratedDialogDefinitionLabel; } else { dialogLabel = dialogName; } - return processForm(decoratedForm, dialogLabel); + propertyToTranslate.addAll(processForm(decoratedForm, dialogLabel)); } catch (Exception e) { log.debug("Could not get dialog label for dialog named {}.", dialogName); } } } - return new ArrayList<>(); + return propertyToTranslate; } /**