public override void Save(Stream stream)
        {
            if (stream == null)
            {
                _document = string.IsNullOrEmpty(_document.Key)
                    ? _client.Post(_document)
                    : _client.Put(_document);
                return;
            }

            var parms = new SDataParameters
            {
                Files = { new AttachedFile(null, _document.FileName, stream) }
            };

            if (string.IsNullOrEmpty(_document.Key))
            {
                parms.Method = HttpMethod.Post;
                parms.Path   = "libraryDocuments";
            }
            else
            {
                parms.Method = HttpMethod.Put;
                parms.Path   = "libraryDocuments(" + SDataUri.FormatConstant(_document.Key) + ")";
                parms.ETag   = _document.ETag;
            }

            if (_formMode)
            {
                foreach (var prop in typeof(LibraryDocument).GetProperties())
                {
                    var name = _client.NamingScheme.GetName(prop);
                    if (!name.StartsWith("$", StringComparison.Ordinal) && !new[] { "createDate", "createUser", "modifyDate", "modifyUser" }.Contains(name, StringComparer.Ordinal))
                    {
                        var value = prop.GetValue(_document, null);
                        if (value != null)
                        {
                            parms.Form[name] = value.ToString();
                        }
                    }
                }

                parms.Path += "/file";
                var results = _client.Execute(parms);
                if (!string.IsNullOrEmpty(results.Location))
                {
                    var selector = new SDataUri(results.Location).GetPathSegment(4).Selector;
                    _document.Key  = selector.Substring(1, selector.Length - 2);
                    _document.ETag = results.ETag;
                }
            }
            else
            {
                parms.Content = _document;
                _document     = _client.Execute <LibraryDocument>(parms).Content;
            }
        }
 public void Save(Stream stream)
 {
     _directory = string.IsNullOrEmpty(_directory.Key)
         ? _client.Post(_directory)
         : _client.Put(_directory);
 }