Hi,

To facilitate their review/commit, I have put in one email the
generic ContentInterceptor enhancements I posted earlier and I will
try to explain them.

These patches need to be applied successively.


Patch 1 : ContentInterceptors parameters support
           (file 1-contentInterceptorsParameters.diff)

This patch :
- Makes ContentInterceptor class abstract
- Modifies ContentInterceptor class to add a new property (Hashtable
parameters) and its accessor and modifier to store optionnal parameters.
- Modifies at the same time NamespaceConfig class to read these
optionnal ContentInterceptor parameters from Domain.xml.

Syntax to add parameters to a ContentInterceptor in Domain.xml is the
following :

<content-interceptor class="...">
    <parameter name="...">...</parameter>
    ...
</content-interceptor>


Patch 2 : ContentInterceptors postRemove() method
           (file 2-contentInterceptorsPostRemove.diff)

This patch adds a new postRemove() method to ContentInterceptor class
and its calls from ContentImpl class


Patch 3 : ContentInterceptors namespace access
           (file 3-contentInterceptorsNamespaceArg.diff)

This patch adds a Namespace object to ContentInterceptors methods to
allow them namespace access.


Patch 4 : ContentInterceptors exceptions support
           (file 4-contentInterceptorsExceptions.diff)

This patch adds ContentInterceptors the ability to throw exceptions if a
problem occurs


I think that these enhancements feet with Slide's extendability which
seems to be one of the project goal.

If I can do something else to facilitate their review/commit, do not 
hesitate to ask me.

Regards

JP

ps : tomorrow, I will send user-quota support patches

diff -r -u slide_1_0/src/share/org/apache/slide/common/NamespaceConfig.java 
slide_1_0_Quota_1_parameters/src/share/org/apache/slide/common/NamespaceConfig.java
--- slide_1_0/src/share/org/apache/slide/common/NamespaceConfig.java    Thu Apr 18 
14:23:54 2002
+++ 
+slide_1_0_Quota_1_parameters/src/share/org/apache/slide/common/NamespaceConfig.java 
+Mon Apr  8 09:40:03 2002
@@ -820,12 +820,26 @@
                 Configuration contentInterceptorDef =
                     (Configuration) contentInteceptorsDef.nextElement();
                 String classname = contentInterceptorDef.getAttribute("class");
+
+                // Load contentInterceptor parameters
+                Enumeration contentInterceptorParametersDef =
+                    contentInterceptorDef.getConfigurations("parameter");
+                Hashtable contentInterceptorParameters = new Hashtable();
+                while (contentInterceptorParametersDef.hasMoreElements()) {
+                    Configuration parameterDefinition = (Configuration)
+                        contentInterceptorParametersDef.nextElement();
+                    String parameterName = parameterDefinition.getAttribute("name");
+                    String parameterValue = parameterDefinition.getValue();
+                    contentInterceptorParameters.put(parameterName, parameterValue);
+                }
+
                 try {
                     Class contentInterceptorClass =
                         Class.forName(classname);
                     ContentInterceptor contentInterceptor = 
                         (ContentInterceptor) 
                         contentInterceptorClass.newInstance();
+                    contentInterceptor.setParameters(contentInterceptorParameters);
                     ContentInterceptor[] tempArray = 
                         new ContentInterceptor[contentInterceptors.length + 1];
                     for (int i = 0; i < contentInterceptors.length; i++) {
diff -r -u slide_1_0/src/share/org/apache/slide/content/ContentInterceptor.java 
slide_1_0_Quota_1_parameters/src/share/org/apache/slide/content/ContentInterceptor.java
--- slide_1_0/src/share/org/apache/slide/content/ContentInterceptor.java        Thu 
Apr 18 14:23:54 2002
+++ 
+slide_1_0_Quota_1_parameters/src/share/org/apache/slide/content/ContentInterceptor.java
+     Mon Apr  8 09:40:03 2002
@@ -71,9 +71,42 @@
  * 
  * @author <a href="mailto:[EMAIL PROTECTED]";>Remy Maucherat</a>
  */
-public class ContentInterceptor {
+public abstract class ContentInterceptor {
     
     
+    // ----------------------------------------------------- Instance Variables
+
+
+    /**
+     * ContentInterceptor's parameters.
+     */
+    private Hashtable parameters;
+
+
+    // ------------------------------------------------------------- Properties
+
+
+    /**
+     * Parameters accessor.
+     *
+     * @return Hashtable Parameters
+     */
+    public Hashtable getParameters() {
+        return parameters;
+    }
+
+
+    /**
+     * Parameters modifier.
+     *
+     * @param parameters Hashtable containing the parameters' name
+     * and associated value
+     */
+    public void setParameters(Hashtable parameters) {
+        this.parameters = parameters;
+    }
+
+
     // ---------------------------------------------------------------- Methods
     
     
diff -r -u 
slide_1_0_Quota_1_parameters/src/share/org/apache/slide/content/ContentImpl.java 
slide_1_0_Quota_2_postRemove/src/share/org/apache/slide/content/ContentImpl.java
--- slide_1_0_Quota_1_parameters/src/share/org/apache/slide/content/ContentImpl.java   
 Mon Apr  8 09:40:03 2002
+++ slide_1_0_Quota_2_postRemove/src/share/org/apache/slide/content/ContentImpl.java   
+ Mon Apr  8 13:48:33 2002
@@ -88,7 +88,8 @@
     protected static final int PRE_STORE = 0;
     protected static final int POST_STORE = 1;
     protected static final int POST_RETRIEVE = 2;
-    
+    protected static final int POST_REMOVE = 3;
+   
     
     // ----------------------------------------------------------- Constructors
     
@@ -982,6 +983,9 @@
         
         objectUri.getStore().removeRevisionDescriptors(objectUri);
         
+        // Invoke interceptors
+        invokeInterceptors(token, revisionDescriptors, null, null, POST_REMOVE);
+
     }
     
     
@@ -1041,6 +1045,9 @@
             (objectUri, revisionDescriptor);
         objectUri.getStore()
             .removeRevisionDescriptor(objectUri, revisionNumber);
+
+        // Invoke interceptors
+        invokeInterceptors(token, null, revisionDescriptor, null, POST_REMOVE);
         
     }
     
@@ -1206,6 +1213,11 @@
                     contentInterceptors[i].postRetrieveContent
                         (token, revisionDescriptors,
                          revisionDescriptor, revisionContent);
+                    break;
+                case POST_REMOVE:
+                    contentInterceptors[i].postRemoveContent
+                        (token, revisionDescriptors,
+                         revisionDescriptor);
                     break;
             }
         }
