3 using System.Collections.Generic;
\r
4 using System.Xml.Serialization;
\r
6 namespace NaGet.Packages
\r
9 /// パッケージのリストの情報を示すクラス
\r
11 [XmlRoot("PackageList", Namespace="http://diffshare.tv/xmlns/2007/na-get/PackageList/")]
\r
12 public class PackageList<TPackage> where TPackage : Package
\r
22 private List<TPackage> packageArrayList;
\r
27 public PackageList()
\r
29 packageArrayList = new List<TPackage>();
\r
33 /// 本リストが格納しているパッケージのリスト
\r
35 [XmlElement("Package", Namespace="http://diffshare.tv/xmlns/2007/na-get/PackageList/")]
\r
36 public TPackage[] Packages
\r
40 return packageArrayList.ToArray();
\r
44 packageArrayList = new List<TPackage>();
\r
45 if (value != null) {
\r
46 foreach (TPackage package in value) {
\r
47 packageArrayList.Add(package);
\r
54 /// 本リストが格納しているパッケージのイテレータを返す
\r
56 /// <returns>パッケージのイテレータ</returns>
\r
57 public IEnumerator<TPackage> GetEnumerator()
\r
59 return packageArrayList.GetEnumerator();
\r
65 /// <param name="package">追加するパッケージ</param>
\r
66 public void AddPackages(IEnumerable<TPackage> package)
\r
68 packageArrayList.AddRange(package);
\r
72 /// パッケージをリストにマージ(追加)する
\r
74 /// <param name="package">追加するパッケージ</param>
\r
75 public void AddPackages(PackageList<TPackage> pkgList)
\r
77 packageArrayList.AddRange(pkgList.packageArrayList);
\r
83 /// <param name="package">追加するパッケージ</param>
\r
84 public void AddPackage(TPackage package)
\r
86 packageArrayList.Add(package);
\r
92 /// <param name="package">削除するパッケージ</param>
\r
93 public void RemovePackage(TPackage package)
\r
95 packageArrayList.Remove(package);
\r
100 #region 検索用Predicate
\r
103 /// パッケージを検索をする際のPredicateを返す
\r
105 /// <param name="key">検索キー</param>
\r
106 protected internal static Predicate<TPackage> GetPredicateForSearch(string key)
\r
108 string lowerKey = key.ToLower();
\r
109 return delegate(TPackage package) {
\r
110 return package.Name.ToLower().IndexOf(lowerKey) >= 0 ||
\r
111 package.Summary.ToLower().IndexOf(lowerKey) >= 0 ||
\r
112 ((package.Tags ?? string.Empty).ToLower().IndexOf(lowerKey) >= 0);
\r
117 /// パッケージ名で検索をする際のPredicateを返す
\r
119 /// <param name="name">
\r
125 protected internal static Predicate<TPackage> GetPredicateForPackageName(string name)
\r
127 return delegate(TPackage package) {
\r
128 return package.Name == name;
\r
133 /// エントリで検索をする際のPredicateを返す
\r
135 /// <param name="entry">
\r
141 protected internal static Predicate<TPackage> GetPredicateForEntry(Entry entry)
\r
143 return entry.Match;
\r
149 /// パッケージを検索して、それにマッチしたパッケージをイテレータとして返す。
\r
151 /// <param name="predicate">検索条件のPredicate</param>
\r
152 /// <returns>マッチしたパッケージのイテレータ</returns>
\r
153 protected internal IEnumerable<TPackage> Search(Predicate<TPackage> predicate)
\r
155 return packageArrayList.FindAll(predicate);
\r
159 /// パッケージを検索して、それにマッチしたパッケージをイテレータとして返す。
\r
161 /// <param name="key">検索キー</param>
\r
162 /// <returns>マッチしたパッケージのイテレータ</returns>
\r
163 public IEnumerable<TPackage> Search(string key)
\r
165 return Search(GetPredicateForSearch(key));
\r
169 /// 指定した名前に対応するパッケージを返す
\r
171 /// <param name="name">検索にかけるパッケージ名</param>
\r
172 public TPackage GetPackageForName(string name)
\r
174 return packageArrayList.Find(GetPredicateForPackageName(name));
\r
178 /// 指定した名前に対応するパッケージを返す
\r
180 /// <param name="name">検索にかけるパッケージ名</param>
\r
181 public IEnumerable<TPackage> GetPackagesForName(string name)
\r
183 return packageArrayList.FindAll(GetPredicateForPackageName(name));
\r
187 /// 名前・バージョンが対応するパッケージを返す
\r
189 /// <param name="name">検索にかけるパッケージ名</param>
\r
190 /// <param name="version">検索にかけるパッケージのバージョン</param>
\r
191 public TPackage GetPackageForPackage(string name, string version)
\r
193 return GetPackageForEntry(new Entry(name, null, version));
\r
197 /// パッケージ参照エントリが対応するパッケージを返す
\r
199 /// <param name="name">検索にかけるパッケージ参照エントリ</param>
\r
200 public TPackage GetPackageForEntry(Entry entry)
\r
202 return packageArrayList.Find(GetPredicateForEntry(entry));
\r
206 /// パッケージ参照エントリが対応するパッケージをすべて返す
\r
208 /// <param name="name">検索にかけるパッケージ参照エントリ</param>
\r
209 public IEnumerable<TPackage> GetPackagesForEntry(Entry entry)
\r
211 return packageArrayList.FindAll(GetPredicateForEntry(entry));
\r