diff --git a/core/src/main/java/be/orbinson/aem/dictionarytranslator/servlets/action/UpdateLabelServlet.java b/core/src/main/java/be/orbinson/aem/dictionarytranslator/servlets/action/UpdateLabelServlet.java index 194148eb..40d085d6 100644 --- a/core/src/main/java/be/orbinson/aem/dictionarytranslator/servlets/action/UpdateLabelServlet.java +++ b/core/src/main/java/be/orbinson/aem/dictionarytranslator/servlets/action/UpdateLabelServlet.java @@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import static be.orbinson.aem.dictionarytranslator.utils.DictionaryConstants.SLING_KEY; import static be.orbinson.aem.dictionarytranslator.utils.DictionaryConstants.SLING_MESSAGE; import static be.orbinson.aem.dictionarytranslator.utils.DictionaryConstants.SLING_MESSAGEENTRY; @@ -69,6 +70,7 @@ protected void doPost(SlingHttpServletRequest request, @NotNull SlingHttpServlet } private void updateLabel(SlingHttpServletRequest request, ResourceResolver resourceResolver, Resource resource) throws DictionaryTranslatorException { + String key = request.getParameter("key"); String dictionaryPath = resource.getValueMap().get("dictionaryPath", String.class); if (StringUtils.isNotBlank(dictionaryPath)) { Resource dictionaryResource = resourceResolver.getResource(dictionaryPath); @@ -76,14 +78,14 @@ private void updateLabel(SlingHttpServletRequest request, ResourceResolver resou String[] languages = resource.getValueMap().get("languages", new String[0]); for (String language : languages) { String message = request.getParameter(language); - addMessage(resourceResolver, dictionaryResource, language, name, message); + addMessage(resourceResolver, dictionaryResource, language, name, key, message); } } else { throw new DictionaryTranslatorException("Could not find dictionary path"); } } - private void addMessage(ResourceResolver resourceResolver, Resource dictionary, String language, String name, String message) { + private void addMessage(ResourceResolver resourceResolver, Resource dictionary, String language, String name, String key, String message) { Resource languageResource = dictionary.getChild(language); if (languageResource != null) { try { @@ -95,6 +97,7 @@ private void addMessage(ResourceResolver resourceResolver, Resource dictionary, valueMap.remove(SLING_MESSAGE); } else { valueMap.put(SLING_MESSAGE, message); + addKeyIfMissing(valueMap, key); LOG.trace("Updated label with name '{}' and message '{}' on path '{}'", name, message, labelResource.getPath()); } } @@ -106,6 +109,12 @@ private void addMessage(ResourceResolver resourceResolver, Resource dictionary, } } + private void addKeyIfMissing(ValueMap valueMap, String key) { + if (!valueMap.containsKey(SLING_KEY) && StringUtils.isNotBlank(key)) { + valueMap.put(SLING_KEY, key); + } + } + public Resource getLabelResource(ResourceResolver resourceResolver, Resource languageResource, String name) throws RepositoryException { if (languageResource.getChild(name) == null) { Session session = resourceResolver.adaptTo(Session.class); diff --git a/core/src/main/java/be/orbinson/aem/dictionarytranslator/servlets/datasource/LabelDatasource.java b/core/src/main/java/be/orbinson/aem/dictionarytranslator/servlets/datasource/LabelDatasource.java index 957bbc20..0b60257e 100644 --- a/core/src/main/java/be/orbinson/aem/dictionarytranslator/servlets/datasource/LabelDatasource.java +++ b/core/src/main/java/be/orbinson/aem/dictionarytranslator/servlets/datasource/LabelDatasource.java @@ -72,6 +72,15 @@ private static void createTextFieldResource(ResourceResolver resourceResolver, L resourceList.add(new ValueMapResource(resourceResolver, "", "granite/ui/components/coral/foundation/form/textfield", valueMap)); } + private static void createHiddenFieldResource(ResourceResolver resourceResolver, List resourceList, String key, String value) { + ValueMap valueMap = new ValueMapDecorator(Map.of( + "fieldLabel", key, + "name", key, + "value", value) + ); + resourceList.add(new ValueMapResource(resourceResolver, "", "granite/ui/components/coral/foundation/form/hidden", valueMap)); + } + @Override protected void doGet(@NotNull SlingHttpServletRequest request, @NotNull SlingHttpServletResponse response) { List resourceList = new ArrayList<>(); @@ -96,8 +105,10 @@ private static void createLabelDataSource(ResourceResolver resourceResolver, Str if (resource != null) { ValueMap properties = resource.getValueMap(); String[] languages = properties.get("languages", String[].class); + String key = properties.get("key", String.class); - createTextFieldResource(resourceResolver, resourceList, "Label", properties.get("key", String.class), false, true); + createTextFieldResource(resourceResolver, resourceList, "Label", key, false, true); + createHiddenFieldResource(resourceResolver, resourceList, "key", key); if (languages != null) { for (String language : languages) { String label = properties.get(language, StringUtils.EMPTY);