remm 01/03/18 21:10:39
Modified: src/webdav/server/org/apache/slide/webdav/method
PropFindMethod.java WebdavMethod.java
Log:
- Supports DAV:principal-collection-set property.
- Fix path bug : the paths returned for ACL related things were Slide paths which
had to be converted to absolute URLs.
Revision Changes Path
1.14 +37 -5
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PropFindMethod.java
Index: PropFindMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PropFindMethod.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- PropFindMethod.java 2001/03/19 00:55:50 1.13
+++ PropFindMethod.java 2001/03/19 05:10:38 1.14
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PropFindMethod.java,v
1.13 2001/03/19 00:55:50 remm Exp $
- * $Revision: 1.13 $
- * $Date: 2001/03/19 00:55:50 $
+ * $Header:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PropFindMethod.java,v
1.14 2001/03/19 05:10:38 remm Exp $
+ * $Revision: 1.14 $
+ * $Date: 2001/03/19 05:10:38 $
*
* ====================================================================
*
@@ -196,6 +196,13 @@
/**
+ * Principal collection set.
+ */
+ private static final String PRINCIPAL_COLLECTION_SET =
+ "principal-collection-set";
+
+
+ /**
* ACL semantics.
*/
private static final String ACL_SEMANTICS = "acl-semantics";
@@ -632,6 +639,7 @@
showCurrentUserPrivilegeSet(object, generatedXML);
showAcl(object, generatedXML);
showAclSemantics(generatedXML);
+ showPrincipalCollectionSet(generatedXML);
// Other properties
Enumeration propertyList =
@@ -701,6 +709,8 @@
XMLPrinter.NO_CONTENT);
generatedXML.writeElement(null, ACL_SEMANTICS,
XMLPrinter.NO_CONTENT);
+ generatedXML.writeElement(null, PRINCIPAL_COLLECTION_SET,
+ XMLPrinter.NO_CONTENT);
// Then, add this resource's custom properties
propertyList = revisionDescriptor.enumerateProperties();
@@ -780,6 +790,10 @@
(propertyNamespace.equals
(NodeProperty.DEFAULT_NAMESPACE))) {
showAclSemantics(generatedXML);
+ } else if ((propertyName.equals(PRINCIPAL_COLLECTION_SET)) &&
+ (propertyNamespace.equals
+ (NodeProperty.DEFAULT_NAMESPACE))) {
+ showPrincipalCollectionSet(generatedXML);
} else {
// Search in the custom properties
@@ -1392,11 +1406,13 @@
}
if (inheritedPermissions) {
+ generatedXML.writeElement(null, "protected",
+ XMLPrinter.NO_CONTENT);
generatedXML.writeElement(null, INHERITED,
XMLPrinter.OPENING);
generatedXML.writeElement(null, "href",
XMLPrinter.OPENING);
- generatedXML.writeText(URLEncode(current.getUri()));
+ generatedXML.writeText(getFullPath(current.getUri()));
generatedXML.writeElement(null, "href",
XMLPrinter.CLOSING);
generatedXML.writeElement(null, INHERITED,
@@ -1410,6 +1426,7 @@
}
inheritedPermissions = true;
+
try {
current = structure.getParent(slideToken, current);
} catch (SlideException e) {
@@ -1437,7 +1454,7 @@
XMLPrinter.NO_CONTENT);
} else {
generatedXML.writeElement(null, "href", XMLPrinter.OPENING);
- generatedXML.writeText(URLEncode(principal));
+ generatedXML.writeText(getFullPath(principal));
generatedXML.writeElement(null, "href", XMLPrinter.CLOSING);
}
generatedXML.writeElement(null, PRINCIPAL, XMLPrinter.CLOSING);
@@ -1467,6 +1484,21 @@
generatedXML.writeElement(null, ACL_SEMANTICS, XMLPrinter.OPENING);
generatedXML.writeText(SLIDE_ACL_SEMANTICS);
generatedXML.writeElement(null, ACL_SEMANTICS, XMLPrinter.CLOSING);
+ }
+
+
+ /**
+ * WebDAV ACL DAV:principal-collection-set property.
+ */
+ private void showPrincipalCollectionSet(XMLPrinter generatedXML) {
+ NamespaceConfig config = token.getNamespaceConfig();
+ generatedXML.writeElement(null, PRINCIPAL_COLLECTION_SET,
+ XMLPrinter.OPENING);
+ generatedXML.writeElement(null, "href", XMLPrinter.OPENING);
+ generatedXML.writeText(getFullPath(config.getUsersPath()));
+ generatedXML.writeElement(null, "href", XMLPrinter.CLOSING);
+ generatedXML.writeElement(null, PRINCIPAL_COLLECTION_SET,
+ XMLPrinter.CLOSING);
}
1.16 +15 -3
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/WebdavMethod.java
Index: WebdavMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/WebdavMethod.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- WebdavMethod.java 2001/03/18 21:50:58 1.15
+++ WebdavMethod.java 2001/03/19 05:10:39 1.16
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/WebdavMethod.java,v
1.15 2001/03/18 21:50:58 remm Exp $
- * $Revision: 1.15 $
- * $Date: 2001/03/18 21:50:58 $
+ * $Header:
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/WebdavMethod.java,v
1.16 2001/03/19 05:10:39 remm Exp $
+ * $Revision: 1.16 $
+ * $Date: 2001/03/19 05:10:39 $
*
* ====================================================================
*
@@ -381,6 +381,18 @@
}
return URLDecode(result);
+ }
+
+
+ /**
+ * Return an absolute URL (absolute in the HTTP sense) based on a Slide
+ * path.
+ */
+ public String getFullPath(String path) {
+ if (path.startsWith("/"))
+ return URLEncode(req.getContextPath() + path);
+ else
+ return URLEncode(req.getContextPath() + "/" + path);
}