You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/04/08 14:46:49 UTC

svn commit: r1672080 - in /sling/trunk/contrib/extensions/i18n/src: main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java

Author: cziegeler
Date: Wed Apr  8 12:46:49 2015
New Revision: 1672080

URL: http://svn.apache.org/r1672080
Log:
SLING-4579 : Regression introduced by SLING-4512 : JCR API used in i18n implementation

Modified:
    sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
    sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java

Modified: sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java?rev=1672080&r1=1672079&r2=1672080&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java (original)
+++ sling/trunk/contrib/extensions/i18n/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java Wed Apr  8 12:46:49 2015
@@ -46,7 +46,9 @@ public class JcrResourceBundle extends R
 
     private static final Logger log = LoggerFactory.getLogger(JcrResourceBundle.class);
 
-    static final String NT_MESSAGE = "sling:Message";
+    static final String RT_MESSAGE_ENTRY = "sling:MessageEntry";
+
+    static final String MIXIN_MESSAGE = "sling:Message";
 
     static final String PROP_KEY = "sling:key";
 
@@ -56,6 +58,8 @@ public class JcrResourceBundle extends R
 
     static final String PROP_LANGUAGE = "jcr:language";
 
+    static final String PROP_MIXINS = "jcr:mixinTypes";
+
     static final String QUERY_LANGUAGE_ROOTS = "//element(*,mix:language)[@jcr:language]";
 
     private final Map<String, Object> resources;
@@ -286,10 +290,26 @@ public class JcrResourceBundle extends R
     private void scanForSlingMessages(final Resource rsrc, final Map<String, Object> targetDictionary) {
         final ValueMap vm = rsrc.adaptTo(ValueMap.class);
         if ( vm != null ) {
-            final String value = vm.get(PROP_VALUE, String.class);
-            if ( value != null ) {
-                final String key = vm.get(PROP_KEY, rsrc.getName());
-                targetDictionary.put(key, value);
+            // resource type check, as in JCR a mixin might be used, a simple resource type checking
+            // does unfortunately not work
+            boolean checked = rsrc.isResourceType(RT_MESSAGE_ENTRY);
+            if ( !checked ) {
+                final String[] mixins = vm.get(PROP_MIXINS, String[].class);
+                if ( mixins != null ) {
+                    for(final String m : mixins) {
+                        if ( MIXIN_MESSAGE.equals(m) ) {
+                            checked = true;
+                            break;
+                        }
+                    }
+                }
+            }
+            if ( checked ) {
+                final String value = vm.get(PROP_VALUE, String.class);
+                if ( value != null ) {
+                    final String key = vm.get(PROP_KEY, rsrc.getName());
+                    targetDictionary.put(key, value);
+                }
             }
         }
 

Modified: sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java?rev=1672080&r1=1672079&r2=1672080&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java (original)
+++ sling/trunk/contrib/extensions/i18n/src/test/java/org/apache/sling/i18n/impl/JcrResourceBundleTest.java Wed Apr  8 12:46:49 2015
@@ -319,9 +319,8 @@ public class JcrResourceBundleTest exten
             }
 
             @Override
-            public boolean isResourceType(Resource resource, String resourceType) {
-                // TODO Auto-generated method stub
-                return false;
+            public boolean isResourceType(final Resource resource, final String resourceType) {
+                return resourceType.equals(resource.getResourceType());
             }
 
             @Override
@@ -660,8 +659,11 @@ public class JcrResourceBundleTest exten
 
         @Override
         public String getResourceType() {
-            // TODO Auto-generated method stub
-            return null;
+            try {
+                return this.node.getPrimaryNodeType().getName();
+            } catch ( final RepositoryException re) {
+                return "<unknown>";
+            }
         }
 
         @Override
@@ -707,6 +709,14 @@ public class JcrResourceBundleTest exten
                     if ( node.hasProperty(JcrResourceBundle.PROP_VALUE) ) {
                         props.put(JcrResourceBundle.PROP_VALUE, node.getProperty(JcrResourceBundle.PROP_VALUE).getString());
                     }
+                    if ( node.hasProperty(JcrResourceBundle.PROP_MIXINS) ) {
+                        final Value[] values = node.getProperty(JcrResourceBundle.PROP_MIXINS).getValues();
+                        final String[] names = new String[values.length];
+                        for(int i=0;i<values.length;i++) {
+                            names[i] = values[i].getString();
+                        }
+                        props.put(JcrResourceBundle.PROP_MIXINS, names);
+                    }
                     return (AdapterType)new ValueMapDecorator(props);
                 } catch ( final RepositoryException re ) {
                     throw new RuntimeException(re);