juergen 2004/03/18 08:32:47
Modified: proposals/wvcm/src/org/apache/wvcm/store/webdav/response
AccessControlElementFactory.java
MultistatusResponse.java
Log:
work around for a server problem: in some cases ACE are marked as inherited, which
are not in reality. Will be fixed in the server soon.
Revision Changes Path
1.2 +22 -19
jakarta-slide/proposals/wvcm/src/org/apache/wvcm/store/webdav/response/AccessControlElementFactory.java
Index: AccessControlElementFactory.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/wvcm/src/org/apache/wvcm/store/webdav/response/AccessControlElementFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AccessControlElementFactory.java 8 Dec 2003 17:14:23 -0000 1.1
+++ AccessControlElementFactory.java 18 Mar 2004 16:32:46 -0000 1.2
@@ -86,21 +86,23 @@
* @version $Revision$
*/
public class AccessControlElementFactory {
-
+
private static Namespace dnsp = Namespace.getNamespace("d", "DAV:");
-
+
private Provider provider;
private List accessControlList;
-
- public AccessControlElementFactory(Provider provider) {
+ private Location location;
+
+ public AccessControlElementFactory(Provider provider, Location location) {
this.provider = provider;
this.accessControlList = new ArrayList();
+ this.location = location;
}
-
+
public List getAccessControlList() {
return accessControlList;
}
-
+
/**
* Create List of AccessControlElement instances from DAV:acl property included
* in this multistatus response.
@@ -116,11 +118,11 @@
Principal principal = null;
List privileges = new ArrayList();
boolean grant = true;
-
+
// get the principal
Element principalElm = aceElm.getChild("principal", dnsp);
principal = createPrincipal(principalElm);
-
+
// get the privileges
Location privilegesLocation =
((ProviderImpl)provider).serverPrivilegesLocation();
XPathWrapper xp = new XPathWrapper( "d:grant/d:privilege/*", dnsp );
@@ -144,25 +146,26 @@
}
}
}
-
+
// create the ACE
AccessControlElement ace = new AccessControlElement(principal, privileges,
grant);
-
+
// check inheritance
xp = new XPathWrapper( "d:inherited/d:href", dnsp );
Element hrefElm = (Element)xp.selectSingleNode(aceElm);
if (hrefElm != null) {
- if (!includeInherited) {
- // skip this ACE because it's inherited
- return;
- }
LocationImpl l = (LocationImpl)provider.location( hrefElm.getText() );
- ace.setInheritedFrom( l.resource(ResourceImpl.class) );
+ if (!includeInherited && !this.location.equals(l)) {
+ return; // skip this ACE because it's inherited
+ }
+ if (!this.location.equals(l)) {
+ ace.setInheritedFrom( l.resource(ResourceImpl.class) );
+ }
}
-
+
accessControlList.add( ace );
}
-
+
private Principal createPrincipal(Element principalElm) throws WvcmException {
Principal principal = null;
if (principalElm != null) {
1.2 +17 -17
jakarta-slide/proposals/wvcm/src/org/apache/wvcm/store/webdav/response/MultistatusResponse.java
Index: MultistatusResponse.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/wvcm/src/org/apache/wvcm/store/webdav/response/MultistatusResponse.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MultistatusResponse.java 8 Dec 2003 17:14:23 -0000 1.1
+++ MultistatusResponse.java 18 Mar 2004 16:32:46 -0000 1.2
@@ -81,18 +81,18 @@
* @version $Revision$
*/
public class MultistatusResponse extends AbstractResponse {
-
+
private ResourceProxyFactory proxyFactory;
private AccessControlElementFactory aceFactory;
private PropertyNameList wantedPropertyList;
-
+
/**
* Create handler from given input stream.
*/
public MultistatusResponse(Resource resource, InputStream respBodyAsStream)
throws WvcmException {
this(resource, respBodyAsStream, null);
}
-
+
/**
* Create handler from given input stream.
*/
@@ -101,14 +101,14 @@
try {
this.wantedPropertyList = wantedPropertyList;
this.proxyFactory = new ResourceProxyFactory(requestResource, provider,
wantedPropertyList);
- this.aceFactory = new AccessControlElementFactory(provider);
+ this.aceFactory = new AccessControlElementFactory(provider,
resource.location());
}
catch( Exception e ) {
throw new WvcmException( "Could not parse server response",
resource.location().string(),
ReasonCode.READ_FAILED, new Exception[]{e} );
}
}
-
+
/**
* Create the resource proxy resulting from the 1st response of this
multistatus response.
*
@@ -122,7 +122,7 @@
else
return null;
}
-
+
/**
* Create the resource proxies resulting from this multistatus response.
*
@@ -132,7 +132,7 @@
public List createResourceProxies() throws WvcmException {
return createResourceProxies( null, false );
}
-
+
/**
* Create the resource proxies resulting from this multistatus response.
*
@@ -143,7 +143,7 @@
public List createResourceProxies( boolean excludeRequestResource ) throws
WvcmException {
return createResourceProxies( null, excludeRequestResource );
}
-
+
/**
* Create List of AccessControlElement instances from DAV:acl property included
* in this multistatus response.
@@ -160,7 +160,7 @@
Element ms = respBodyDoc.getRootElement();
XPathWrapper xp = new XPathWrapper(
"d:response/d:propstat[contains(string(d:status),\"200\")]/d:prop/d:acl/*", dnsp );
-
+
Iterator i = xp.selectNodes(ms).iterator();
while (i.hasNext()) {
Element aceElm = (Element)i.next();
@@ -168,7 +168,7 @@
}
return aceFactory.getAccessControlList();
}
-
+
/**
* Create the resource proxies resulting from this multistatus response.
*
@@ -181,7 +181,7 @@
List result = new ArrayList();
Element ms = respBodyDoc.getRootElement();
XPathWrapper xp = new XPathWrapper( "d:response", dnsp );
-
+
Iterator i = xp.selectNodes(ms).iterator();
// iterate over <response> element list
while( i.hasNext() ) {
@@ -194,7 +194,7 @@
}
return result;
}
-
+
/**
* Create the resource proxy resulting from the 1st response of this
multistatus response.
*
@@ -204,7 +204,7 @@
public Resource createAllAttributesProxy() throws WvcmException {
Element ms = respBodyDoc.getRootElement();
XPathWrapper xp = new XPathWrapper( "d:response", dnsp );
-
+
Element re = (Element)xp.selectSingleNode(ms);
return proxyFactory.createAllAttributes(re);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]