unico 2003/11/04 08:56:31
Modified: src/blocks/webdav/samples/davmap sitemap.xmap webdav.js
Log:
make MOVE/COPY methods understand Depth and Overwrite header instructions
Revision Changes Path
1.12 +14 -2 cocoon-2.1/src/blocks/webdav/samples/davmap/sitemap.xmap
Index: sitemap.xmap
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/webdav/samples/davmap/sitemap.xmap,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- sitemap.xmap 3 Nov 2003 17:16:16 -0000 1.11
+++ sitemap.xmap 4 Nov 2003 16:56:30 -0000 1.12
@@ -190,7 +190,7 @@
<map:match pattern="MKCOL/**.*">
<map:call function="sendStatus">
<map:parameter name="status" value="409" />
- <map:parameter name="message" value="Not valid collection name."
/>
+ <map:parameter name="message" value="Not a valid collection
name." />
</map:call>
</map:match>
<map:call function="mkcol">
@@ -208,9 +208,15 @@
<map:match pattern="http://**/repo/**" type="destination">
<map:call function="copy">
<map:parameter name="from" value="{global:staging}{../1}" />
- <map:parameter name="to" value="{global:staging}/{2}" />
+ <map:parameter name="to" value="{global:staging}/{2}" />
+ <map:parameter name="depth" value="{request-header:Depth}" />
+ <map:parameter name="overwrite"
value="{request-header:Overwrite}" />
</map:call>
</map:match>
+ <map:call function="sendStatus">
+ <map:parameter name="status" value="405" />
+ <map:parameter name="message" value="Destination resource out of
scope." />
+ </map:call>
</map:match>
<map:match pattern="MOVE/**">
@@ -218,8 +224,14 @@
<map:call function="move">
<map:parameter name="from" value="{global:staging}{../1}" />
<map:parameter name="to" value="{global:staging}/{2}" />
+ <map:parameter name="depth" value="{request-header:Depth}" />
+ <map:parameter name="overwrite"
value="{request-header:Overwrite}" />
</map:call>
</map:match>
+ <map:call function="sendStatus">
+ <map:parameter name="status" value="405" />
+ <map:parameter name="message" value="Destination resource out of
scope." />
+ </map:call>
</map:match>
<map:match pattern="PROPPATCH/**">
1.6 +53 -21 cocoon-2.1/src/blocks/webdav/samples/davmap/webdav.js
Index: webdav.js
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/webdav/samples/davmap/webdav.js,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- webdav.js 3 Nov 2003 13:16:28 -0000 1.5
+++ webdav.js 4 Nov 2003 16:56:30 -0000 1.6
@@ -9,10 +9,9 @@
cocoon.sendPage(method+"/"+page, null);
}
-function sendStatus() {
- var status = cocoon.parameters["status"];
- var msg = cocoon.parameters["message"];
- cocoon.sendPage("status/" + status, {message:msg});
+function sendStatus(status,msg) {
+ //cocoon.response.setStatus(status);
+ cocoon.sendPage("status/"+status,{message:msg});
}
function put() {
@@ -20,11 +19,11 @@
var dest = cocoon.parameters["dest"];
try {
var status = repository.save(src,dest);
- cocoon.sendPage("status/" + status, {message:""});
+ sendStatus(status,"");
}
catch (e) {
cocoon.log.error(e);
- cocoon.sendPage("status/500",{message:"unknown error"});
+ sendStatus(500,"unknown error");
}
}
@@ -32,11 +31,11 @@
var location = cocoon.parameters["location"];
try {
var status = repository.remove(location);
- cocoon.sendPage("status/" + status, {message:""});
+ sendStatus(status,"");
}
catch (e) {
cocoon.log.error(e);
- cocoon.sendPage("status/500",{message:"unknown error"});
+ sendStatus(500,"unknown error");
}
}
@@ -44,33 +43,37 @@
var location = cocoon.parameters["location"];
try {
var status = repository.makeCollection(location);
- cocoon.sendPage("status/" + status, {message:""});
+ sendStatus(status,"");
}
catch (e) {
cocoon.log.error(e);
- cocoon.sendPage("status/500",{message:"unknown error"});
+ sendStatus(500,"unknown error");
}
}
function copy() {
- var from = cocoon.parameters["from"];
- var to = cocoon.parameters["to"];
+ var from = cocoon.parameters["from"];
+ var to = cocoon.parameters["to"];
+ var recurse = isRecurse(cocoon.parameters["depth"]);
+ var overwrite = isOverwrite(cocoon.parameters["overwrite"]);
try {
- var status = repository.copy(from,to);
- cocoon.sendPage("status/" + status, {message:""});
+ var status = repository.copy(from,to,recurse,overwrite);
+ sendStatus(status,"");
} catch (e) {
- cocoon.log.error("status/500",{message:""});
+ sendStatus(500,"unknown error");
}
}
function move() {
- var from = cocoon.parameters["from"];
- var to = cocoon.parameters["to"];
+ var from = cocoon.parameters["from"];
+ var to = cocoon.parameters["to"];
+ var recurse = isRecurse(cocoon.parameters["depth"]);
+ var overwrite = isOverwrite(cocoon.parameters["overwrite"]);
try {
- var status = repository.move(from,to);
- cocoon.sendPage("status/" + status, {message:""});
+ var status = repository.move(from,to,recurse,overwrite);
+ sendStatus(status,"");
} catch (e) {
- cocoon.log.error("status/500",{message:""});
+ sendStatus(500,"unknown error");
}
}
@@ -79,7 +82,36 @@
var options = "OPTIONS,GET,HEAD,POST,DELETE,TRACE,PUT"
+ ",MKCOL,PROPFIND,PROPPATCH,COPY,MOVE";
cocoon.response.setHeader("Allow",options);
- cocoon.sendPage("status/200",{});
+ sendStatus(200,"");
+}
+
+/*
+ * parse the depth header to find out if recursion
+ * take place. (used by MOVE and COPY)
+ */
+function isRecurse(depth) {
+ var recurse;
+ if (depth == null || depth == '') {
+ recurse = true;
+ }
+ else if (depth == 'infinity') {
+ recurse = true;
+ }
+ else {
+ recurse = false;
+ }
+ return recurse;
+}
+
+/*
+ * convert the overwrite header into a boolean type
+ */
+function isOverwrite(header) {
+ var overwrite = true;
+ if (header == 'F') {
+ overwrite = false;
+ }
+ return overwrite;
}
/*