internal void WriteSingleItem(Node node, WebdavType wdType, string binaryPropertyName) { // set nodeName extensions var nodeName = node.Name; var nodePath = node.Path; if (wdType == WebdavType.Content) { nodeName = nodeName + ".Content"; nodePath = nodePath + ".Content"; } else if (wdType == WebdavType.ContentType) { nodeName = nodeName + "Ctd.xml"; nodePath = nodePath + "Ctd.xml"; } else if (wdType != WebdavType.Folder) { if (binaryPropertyName != "Binary") { nodeName = string.Concat(node.Name, ".", binaryPropertyName); } nodePath = RepositoryPath.Combine(node.ParentPath, nodeName); } // response _writer.WriteStartElement(XmlNS.DAV_Prefix, "response", XmlNS.DAV); //href _writer.WriteStartElement(XmlNS.DAV_Prefix, "href", XmlNS.DAV); _writer.WriteString(_handler.RepositoryPathToUrl(nodePath)); _writer.WriteEndElement(); //propstat _writer.WriteStartElement(XmlNS.DAV_Prefix, "propstat", XmlNS.DAV); // propstat/status _writer.WriteStartElement(XmlNS.DAV_Prefix, "status", XmlNS.DAV); _writer.WriteString("HTTP/1.1 200 OK"); _writer.WriteEndElement(); // propstat/status // propstat/prop _writer.WriteStartElement(XmlNS.DAV_Prefix, "prop", XmlNS.DAV); // propstat/prop/getcontentlenght _writer.WriteStartElement(XmlNS.DAV_Prefix, "getcontentlength", XmlNS.DAV); if (wdType == WebdavType.File) { var f = node as IFile; if (f != null) { _writer.WriteString(((BinaryData)node[binaryPropertyName]).Size.ToString()); } else { _writer.WriteString("0"); } } else { _writer.WriteString("0"); } _writer.WriteEndElement(); // propstat/prop/getcontentlenght // lockdiscovery if (node.Locked) { Lock.WriteLockDiscovery(_writer, node, node.LockTimeout); } // supportedlock _writer.WriteStartElement(XmlNS.DAV_Prefix, "supportedlock", XmlNS.DAV); _writer.WriteStartElement(XmlNS.DAV_Prefix, "lockentry", XmlNS.DAV); _writer.WriteStartElement(XmlNS.DAV_Prefix, "lockscope", XmlNS.DAV); _writer.WriteStartElement(XmlNS.DAV_Prefix, "exclusive", XmlNS.DAV); _writer.WriteEndElement(); // exclusive _writer.WriteEndElement(); // lockscope _writer.WriteStartElement(XmlNS.DAV_Prefix, "locktype", XmlNS.DAV); _writer.WriteStartElement(XmlNS.DAV_Prefix, "write", XmlNS.DAV); _writer.WriteEndElement(); // write _writer.WriteEndElement(); // locktype _writer.WriteEndElement(); // lockentry _writer.WriteEndElement(); // supportedlock // propstat/prop/creationdate _writer.WriteStartElement(XmlNS.DAV_Prefix, "creationdate", XmlNS.DAV); _writer.WriteString(node.CreationDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.sZ")); _writer.WriteEndElement(); // propstat/prop/creationdate // propstat/prop/displayname _writer.WriteStartElement(XmlNS.DAV_Prefix, "displayname", XmlNS.DAV); //_writer.WriteString(entry.Name); //_writer.WriteString(node.Name); _writer.WriteString(nodeName); _writer.WriteEndElement(); // propstat/prop/displayname var eTag = Guid.NewGuid().ToString(); // propstat/prop/getetag _writer.WriteStartElement(XmlNS.DAV_Prefix, "getetag", XmlNS.DAV); _writer.WriteString(eTag); _writer.WriteEndElement(); // propstat/prop/getetag // propstat/prop/getlastmodified _writer.WriteStartElement(XmlNS.DAV_Prefix, "getlastmodified", XmlNS.DAV); _writer.WriteString(node.ModificationDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.sZ")); _writer.WriteEndElement(); // propstat/prop/getlastmodified // propstat/prop/resourcetype _writer.WriteStartElement(XmlNS.DAV_Prefix, "resourcetype", XmlNS.DAV); if (wdType == WebdavType.Folder) { // propstat/prop/resourcetype/collection _writer.WriteStartElement(XmlNS.DAV_Prefix, "collection", XmlNS.DAV); _writer.WriteEndElement(); // propstat/prop/resourcetype/collection // propstat/prop/resourcetype/Repl //_writer.WriteStartElement(XmlNS.MSRepl_Prefix, "Repl", XmlNS.MSRepl); //_writer.WriteString("t"); //_writer.WriteEndElement(); // propstat/prop/resourcetype/Repl } _writer.WriteEndElement(); // propstat/prop/resourcetype _writer.WriteStartElement(XmlNS.MSRepl_Prefix, "repl-uid", XmlNS.MSRepl); _writer.WriteString("rid:{"); _writer.WriteString(eTag); _writer.WriteString("}"); _writer.WriteEndElement(); _writer.WriteStartElement(XmlNS.MSRepl_Prefix, "resourcetag", XmlNS.MSRepl); _writer.WriteString("rt:"); _writer.WriteString(eTag); _writer.WriteString("@00000000000"); _writer.WriteEndElement(); // propstat/prop/isFolder _writer.WriteStartElement(XmlNS.DAV_Prefix, "isfolder", XmlNS.DAV); if (wdType == WebdavType.Folder) { _writer.WriteString("t"); } else { _writer.WriteString("0"); } _writer.WriteEndElement(); // propstat/prop/isFolder // propstat/prop/iscollection _writer.WriteStartElement(XmlNS.DAV_Prefix, "iscollection", XmlNS.DAV); if (wdType == WebdavType.Folder) { _writer.WriteString("1"); } else { _writer.WriteString("0"); } _writer.WriteEndElement(); // propstat/prop/iscollection // propstat/prop/getcontenttype _writer.WriteStartElement(XmlNS.DAV_Prefix, "getcontenttype", XmlNS.DAV); if (wdType == WebdavType.Folder) { _writer.WriteString("application/octet-stream"); } else { _writer.WriteString("text/xml"); } _writer.WriteEndElement(); // propstat/prop/getcontenttype _writer.WriteEndElement(); // propstat/prop _writer.WriteEndElement(); // propstat _writer.WriteEndElement(); // response }
internal void WriteSingleItem(Node node, WebdavType wdType, string binaryPropertyName) { // set nodeName extensions var nodeName = node.Name; var nodePath = node.Path; if (wdType == WebdavType.Content) { nodeName = nodeName + ".Content"; nodePath = nodePath + ".Content"; } else if (wdType == WebdavType.ContentType) { nodeName = nodeName + "Ctd.xml"; nodePath = nodePath + "Ctd.xml"; } else if (wdType != WebdavType.Folder) { if (binaryPropertyName != "Binary") nodeName = string.Concat(node.Name, ".", binaryPropertyName); nodePath = RepositoryPath.Combine(node.ParentPath, nodeName); } // response _writer.WriteStartElement(XmlNS.DAV_Prefix, "response", XmlNS.DAV); //href _writer.WriteStartElement(XmlNS.DAV_Prefix, "href", XmlNS.DAV); _writer.WriteString(_handler.RepositoryPathToUrl(nodePath)); _writer.WriteEndElement(); //propstat _writer.WriteStartElement(XmlNS.DAV_Prefix, "propstat", XmlNS.DAV); // propstat/status _writer.WriteStartElement(XmlNS.DAV_Prefix, "status", XmlNS.DAV); _writer.WriteString("HTTP/1.1 200 OK"); _writer.WriteEndElement(); // propstat/status // propstat/prop _writer.WriteStartElement(XmlNS.DAV_Prefix, "prop", XmlNS.DAV); // propstat/prop/getcontentlenght _writer.WriteStartElement(XmlNS.DAV_Prefix, "getcontentlength", XmlNS.DAV); if (wdType == WebdavType.File) { var f = node as IFile; if (f != null) { _writer.WriteString(((BinaryData)node[binaryPropertyName]).Size.ToString()); } else _writer.WriteString("0"); } else _writer.WriteString("0"); _writer.WriteEndElement(); // propstat/prop/getcontentlenght // lockdiscovery if (node.Locked) Lock.WriteLockDiscovery(_writer, node, node.LockTimeout); // supportedlock _writer.WriteStartElement(XmlNS.DAV_Prefix, "supportedlock", XmlNS.DAV); _writer.WriteStartElement(XmlNS.DAV_Prefix, "lockentry", XmlNS.DAV); _writer.WriteStartElement(XmlNS.DAV_Prefix, "lockscope", XmlNS.DAV); _writer.WriteStartElement(XmlNS.DAV_Prefix, "exclusive", XmlNS.DAV); _writer.WriteEndElement(); // exclusive _writer.WriteEndElement(); // lockscope _writer.WriteStartElement(XmlNS.DAV_Prefix, "locktype", XmlNS.DAV); _writer.WriteStartElement(XmlNS.DAV_Prefix, "write", XmlNS.DAV); _writer.WriteEndElement(); // write _writer.WriteEndElement(); // locktype _writer.WriteEndElement(); // lockentry _writer.WriteEndElement(); // supportedlock // propstat/prop/creationdate _writer.WriteStartElement(XmlNS.DAV_Prefix, "creationdate", XmlNS.DAV); _writer.WriteString(node.CreationDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.sZ")); _writer.WriteEndElement(); // propstat/prop/creationdate // propstat/prop/displayname _writer.WriteStartElement(XmlNS.DAV_Prefix, "displayname", XmlNS.DAV); //_writer.WriteString(entry.Name); //_writer.WriteString(node.Name); _writer.WriteString(nodeName); _writer.WriteEndElement(); // propstat/prop/displayname var eTag = Guid.NewGuid().ToString(); // propstat/prop/getetag _writer.WriteStartElement(XmlNS.DAV_Prefix, "getetag", XmlNS.DAV); _writer.WriteString(eTag); _writer.WriteEndElement(); // propstat/prop/getetag // propstat/prop/getlastmodified _writer.WriteStartElement(XmlNS.DAV_Prefix, "getlastmodified", XmlNS.DAV); _writer.WriteString(node.ModificationDate.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.sZ")); _writer.WriteEndElement(); // propstat/prop/getlastmodified // propstat/prop/resourcetype _writer.WriteStartElement(XmlNS.DAV_Prefix, "resourcetype", XmlNS.DAV); if (wdType == WebdavType.Folder) { // propstat/prop/resourcetype/collection _writer.WriteStartElement(XmlNS.DAV_Prefix, "collection", XmlNS.DAV); _writer.WriteEndElement(); // propstat/prop/resourcetype/collection // propstat/prop/resourcetype/Repl //_writer.WriteStartElement(XmlNS.MSRepl_Prefix, "Repl", XmlNS.MSRepl); //_writer.WriteString("t"); //_writer.WriteEndElement(); // propstat/prop/resourcetype/Repl } _writer.WriteEndElement(); // propstat/prop/resourcetype _writer.WriteStartElement(XmlNS.MSRepl_Prefix, "repl-uid", XmlNS.MSRepl); _writer.WriteString("rid:{"); _writer.WriteString(eTag); _writer.WriteString("}"); _writer.WriteEndElement(); _writer.WriteStartElement(XmlNS.MSRepl_Prefix, "resourcetag", XmlNS.MSRepl); _writer.WriteString("rt:"); _writer.WriteString(eTag); _writer.WriteString("@00000000000"); _writer.WriteEndElement(); // propstat/prop/isFolder _writer.WriteStartElement(XmlNS.DAV_Prefix, "isfolder", XmlNS.DAV); if (wdType == WebdavType.Folder) _writer.WriteString("t"); else _writer.WriteString("0"); _writer.WriteEndElement(); // propstat/prop/isFolder // propstat/prop/iscollection _writer.WriteStartElement(XmlNS.DAV_Prefix, "iscollection", XmlNS.DAV); if(wdType == WebdavType.Folder) _writer.WriteString("1"); else _writer.WriteString("0"); _writer.WriteEndElement(); // propstat/prop/iscollection // propstat/prop/getcontenttype _writer.WriteStartElement(XmlNS.DAV_Prefix, "getcontenttype", XmlNS.DAV); if(wdType == WebdavType.Folder) _writer.WriteString("application/octet-stream"); else _writer.WriteString("text/xml"); _writer.WriteEndElement(); // propstat/prop/getcontenttype _writer.WriteEndElement(); // propstat/prop _writer.WriteEndElement(); // propstat _writer.WriteEndElement();// response }
internal void WriteSingleItem(Node node, WebdavType wdType) { WriteSingleItem(node, wdType, "Binary"); }