]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/acr/dav/DavContentProvider.java
1 package org
.argeo
.cms
.acr
.dav
;
4 import java
.net
.URISyntaxException
;
5 import java
.util
.Iterator
;
7 import org
.argeo
.api
.acr
.RuntimeNamespaceContext
;
8 import org
.argeo
.api
.acr
.spi
.ContentProvider
;
9 import org
.argeo
.api
.acr
.spi
.ProvidedContent
;
10 import org
.argeo
.api
.acr
.spi
.ProvidedSession
;
11 import org
.argeo
.cms
.dav
.DavClient
;
12 import org
.argeo
.cms
.dav
.DavResponse
;
13 import org
.argeo
.cms
.http
.HttpStatus
;
15 public class DavContentProvider
implements ContentProvider
{
16 private String mountPath
;
19 private DavClient davClient
;
21 public DavContentProvider(String mountPath
, URI baseUri
) {
22 this.mountPath
= mountPath
;
23 this.baseUri
= baseUri
;
24 if (!baseUri
.getPath().endsWith("/"))
25 throw new IllegalArgumentException("Base URI " + baseUri
+ " path does not end with /");
26 this.davClient
= new DavClient();
30 public String
getNamespaceURI(String prefix
) {
31 // FIXME retrieve mappings from WebDav
32 return RuntimeNamespaceContext
.getNamespaceContext().getNamespaceURI(prefix
);
36 public Iterator
<String
> getPrefixes(String namespaceURI
) {
37 // FIXME retrieve mappings from WebDav
38 return RuntimeNamespaceContext
.getNamespaceContext().getPrefixes(namespaceURI
);
42 public ProvidedContent
get(ProvidedSession session
, String relativePath
) {
43 URI contentUri
= relativePathToUri(relativePath
);
44 return getDavContent(session
, contentUri
);
47 DavContent
getDavContent(ProvidedSession session
, URI uri
) {
48 DavResponse response
= davClient
.get(uri
);
49 return new DavContent(session
, this, uri
, response
.getPropertyNames(HttpStatus
.OK
));
53 public boolean exists(ProvidedSession session
, String relativePath
) {
54 URI contentUri
= relativePathToUri(relativePath
);
55 return davClient
.exists(contentUri
);
59 public String
getMountPath() {
63 DavClient
getDavClient() {
67 URI
relativePathToUri(String relativePath
) {
69 // TODO check last slash
70 String path
= relativePath
.startsWith("/") ? relativePath
: baseUri
.getPath() + relativePath
;
71 URI uri
= new URI(baseUri
.getScheme(), baseUri
.getHost(), path
, baseUri
.getFragment());
73 } catch (URISyntaxException e
) {
74 throw new IllegalArgumentException("Cannot build URI for " + relativePath
+ " relatively to " + baseUri
, e
);