コード例 #1
0
ファイル: XmlConnector.cs プロジェクト: prantlf/SharePosh
        ListInfo CreateListInfo(WebInfo web, XmlElement source)
        {
            var path = PathUtility.JoinPath(web.Path, GetListName(source));
            var list = new ListInfo(web, path);

            list.ID           = GetListID(source);
            list.Title        = GetListTitle(source);
            list.Created      = GetListCreated(source);
            list.LastModified = GetListLastModified(source);
            list.LastDeleted  = GetListLastDeleted(source);
            list.ItemCount    = GetListItemCount(source);
            if (HasListFields(source))
            {
                list.Fields = GetListFields(source).ToList();
            }
            if (web.ID.IsEmpty())
            {
                web.ID = GetListWebID(source);
            }
            FinalizeInfo(list, source);
            return(list);
        }
コード例 #2
0
        XmlNode AddCamlFields(XmlDocument input, ListInfo list)
        {
            if (list.Fields == null)
            {
                list.Fields = QueryFields(list).ToList();
            }
            if (!list.Fields.Any())
            {
                return(null);
            }
            var fields = new StringBuilder();

            foreach (var field in list.Fields)
            {
                fields.AppendFormat(@"<FieldRef Name=""{0}"" />",
                                    XmlUtility.EscapeXmlValue(field.Name));
            }
            var view = input.CreateElement("ViewFields");

            view.InnerXml = fields.ToString();
            return(view);
        }
コード例 #3
0
        protected override XmlElement QueryItem(ListInfo list, string path)
        {
            Log.Verbose("Querying item at /{0}/{1}.", list.Path, path);
            string name;
            string parent = PathUtility.GetParentPath(path, out name);
            var    input  = new XmlDocument();
            var    query  = AddCamlName(input, name);
            var    view   = AddCamlFields(input, list);
            var    folder = string.IsNullOrEmpty(parent) ? null :
                            PathUtility.JoinPath(list.WebRelativePath, parent);
            var options = AddCamlOptions(input, folder);
            var output  = (XmlElement)GetService <Lists>(list.Web.Path).GetListItems(
                list.StringID, null, query, view, null, options, null);
            // Pick /listitems/data/row[1]. Avoiding XPath with namespaces.
            var item = output.ChildNodes.OfType <XmlElement>().First().
                       ChildNodes.OfType <XmlElement>().FirstOrDefault();

            if (item == null)
            {
                throw new ApplicationException("No item found.");
            }
            return(item);
        }
コード例 #4
0
ファイル: DriveConnector .cs プロジェクト: prantlf/SharePosh
 protected abstract bool HasItem(ListInfo list, string path);
コード例 #5
0
ファイル: Info.cs プロジェクト: prantlf/SharePosh
 public FolderInfo(ListInfo list, string path)
     : base(list, path)
 {
 }
コード例 #6
0
 protected abstract bool HasItem(ListInfo list, string path);
コード例 #7
0
ファイル: CacheConnector.cs プロジェクト: prantlf/SharePosh
 protected abstract void RemoveListDirectly(ListInfo list);
コード例 #8
0
ファイル: CacheConnector.cs プロジェクト: prantlf/SharePosh
 protected abstract ItemInfo GetItemDirectly(ListInfo list, string path);
コード例 #9
0
ファイル: CacheConnector.cs プロジェクト: prantlf/SharePosh
 public void RemoveList(ListInfo list)
 {
     if (list == null)
         throw new ArgumentNullException("list");
     Cache.RemoveObject(list);
     if (list.Web.Lists != null)
         list.Web.Lists = list.Web.Lists.Where(item => item.ID != list.ID).ToList();
     RemoveListDirectly(list);
 }
コード例 #10
0
ファイル: TestConnector.cs プロジェクト: prantlf/SharePosh
 protected override XmlElement QueryItem(ListInfo list, string path)
 {
     var source = GetListXml(list);
     foreach (var name in PathUtility.SplitPath(path)) {
         source = source.SelectElement(string.Format("Item[@Name={0}]",
             XmlUtility.FormatXPathLiteral(name)));
         if (source == null)
             throw new ApplicationException("Item not found.");
     }
     return source;
 }
コード例 #11
0
ファイル: XmlConnector.cs プロジェクト: prantlf/SharePosh
 ListInfo CreateListInfo(WebInfo web, XmlElement source)
 {
     var path = PathUtility.JoinPath(web.Path, GetListName(source));
     var list = new ListInfo(web, path);
     list.ID = GetListID(source);
     list.Title = GetListTitle(source);
     list.Created = GetListCreated(source);
     list.LastModified = GetListLastModified(source);
     list.LastDeleted = GetListLastDeleted(source);
     list.ItemCount = GetListItemCount(source);
     if (HasListFields(source))
         list.Fields = GetListFields(source).ToList();
     if (web.ID.IsEmpty())
         web.ID = GetListWebID(source);
     FinalizeInfo(list, source);
     return list;
 }
