Author: cziegeler
Date: Tue Jul 21 09:56:08 2009
New Revision: 796226
URL: http://svn.apache.org/viewvc?rev=796226&view=rev
Log:
SLING-1056 : Add static field to synthetic resource which can be set by adapter
manager implementations and set this from our adapter manager.
Added:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/adapter/AdapterSupport.java
(with props)
Modified:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java
sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/internal/AdapterManagerImpl.java
Added:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/adapter/AdapterSupport.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/adapter/AdapterSupport.java?rev=796226&view=auto
==============================================================================
---
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/adapter/AdapterSupport.java
(added)
+++
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/adapter/AdapterSupport.java
Tue Jul 21 09:56:08 2009
@@ -0,0 +1,5 @@
+package org.apache.sling.api.adapter;
+
+public class AdapterSupport {
+
+}
Propchange:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/adapter/AdapterSupport.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/adapter/AdapterSupport.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Propchange:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/adapter/AdapterSupport.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java?rev=796226&r1=796225&r2=796226&view=diff
==============================================================================
---
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java
(original)
+++
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/SyntheticResource.java
Tue Jul 21 09:56:08 2009
@@ -18,6 +18,8 @@
*/
package org.apache.sling.api.resource;
+import org.apache.sling.api.adapter.AdapterManager;
+
/**
* The <code>SyntheticResource</code> class is a simple implementation of the
* <code>Resource</code> interface which may be used to provide a resource
@@ -25,6 +27,30 @@
*/
public class SyntheticResource implements Resource {
+ /** The adapter manager used for adapting the synthetic resource. */
+ private static volatile AdapterManager ADAPTER_MANAGER;
+
+ /**
+ * Set the adapter manager to be used by a synthetic resource.
+ * A bundle implementing the adapter manager can set the manager through
this method.
+ * The set adapter manager will be used in the {...@link #adaptTo(Class)}
method
+ * of a synthetic resource.
+ * @param adapterMgr The adapter manager.
+ */
+ public static void setAdapterManager(final AdapterManager adapterMgr) {
+ ADAPTER_MANAGER = adapterMgr;
+ }
+
+ /**
+ * Unset an adapter manager previously set with {...@link
#setAdapterManager(AdapterManager)}
+ * @param adapterMgr The adapter manager
+ */
+ public static void unsetAdapterManager(final AdapterManager adapterMgr) {
+ if ( ADAPTER_MANAGER == adapterMgr ) {
+ ADAPTER_MANAGER = null;
+ }
+ }
+
/** The resoure resolver to which this resource is related */
private final ResourceResolver resourceResolver;
@@ -115,10 +141,15 @@
}
/**
- * Returns <code>null</code> because synthetic resources have no actual
- * data and thus may not adapt to anything else.
+ * If a adapter manager has been set through {...@link
#setAdapterManager(AdapterManager)}
+ * this adapter manager is used to adapt the resource to the given class.
+ * Otherwise this method returns <code>null</code>.
*/
public <Type> Type adaptTo(Class<Type> type) {
+ final AdapterManager adapterMgr = ADAPTER_MANAGER;
+ if ( adapterMgr != null ) {
+ return adapterMgr.getAdapter(this, type);
+ }
return null;
}
Modified:
sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/internal/AdapterManagerImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/internal/AdapterManagerImpl.java?rev=796226&r1=796225&r2=796226&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/internal/AdapterManagerImpl.java
(original)
+++
sling/trunk/bundles/extensions/adapter/src/main/java/org/apache/sling/adapter/internal/AdapterManagerImpl.java
Tue Jul 21 09:56:08 2009
@@ -31,6 +31,7 @@
import org.apache.sling.api.SlingConstants;
import org.apache.sling.api.adapter.AdapterFactory;
import org.apache.sling.api.adapter.AdapterManager;
+import org.apache.sling.api.resource.SyntheticResource;
import org.apache.sling.commons.osgi.OsgiUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.service.component.ComponentContext;
@@ -172,12 +173,14 @@
"Not setting Instance field: Set to another manager "
+ AdapterManagerImpl.INSTANCE, null);
}
+ SyntheticResource.setAdapterManager(this);
}
/**
* @param context Not used
*/
protected synchronized void deactivate(ComponentContext context) {
+ SyntheticResource.unsetAdapterManager(this);
// "disable" the manager by clearing the instance
// do not clear the field if not set to this instance
if (AdapterManagerImpl.INSTANCE == this) {