示例#1
0
        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
        }
示例#2
0
        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
		}
示例#3
0
 internal void WriteSingleItem(Node node, WebdavType wdType)
 {
     WriteSingleItem(node, wdType, "Binary");
 }
示例#4
0
 internal void WriteSingleItem(Node node, WebdavType wdType)
 {
     WriteSingleItem(node, wdType, "Binary");
 }