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