SLING-4547 support multi-value basename properties
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1789363 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
index 094ea47..f1abb04 100644
--- a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
+++ b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
@@ -335,8 +336,9 @@
|| language.equals(localeStringLower)
|| language.equals(localeRFC4646String)
|| language.equals(localeRFC4646StringLower)) {
-
- if (baseName == null || baseName.equals(properties.get(PROP_BASENAME, ""))) {
+ // basename might be a multivalue (see https://issues.apache.org/jira/browse/SLING-4547)
+ String[] baseNames = properties.get(PROP_BASENAME, new String[]{});
+ if (baseName == null || Arrays.asList(baseName).contains(baseName)) {
paths.add(bundle.getPath());
}
}
diff --git a/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java b/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java
index 2f7a822..c23d539 100644
--- a/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java
+++ b/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java
@@ -30,6 +30,7 @@
import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
+import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.query.Query;
@@ -608,7 +609,7 @@
Node de = appsI18n.addNode("de_basename", "nt:unstructured");
de.addMixin("mix:language");
de.setProperty("jcr:language", "de");
- de.setProperty("sling:basename", "FOO");
+ de.setProperty("sling:basename", new String[]{"FOO", "BAR"});
for (Message msg : MESSAGES_DE_BASENAME.values()) {
msg.add(de);
}
@@ -619,6 +620,12 @@
for (Message msg : MESSAGES_DE_BASENAME.values()) {
assertEquals(msg.message, bundle.getString(msg.key));
}
+
+ // test getString
+ bundle = new JcrResourceBundle(new Locale("de"), "BAR", resolver);
+ for (Message msg : MESSAGES_DE_BASENAME.values()) {
+ assertEquals(msg.message, bundle.getString(msg.key));
+ }
// test getKeys
Enumeration<String> keys = bundle.getKeys();
@@ -725,7 +732,17 @@
props.put(JcrResourceBundle.PROP_LANGUAGE, node.getProperty(JcrResourceBundle.PROP_LANGUAGE).getString());
}
if ( node.hasProperty(JcrResourceBundle.PROP_BASENAME) ) {
- props.put(JcrResourceBundle.PROP_BASENAME, node.getProperty(JcrResourceBundle.PROP_BASENAME).getString());
+ Property propBasename = node.getProperty(JcrResourceBundle.PROP_BASENAME);
+ if (propBasename.isMultiple()) {
+ String[] basenames = new String[propBasename.getValues().length];
+ int i=0;
+ for (Value basename : propBasename.getValues()) {
+ basenames[i++] = basename.getString();
+ }
+ props.put(JcrResourceBundle.PROP_BASENAME, basenames);
+ } else {
+ props.put(JcrResourceBundle.PROP_BASENAME, propBasename.getString());
+ }
}
if ( node.hasProperty(JcrResourceBundle.PROP_KEY) ) {
props.put(JcrResourceBundle.PROP_KEY, node.getProperty(JcrResourceBundle.PROP_KEY).getString());