Skip to content

Commit

Permalink
add sling:key if missing
Browse files Browse the repository at this point in the history
  • Loading branch information
mpankratiev committed Jul 25, 2024
1 parent 292e730 commit 6742491
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -69,21 +70,22 @@ 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);
String name = resource.getName();
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 {
Expand All @@ -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());
}
}
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Resource> 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<Resource> resourceList = new ArrayList<>();
Expand All @@ -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);
Expand Down

0 comments on commit 6742491

Please sign in to comment.