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
*