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]>