Author: pete
Date: Fri May  6 06:55:12 2011
New Revision: 1100104

URL: http://svn.apache.org/viewvc?rev=1100104&view=rev
Log:
WICKET-3671 eliminate repeater index on resource path for localizer lookup and 
resource cache

Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Localizer.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Localizer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Localizer.java?rev=1100104&r1=1100103&r2=1100104&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Localizer.java 
(original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Localizer.java Fri 
May  6 06:55:12 2011
@@ -25,7 +25,7 @@ import java.util.concurrent.ConcurrentHa
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.apache.wicket.markup.repeater.AbstractRepeater;
+import org.apache.wicket.markup.html.list.LoopItem;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.resource.loader.IStringResourceLoader;
 import org.apache.wicket.settings.IResourceSettings;
@@ -45,9 +45,9 @@ import org.slf4j.LoggerFactory;
  * strategy for the properties. E.g. string resource loaders which load the 
properties from a
  * database. There should be hardly any need to extend Localizer.
  * 
- * @see org.apache.wicket.settings.Settings#getLocalizer()
+ * @see org.apache.wicket.settings.IResourceSettings#getLocalizer()
  * @see org.apache.wicket.resource.loader.IStringResourceLoader
- * @see org.apache.wicket.settings.Settings#getStringResourceLoaders()
+ * @see org.apache.wicket.settings.IResourceSettings#getStringResourceLoaders()
  * 
  * @author Chris Turner
  * @author Juergen Donnerstag
@@ -348,7 +348,7 @@ public class Localizer
                        {
                                log.debug("Property found in cache: '" + key + 
"'; Component: '" +
                                        (component != null ? 
component.toString(false) : null) + "'; value: '" + value +
-                                       "'");
+                                       '\'');
                        }
                }
                else
@@ -356,7 +356,7 @@ public class Localizer
                        if (log.isDebugEnabled())
                        {
                                log.debug("Locate property: key: '" + key + "'; 
Component: '" +
-                                       (component != null ? 
component.toString(false) : null) + "'");
+                                       (component != null ? 
component.toString(false) : null) + '\'');
                        }
 
                        // Iterate over all registered string resource loaders 
until the property has been found
@@ -377,7 +377,7 @@ public class Localizer
                        if ((value == null) && log.isDebugEnabled())
                        {
                                log.debug("Property not found; key: '" + key + 
"'; Component: '" +
-                                       (component != null ? 
component.toString(false) : null) + "'");
+                                       (component != null ? 
component.toString(false) : null) + '\'');
                        }
                }
 
@@ -446,7 +446,7 @@ public class Localizer
                final String value = cache.get(cacheKey);
 
                // ConcurrentHashMap does not allow null values
-               if (value == NULL_VALUE)
+               if (NULL_VALUE.equals(value))
                {
                        return null;
                }
@@ -467,16 +467,16 @@ public class Localizer
        protected String getCacheKey(final String key, final Component 
component, final Locale locale,
                final String style, final String variation)
        {
-               String cacheKey = key;
                if (component != null)
                {
-                       AppendingStringBuffer buffer = new 
AppendingStringBuffer(200);
+                       StringBuilder buffer = new StringBuilder(200);
                        buffer.append(key);
 
                        Component cursor = component;
+                       
                        while (cursor != null)
                        {
-                               
buffer.append("-").append(metaDatabase.id(cursor.getClass()));
+                               
buffer.append('-').append(metaDatabase.id(cursor.getClass()));
 
                                if (cursor instanceof Page)
                                {
@@ -484,31 +484,31 @@ public class Localizer
                                }
 
                                /*
-                                * only append component id if parent is not a 
repeater because (a) these ids are
+                                * only append component id if component is not 
a loop item because (a) these ids are
                                 * irrelevant when generating resource cache 
keys (b) they cause a lot of redundant
                                 * keys to be generated
                                 */
-                               if (cursor.getParent() != null && 
!(cursor.getParent() instanceof AbstractRepeater))
+                               final boolean skip = cursor instanceof LoopItem;
+
+                               if (skip == false)
                                {
-                                       
buffer.append(":").append(cursor.getId());
+                                       
buffer.append(':').append(cursor.getId());
                                }
 
                                cursor = cursor.getParent();
                        }
 
-                       buffer.append("-").append(locale);
-                       buffer.append("-").append(style);
-                       buffer.append("-").append(variation);
-                       cacheKey = buffer.toString();
+                       buffer.append('-').append(locale);
+                       buffer.append('-').append(style);
+                       buffer.append('-').append(variation);
+                       
+                       return buffer.toString();
                }
                else
                {
                        // locale is guaranteed to be != null
-                       cacheKey += "-" + locale.toString();
-                       cacheKey += "-" + style;
+                       return key + '-' + locale.toString() + '-' + style;
                }
-
-               return cacheKey;
        }
 
        /**
@@ -597,4 +597,4 @@ public class Localizer
                        return id;
                }
        }
-}
\ No newline at end of file
+}

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java?rev=1100104&r1=1100103&r2=1100104&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/loader/ComponentStringResourceLoader.java
 Fri May  6 06:55:12 2011
@@ -27,8 +27,10 @@ import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.list.LoopItem;
 import org.apache.wicket.resource.IPropertiesFactory;
 import org.apache.wicket.resource.Properties;
+import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.resource.locator.IResourceStreamLocator;
 import org.apache.wicket.util.resource.locator.ResourceNameIterator;
 import org.apache.wicket.util.string.Strings;
@@ -121,7 +123,7 @@ public class ComponentStringResourceLoad
                if (log.isDebugEnabled())
                {
                        log.debug("key: '" + key + "'; class: '" + 
clazz.getName() + "'; locale: '" + locale +
-                               "'; Style: '" + style + "'; Variation: '" + 
variation + "'");
+                               "'; Style: '" + style + "'; Variation: '" + 
variation + '\'');
                }
 
                // Load the properties associated with the path
@@ -213,7 +215,7 @@ public class ComponentStringResourceLoad
 
                if (log.isDebugEnabled())
                {
-                       log.debug("component: '" + component.toString(false) + 
"'; key: '" + key + "'");
+                       log.debug("component: '" + component.toString(false) + 
"'; key: '" + key + '\'');
                }
 
                // The return value
@@ -221,7 +223,7 @@ public class ComponentStringResourceLoad
 
                // The key prefix is equal to the component path relative to the
                // current component on the top of the stack.
-               String prefix = 
Strings.replaceAll(component.getPageRelativePath(), ":", ".").toString();
+               String prefix = getResourcePath(component);
 
                // The reason why we need to create that stack is because we 
need to
                // walk it downwards starting with Page down to the Component
@@ -268,6 +270,35 @@ public class ComponentStringResourceLoad
        }
 
        /**
+        * get path for resource lookup
+        * 
+        * @param component
+        * @return path
+        */
+       protected String getResourcePath(final Component component)
+       {
+               Component current = Args.notNull(component, "component");
+
+               final StringBuilder buffer = new StringBuilder();
+               
+               while (current.getParent() != null)
+               {
+                       final boolean skip = current instanceof LoopItem;
+
+                       if (skip == false)
+                       {
+                               if (buffer.length() > 0)
+                               {
+                                       buffer.insert(0, '.');
+                               }
+                               buffer.insert(0, current.getId());
+                       }
+                       current = current.getParent();
+               }
+               return buffer.toString();
+       }
+
+       /**
         * Traverse the component hierarchy up to the Page and add each 
component class to the list
         * (stack) returned
         * 


Reply via email to