# $Id: s.Dav.xotcl 1.4 01/03/23 21:55:31+01:00 neumann@somewhere.wu-wien.ac.at $
package provide xotcl::comm::dav 0.9

Class Dav -superclass Http
Dav instproc initialize args {
  [self] instvar contentType 
  #showCall
  set contentType text/xml
  next
}

Dav instproc PROPFIND {} {
  #showCall
  # extra dav headers
  # Depth: ("0" | "1" | "infinity") [infinity is the default]
  
  # body is a propfind XML-Element
  # <!ELEMENT propfind (allprop | propname | prop) >
  #     <!ELEMENT allprop EMPTY >
  #     <!ELEMENT propname EMPTY >
  #     <!ELEMENT prop ANY>

  # this should be set by the clients
  #<?xml version="1.0" encoding="utf-8" ?>
  #             <D:propfind xmlns:D='DAV:'>
  #                  <D:allprop/>
  #             </D:propfind>
  [self] open
}
Dav instproc PROPPATCH {} {
  #showCall
  # body is a propertyupdate XML-Element
  # <!ELEMENT propertyupdate (remove | set)+ >
  #     <!ELEMENT remove (prop) >
  #     <!ELEMENT set (prop) >
  
  #   set xmlReqBody($method) "<?xml version=\"1.0\" encoding=\"utf-8\" ?>
  #             <D:propertyupdate xmlns:D=\"DAV:\">
  #                 <D:remove>
  #                    <D:prop> 
  #                        <D:displayname/>
  #                    </D:prop>                    
  #                  </D:remove>
  #             </D:propertyupdate>"
  [self] open
}
Dav instproc MKCOL {} {
  #showCall
  # invoked without a request body (may contain a message body?)
  [self] open
}
Dav instproc GET {} {
  #showCall
  # invoked without a request body and without extra header
  # back to HTTP class
  next
}
Dav instproc HEAD {} {
  #showCall
  # invoked without a request bodyand without extra header
  # back to HTTP class
  next
}
Dav instproc POST {} {
  #showCall
  # the same as in  RFC2068
  # back to HTTP class
  next
}
Dav instproc DELETE {} {
  #showCall
  # extra dav headers
  # Depth: ("0" | "1" | "infinity")

  # invoked without a request body
  [self] open
}
Dav instproc PUT {} {
  #showCall
  # PUT for Non-Collection Resources --> RFC2068
  # PUT for Collections --> MKCOL
  # [self] next
}
Dav instproc COPY {} {
  #showCall
  # extra dav headers
  # If: [see 9.4 WebDAV]
  # Destination: <absolutURI> [see RFC2396 for the definition of absolutURI]
  # Depth: ("0" | "1" | "infinity")
  # Overwrite: ("T" | "F")
  

  # body is a propertybehavior XML-Element
  # <!ELEMENT propertybehavior (omit | keepalive) >
  #     <!ELEMENT omit EMPTY >
  #     <!ELEMENT keepalive (#PCDATA | href+) >
  #         <!ELEMENT href (#PCDATA) >
  [self] open
}
Dav instproc MOVE {} {
  #showCall
  # extra dav headers
  # If: [see 9.4 WebDAV]
  # Destination: <absolutURI> [see RFC2396 for the definition of absolutURI]
  # Depth: "infinity" [see 8.9.2]
  # Overwrite: ("T" | "F")

  # body is a propertybehavior XML-Element
  # see COPY
  [self] open
}
Dav instproc LOCK {} {
  #showCall
  # extra dav headers
  # If: [see 9.4 WebDAV]
  # Destination: <absolutURI> [see RFC2396 for the definition of absolutURI]
  # Depth: ("0" | "1" | "infinity")
  # Timeout: [see 9.8 WebDAV]
  # Authorization: (defined in HTTP1.1 in 14.8)

  # body is a lockinfo XML-Element
  # <!ELEMENT lockinfo (lockscope, locktype, owner?) >
  #    <!ELEMENT lockscope (exclusive | shared) >
  #        <!ELEMENT exclusive EMPTY >
  #        <!ELEMENT shared EMPTY >
  #    <!ELEMENT locktype (write) >
  #        <!ELEMENT write EMPTY >
  #    <!ELEMENT owner ANY>
  [self] open
}

# The Lock-Token request header is used with the UNLOCK method to
# identify the lock to be removed.
Dav instproc UNLOCK {} {
  [self] instvar headers 
  #showCall
  # extra dav headers
  # Lock-Token: <Coded-URL> [see 8.11 in WebDAV]

  # invoked without a request body
  [self] open
}

#---------------------
# Utility            #
#---------------------

#?
Object xmlReqBodyManager 
xmlReqBodyManager proc requireXmlReqBody {request} {
}

#? 
Object davHeaderManager 
davHeaderManager proc requireDavHeader {request} {
}



#LOCK /DAV/welcome.html HTTP/1.1  
#Host: wawog
#Connection: close
