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());