SmartAPI
Open Source .NET RQL library for RedDot CMS / OpenText WSM Management Server
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Pages
RDList.cs
Go to the documentation of this file.
1 ï»¿// SmartAPI - .Net programmatic access to RedDot servers
2 //
3 // Copyright (C) 2013 erminas GbR
4 //
5 // This program is free software: you can redistribute it and/or modify it
6 // under the terms of the GNU General Public License as published by the Free Software Foundation,
7 // either version 3 of the License, or (at your option) any later version.
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11 // See the GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License along with this program.
14 // If not, see <http://www.gnu.org/licenses/>.
15 
16 using System;
17 using System.Collections.Generic;
18 using System.Linq;
19 using erminas.SmartAPI.CMS;
20 
21 namespace erminas.SmartAPI.Utils.CachedCollections
22 {
23  public class RDList<T> : CachedList<T>, IRDList<T> where T : class, IRedDotObject
24  {
25  public RDList(Func<List<T>> retrieveFunc, Caching caching) : base(retrieveFunc, caching)
26  {
27  }
28 
29  protected RDList(Caching caching) : base(caching)
30  {
31  }
32 
33  public bool Contains(T element)
34  {
35  return ContainsGuid(element.Guid);
36  }
37 
38  public bool ContainsGuid(Guid guid)
39  {
40  T tmp;
41  return TryGetByGuid(guid, out tmp);
42  }
43 
44  public bool ContainsName(string name)
45  {
46  T tmp;
47  return TryGetByName(name, out tmp);
48  }
49 
50  public T GetByGuid(Guid guid)
51  {
52  EnsureListIsLoaded();
53  return List.First(x => x.Guid == guid);
54  }
55 
56  public T GetByName(string name)
57  {
58  EnsureListIsLoaded();
59  return List.First(x => x.Name == name);
60  }
61 
62  public new IRDList<T> Refreshed()
63  {
64  Refresh();
65  return this;
66  }
67 
68  public bool TryGetByGuid(Guid guid, out T output)
69  {
70  EnsureListIsLoaded();
71  output = List.Find(x => x.Guid == guid);
72  return output != null;
73  }
74 
75  public bool TryGetByName(string name, out T output)
76  {
77  EnsureListIsLoaded();
78  output = List.Find(x => x.Name == name);
79  return output != null;
80  }
81 
82  public void WaitFor(Predicate<IRDList<T>> predicate, TimeSpan wait, TimeSpan retryPeriod)
83  {
84  Wait.For(() => predicate(Refreshed()), wait, retryPeriod);
85  }
86  }
87 }