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;
   }
   
   /*
  
  
  

Reply via email to