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;
     }
-
 }


Reply via email to