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
56 /// <param name="package">追加するパッケージ</param>
\r
57 public void AddPackages(IEnumerable<TPackage> package)
\r
59 packageArrayList.AddRange(package);
\r
63 /// パッケージをリストにマージ(追加)する
\r
65 /// <param name="package">追加するパッケージ</param>
\r
66 public void AddPackages(PackageList<TPackage> pkgList)
\r
68 packageArrayList.AddRange(pkgList.packageArrayList);
\r
74 /// <param name="package">追加するパッケージ</param>
\r
75 public void AddPackage(TPackage package)
\r
77 packageArrayList.Add(package);
\r
83 /// <param name="package">削除するパッケージ</param>
\r
84 public void RemovePackage(TPackage package)
\r
86 packageArrayList.Remove(package);
\r
90 /// パッケージを検索をする際のPredicateを返す
\r
92 /// <param name="key">検索キー</param>
\r
93 protected static Predicate<TPackage> GetPredicateForSearch(string key)
\r
95 string lowerKey = key.ToLower();
\r
96 return delegate(TPackage package) {
\r
97 return package.Name.ToLower().IndexOf(lowerKey) >= 0 ||
\r
98 package.Summary.ToLower().IndexOf(lowerKey) >= 0 ||
\r
99 ((package.Tags ?? string.Empty).ToLower().IndexOf(lowerKey) >= 0);
\r
104 /// パッケージを検索して、それにマッチしたパッケージをイテレータとして返す。
\r
106 /// <param name="key">検索キー</param>
\r
107 public IEnumerable<TPackage> Search(string key)
\r
109 return packageArrayList.FindAll(GetPredicateForSearch(key));
\r
113 /// パッケージ名で検索をする際のPredicateを返す
\r
115 /// <param name="name">
\r
121 protected static Predicate<TPackage> GetPredicateForPackageName(string name)
\r
123 return delegate(TPackage package) {
\r
124 return package.Name == name;
\r
129 /// 指定した名前に対応するパッケージを返す
\r
131 /// <param name="name">検索にかけるパッケージ名</param>
\r
132 public TPackage GetPackageForName(string name)
\r
134 return packageArrayList.Find(GetPredicateForPackageName(name));
\r
138 /// 指定した名前に対応するパッケージを返す
\r
140 /// <param name="name">検索にかけるパッケージ名</param>
\r
141 public TPackage[] GetPackagesForName(string name)
\r
143 return packageArrayList.FindAll(GetPredicateForPackageName(name)).ToArray();
\r
147 /// 名前・バージョンが対応するパッケージを返す
\r
149 /// <param name="name">検索にかけるパッケージ名</param>
\r
150 /// <param name="version">検索にかけるパッケージのバージョン</param>
\r
151 public TPackage GetPackageForPackage(string name, string version)
\r
153 TPackage[] pkgs = GetPackagesForName(name);
\r
154 foreach (TPackage tpkg in pkgs) {
\r
155 if (tpkg.Version == version) {
\r