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...@locus.apache.org on 2000/12/04 02:36:26 UTC

cvs commit: jakarta-slide/src/share/org/apache/slide/content Content.java ContentImpl.java

remm        00/12/03 17:36:26

  Modified:    src/share/org/apache/slide/content Content.java
                        ContentImpl.java
  Log:
  - The non-linear versioning specific function calls are slightly modified. They
    should be easier to use, and more robust.
  - Fix bugs in the implementation.
  
  Revision  Changes    Path
  1.8       +36 -9     jakarta-slide/src/share/org/apache/slide/content/Content.java
  
  Index: Content.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/Content.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Content.java	2000/12/03 07:19:28	1.7
  +++ Content.java	2000/12/04 01:36:26	1.8
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/Content.java,v 1.7 2000/12/03 07:19:28 remm Exp $
  - * $Revision: 1.7 $
  - * $Date: 2000/12/03 07:19:28 $
  + * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/Content.java,v 1.8 2000/12/04 01:36:26 remm Exp $
  + * $Revision: 1.8 $
  + * $Date: 2000/12/04 01:36:26 $
    *
    * ====================================================================
    *
  @@ -76,7 +76,7 @@
    * Content.
    * 
    * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
  - * @version $Revision: 1.7 $
  + * @version $Revision: 1.8 $
    */
   public interface Content {
       
  @@ -124,6 +124,21 @@
       
       
       /**
  +     * Retrieve revision descriptor.
  +     * 
  +     * @param revisionDescriptors Node revision descriptors
  +     * @param revisionNumber Node revision number
  +     */
  +    NodeRevisionDescriptor retrieve
  +        (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
  +         String branch)
  +        throws ObjectNotFoundException, AccessDeniedException, 
  +        LinkedObjectNotFoundException, ServiceAccessException, 
  +        RevisionDescriptorNotFoundException, ObjectLockedException,
  +        BranchNotFoundException, NodeNotVersionedException;
  +    
  +    
  +    /**
        * Retrieve revision content.
        * 
        * @param revisionDescriptors Node revision descriptors
  @@ -153,6 +168,19 @@
       
       
       /**
  +     * Create new revision descriptors.
  +     * 
  +     * @param strUri Uri
  +     * @param isVersioned true is the resource is versioned
  +     */
  +    public void create(SlideToken token, String strUri, 
  +                       boolean isVersioned)
  +        throws ObjectNotFoundException, AccessDeniedException, 
  +        LinkedObjectNotFoundException, ServiceAccessException, 
  +        ObjectLockedException;
  +    
  +    
  +    /**
        * Create new revision in main branch.
        * 
        * @param strUri Uri
  @@ -171,19 +199,18 @@
        * Create new revision based on a previous revision.
        * 
        * @param strUri Uri
  -     * @param oldRevisionDescriptor Node revision descriptor on which the new 
  -     * revision is based
  +     * @param branch Branch in which to create the revision
        * @param newRevisionDescriptor New revision descriptor
        * @param revisionContent Node revision content
        */
  -    void create(SlideToken token, String strUri, 
  -                NodeRevisionDescriptor oldRevisionDescriptor, 
  +    void create(SlideToken token, String strUri, String branch, 
                   NodeRevisionDescriptor newRevisionDescriptor, 
                   NodeRevisionContent revisionContent)
           throws ObjectNotFoundException, AccessDeniedException, 
           RevisionAlreadyExistException, LinkedObjectNotFoundException, 
           ServiceAccessException, RevisionDescriptorNotFoundException, 
  -        ObjectLockedException, NodeNotVersionedException;
  +        ObjectLockedException, NodeNotVersionedException, 
  +        BranchNotFoundException;
       
       
       /**
  
  
  
  1.12      +223 -91   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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- ContentImpl.java	2000/12/03 07:19:29	1.11
  +++ ContentImpl.java	2000/12/04 01:36:26	1.12
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/ContentImpl.java,v 1.11 2000/12/03 07:19:29 remm Exp $
  - * $Revision: 1.11 $
  - * $Date: 2000/12/03 07:19:29 $
  + * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/ContentImpl.java,v 1.12 2000/12/04 01:36:26 remm Exp $
  + * $Revision: 1.12 $
  + * $Date: 2000/12/04 01:36:26 $
    *
    * ====================================================================
    *
  @@ -77,7 +77,7 @@
    * Implementation of the content interface.
    * 
    * @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
  - * @version $Revision: 1.11 $
  + * @version $Revision: 1.12 $
    */
   public final class ContentImpl implements Content {
       
  @@ -185,10 +185,52 @@
        */
       public NodeRevisionDescriptor retrieve
           (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
  +         String branch)
  +        throws ObjectNotFoundException, AccessDeniedException, 
  +        LinkedObjectNotFoundException, ServiceAccessException, 
  +        RevisionDescriptorNotFoundException, ObjectLockedException,
  +        BranchNotFoundException, NodeNotVersionedException {
  +        
  +        Uri objectUri = namespace.getUri(revisionDescriptors.getUri());
  +        
  +        NodeRevisionDescriptors realRevisionDescriptors = objectUri.getStore()
  +            .retrieveRevisionDescriptors(objectUri);
  +        
  +        if (!realRevisionDescriptors.isVersioned()) {
  +            // Invalid function call : we try to create a revision, but the 
  +            // descriptors won't allow it
  +            throw new NodeNotVersionedException
  +                (realRevisionDescriptors.getUri().toString());
  +        }
  +        
  +        // Retrieving latest revision numbers
  +        NodeRevisionNumber branchLatestRevisionNumber =
  +            realRevisionDescriptors.getLatestRevision(branch);
  +        
  +        if (branchLatestRevisionNumber == null) {
  +            throw new BranchNotFoundException
  +                (realRevisionDescriptors.getUri().toString(), branch);
  +        }
  +        
  +        return retrieve(token, realRevisionDescriptors, 
  +                        branchLatestRevisionNumber);
  +        
  +    }
  +    
  +    
  +    /**
  +     * Retrieve revision descriptor.
  +     * 
  +     * @param revisionDescriptors Node revision descriptors
  +     * @param revisionNumber Node revision number
  +     */
  +    public NodeRevisionDescriptor retrieve
  +        (SlideToken token, NodeRevisionDescriptors revisionDescriptors,
            NodeRevisionNumber revisionNumber)
           throws ObjectNotFoundException, AccessDeniedException, 
           LinkedObjectNotFoundException, ServiceAccessException, 
           RevisionDescriptorNotFoundException, ObjectLockedException {
  +        
           ObjectNode associatedObject = structureHelper
               .retrieve(token, revisionDescriptors.getUri());
           
  @@ -202,6 +244,7 @@
           Uri objectUri = namespace.getUri(revisionDescriptors.getUri());
           return objectUri.getStore()
               .retrieveRevisionDescriptor(objectUri, revisionNumber);
  +        
       }
       
       
  @@ -216,8 +259,14 @@
           throws ObjectNotFoundException, AccessDeniedException, 
           LinkedObjectNotFoundException, ServiceAccessException, 
           RevisionDescriptorNotFoundException, ObjectLockedException {
  +        
  +        Uri objectUri = namespace.getUri(revisionDescriptors.getUri());
  +        
  +        NodeRevisionDescriptors realRevisionDescriptors = objectUri.getStore()
  +            .retrieveRevisionDescriptors(objectUri);
  +        
           return retrieve(token, revisionDescriptors, 
  -                        revisionDescriptors.getLatestRevision());
  +                        realRevisionDescriptors.getLatestRevision());
       }
       
       
  @@ -269,6 +318,49 @@
       
       
       /**
  +     * Create new revision descriptors.
  +     * 
  +     * @param strUri Uri
  +     * @param isVersioned true is the resource is versioned
  +     */
  +    public void create(SlideToken token, String strUri, 
  +                       boolean isVersioned)
  +        throws ObjectNotFoundException, AccessDeniedException, 
  +        LinkedObjectNotFoundException, ServiceAccessException, 
  +        ObjectLockedException {
  +        
  +        // Retrieve the associated object
  +        ObjectNode associatedObject = structureHelper.retrieve(token, strUri);
  +        
  +        // Next we do a security check and a locking check for modifyRevisions
  +        securityHelper.checkCredentials
  +            (token, associatedObject, 
  +             namespaceConfig.getCreateRevisionMetadataAction());
  +        lockHelper.checkLock
  +            (token, associatedObject, 
  +             namespaceConfig.getCreateRevisionMetadataAction());
  +        if (namespaceConfig.getCreateRevisionMetadataAction() !=
  +            namespaceConfig.getCreateRevisionContentAction()) {
  +            securityHelper.checkCredentials
  +                (token, associatedObject, 
  +                 namespaceConfig.getCreateRevisionContentAction());
  +            lockHelper.checkLock
  +                (token, associatedObject, 
  +                 namespaceConfig.getCreateRevisionContentAction());
  +        }
  +        
  +        Uri objectUri = namespace.getUri(strUri);
  +        
  +        NodeRevisionDescriptors revisionDescriptors = 
  +            new NodeRevisionDescriptors(isVersioned);
  +        revisionDescriptors.setUri(strUri);
  +        objectUri.getStore()
  +            .createRevisionDescriptors(objectUri, revisionDescriptors);
  +        
  +    }
  +    
  +    
  +    /**
        * Create new revision in main branch.
        * 
        * @param strUri Uri
  @@ -444,107 +536,34 @@
        * Create new revision based on a previous revision.
        * 
        * @param strUri Uri
  -     * @param oldRevisionDescriptor Node revision descriptor on which the 
  -     * new revision is based
  +     * @param branch Branch in which to create the revision
        * @param newRevisionDescriptor New revision descriptor
        * @param revisionContent Node revision content
        */
  -    public void create(SlideToken token, String strUri, 
  -                       NodeRevisionDescriptor oldRevisionDescriptor, 
  +    public void create(SlideToken token, String strUri, String branch, 
                          NodeRevisionDescriptor newRevisionDescriptor, 
                          NodeRevisionContent revisionContent)
           throws ObjectNotFoundException, AccessDeniedException, 
           RevisionAlreadyExistException, LinkedObjectNotFoundException, 
           ServiceAccessException, RevisionDescriptorNotFoundException, 
  -        ObjectLockedException, NodeNotVersionedException {
  -        
  -        // Retrieve the associated object
  -        ObjectNode associatedObject = structureHelper.retrieve(token, strUri);
  +        ObjectLockedException, NodeNotVersionedException, 
  +        BranchNotFoundException {
           
  -        // Next we do a security check and a locking check for modifyRevisions
  -        securityHelper.checkCredentials
  -            (token, associatedObject, 
  -             namespaceConfig.getCreateRevisionMetadataAction());
  -        lockHelper.checkLock
  -            (token, associatedObject, 
  -             namespaceConfig.getCreateRevisionMetadataAction());
  -        securityHelper.checkCredentials
  -            (token, associatedObject, 
  -             namespaceConfig.getCreateRevisionContentAction());
  -        lockHelper.checkLock(token, associatedObject, 
  -                             namespaceConfig.getCreateRevisionContentAction());
  -        
           Uri objectUri = namespace.getUri(strUri);
  -        objectUri.getStore().begin();
           
  -        // Retrieve the revision table
  -        NodeRevisionDescriptors revisionDescriptors = 
  -            objectUri.getStore()
  +        NodeRevisionDescriptors revisionDescriptors = objectUri.getStore()
               .retrieveRevisionDescriptors(objectUri);
  -        
  -        if (!revisionDescriptors.isVersioned()) {
  -            // Invalid function call : we try to create a revision, but the 
  -            // descriptors won't allow it
  -            throw new NodeNotVersionedException(strUri);
  -        }
           
  -        // Retrieve the old revision descriptor, just to make sure that the old
  -        //  revision we base the new one upon really exists
  -        NodeRevisionDescriptor realOldRevisionDescriptor = 
  -            objectUri.getStore().retrieveRevisionDescriptor
  -            (objectUri, oldRevisionDescriptor.getRevisionNumber());
  -        
  -        // We check that the old revision doesn't have successors, that is we :
  -        // - check to see if it's the latest revision in a branch
  -        // - store that information for later use
  -        NodeRevisionNumber latestNumberInBranch = 
  -            revisionDescriptors.getLatestRevision
  -            (realOldRevisionDescriptor.getBranchName());
  -        if (!realOldRevisionDescriptor.getRevisionNumber()
  -            .equals(latestNumberInBranch)) {
  -            throw new RevisionAlreadyExistException
  -                (objectUri.toString(), new NodeRevisionNumber
  -                    (oldRevisionDescriptor.getRevisionNumber()));
  -        }
  -        
  -        // Next, generate the new revision's number
  -        newRevisionDescriptor.setRevisionNumber( new NodeRevisionNumber
  -            (oldRevisionDescriptor.getRevisionNumber()) );
  -        // Set the creation date
  -        newRevisionDescriptor.setCreationDate(new Date());
  -        
  -        // Initialize the branch name in the new descriptor
  -        newRevisionDescriptor.setBranchName
  -            (realOldRevisionDescriptor.getBranchName());
  -        
  -        // Update the revision graph in the revision descriptors
  -        revisionDescriptors
  -            .addSuccessor(revisionDescriptors.getLatestRevision(), 
  -                          newRevisionDescriptor.getRevisionNumber());
  -        revisionDescriptors
  -            .setLatestRevision(newRevisionDescriptor.getBranchName(),
  -                               newRevisionDescriptor.getRevisionNumber());
  -        // Now creating the revision desriptor in the store
  -        objectUri.getStore()
  -            .createRevisionDescriptor(objectUri, newRevisionDescriptor);
  -        
  -        if (revisionContent != null) {
  -            // Storing the new revision contents
  -            objectUri.getStore()
  -                .createRevisionContent(objectUri, newRevisionDescriptor, 
  -                                       revisionContent);
  -        }
  +        // Retrieving latest revision numbers
  +        NodeRevisionNumber branchLatestRevisionNumber =
  +            revisionDescriptors.getLatestRevision(branch);
           
  -        // We now store the updated revision descriptors
  -        try {
  -            objectUri.getStore()
  -                .storeRevisionDescriptors(objectUri, revisionDescriptors);
  -        } catch (RevisionDescriptorNotFoundException e) {
  -            // Problem ...
  -            e.printStackTrace();
  +        if (branchLatestRevisionNumber == null) {
  +            throw new BranchNotFoundException(strUri, branch);
           }
           
  -        objectUri.getStore().commit();
  +        create(token, strUri, branchLatestRevisionNumber, 
  +               newRevisionDescriptor, revisionContent);
           
       }
       
  @@ -757,7 +776,7 @@
               (mainBranchLatestRevisionNumber, newRevisionNumber);
           revisionDescriptors.addSuccessor
               (branchLatestRevisionNumber, newRevisionNumber);
  -        revisionDescriptors.setLatestRevision(branch, newRevisionNumber);
  +        revisionDescriptors.setLatestRevision(mainBranch, newRevisionNumber);
           
           // Storing back everything
           if (revisionContent != null) {
  @@ -930,5 +949,118 @@
           objectUri.getStore().commit();
           
       }
  +    
  +    
  +    // ------------------------------------------------------ Protected Methods
  +    
  +    
  +    /**
  +     * Create new revision based on a previous revision.
  +     * 
  +     * @param strUri Uri
  +     * @param oldRevisionDescriptor Node revision descriptor on which the 
  +     * new revision is based
  +     * @param newRevisionDescriptor New revision descriptor
  +     * @param revisionContent Node revision content
  +     */
  +    protected void create(SlideToken token, String strUri, 
  +                          NodeRevisionNumber basedOnRevisionNumber, 
  +                          NodeRevisionDescriptor newRevisionDescriptor, 
  +                          NodeRevisionContent revisionContent)
  +        throws ObjectNotFoundException, AccessDeniedException, 
  +        RevisionAlreadyExistException, LinkedObjectNotFoundException, 
  +        ServiceAccessException, RevisionDescriptorNotFoundException, 
  +        ObjectLockedException, NodeNotVersionedException {
  +        
  +        // Retrieve the associated object
  +        ObjectNode associatedObject = structureHelper.retrieve(token, strUri);
  +        
  +        // Next we do a security check and a locking check for modifyRevisions
  +        securityHelper.checkCredentials
  +            (token, associatedObject, 
  +             namespaceConfig.getCreateRevisionMetadataAction());
  +        lockHelper.checkLock
  +            (token, associatedObject, 
  +             namespaceConfig.getCreateRevisionMetadataAction());
  +        securityHelper.checkCredentials
  +            (token, associatedObject, 
  +             namespaceConfig.getCreateRevisionContentAction());
  +        lockHelper.checkLock(token, associatedObject, 
  +                             namespaceConfig.getCreateRevisionContentAction());
  +        
  +        Uri objectUri = namespace.getUri(strUri);
  +        objectUri.getStore().begin();
  +        
  +        // Retrieve the revision table
  +        NodeRevisionDescriptors revisionDescriptors = 
  +            objectUri.getStore()
  +            .retrieveRevisionDescriptors(objectUri);
  +        
  +        if (!revisionDescriptors.isVersioned()) {
  +            // Invalid function call : we try to create a revision, but the 
  +            // descriptors won't allow it
  +            throw new NodeNotVersionedException(strUri);
  +        }
  +        
  +        // Retrieve the old revision descriptor, just to make sure that the old
  +        //  revision we base the new one upon really exists
  +        NodeRevisionDescriptor realOldRevisionDescriptor = 
  +            objectUri.getStore().retrieveRevisionDescriptor
  +            (objectUri, basedOnRevisionNumber);
  +        
  +        // We check that the old revision doesn't have successors, that is we :
  +        // - check to see if it's the latest revision in a branch
  +        // - store that information for later use
  +        NodeRevisionNumber latestNumberInBranch = 
  +            revisionDescriptors.getLatestRevision
  +            (realOldRevisionDescriptor.getBranchName());
  +        if (!realOldRevisionDescriptor.getRevisionNumber()
  +            .equals(latestNumberInBranch)) {
  +            throw new RevisionAlreadyExistException
  +                (objectUri.toString(), new NodeRevisionNumber
  +                    (basedOnRevisionNumber));
  +        }
  +        
  +        // Next, generate the new revision's number
  +        newRevisionDescriptor.setRevisionNumber
  +            (new NodeRevisionNumber(basedOnRevisionNumber));
  +        // Set the creation date
  +        newRevisionDescriptor.setCreationDate(new Date());
  +        
  +        // Initialize the branch name in the new descriptor
  +        newRevisionDescriptor.setBranchName
  +            (realOldRevisionDescriptor.getBranchName());
  +        
  +        // Update the revision graph in the revision descriptors
  +        revisionDescriptors
  +            .addSuccessor(revisionDescriptors.getLatestRevision(), 
  +                          newRevisionDescriptor.getRevisionNumber());
  +        revisionDescriptors
  +            .setLatestRevision(newRevisionDescriptor.getBranchName(),
  +                               newRevisionDescriptor.getRevisionNumber());
  +        // Now creating the revision desriptor in the store
  +        objectUri.getStore()
  +            .createRevisionDescriptor(objectUri, newRevisionDescriptor);
  +        
  +        if (revisionContent != null) {
  +            // Storing the new revision contents
  +            objectUri.getStore()
  +                .createRevisionContent(objectUri, newRevisionDescriptor, 
  +                                       revisionContent);
  +        }
  +        
  +        // We now store the updated revision descriptors
  +        try {
  +            objectUri.getStore()
  +                .storeRevisionDescriptors(objectUri, revisionDescriptors);
  +        } catch (RevisionDescriptorNotFoundException e) {
  +            // Problem ...
  +            e.printStackTrace();
  +        }
  +        
  +        objectUri.getStore().commit();
  +        
  +    }
  +    
       
   }