Author: cziegeler
Date: Fri Aug 20 12:59:06 2010
New Revision: 987486
URL: http://svn.apache.org/viewvc?rev=987486&view=rev
Log:
SLING-1673 : Cache results in SlingAdaptable
Modified:
sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/SlingAdaptable.java
Modified:
sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/SlingAdaptable.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/SlingAdaptable.java?rev=987486&r1=987485&r2=987486&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/SlingAdaptable.java
(original)
+++
sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/SlingAdaptable.java
Fri Aug 20 12:59:06 2010
@@ -18,6 +18,9 @@
*/
package org.apache.sling.adapter;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.sling.adapter.internal.AdapterManagerImpl;
import org.apache.sling.api.adapter.Adaptable;
import org.apache.sling.api.adapter.AdapterManager;
@@ -34,9 +37,30 @@ import org.apache.sling.api.adapter.Adap
*/
public abstract class SlingAdaptable implements Adaptable {
+ /** Cache */
+ private Map<Class<?>, Object> adaptersCache;
+
+ /**
+ * @see org.apache.sling.api.adapter.Adaptable#adaptTo(java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
- final AdapterManager mgr = AdapterManagerImpl.getInstance();
- return (mgr == null ? null : mgr.getAdapter(this, type));
+ AdapterType result = null;
+ synchronized ( this ) {
+ if ( adaptersCache != null ) {
+ result = (AdapterType) adaptersCache.get(type);
+ }
+ if ( result == null ) {
+ final AdapterManager mgr = AdapterManagerImpl.getInstance();
+ result = (mgr == null ? null : mgr.getAdapter(this, type));
+ if ( result != null ) {
+ if ( adaptersCache == null ) {
+ adaptersCache = new HashMap<Class<?>, Object>();
+ }
+ adaptersCache.put(type, result);
+ }
+ }
+ }
+ return result;
}
-
}