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();
+
+ }
+
}