juergen 2002/06/28 00:35:17
Modified: src/webdav/server/org/apache/slide/webdav/method
ReportMethod.java
Log:
Fixed <version-tree> and <expand-property> report which failed due to changes in the
DeltaV area.
(ralf)
Revision Changes Path
1.38 +81 -117
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/ReportMethod.java
Index: ReportMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/ReportMethod.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- ReportMethod.java 26 Jun 2002 05:00:00 -0000 1.37
+++ ReportMethod.java 28 Jun 2002 07:35:17 -0000 1.38
@@ -136,6 +136,7 @@
import org.apache.slide.webdav.util.resourcekind.ResourceKind;
import org.apache.slide.webdav.util.resourcekind.AbstractResourceKind;
+import org.apache.slide.webdav.util.resourcekind.Version;
import org.apache.slide.webdav.util.resourcekind.VersionControlled;
import org.apache.slide.webdav.util.resourcekind.CheckedOutVersionControlled;
import org.apache.slide.webdav.util.resourcekind.CheckedInVersionControlled;
@@ -648,67 +649,28 @@
* @param depth the depth of the request.
*
* @throws WebdavException
- * @throws ObjectLockedException
- * @throws RevisionDescriptorNotFoundException
- * @throws ServiceAccessException
- * @throws LinkedObjectNotFoundException
- * @throws AccessDeniedException
- * @throws ObjectNotFoundException
+ * @throws SlideException
* @throws JDOMException
*/
- protected void executeVersionTreeReport(String requestUri, Element
parentElement, int depth) throws WebdavException, ObjectLockedException,
RevisionDescriptorNotFoundException, ServiceAccessException,
LinkedObjectNotFoundException, AccessDeniedException, ObjectNotFoundException,
JDOMException {
+ protected void executeVersionTreeReport(String requestUri, Element
parentElement, int depth) throws WebdavException, SlideException, JDOMException {
- NodeRevisionDescriptors revisionDescriptors = null;
- NodeRevisionDescriptor revisionDescriptor = null;
- NodeRevisionNumber revisionNumber = null;
- String slideUri = null;
- UriHandler uriHandler = UriHandler.getUriHandler(requestUri);
-
- if (uriHandler.isHistoryUri()) {
- revisionDescriptors = content.retrieve(slideToken, requestUri);
- revisionNumber = new NodeRevisionNumber(0, 0);
- slideUri = requestUri;
- }
- else if (uriHandler.isVersionUri()) {
- String revisionUri = uriHandler.getAssociatedHistoryUri();
- revisionDescriptors = content.retrieve(slideToken, revisionUri);
- revisionNumber = revisionDescriptors.getInitialRevision();
- slideUri = revisionUri;
- }
- else {
+ NodeRevisionDescriptors revisionDescriptors = content.retrieve(slideToken,
requestUri);
+ NodeRevisionDescriptor revisionDescriptor = content.retrieve(slideToken,
revisionDescriptors);
+ ResourceKind resourceKind =
AbstractResourceKind.determineResourceKind(token,
+
revisionDescriptors,
+
revisionDescriptor);
+ if (resourceKind instanceof VersionControlled) {
+ requestUri = versioningHelper.getUriOfAssociatedVR(requestUri);
revisionDescriptors = content.retrieve(slideToken, requestUri);
- revisionNumber = revisionDescriptors.getLatestRevision();
- slideUri = requestUri;
-
- // check if this is a VCR
- revisionDescriptor = content.retrieve(slideToken,
+ revisionDescriptor = content.retrieve(slideToken, revisionDescriptors);
+ resourceKind = AbstractResourceKind.determineResourceKind(token,
revisionDescriptors,
- revisionNumber);
-
- NodeProperty lastCheckedInRevisionProperty =
revisionDescriptor.getProperty(P_CHECKED_IN);
- if (lastCheckedInRevisionProperty == null) {
- lastCheckedInRevisionProperty =
revisionDescriptor.getProperty(P_CHECKED_OUT);
- }
- if (lastCheckedInRevisionProperty != null) {
- String lastCheckedInRevisionUri =
getElementValue((String)lastCheckedInRevisionProperty.getValue());
- UriHandler lastCheckedInRevisionUriHandler =
- UriHandler.getUriHandler(lastCheckedInRevisionUri);
- String revisionUri =
lastCheckedInRevisionUriHandler.getAssociatedHistoryUri();
- revisionDescriptors = content.retrieve(slideToken, revisionUri);
- revisionNumber = revisionDescriptors.getInitialRevision();
- slideUri = revisionUri;
- requestUri = lastCheckedInRevisionUri;
+
revisionDescriptor);
}
- }
-
-
- revisionDescriptor = content.retrieve(slideToken,
- revisionDescriptors,
- revisionNumber);
try {
- if ( Configuration.useVersionControl() &&
revisionDescriptors.isVersioned()){
- writeVersionTreeReport(slideUri, revisionDescriptors,
revisionDescriptor, slideToken, requestUri, parentElement);
+ if ( Configuration.useVersionControl() && (resourceKind instanceof
Version) ) {
+ writeVersionTreeReport(revisionDescriptors, revisionDescriptor,
slideToken, requestUri, parentElement);
}
else {
parentElement.addContent(getErrorResponse(requestUri,
WebdavStatus.SC_FORBIDDEN, C_SUPPORTED_REPORT));
@@ -718,20 +680,6 @@
throw new WebdavException(getErrorCode(e));
}
-
- if ( WebdavUtils.isCollection(revisionDescriptor) && (depth > 0) ) {
-
- // traverse all child nodes
- ObjectNode objectNode = structure.retrieve(slideToken, slideUri);
- Enumeration children = structure.getChildren(slideToken, objectNode);
- if (depth != Integer.MAX_VALUE) {
- --depth;
- }
- while (children.hasMoreElements()) {
- objectNode = (ObjectNode)children.nextElement();
- executeVersionTreeReport(objectNode.getUri(), parentElement, depth);
- }
- }
}
@@ -740,7 +688,6 @@
* Write the <code>version-tree</code> report for the given revision and
* recursivly for all successors.
*
- * @param slideUri the URI to access the resource in slide.
* @param revisionDescriptors the NodeRevisionDescriptors of the resource.
* @param revisionDescriptor the NodeRevisionDescriptor of the resource.
* @param slideToken the SlideToken used to access the resource.
@@ -757,16 +704,11 @@
* @throws LockTokenNotFoundException
* @throws JDOMException
*/
- private void writeVersionTreeReport(String slideUri, NodeRevisionDescriptors
revisionDescriptors, NodeRevisionDescriptor revisionDescriptor, SlideToken slideToken,
String requestUri, Element parentElement) throws ObjectLockedException,
ServiceAccessException, LinkedObjectNotFoundException, AccessDeniedException,
ObjectNotFoundException, RevisionDescriptorNotFoundException,
LockTokenNotFoundException, JDOMException {
+ private void writeVersionTreeReport(NodeRevisionDescriptors
revisionDescriptors, NodeRevisionDescriptor revisionDescriptor, SlideToken slideToken,
String requestUri, Element parentElement) throws ObjectLockedException,
ServiceAccessException, LinkedObjectNotFoundException, AccessDeniedException,
ObjectNotFoundException, RevisionDescriptorNotFoundException,
LockTokenNotFoundException, JDOMException {
PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token,
slideToken);
NodeRevisionNumber revisionNumber = revisionDescriptor.getRevisionNumber();
- if (revisionNumber.equals(new NodeRevisionNumber(0, 0))) {
- // this is a history
- parentElement.addContent(getErrorResponse(slideUri,
WebdavStatus.SC_FORBIDDEN, C_SUPPORTED_REPORT));
- }
- else {
// this is a versioned resource
NodeRevisionDescriptor historyDescriptor = content.retrieve(slideToken,
revisionDescriptors, new NodeRevisionNumber(0, 0));
NodeProperty versionSetProperty =
historyDescriptor.getProperty(P_VERSION_SET);
@@ -780,17 +722,14 @@
NodeRevisionNumber currentRevisionNumber= null;
UriHandler currentUriHandler = null;
String currentRequestUri = null;
- String currentSlideUri = null;
while (hrefIterator.hasNext()) {
currentRequestUri = ((Element)hrefIterator.next()).getText();
currentUriHandler = UriHandler.getUriHandler(currentRequestUri);
- currentSlideUri = currentUriHandler.getAssociatedHistoryUri();
currentRevisionNumber = new
NodeRevisionNumber(currentUriHandler.getVersionName());
- currentRevisionDescriptors = content.retrieve(slideToken,
slideUri);
- parentElement.addContent(getResponseElement(currentSlideUri,
currentRevisionDescriptors, currentRevisionNumber, slideToken, currentRequestUri,
getRequestedVersionTreeProperties()));
- }
+ currentRevisionDescriptors = content.retrieve(slideToken,
currentRequestUri);
+ parentElement.addContent(getResponseElement(currentRequestUri,
currentRevisionDescriptors, currentRevisionNumber, slideToken, currentRequestUri,
getRequestedVersionTreeProperties()));
}
}
}
@@ -816,7 +755,9 @@
Element href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
String serverURL = HTTP_PROTOCOL + req.getServerName()+ ":" +
req.getServerPort();
- href.setText(serverURL + req.getContextPath() + requestUri);
+ href.setText(PropertyHelper.getAbsoluteURL(serverUri,
+ req.getContextPath(),
+ requestUri));
response.addContent(href);
PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token,
slideToken);
@@ -836,6 +777,45 @@
/**
+ * Returns the <code><response></code> for the revision
+ * specified by the <code>revisionDescriptor</code>
+ *
+ * @param slideUri the URI to access the resource in slide.
+ * @param requestedResource the RequestedResource.
+ * @param slideToken the SlideToken used to access the resource.
+ * @param requestUri the URI of the resource.
+ * @param requestedProperties the requested properties.
+ *
+ * @throws JDOMException
+ */
+ private Element getResponseElement(String slideUri, RequestedResource
requestedResource, SlideToken slideToken, String requestUri, RequestedProperties
requestedProperties) throws JDOMException {
+
+ Element response = new Element(E_RESPONSE,
NamespaceCache.DEFAULT_NAMESPACE);
+
+ Element href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
+ String serverURL = HTTP_PROTOCOL + req.getServerName()+ ":" +
req.getServerPort();
+ href.setText(PropertyHelper.getAbsoluteURL(serverUri,
+ req.getContextPath(),
+ requestUri));
+ response.addContent(href);
+
+ PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token,
slideToken);
+
+ try {
+ List propstatList =
retriever.getPropertiesOfObject(requestedProperties, requestedResource,
req.getContextPath(), serverURL, true);
+ Iterator iterator = propstatList.iterator();
+ while (iterator.hasNext()) {
+ response.addContent((Element)iterator.next());
+ }
+ }
+ catch (Exception e) {
+ response = getErrorResponse(requestUri, getErrorCode(e), null);
+ }
+ return response;
+ }
+
+
+ /**
* Executes a requested <code>expand-propterty</code> report.
*
* @param requestUri the URI of the requested resource.
@@ -1387,37 +1367,21 @@
protected void writeExpandPropertyReport(String requestUri, Element
parentElement, List requestedPropertyElementList) throws WebdavException,
ObjectLockedException, RevisionDescriptorNotFoundException, ServiceAccessException,
LinkedObjectNotFoundException, AccessDeniedException, ObjectNotFoundException,
JDOMException {
try {
+ NodeRevisionDescriptors revisionDescriptors =
content.retrieve(slideToken, requestUri);
+ NodeRevisionDescriptor revisionDescriptor =
content.retrieve(slideToken, revisionDescriptors);
+ ResourceKind resourceKind =
AbstractResourceKind.determineResourceKind(token,
+
revisionDescriptors,
+
revisionDescriptor);
+ PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token,
slideToken);
- NodeRevisionDescriptors revisionDescriptors = null;
- NodeRevisionDescriptor revisionDescriptor = null;
- NodeRevisionNumber revisionNumber = null;
- String slideUri = null;
- UriHandler uriHandler = UriHandler.getUriHandler(requestUri);
-
- if (uriHandler.isHistoryUri()) {
- revisionDescriptors = content.retrieve(slideToken, requestUri);
- revisionNumber = new NodeRevisionNumber(0, 0);
- slideUri = requestUri;
- }
- else if (uriHandler.isVersionUri()) {
- String revisionUri = uriHandler.getAssociatedHistoryUri();
- revisionDescriptors = content.retrieve(slideToken, revisionUri);
- revisionNumber = revisionDescriptors.getInitialRevision();
- slideUri = revisionUri;
- }
- else {
- revisionDescriptors = content.retrieve(slideToken, requestUri);
- revisionNumber = revisionDescriptors.getLatestRevision();
- slideUri = requestUri;
- }
- revisionDescriptor = content.retrieve(slideToken,
+ Element response = getResponseElement(requestUri,
revisionDescriptors,
- revisionNumber);
- PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token,
slideToken);
-
+
revisionDescriptor.getRevisionNumber(),
+ slideToken,
+ requestUri,
+
createRequestedProperties(requestedPropertyElementList));
- Element response = getResponseElement(slideUri, revisionDescriptors,
revisionNumber, slideToken, requestUri,
createRequestedProperties(requestedPropertyElementList));
parentElement.addContent(response);
// check for nested <property> elements
@@ -1435,7 +1399,9 @@
if (hrefElement.getText() != null) {
// replace the <href> with <response> of the
corresponding resource
- writeExpandPropertyReport(hrefElement.getText(),
hrefElement.getParent(), childPropertyList);
+
writeExpandPropertyReport(getSlidePath(hrefElement.getText()),
+ hrefElement.getParent(),
+ childPropertyList);
hrefElement.getParent().removeContent(hrefElement);
}
}
@@ -1638,11 +1604,9 @@
Element response = new Element(E_RESPONSE,
NamespaceCache.DEFAULT_NAMESPACE);
Element href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
- href.setText(HTTP_PROTOCOL +
- getRequest().getServerName()+ ":" +
- getRequest().getServerPort() +
- getRequest().getContextPath() +
- requestUri);
+ href.setText(PropertyHelper.getAbsoluteURL(serverUri,
+ getRequest().getContextPath(),
+ requestUri));
response.addContent(href);
Element propStat = new Element(E_PROPSTAT,
NamespaceCache.DEFAULT_NAMESPACE);
response.addContent(propStat);
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>