juergen 02/04/04 20:52:53
Modified: src/webdav/server/org/apache/slide/webdav/util
VersioningHelper.java
Log:
Added methods getUri() and updateVCR().
Use updateVCR() to restore the VCR in method uncheckout().
Removed no longer needed methods to backup/restore the properties.
(ralf)
Revision Changes Path
1.19 +130 -110
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/VersioningHelper.java
Index: VersioningHelper.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/VersioningHelper.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- VersioningHelper.java 4 Apr 2002 11:40:56 -0000 1.18
+++ VersioningHelper.java 5 Apr 2002 04:52:53 -0000 1.19
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/VersioningHelper.java,v
1.18 2002/04/04 11:40:56 juergen Exp $
- * $Revision: 1.18 $
- * $Date: 2002/04/04 11:40:56 $
+ * $Header:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/VersioningHelper.java,v
1.19 2002/04/05 04:52:53 juergen Exp $
+ * $Revision: 1.19 $
+ * $Date: 2002/04/05 04:52:53 $
*
* ====================================================================
*
@@ -341,7 +341,6 @@
content.store(sToken, cinNrds.getUri(), cinNrd, null);
// do the checkout
- backupProperties(rNrds, rNrd, vhrNrds);
rNrd.removeProperty( cinProp );
rNrd.setProperty(
new NodeProperty(P_CHECKED_OUT, cinProp.getValue()) );
@@ -474,15 +473,8 @@
PropertyHelper.removeHrefFromProperty(coutNrd, P_CHECKOUT_SET,
rNrds.getUri());
content.store( sToken, coutNrds.getUri(), coutNrd, null);
- // restore revision descriptor
- restoreProperties(rNrds, rNrd, vhrNrds);
- rNrd.setLastModified(new Date());
- rNrd.setProperty(new NodeProperty(P_CHECKED_IN, coutProp.getValue()) );
- NodeRevisionContent oldContent = new NodeRevisionContent();
- oldContent.setContent(coutNrc.getContentBytes());
-
- // Store changes
- content.store( sToken, rNrds.getUri(), rNrd, oldContent);
+ // update properties and content
+ updateVCR(rNrds, rNrd, coutNrds, coutNrd);
}
/**
@@ -682,6 +674,100 @@
}
/**
+ * Returns the URI of the resource defined by the given
NodeRevisionDescriptor(s).
+ *
+ * @param revisionDescriptors the NodeRevisionDescriptors of the resource.
+ * @param revisionDescriptor the NodeRevisionDescriptor of the resource.
+ *
+ * @return the URI of the resource.
+ *
+ * @throws SlideException
+ */
+ public String getUri(NodeRevisionDescriptors revisionDescriptors,
+ NodeRevisionDescriptor revisionDescriptor) throws
SlideException {
+ return getUri(nsaToken, sToken, content, revisionDescriptors,
revisionDescriptor);
+ }
+
+ /**
+ * Updates the VCR specified by <code>vcrPath</code> with the properties
+ * and the content of the VR specified by the given <code>vrPath</code>.
+ *
+ * @param vcrUri the URI of the VCR to update.
+ * @param vrUri the URI of the VR from which to update.
+ *
+ * @throws SlideException
+ */
+ protected void updateVCR(String vcrUri, String vrUri) throws SlideException {
+
+ NodeRevisionDescriptors vcrRevisionDescriptors =
retrieveRevisionDescriptors(vcrUri);
+ NodeRevisionDescriptor vcrRevisionDescriptor =
retrieveLatestRevisionDescriptor(vcrUri, vcrRevisionDescriptors);
+
+ NodeRevisionDescriptors vrRevisionDescriptors =
retrieveRevisionDescriptors(vrUri);
+ NodeRevisionDescriptor vrRevisionDescriptor =
retrieveLatestRevisionDescriptor(vrUri, vrRevisionDescriptors);
+
+ }
+
+ /**
+ * Updates the VCR specified by <code>vcrRevisionDescriptors</code> and
+ * <code>vcrRevisionDescriptors</code> with the properties and the content
+ * of the VR specified by the given <code>vrRevisionDescriptors</code>
+ * and <code>vrRevisionDescriptor</code>.
+ *
+ * @param vcrRevisionDescriptors the NodeRevisionDescriptors of the VCR
to update.
+ * @param vcrRevisionDescriptor the NodeRevisionDescriptor of the VCR to
update.
+ * @param vrRevisionDescriptors the NodeRevisionDescriptors of the VR
from
+ * which to update.
+ * @param vrRevisionDescriptor the NodeRevisionDescriptor of the VR from
+ * which to update.
+ *
+ * @throws SlideException
+ */
+ protected void updateVCR(NodeRevisionDescriptors vcrRevisionDescriptors,
NodeRevisionDescriptor vcrRevisionDescriptor, NodeRevisionDescriptors
vrRevisionDescriptors, NodeRevisionDescriptor vrRevisionDescriptor) throws
SlideException {
+
+ ResourceKind vrResourceKind =
AbstractResourceKind.determineResourceKind(vrRevisionDescriptor);
+
+ // remove all VCR properties first
+ Enumeration propertyEnum = vcrRevisionDescriptor.enumerateProperties();
+ while (propertyEnum.hasMoreElements()) {
+
vcrRevisionDescriptor.removeProperty((NodeProperty)propertyEnum.nextElement());
+ }
+
+ // set initial properties
+ Iterator iterator =
pHelp.createInitialProperties(VersionImpl.getInstance()).iterator();
+ while (iterator.hasNext()) {
+ vcrRevisionDescriptor.setProperty((NodeProperty)iterator.next());
+ }
+
+ // copy dead properties of VR to VCR
+ propertyEnum = vrRevisionDescriptor.enumerateProperties();
+ while (propertyEnum.hasMoreElements()) {
+ NodeProperty p = (NodeProperty)propertyEnum.nextElement();
+ if( ! vrResourceKind.isSupportedLiveProperty(p.getName()) ) {
+ vcrRevisionDescriptor.setProperty(p);
+ }
+ }
+
+ // set up "special" properties
+ String vrUri = getUri(vrRevisionDescriptors, vrRevisionDescriptor);
+ vcrRevisionDescriptor.setProperty(new NodeProperty(P_CHECKED_IN,
+
pHelp.createHrefValue(vrUri)) );
+ vcrRevisionDescriptor.setLastModified(new Date());
+
vcrRevisionDescriptor.setContentLength(vrRevisionDescriptor.getContentLength());
+ vcrRevisionDescriptor.setContentType(vrRevisionDescriptor.getContentType());
+ vcrRevisionDescriptor.setETag(vcrRevisionDescriptors.getUri().hashCode()+
+
"_"+vcrRevisionDescriptor.getContentLength());
+
+ // update content
+ NodeRevisionContent vrContent = content.retrieve(sToken,
vrRevisionDescriptors, vrRevisionDescriptor);
+ NodeRevisionContent vcrContent = new NodeRevisionContent();
+ vcrContent.setContent(vrContent.getContentBytes());
+
+ // Store changes
+ content.store( sToken, vcrRevisionDescriptors.getUri(),
vcrRevisionDescriptor, vcrContent);
+ }
+
+
+ /**
* Expects a String containing an XML Element like
* <code><example>value</example></code>
* and returns the text <code>value</code> of this element.
@@ -875,112 +961,46 @@
}
/**
- * Backups the properties of the given <code>revisionDescriptor</code>
- * at the {@link #VHR_BACKUP_REVISION_NUMBER special revision} of the
- * NodeRevisionDescriptors of the VHR associated with the VCR.
- *
- * @param revisionDescriptors the NodeRevisionDescriptors of the
- * VCR to backup.
- * @param revisionDescriptor the NodeRevisionDescriptor of the
- * VCR to backup.
- * @param historyRevisionDescriptors the NodeRevisionDescriptors of the
- * VHR associated with the VCR.
+ * Returns the URI of the resource defined by the given
NodeRevisionDescriptor(s).
*
- * @throws SlideException
- */
- protected void backupProperties(NodeRevisionDescriptors revisionDescriptors,
NodeRevisionDescriptor revisionDescriptor, NodeRevisionDescriptors
historyRevisionDescriptors) throws SlideException {
-
- NodeRevisionDescriptor backup = cloneRevisionDescriptor(revisionDescriptor,
VHR_BACKUP_REVISION_NUMBER);
- try {
- content.retrieve(sToken, historyRevisionDescriptors,
backup.getRevisionNumber());
- content.store(sToken, historyRevisionDescriptors.getUri(), backup,
null);
- }
- catch (RevisionDescriptorNotFoundException e) {
- content.create(sToken, historyRevisionDescriptors.getUri(),null,
backup, null);
- }
- }
-
- /**
- * Restores the properties of the given <code>revisionDescriptor</code>
- * from the {@link #VHR_BACKUP_REVISION_NUMBER special revision} of the
- * NodeRevisionDescriptors of the VHR associated with the VCR.
*
- * @param revisionDescriptors the NodeRevisionDescriptors of the
- * VCR to restore.
- * @param revisionDescriptor the NodeRevisionDescriptor of the
- * VCR to restore.
- * @param historyRevisionDescriptors the NodeRevisionDescriptors of the
- * VHR associated with the VCR.
+ * @param nsaToken the NamespaceAccessToken to use.
+ * @param sToken the SlideToken to use.
+ * @param content the Content helper to use.
+ * @param revisionDescriptors the NodeRevisionDescriptors of the resource.
+ * @param revisionDescriptor the NodeRevisionDescriptor of the resource.
+ *
+ * @return the URI of the resource.
*
* @throws SlideException
*/
- protected void restoreProperties(NodeRevisionDescriptors revisionDescriptors,
NodeRevisionDescriptor revisionDescriptor, NodeRevisionDescriptors
historyRevisionDescriptors) throws SlideException {
-
- NodeRevisionDescriptor backup = content.retrieve(sToken,
historyRevisionDescriptors, VHR_BACKUP_REVISION_NUMBER);
- copyRevisionDescriptor(backup, revisionDescriptor);
- content.store(sToken, revisionDescriptors.getUri(), revisionDescriptor,
null);
+ public static String getUri(NamespaceAccessToken nsaToken,
+ SlideToken sToken,
+ Content content,
+ NodeRevisionDescriptors revisionDescriptors,
+ NodeRevisionDescriptor revisionDescriptor) throws
SlideException {
+
+ StringBuffer uri = new StringBuffer();
+ UriHandler uriHandler = UriHandler.getUriHandler(nsaToken,
revisionDescriptors.getUri());
+ if ( ! uriHandler.isHistoryUri() ) {
+ // any resource
+ uri.append(revisionDescriptors.getUri());
}
-
- /**
- * Returns a clone of the given <code>revisionDescriptor</code> with
- * the given <code>revisionNumber</code>.
- *
- * @param revisionDescriptor the NodeRevisionDescriptor to clone.
- * @param revisionNumber the NodeRevsionNumber to use for the clone.
- *
- * @return the cloned NodeRevisionDescriptor.
- */
- private NodeRevisionDescriptor cloneRevisionDescriptor(NodeRevisionDescriptor
revisionDescriptor, NodeRevisionNumber revisionNumber) {
-
- String branchName = revisionDescriptor.getBranchName();
- Enumeration labelEnum = revisionDescriptor.enumerateLabels();
- Vector labels = new Vector();
- while (labelEnum.hasMoreElements()) {
- labels.add(labelEnum.nextElement());
- }
- Hashtable properties = new Hashtable();
- Enumeration propertiesEnum = revisionDescriptor.enumerateProperties();
- NodeProperty property = null;
- String name = null;
- String namespace = null;
- while (propertiesEnum.hasMoreElements()) {
- property = (NodeProperty)propertiesEnum.nextElement();
- name = property.getName();
- namespace = property.getNamespace();
- if (namespace != null) {
- name = namespace + name;
+ else {
+ if (revisionDescriptor.getRevisionNumber().equals(new
NodeRevisionNumber(0, 0))) {
+ // history resource
+ uri.append(revisionDescriptors.getUri());
+ }
+ else {
+ // version resource
+ uri.append(revisionDescriptors.getUri());
+ if ( ! revisionDescriptors.getUri().endsWith("/") ) {
+ uri.append("/");
}
- properties.put(name, property);
+ uri.append(revisionDescriptor.getRevisionNumber().toString());
}
- NodeRevisionDescriptor backup = new NodeRevisionDescriptor(revisionNumber,
branchName, labels, properties);
- return backup;
- }
-
- /**
- * Copies the labels and properties of the given <code>source</code>
- * to the <code>destination</code> NodeRevisionDescriptor.
- *
- * @param source the NodeRevisionDescriptor to copy the labels
- * and properties from.
- * @param destination the NodeRevisionDescriptor to copy the labels
- * and properties to.
- */
- private void copyRevisionDescriptor(NodeRevisionDescriptor source,
NodeRevisionDescriptor destination) {
-
- destination.removeLabels();
- Enumeration labelEnum = source.enumerateLabels();
- while (labelEnum.hasMoreElements()) {
- destination.addLabel((String)labelEnum.nextElement());
- }
-
- Enumeration propertiesEnum = destination.enumerateProperties();
- while (propertiesEnum.hasMoreElements()) {
- destination.removeProperty((NodeProperty)propertiesEnum.nextElement());
- }
- propertiesEnum = source.enumerateProperties();
- while (propertiesEnum.hasMoreElements()) {
- destination.setProperty((NodeProperty)propertiesEnum.nextElement());
}
+ return uri.toString();
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>