コード例 #12
0
ファイル: XmlConnector.cs プロジェクト: prantlf/SharePosh
 ItemInfo CreateItemInfo(ListInfo list, string path, XmlElement source)
 {
     ItemInfo item;
     switch (GetItemType(source)) {
     case ItemType.Common:
         item = new ItemInfo(list, path); break;
     case ItemType.File:
         item = new FileInfo(list, path);
         ((FileInfo) item).Size = GetFileSize(source);
         break;
     default: // case ItemType.Folder:
         item = new FolderInfo(list, path);
         ((FolderInfo) item).ChildCount = GetFolderChildCount(source);
         break;
     }
     item.ID = GetItemID(source);
     item.UniqueID = GetItemUniqueID(source);
     item.Title = GetItemTitle(source);
     item.Created = GetItemCreated(source);
     item.LastModified = GetItemLastModified(source);
     FinalizeInfo(item, source);
     return item;
 }
コード例 #13
0
ファイル: XmlConnector.cs プロジェクト: prantlf/SharePosh
 protected abstract XmlElement QueryItem(ListInfo list, string path);
コード例 #14
0
ファイル: XmlConnector.cs プロジェクト: prantlf/SharePosh
 protected override ItemInfo GetItemDirectly(ListInfo list, string path)
 {
     var fullPath = PathUtility.JoinPath(list.Path, path);
     return CreateItemInfo(list, fullPath, QueryItem(list, path));
 }
コード例 #15
0
 protected override void RemoveListDirectly(ListInfo list)
 {
     Log.Verbose("Removing list at /{0}.", list.Path);
     GetService <Lists>(list.Web.Path).DeleteList(list.StringID);
 }
コード例 #16
0
 public FileInfo(ListInfo list, string path) : base(list, path)
 {
 }
コード例 #17
0
 public FolderInfo(ListInfo list, string path) : base(list, path)
 {
 }
コード例 #18
0
ファイル: TestConnector.cs プロジェクト: prantlf/SharePosh
 protected override void RemoveListDirectly(ListInfo list)
 {
     var source = GetListXml(list);
     var parent = (XmlElement) source.ParentNode;
     source.Remove();
     SaveSite(parent);
 }
コード例 #19
0
ファイル: CacheConnector.cs プロジェクト: prantlf/SharePosh
 protected override ItemInfo GetItem(ListInfo list, string path)
 {
     var fullPath = PathUtility.JoinPath(list.Path, path);
     return (ItemInfo) Cache.GetObjectOrDefault(fullPath) ??
                         GetItemDirectly(list, path);
 }
コード例 #20
0
ファイル: TestConnector.cs プロジェクト: prantlf/SharePosh
 int GetLastItemID(ListInfo list)
 {
     var items = GetListXml(list).SelectNodes("//Item").OfType<XmlElement>();
     return items.Any() ? items.Max(item =>
                                     ValueUtility.GetInt(item.GetAttribute("ID"))) : 0;
 }
コード例 #21
0
ファイル: CacheConnector.cs プロジェクト: prantlf/SharePosh
 protected override bool HasItem(ListInfo list, string path)
 {
     if (path.EndsWith("/*")) {
         var parent = PathUtility.JoinPath(list.Path, PathUtility.GetParentPath(path));
         if (parent.IsEmpty())
             return list.HasChildren();
     }
     var fullPath = PathUtility.JoinPath(list.Path, path);
     if (Cache.GetObjectOrDefault(fullPath) == null)
         try {
             var container = GetItemDirectly(list, path) as ContainerInfo;
             if (container == null)
                 return false;
             return container.HasChildren();
         } catch {
             return false;
         }
     return true;
 }
コード例 #22
0
ファイル: TestConnector.cs プロジェクト: prantlf/SharePosh
 XmlElement GetListXml(ListInfo list)
 {
     var source = GetWebXml(list.Web);
     source = source.SelectElement(string.Format("List[@Name={0}]",
         XmlUtility.FormatXPathLiteral(list.WebRelativePath)));
     if (source == null)
         throw new ApplicationException("List not found.");
     return source;
 }
コード例 #23
0
 protected abstract ItemInfo GetItem(ListInfo list, string path);
コード例 #24
0
ファイル: XmlConnector.cs プロジェクト: prantlf/SharePosh
        protected override ItemInfo GetItemDirectly(ListInfo list, string path)
        {
            var fullPath = PathUtility.JoinPath(list.Path, path);

            return(CreateItemInfo(list, fullPath, QueryItem(list, path)));
        }
コード例 #25
0
ファイル: Info.cs プロジェクト: prantlf/SharePosh
 public FileInfo(ListInfo list, string path)
     : base(list, path)
 {
 }
コード例 #26
0
ファイル: XmlConnector.cs プロジェクト: prantlf/SharePosh
 protected abstract XmlElement QueryItem(ListInfo list, string path);
コード例 #27
0
ファイル: Info.cs プロジェクト: prantlf/SharePosh
 public ItemInfo(ListInfo list, string path)
     : base(list, path)
 {
     if (list == null)
         throw new ArgumentNullException("list");
     List = list;
 }
コード例 #28
0
 protected abstract void RemoveListDirectly(ListInfo list);