diff -r -u 
slide_1_0_Quota_1_parameters/src/share/org/apache/slide/content/ContentInterceptor.java
 
slide_1_0_Quota_2_postRemove/src/share/org/apache/slide/content/ContentInterceptor.java
--- 
slide_1_0_Quota_1_parameters/src/share/org/apache/slide/content/ContentInterceptor.java
     Mon Apr  8 09:40:03 2002
+++ 
+slide_1_0_Quota_2_postRemove/src/share/org/apache/slide/content/ContentInterceptor.java
+     Mon Apr  8 13:35:08 2002
@@ -141,6 +141,18 @@
          NodeRevisionDescriptor revisionDescriptor,
          NodeRevisionContent revisionContent) {
     }
-    
+
+
+    /**
+     * That method will be called just after removing content.
+     * 
+     * @param revisionDescriptors null when a specified revision is removed
+     * @param revisionDescriptor null when all revisions are removed
+     */
+    public void postRemoveContent    
+        (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
+         NodeRevisionDescriptor revisionDescriptor) {
+    }
+
     
 }
diff -r -u 
slide_1_0_Quota_2_postRemove/src/share/org/apache/slide/content/ContentImpl.java 
slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/ContentImpl.java
--- slide_1_0_Quota_2_postRemove/src/share/org/apache/slide/content/ContentImpl.java   
 Mon Apr  8 13:48:33 2002
+++ 
+slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/ContentImpl.java
+     Mon Apr  8 13:53:11 2002
@@ -1202,22 +1202,25 @@
                 case PRE_STORE:
                     contentInterceptors[i].preStoreContent
                         (token, revisionDescriptors,
-                         revisionDescriptor, revisionContent);
+                         revisionDescriptor, revisionContent,
+                         namespace);
                     break;
                 case POST_STORE:
                     contentInterceptors[i].postStoreContent
                         (token, revisionDescriptors,
-                         revisionDescriptor, revisionContent);
+                         revisionDescriptor, revisionContent,
+                         namespace);
                     break;
                 case POST_RETRIEVE:
                     contentInterceptors[i].postRetrieveContent
                         (token, revisionDescriptors,
-                         revisionDescriptor, revisionContent);
+                         revisionDescriptor, revisionContent,
+                         namespace);
                     break;
                 case POST_REMOVE:
                     contentInterceptors[i].postRemoveContent
                         (token, revisionDescriptors,
-                         revisionDescriptor);
+                         revisionDescriptor, namespace);
                     break;
             }
         }
