You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by re...@apache.org on 2001/02/26 01:57:45 UTC
cvs commit: jakarta-slide/src/share/org/apache/slide/util/resources messages.properties
remm 01/02/25 16:57:45
Modified: src/share/org/apache/slide/common Namespace.java
NamespaceConfig.java
src/share/org/apache/slide/content ContentImpl.java
ContentInterceptor.java NodeRevisionDescriptor.java
src/share/org/apache/slide/util/resources
messages.properties
Log:
- Add content interceptors. To write one, simply extend the
org.apache.slide.content.ContentInterceptor class and override at least
one of the methods.
- The content interceptor API cannot be considered final yet. I'm waiting for
feedback on modifying the current hooks or adding new ones.
- Add a new content-interceptor element in the domain configuration.
Revision Changes Path
1.22 +16 -5 jakarta-slide/src/share/org/apache/slide/common/Namespace.java
Index: Namespace.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/common/Namespace.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- Namespace.java 2001/02/15 17:33:12 1.21
+++ Namespace.java 2001/02/26 00:57:41 1.22
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/common/Namespace.java,v 1.21 2001/02/15 17:33:12 remm Exp $
- * $Revision: 1.21 $
- * $Date: 2001/02/15 17:33:12 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/common/Namespace.java,v 1.22 2001/02/26 00:57:41 remm Exp $
+ * $Revision: 1.22 $
+ * $Date: 2001/02/26 00:57:41 $
*
* ====================================================================
*
@@ -93,7 +93,7 @@
* Namespace class.
*
* @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
- * @version $Revision: 1.21 $
+ * @version $Revision: 1.22 $
*/
public final class Namespace {
@@ -225,7 +225,10 @@
* Return the current logger.
*/
public Logger getLogger() {
- return logger;
+ if (logger != null)
+ return logger;
+ else
+ return Domain.getLogger();
}
@@ -520,6 +523,14 @@
*/
void clearUriCache() {
uriCache.clear();
+ }
+
+
+ /**
+ * Get content interceptors associated with this namespace.
+ */
+ public ContentInterceptor[] getContentInterceptors() {
+ return config.getContentInterceptors();
}
1.13 +53 -4 jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java
Index: NamespaceConfig.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- NamespaceConfig.java 2001/02/15 17:33:13 1.12
+++ NamespaceConfig.java 2001/02/26 00:57:42 1.13
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java,v 1.12 2001/02/15 17:33:13 remm Exp $
- * $Revision: 1.12 $
- * $Date: 2001/02/15 17:33:13 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/common/NamespaceConfig.java,v 1.13 2001/02/26 00:57:42 remm Exp $
+ * $Revision: 1.13 $
+ * $Date: 2001/02/26 00:57:42 $
*
* ====================================================================
*
@@ -74,12 +74,14 @@
import org.apache.slide.lock.*;
import org.apache.slide.util.conf.Configuration;
import org.apache.slide.util.conf.ConfigurationException;
+import org.apache.slide.util.Messages;
+import org.apache.slide.util.logger.Logger;
/**
* Configuration of the Namespace.
*
* @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
- * @version $Revision: 1.12 $
+ * @version $Revision: 1.13 $
*/
public final class NamespaceConfig {
@@ -260,6 +262,13 @@
protected static Vector emptyVector = new Vector();
+ /**
+ * Content interceptors.
+ */
+ protected ContentInterceptor[] contentInterceptors
+ = new ContentInterceptor[0];
+
+
// ------------------------------------------------------------- Properties
@@ -487,6 +496,14 @@
}
+ /**
+ * Get content interceptors.
+ */
+ ContentInterceptor[] getContentInterceptors() {
+ return contentInterceptors;
+ }
+
+
// --------------------------------------------------------- Public Methods
@@ -748,6 +765,38 @@
("namespace", NodeProperty.DEFAULT_NAMESPACE);
String role = defaultProperty.getAttribute("role");
addDefaultProperty(role, name, value, propertyNamespace);
+ }
+ } catch (ConfigurationException e) {
+ throw new InvalidNamespaceConfigurationException
+ (namespace, e.getMessage());
+ }
+
+ Enumeration contentInteceptorsDef =
+ config.getConfigurations("content-interceptor");
+ try {
+ while (contentInteceptorsDef.hasMoreElements()) {
+ Configuration contentInterceptorDef =
+ (Configuration) contentInteceptorsDef.nextElement();
+ String classname = contentInterceptorDef.getAttribute("class");
+ try {
+ Class contentInterceptorClass =
+ Class.forName(classname);
+ ContentInterceptor contentInterceptor =
+ (ContentInterceptor)
+ contentInterceptorClass.newInstance();
+ ContentInterceptor[] tempArray =
+ new ContentInterceptor[contentInterceptors.length + 1];
+ for (int i = 0; i < contentInterceptors.length; i++) {
+ tempArray[i] = contentInterceptors[i];
+ }
+ tempArray[contentInterceptors.length] = contentInterceptor;
+ contentInterceptors = tempArray;
+ } catch (Exception e) {
+ namespace.getLogger().log
+ (Messages.format
+ ("org.apache.slide.common.InvalidContentInterceptor",
+ classname, e.getMessage()), Logger.WARNING);
+ }
}
} catch (ConfigurationException e) {
throw new InvalidNamespaceConfigurationException
1.21 +146 -25 jakarta-slide/src/share/org/apache/slide/content/ContentImpl.java
Index: ContentImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/ContentImpl.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- ContentImpl.java 2001/02/15 17:33:39 1.20
+++ ContentImpl.java 2001/02/26 00:57:43 1.21
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/ContentImpl.java,v 1.20 2001/02/15 17:33:39 remm Exp $
- * $Revision: 1.20 $
- * $Date: 2001/02/15 17:33:39 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/ContentImpl.java,v 1.21 2001/02/26 00:57:43 remm Exp $
+ * $Revision: 1.21 $
+ * $Date: 2001/02/26 00:57:43 $
*
* ====================================================================
*
@@ -77,11 +77,19 @@
* Implementation of the content interface.
*
* @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
- * @version $Revision: 1.20 $
+ * @version $Revision: 1.21 $
*/
public final class ContentImpl implements Content {
+ // -------------------------------------------------------------- Constants
+
+
+ protected static final int PRE_STORE = 0;
+ protected static final int POST_STORE = 1;
+ protected static final int POST_RETRIEVE = 2;
+
+
// ----------------------------------------------------------- Constructors
@@ -242,9 +250,17 @@
namespaceConfig.getReadRevisionMetadataAction());
Uri objectUri = namespace.getUri(revisionDescriptors.getUri());
- return objectUri.getStore()
- .retrieveRevisionDescriptor(objectUri, revisionNumber);
+ NodeRevisionDescriptor revisionDescriptor =
+ objectUri.getStore().retrieveRevisionDescriptor
+ (objectUri, revisionNumber);
+
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, revisionDescriptor,
+ null, POST_RETRIEVE);
+
+ return revisionDescriptor;
+
}
@@ -267,6 +283,7 @@
return retrieve(token, revisionDescriptors,
realRevisionDescriptors.getLatestRevision());
+
}
@@ -301,6 +318,7 @@
LinkedObjectNotFoundException, ServiceAccessException,
RevisionNotFoundException, RevisionContentNotFoundException,
ObjectLockedException {
+
ObjectNode associatedObject = structureHelper.retrieve(token, strUri);
// Checking security and locking
@@ -311,9 +329,15 @@
namespaceConfig.getReadRevisionContentAction());
Uri objectUri = namespace.getUri(strUri);
- return objectUri.getStore()
- .retrieveRevisionContent(objectUri,
- revisionDescriptor);
+ NodeRevisionContent revisionContent =
+ objectUri.getStore().retrieveRevisionContent(objectUri,
+ revisionDescriptor);
+
+ // Invoke interceptors
+ invokeInterceptors(token, null, revisionDescriptor,
+ revisionContent, POST_RETRIEVE);
+
+ return revisionContent;
}
@@ -437,6 +461,11 @@
if (revisionDescriptor.getCreationDate() == null) {
revisionDescriptor.setCreationDate(new Date());
}
+
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, revisionDescriptor,
+ revisionContent, PRE_STORE);
+
if (revisionContent != null) {
// Storing the new revision contents
objectUri.getStore()
@@ -459,7 +488,14 @@
if (revisionDescriptor.getCreationDate() == null) {
revisionDescriptor.setCreationDate(new Date());
}
+
if (!revisionDescriptors.hasRevisions()) {
+
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors,
+ revisionDescriptor,
+ revisionContent, PRE_STORE);
+
if (revisionContent != null) {
// Storing the new revision contents
objectUri.getStore()
@@ -469,22 +505,11 @@
// Now creating the revision desriptor in the store
objectUri.getStore()
.createRevisionDescriptor(objectUri, revisionDescriptor);
+
} else {
- if (revisionContent != null) {
- // Storing the new revision contents
- try {
- objectUri.getStore()
- .storeRevisionContent(objectUri,
- revisionDescriptor,
- revisionContent);
- } catch (RevisionNotFoundException e) {
- objectUri.getStore()
- .createRevisionContent(objectUri,
- revisionDescriptor,
- revisionContent);
- }
- }
+
try {
+
// We update the descriptor's properties
NodeRevisionDescriptor oldRevisionDescriptor =
objectUri.getStore()
@@ -497,15 +522,43 @@
.setProperty( (NodeProperty) newPropertiesList
.nextElement() );
}
+
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors,
+ oldRevisionDescriptor,
+ revisionContent, PRE_STORE);
+
+ if (revisionContent != null) {
+ // Storing the new revision contents
+ try {
+ objectUri.getStore()
+ .storeRevisionContent(objectUri,
+ revisionDescriptor,
+ revisionContent);
+ } catch (RevisionNotFoundException e) {
+ objectUri.getStore()
+ .createRevisionContent(objectUri,
+ revisionDescriptor,
+ revisionContent);
+ }
+ }
+
objectUri.getStore()
.storeRevisionDescriptor(objectUri,
oldRevisionDescriptor);
revisionDescriptor = oldRevisionDescriptor;
+
} catch (RevisionDescriptorNotFoundException e) {
// Should NEVER happen.
// Basically, it would mean that there is no initial
// revision, which is incorrect since the object
// HAS revisions.
+
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors,
+ revisionDescriptor,
+ revisionContent, PRE_STORE);
+
objectUri.getStore()
.createRevisionDescriptor(objectUri,
revisionDescriptor);
@@ -526,6 +579,10 @@
e.printStackTrace();
}
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, revisionDescriptor,
+ revisionContent, POST_STORE);
+
}
@@ -659,6 +716,11 @@
revisionDescriptors.addSuccessor
(basedOnRevisionNumber, branchedRevisionNumber);
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors,
+ basedOnRevisionDescriptor,
+ basedOnRevisionContent, PRE_STORE);
+
// Storing back everything
if (basedOnRevisionContent != null) {
objectUri.getStore().createRevisionContent
@@ -669,6 +731,11 @@
objectUri.getStore().storeRevisionDescriptors
(objectUri, revisionDescriptors);
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors,
+ basedOnRevisionDescriptor,
+ basedOnRevisionContent, POST_STORE);
+
}
@@ -772,6 +839,10 @@
(branchLatestRevisionNumber, newRevisionNumber);
revisionDescriptors.setLatestRevision(mainBranch, newRevisionNumber);
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, newRevisionDescriptor,
+ revisionContent, PRE_STORE);
+
// Storing back everything
if (revisionContent != null) {
objectUri.getStore().createRevisionContent
@@ -782,6 +853,10 @@
objectUri.getStore().storeRevisionDescriptors
(objectUri, revisionDescriptors);
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, newRevisionDescriptor,
+ revisionContent, POST_STORE);
+
}
@@ -827,6 +902,10 @@
objectUri.getStore().retrieveRevisionDescriptor
(objectUri, revisionDescriptor.getRevisionNumber());
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, revisionDescriptor,
+ revisionContent, PRE_STORE);
+
if (revisionContent != null) {
try {
objectUri.getStore().retrieveRevisionContent
@@ -846,6 +925,10 @@
objectUri.getStore().storeRevisionDescriptor
(objectUri, revisionDescriptor);
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, revisionDescriptor,
+ revisionContent, POST_STORE);
+
}
@@ -1024,6 +1107,10 @@
newRevisionDescriptor.setBranchName
(realOldRevisionDescriptor.getBranchName());
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, newRevisionDescriptor,
+ revisionContent, PRE_STORE);
+
// Update the revision graph in the revision descriptors
revisionDescriptors
.addSuccessor(revisionDescriptors.getLatestRevision(),
@@ -1050,6 +1137,10 @@
e.printStackTrace();
}
+ // Invoke interceptors
+ invokeInterceptors(token, revisionDescriptors, newRevisionDescriptor,
+ revisionContent, POST_STORE);
+
}
@@ -1068,7 +1159,37 @@
revisionDescriptor.setDefaultProperties(defaultProperties);
}
}
-
-
+
+
+ /**
+ * Invoke content interceptors.
+ */
+ protected void invokeInterceptors
+ (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
+ NodeRevisionDescriptor revisionDescriptor,
+ NodeRevisionContent revisionContent, int type) {
+ ContentInterceptor[] contentInterceptors =
+ namespace.getContentInterceptors();
+ for (int i = 0; i < contentInterceptors.length; i++) {
+ switch (type) {
+ case PRE_STORE:
+ contentInterceptors[i].preStoreContent
+ (token, revisionDescriptors,
+ revisionDescriptor, revisionContent);
+ break;
+ case POST_STORE:
+ contentInterceptors[i].postStoreContent
+ (token, revisionDescriptors,
+ revisionDescriptor, revisionContent);
+ break;
+ case POST_RETRIEVE:
+ contentInterceptors[i].postRetrieveContent
+ (token, revisionDescriptors,
+ revisionDescriptor, revisionContent);
+ break;
+ }
+ }
+ }
+
}
1.2 +4 -4 jakarta-slide/src/share/org/apache/slide/content/ContentInterceptor.java
Index: ContentInterceptor.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/ContentInterceptor.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ContentInterceptor.java 2001/02/25 04:25:50 1.1
+++ ContentInterceptor.java 2001/02/26 00:57:43 1.2
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/ContentInterceptor.java,v 1.1 2001/02/25 04:25:50 remm Exp $
- * $Revision: 1.1 $
- * $Date: 2001/02/25 04:25:50 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/ContentInterceptor.java,v 1.2 2001/02/26 00:57:43 remm Exp $
+ * $Revision: 1.2 $
+ * $Date: 2001/02/26 00:57:43 $
*
* ====================================================================
*
@@ -63,7 +63,6 @@
package org.apache.slide.content;
-import java.security.Principal;
import java.util.Hashtable;
import org.apache.slide.common.SlideToken;
@@ -101,7 +100,8 @@
/**
* That method will be called just after retrieving content.
*
- * @param revisionContent Can be null
+ * @param revisionContent null when the descriptor is retrieved
+ * @param revisionDescriptors null when the content is retrieved
*/
void postRetrieveContent(SlideToken token,
NodeRevisionDescriptors revisionDescriptors,
1.15 +5 -23 jakarta-slide/src/share/org/apache/slide/content/NodeRevisionDescriptor.java
Index: NodeRevisionDescriptor.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeRevisionDescriptor.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- NodeRevisionDescriptor.java 2001/02/15 17:33:41 1.14
+++ NodeRevisionDescriptor.java 2001/02/26 00:57:43 1.15
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeRevisionDescriptor.java,v 1.14 2001/02/15 17:33:41 remm Exp $
- * $Revision: 1.14 $
- * $Date: 2001/02/15 17:33:41 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeRevisionDescriptor.java,v 1.15 2001/02/26 00:57:43 remm Exp $
+ * $Revision: 1.15 $
+ * $Date: 2001/02/26 00:57:43 $
*
* ====================================================================
*
@@ -80,7 +80,7 @@
* Node Revision Descriptor class.
*
* @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
- * @version $Revision: 1.14 $
+ * @version $Revision: 1.15 $
*/
public final class NodeRevisionDescriptor implements Serializable, Cloneable {
@@ -472,7 +472,7 @@
*/
public Enumeration enumeratePropertiesName() {
Vector result = new Vector();
- Enumeration propertyList = getPropertiesValues();
+ Enumeration propertyList = enumerateProperties();
while (propertyList.hasMoreElements()) {
NodeProperty currentProperty =
(NodeProperty) propertyList.nextElement();
@@ -480,24 +480,6 @@
}
return result.elements();
}
-
-
- /**
- * Properties names parser.
- *
- * @return Vector of the properties names
- * @deprecated
- */
- /*
- public Vector getPropertiesNamesParser() {
- Vector result = new Vector();
- Enumeration keys = getPropertiesNames();
- while (keys.hasMoreElements()) {
- result.addElement(keys.nextElement());
- }
- return result;
- }
- */
/**
1.8 +4 -2 jakarta-slide/src/share/org/apache/slide/util/resources/messages.properties
Index: messages.properties
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/util/resources/messages.properties,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- messages.properties 2001/01/20 20:47:11 1.7
+++ messages.properties 2001/02/26 00:57:44 1.8
@@ -1,9 +1,9 @@
#
# Slide messages
#
-# $Id: messages.properties,v 1.7 2001/01/20 20:47:11 remm Exp $
+# $Id: messages.properties,v 1.8 2001/02/26 00:57:44 remm Exp $
#
-# @version $Revision: 1.7 $ $Date: 2001/01/20 20:47:11 $
+# @version $Revision: 1.8 $ $Date: 2001/02/26 00:57:44 $
#
#
@@ -52,6 +52,8 @@
Unknown service name {0}
org.apache.slide.common.ObjectValidationFailedException=\
Invalid object at {0} : {1}
+org.apache.slide.common.InvalidContentInterceptor=\
+ Invalid content interceptor : {0} : {1}
#
# Messages produced by structure