You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2009/02/27 09:28:02 UTC
svn commit: r748426 -
/incubator/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java
Author: fmeschbe
Date: Fri Feb 27 08:28:02 2009
New Revision: 748426
URL: http://svn.apache.org/viewvc?rev=748426&view=rev
Log:
SLING-651 Apply patch by Eric Normann (Many thanks)
Modified:
incubator/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java
Modified: incubator/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java?rev=748426&r1=748425&r2=748426&view=diff
==============================================================================
--- incubator/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java (original)
+++ incubator/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java Fri Feb 27 08:28:02 2009
@@ -67,6 +67,10 @@
* @scr.reference name="postProcessor"
* interface="org.apache.sling.servlets.post.SlingPostProcessor"
* cardinality="0..n" policy="dynamic"
+ * @scr.reference name="postOperation"
+ * interface="org.apache.sling.servlets.post.SlingPostOperation"
+ * cardinality="0..n"
+ * policy="dynamic"
*/
public class SlingPostServlet extends SlingAllMethodsServlet {
@@ -109,10 +113,12 @@
private SlingPostOperation modifyOperation;
+ private final List<ServiceReference> delayedPostOperations = new ArrayList<ServiceReference>();
+
private final Map<String, SlingPostOperation> postOperations = new HashMap<String, SlingPostOperation>();
private final List<ServiceReference> delayedPostProcessors = new ArrayList<ServiceReference>();
-
+
private final List<ServiceReference> postProcessors = new ArrayList<ServiceReference>();
private SlingPostProcessor[] cachedPostProcessors = new SlingPostProcessor[0];
@@ -285,6 +291,12 @@
}
this.delayedPostProcessors.clear();
}
+ synchronized ( this.delayedPostOperations ) {
+ for(final ServiceReference ref : this.delayedPostOperations) {
+ this.registerPostOperation(ref);
+ }
+ this.delayedPostOperations.clear();
+ }
Dictionary<?, ?> props = context.getProperties();
String[] nameHints = OsgiUtil.toStringArray(props.get(PROP_NODE_NAME_HINT_PROPERTIES));
@@ -304,6 +316,33 @@
dateParser = null;
this.componentContext = null;
}
+
+ protected void bindPostOperation(ServiceReference ref) {
+ synchronized ( this.delayedPostOperations ) {
+ if (this.componentContext == null) {
+ this.delayedPostOperations.add(ref);
+ } else {
+ this.registerPostOperation(ref);
+ }
+ }
+ }
+
+ protected void registerPostOperation(ServiceReference ref) {
+ String operationName = (String) ref.getProperty(SlingPostOperation.PROP_OPERATION_NAME);
+ SlingPostOperation operation = (SlingPostOperation) this.componentContext.locateService("postOperation", ref);
+ synchronized (this.postOperations) {
+ this.postOperations.put(operationName, operation);
+ }
+ }
+
+ protected void unbindPostOperation(ServiceReference ref) {
+ synchronized ( this.delayedPostOperations ) {
+ String operationName = (String) ref.getProperty(SlingPostOperation.PROP_OPERATION_NAME);
+ synchronized (this.postOperations) {
+ this.postOperations.remove(operationName);
+ }
+ }
+ }
protected void bindPostProcessor(ServiceReference ref) {
synchronized ( this.delayedPostProcessors ) {