diff -r -u 
slide_1_0_Quota_2_postRemove/src/share/org/apache/slide/content/ContentInterceptor.java
 
slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/ContentInterceptor.java
--- 
slide_1_0_Quota_2_postRemove/src/share/org/apache/slide/content/ContentInterceptor.java
     Mon Apr  8 13:35:08 2002
+++ 
+slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/ContentInterceptor.java
+      Mon Apr  8 13:58:04 2002
@@ -64,6 +64,7 @@
 package org.apache.slide.content;
 
 import java.util.Hashtable;
+import org.apache.slide.common.Namespace;
 import org.apache.slide.common.SlideToken;
 
 /**
@@ -116,7 +117,8 @@
     public void preStoreContent(SlideToken token, 
                                 NodeRevisionDescriptors revisionDescriptors,
                                 NodeRevisionDescriptor revisionDescriptor,
-                                NodeRevisionContent revisionContent) {
+                                NodeRevisionContent revisionContent,
+                                Namespace namespace) {
     }
     
     
@@ -126,7 +128,8 @@
     public void postStoreContent(SlideToken token, 
                                  NodeRevisionDescriptors revisionDescriptors,
                                  NodeRevisionDescriptor revisionDescriptor,
-                                 NodeRevisionContent revisionContent) {
+                                 NodeRevisionContent revisionContent,
+                                 Namespace namespace) {
     }
     
     
@@ -139,7 +142,7 @@
     public void postRetrieveContent
         (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
          NodeRevisionDescriptor revisionDescriptor,
-         NodeRevisionContent revisionContent) {
+         NodeRevisionContent revisionContent, Namespace namespace) {
     }
 
 
@@ -151,7 +154,7 @@
      */
     public void postRemoveContent    
         (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
-         NodeRevisionDescriptor revisionDescriptor) {
+         NodeRevisionDescriptor revisionDescriptor, Namespace namespace) {
     }
 
diff -r -u 
slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/ContentImpl.java
 slide_1_0_Quota_4_exceptions/src/share/org/apache/slide/content/ContentImpl.java
--- 
slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/ContentImpl.java
     Mon Apr  8 13:53:11 2002
