OSDN Git Service

アイコン取得に失敗しアンインストール・パッケージ情報表示ができない不具合を修正した。(アイコンは表示されないが、作業ができるようにした)
[applistation/AppliStation.git] / na-get-lib / NaGet.Packages / PackageList.cs
1 using System;\r
2 using System.IO;\r
3 using System.Collections.Generic;\r
4 using System.Xml.Serialization;\r
5 \r
6 namespace NaGet.Packages\r
7 {\r
8         /// <summary>\r
9         /// パッケージのリストの情報を示すクラス\r
10         /// </summary>\r
11         [XmlRoot("PackageList", Namespace="http://diffshare.tv/xmlns/2007/na-get/PackageList/")]\r
12         public class PackageList<TPackage> where TPackage : Package\r
13         {\r
14                 /// <summary>\r
15                 /// パッケージリスト自体の識別名\r
16                 /// </summary>\r
17                 public string Name;\r
18 \r
19                 /// <summary>\r
20                 /// パッケージの配列のリスト\r
21                 /// </summary>\r
22                 private List<TPackage> packageArrayList;\r
23 \r
24                 /// <summary>\r
25                 /// コンストラクタ\r
26                 /// </summary>\r
27                 public PackageList()\r
28                 {\r
29                         packageArrayList = new List<TPackage>();\r
30                 }\r
31 \r
32                 /// <summary>\r
33                 /// 本リストが格納しているパッケージのリスト\r
34                 /// </summary>\r
35                 [XmlElement("Package", Namespace="http://diffshare.tv/xmlns/2007/na-get/PackageList/")]\r
36                 public TPackage[] Packages\r
37                 {\r
38                         get\r
39                         {\r
40                                 return packageArrayList.ToArray();\r
41                         }\r
42                         set\r
43                         {\r
44                                 packageArrayList = new List<TPackage>();\r
45                                 if (value != null) {\r
46                                         foreach (TPackage package in value) {\r
47                                                 packageArrayList.Add(package);\r
48                                         }\r
49                                 }\r
50                         }\r
51                 }\r
52                 \r
53                 /// <summary>\r
54                 /// 本リストが格納しているパッケージのイテレータを返す\r
55                 /// </summary>\r
56                 /// <returns>パッケージのイテレータ</returns>\r
57                 public IEnumerator<TPackage> GetEnumerator()\r
58                 {\r
59                         return packageArrayList.GetEnumerator();\r
60                 }\r
61 \r
62                 /// <summary>\r
63                 /// パッケージをリストに追加する\r
64                 /// </summary>\r
65                 /// <param name="package">追加するパッケージ</param>\r
66                 public void AddPackages(IEnumerable<TPackage> package)\r
67                 {\r
68                         packageArrayList.AddRange(package);\r
69                 }\r
70                 \r
71                 /// <summary>\r
72                 /// パッケージをリストにマージ(追加)する\r
73                 /// </summary>\r
74                 /// <param name="package">追加するパッケージ</param>\r
75                 public void AddPackages(PackageList<TPackage> pkgList)\r
76                 {\r
77                         packageArrayList.AddRange(pkgList.packageArrayList);\r
78                 }\r
79                 \r
80                 /// <summary>\r
81                 /// パッケージをリストに追加する\r
82                 /// </summary>\r
83                 /// <param name="package">追加するパッケージ</param>\r
84                 public void AddPackage(TPackage package)\r
85                 {\r
86                         packageArrayList.Add(package);\r
87                 }\r
88                 \r
89                 /// <summary>\r
90                 /// パッケージをリストから削除\r
91                 /// </summary>\r
92                 /// <param name="package">削除するパッケージ</param>\r
93                 public void RemovePackage(TPackage package)\r
94                 {\r
95                         packageArrayList.Remove(package);\r
96                 }\r
97                 \r
98                 #region パッケージ検索\r
99                 \r
100                 #region 検索用Predicate\r
101                 \r
102                 /// <summary>\r
103                 /// パッケージを検索をする際のPredicateを返す \r
104                 /// </summary>\r
105                 /// <param name="key">検索キー</param>\r
106                 protected internal static Predicate<TPackage> GetPredicateForSearch(string key)\r
107                 {\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
113                         };\r
114                 }\r
115                 \r
116                 /// <summary>\r
117                 /// パッケージ名で検索をする際のPredicateを返す \r
118                 /// </summary>\r
119                 /// <param name="name">\r
120                 /// パッケージ名\r
121                 /// </param>\r
122                 /// <returns>\r
123                 /// Predicate\r
124                 /// </returns>\r
125                 protected internal static Predicate<TPackage> GetPredicateForPackageName(string name)\r
126                 {\r
127                         return delegate(TPackage package) {\r
128                                 return package.Name == name;\r
129                         };\r
130                 }\r
131                 \r
132                 /// <summary>\r
133                 /// エントリで検索をする際のPredicateを返す \r
134                 /// </summary>\r
135                 /// <param name="entry">\r
136                 /// エントリ\r
137                 /// </param>\r
138                 /// <returns>\r
139                 /// Predicate\r
140                 /// </returns>\r
141                 protected internal static Predicate<TPackage> GetPredicateForEntry(Entry entry)\r
142                 {\r
143                         return entry.Match;\r
144                 }\r
145                 \r
146                 #endregion\r
147                                 \r
148                 /// <summary>\r
149                 /// パッケージを検索して、それにマッチしたパッケージをイテレータとして返す。\r
150                 /// </summary>\r
151                 /// <param name="predicate">検索条件のPredicate</param>\r
152                 /// <returns>マッチしたパッケージのイテレータ</returns>\r
153                 protected internal IEnumerable<TPackage> Search(Predicate<TPackage> predicate)\r
154                 {\r
155                         return packageArrayList.FindAll(predicate);\r
156                 }\r
157                 \r
158                 /// <summary>\r
159                 /// パッケージを検索して、それにマッチしたパッケージをイテレータとして返す。\r
160                 /// </summary>\r
161                 /// <param name="key">検索キー</param>\r
162                 /// <returns>マッチしたパッケージのイテレータ</returns>\r
163                 public IEnumerable<TPackage> Search(string key)\r
164                 {\r
165                         return Search(GetPredicateForSearch(key));\r
166                 }\r
167                 \r
168                 /// <summary>\r
169                 /// 指定した名前に対応するパッケージを返す\r
170                 /// </summary>\r
171                 /// <param name="name">検索にかけるパッケージ名</param>\r
172                 public TPackage GetPackageForName(string name)\r
173                 {\r
174                         return packageArrayList.Find(GetPredicateForPackageName(name));\r
175                 }\r
176                 \r
177                 /// <summary>\r
178                 /// 指定した名前に対応するパッケージを返す\r
179                 /// </summary>\r
180                 /// <param name="name">検索にかけるパッケージ名</param>\r
181                 public IEnumerable<TPackage> GetPackagesForName(string name)\r
182                 {\r
183                         return packageArrayList.FindAll(GetPredicateForPackageName(name));\r
184                 }\r
185                 \r
186                 /// <summary>\r
187                 /// 名前・バージョンが対応するパッケージを返す\r
188                 /// </summary>\r
189                 /// <param name="name">検索にかけるパッケージ名</param>\r
190                 /// <param name="version">検索にかけるパッケージのバージョン</param>\r
191                 public TPackage GetPackageForPackage(string name, string version)\r
192                 {\r
193                         return GetPackageForEntry(new Entry(name, null, version));\r
194                 }\r
195                 \r
196                 /// <summary>\r
197                 /// パッケージ参照エントリが対応するパッケージを返す\r
198                 /// </summary>\r
199                 /// <param name="name">検索にかけるパッケージ参照エントリ</param>\r
200                 public TPackage GetPackageForEntry(Entry entry)\r
201                 {\r
202                         return packageArrayList.Find(GetPredicateForEntry(entry));\r
203                 }\r
204                 \r
205                 /// <summary>\r
206                 /// パッケージ参照エントリが対応するパッケージをすべて返す\r
207                 /// </summary>\r
208                 /// <param name="name">検索にかけるパッケージ参照エントリ</param>\r
209                 public IEnumerable<TPackage> GetPackagesForEntry(Entry entry)\r
210                 {\r
211                         return packageArrayList.FindAll(GetPredicateForEntry(entry));\r
212                 }\r
213                 \r
214                 #endregion\r
215         }\r
216 }\r