+++ slide_1_0_Quota_4_exceptions/src/share/org/apache/slide/content/ContentImpl.java   
+ Mon Apr  8 16:45:52 2002
@@ -1194,7 +1194,10 @@
     protected void invokeInterceptors
         (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
          NodeRevisionDescriptor revisionDescriptor,
-         NodeRevisionContent revisionContent, int type) {
+         NodeRevisionContent revisionContent, int type) 
+       throws AccessDeniedException, ObjectNotFoundException, 
+        LinkedObjectNotFoundException, ObjectLockedException,
+        ServiceAccessException {
         ContentInterceptor[] contentInterceptors =
             namespace.getContentInterceptors();
         for (int i = 0; i < contentInterceptors.length; i++) {
diff -r -u 
slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/ContentInterceptor.java
 
slide_1_0_Quota_4_exceptions/src/share/org/apache/slide/content/ContentInterceptor.java
--- 
slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/ContentInterceptor.java
      Mon Apr  8 13:58:04 2002
+++ 
+slide_1_0_Quota_4_exceptions/src/share/org/apache/slide/content/ContentInterceptor.java
+     Mon Apr  8 16:59:55 2002
@@ -66,6 +66,11 @@
 import java.util.Hashtable;
 import org.apache.slide.common.Namespace;
 import org.apache.slide.common.SlideToken;
+import org.apache.slide.lock.ObjectLockedException;
+import org.apache.slide.common.ServiceAccessException;
+import org.apache.slide.security.AccessDeniedException;
+import org.apache.slide.structure.ObjectNotFoundException;
+import org.apache.slide.structure.LinkedObjectNotFoundException;
 
 /**
  * Slide content interceptor class.
@@ -118,7 +123,10 @@
                                 NodeRevisionDescriptors revisionDescriptors,
                                 NodeRevisionDescriptor revisionDescriptor,
                                 NodeRevisionContent revisionContent,
-                                Namespace namespace) {
+                                Namespace namespace)
+      throws AccessDeniedException, ObjectNotFoundException,
+        LinkedObjectNotFoundException, ObjectLockedException,
+        ServiceAccessException { 
     }
     
     
@@ -129,7 +137,10 @@
                                  NodeRevisionDescriptors revisionDescriptors,
                                  NodeRevisionDescriptor revisionDescriptor,
                                  NodeRevisionContent revisionContent,
-                                 Namespace namespace) {
+                                 Namespace namespace)
+      throws AccessDeniedException, ObjectNotFoundException,
+        LinkedObjectNotFoundException, ObjectLockedException,
+        ServiceAccessException { 
     }
     
     
@@ -142,7 +153,10 @@
     public void postRetrieveContent
         (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
          NodeRevisionDescriptor revisionDescriptor,
-         NodeRevisionContent revisionContent, Namespace namespace) {
+         NodeRevisionContent revisionContent, Namespace namespace)
+      throws AccessDeniedException, ObjectNotFoundException,
+        LinkedObjectNotFoundException, ObjectLockedException,
+        ServiceAccessException { 
     }
 
 
@@ -154,7 +168,10 @@
      */
     public void postRemoveContent    
         (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
-         NodeRevisionDescriptor revisionDescriptor, Namespace namespace) {
+         NodeRevisionDescriptor revisionDescriptor, Namespace namespace)
+      throws AccessDeniedException, ObjectNotFoundException,
+        LinkedObjectNotFoundException, ObjectLockedException,
+        ServiceAccessException { 
     }
 
     
diff -r -u 
slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/UserQuotaContentInterceptor.java
 
slide_1_0_Quota_4_exceptions/src/share/org/apache/slide/content/UserQuotaContentInterceptor.java
--- 
slide_1_0_Quota_3_add_namespace_arg/src/share/org/apache/slide/content/UserQuotaContentInterceptor.java
     Mon Apr  8 13:59:35 2002
+++ 
+slide_1_0_Quota_4_exceptions/src/share/org/apache/slide/content/UserQuotaContentInterceptor.java
+    Mon Apr  8 16:56:01 2002
@@ -65,6 +65,11 @@
 
 import org.apache.slide.common.Namespace;
 import org.apache.slide.common.SlideToken;
+import org.apache.slide.lock.ObjectLockedException;
+import org.apache.slide.common.ServiceAccessException;
+import org.apache.slide.security.AccessDeniedException;
+import org.apache.slide.structure.ObjectNotFoundException;
+import org.apache.slide.structure.LinkedObjectNotFoundException;
 
 /**
  * Slide user quota content interceptor class.
@@ -84,8 +89,11 @@
                                 NodeRevisionDescriptors revisionDescriptors,
                                 NodeRevisionDescriptor revisionDescriptor,
                                 NodeRevisionContent revisionContent,
-                                Namespace namespace) {
-        //System.err.println("---------------- UserQuotaContentInterceptor parameters 
----------------");
+                                Namespace namespace)
+      throws AccessDeniedException, ObjectNotFoundException,
+        LinkedObjectNotFoundException, ObjectLockedException,
+        ServiceAccessException { 
+       //System.err.println("---------------- UserQuotaContentInterceptor parameters 
+----------------");
         
//System.err.println("allowUnknownSizeContent:"+getParameters().get("allowUnknownSizeContent"));
         
//System.err.println("allowQuotaToBeExceeded:"+getParameters().get("allowQuotaToBeExceeded"));
         
//System.err.println("------------------------------------------------------------------------");
@@ -99,12 +107,30 @@
                                  NodeRevisionDescriptors revisionDescriptors,
                                  NodeRevisionDescriptor revisionDescriptor,
                                  NodeRevisionContent revisionContent,
-                                 Namespace namespace) {
+                                 Namespace namespace)
+      throws AccessDeniedException, ObjectNotFoundException,
+        LinkedObjectNotFoundException, ObjectLockedException,
+        ServiceAccessException { 
         //System.err.println("---------------- UserQuotaContentInterceptor parameters 
----------------");
         
//System.err.println("allowUnknownSizeContent:"+getParameters().get("allowUnknownSizeContent"));
         
//System.err.println("allowQuotaToBeExceeded:"+getParameters().get("allowQuotaToBeExceeded"));
         
//System.err.println("------------------------------------------------------------------------");
     }
+
     
-    
+    /**
+     * That method will be called just after removing content.
+     * 
+     * @param revisionDescriptors null when a specified revision is removed
+     * @param revisionDescriptor null when all revisions are removed
+     */
+    public void postRemoveContent
+        (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
+         NodeRevisionDescriptor revisionDescriptor, Namespace namespace)
+      throws AccessDeniedException, ObjectNotFoundException,
+        LinkedObjectNotFoundException, ObjectLockedException,
+        ServiceAccessException { 
+    }
+   
+ 
 }

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to