OSDN Git Service

na-get-lib,AppliStation-GUI,ソフトリスト名を入れていない個所があったので修正。インストールダイアログで、ソフトリスト名を表示するようにした
[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                 /// パッケージリストの各PackageListNameを設定する\r
73                 /// </summary>\r
74                 /// <param name="pkgList">設定するパッケージが入っているパッケージリスト</param>\r
75                 public void FixPackageListName()\r
76                 {\r
77                         foreach (TPackage pkg in packageArrayList) {\r
78                                 pkg.PackageListName = this.Name;\r
79                         }\r
80                 }\r
81                 \r
82                 /// <summary>\r
83                 /// パッケージをリストにマージ(追加)する\r
84                 /// </summary>\r
85                 /// <param name="package">追加するパッケージ</param>\r
86                 public void AddPackages(PackageList<TPackage> pkgList)\r
87                 {\r
88                         packageArrayList.AddRange(pkgList.packageArrayList);\r
89                 }\r
90                 \r
91                 /// <summary>\r
92                 /// パッケージをリストに追加する\r
93                 /// </summary>\r
94                 /// <param name="package">追加するパッケージ</param>\r
95                 public void AddPackage(TPackage package)\r
96                 {\r
97                         packageArrayList.Add(package);\r
98                 }\r
99                 \r
100                 /// <summary>\r
101                 /// パッケージをリストから削除\r
102                 /// </summary>\r
103                 /// <param name="package">削除するパッケージ</param>\r
104                 public void RemovePackage(TPackage package)\r
105                 {\r
106                         packageArrayList.Remove(package);\r
107                 }\r
108                 \r
109                 #region パッケージ検索\r
110                 \r
111                 #region 検索用Predicate\r
112                 \r
113                 /// <summary>\r
114                 /// パッケージを検索をする際のPredicateを返す \r
115                 /// </summary>\r
116                 /// <param name="key">検索キー</param>\r
117                 protected internal static Predicate<TPackage> GetPredicateForSearch(string key)\r
118                 {\r
119                         string lowerKey = key.ToLower();\r
120                         return delegate(TPackage package) {\r
121                                 return package.Name.ToLower().IndexOf(lowerKey) >= 0 ||\r
122                                         package.Summary.ToLower().IndexOf(lowerKey) >= 0 ||\r
123                                         ((package.Tags ?? string.Empty).ToLower().IndexOf(lowerKey) >= 0);\r
124                         };\r
125                 }\r
126                 \r
127                 /// <summary>\r
128                 /// パッケージ名で検索をする際のPredicateを返す \r
129                 /// </summary>\r
130                 /// <param name="name">\r
131                 /// パッケージ名\r
132                 /// </param>\r
133                 /// <returns>\r
134                 /// Predicate\r
135                 /// </returns>\r
136                 protected internal static Predicate<TPackage> GetPredicateForPackageName(string name)\r
137                 {\r
138                         return delegate(TPackage package) {\r
139                                 return package.Name == name;\r
140                         };\r
141                 }\r
142                 \r
143                 /// <summary>\r
144                 /// エントリで検索をする際のPredicateを返す \r
145                 /// </summary>\r
146                 /// <param name="entry">\r
147                 /// エントリ\r
148                 /// </param>\r
149                 /// <returns>\r
150                 /// Predicate\r
151                 /// </returns>\r
152                 protected internal static Predicate<TPackage> GetPredicateForEntry(Entry entry)\r
153                 {\r
154                         return entry.Match;\r
155                 }\r
156                 \r
157                 #endregion\r
158                                 \r
159                 /// <summary>\r
160                 /// パッケージを検索して、それにマッチしたパッケージをイテレータとして返す。\r
161                 /// </summary>\r
162                 /// <param name="predicate">検索条件のPredicate</param>\r
163                 /// <returns>マッチしたパッケージのイテレータ</returns>\r
164                 protected internal IEnumerable<TPackage> Search(Predicate<TPackage> predicate)\r
165                 {\r
166                         return packageArrayList.FindAll(predicate);\r
167                 }\r
168                 \r
169                 /// <summary>\r
170                 /// パッケージを検索して、それにマッチしたパッケージをイテレータとして返す。\r
171                 /// </summary>\r
172                 /// <param name="key">検索キー</param>\r
173                 /// <returns>マッチしたパッケージのイテレータ</returns>\r
174                 public IEnumerable<TPackage> Search(string key)\r
175                 {\r
176                         return Search(GetPredicateForSearch(key));\r
177                 }\r
178                 \r
179                 /// <summary>\r
180                 /// 指定した名前に対応するパッケージを返す\r
181                 /// </summary>\r
182                 /// <param name="name">検索にかけるパッケージ名</param>\r
183                 public TPackage GetPackageForName(string name)\r
184                 {\r
185                         return packageArrayList.Find(GetPredicateForPackageName(name));\r
186                 }\r
187                 \r
188                 /// <summary>\r
189                 /// 指定した名前に対応するパッケージを返す\r
190                 /// </summary>\r
191                 /// <param name="name">検索にかけるパッケージ名</param>\r
192                 public IEnumerable<TPackage> GetPackagesForName(string name)\r
193                 {\r
194                         return packageArrayList.FindAll(GetPredicateForPackageName(name));\r
195                 }\r
196                 \r
197                 /// <summary>\r
198                 /// 名前・バージョンが対応するパッケージを返す\r
199                 /// </summary>\r
200                 /// <param name="name">検索にかけるパッケージ名</param>\r
201                 /// <param name="version">検索にかけるパッケージのバージョン</param>\r
202                 public TPackage GetPackageForPackage(string name, string version)\r
203                 {\r
204                         return GetPackageForEntry(new Entry(name, null, version));\r
205                 }\r
206                 \r
207                 /// <summary>\r
208                 /// パッケージ参照エントリが対応するパッケージを返す\r
209                 /// </summary>\r
210                 /// <param name="name">検索にかけるパッケージ参照エントリ</param>\r
211                 public TPackage GetPackageForEntry(Entry entry)\r
212                 {\r
213                         return packageArrayList.Find(GetPredicateForEntry(entry));\r
214                 }\r
215                 \r
216                 /// <summary>\r
217                 /// パッケージ参照エントリが対応するパッケージをすべて返す\r
218                 /// </summary>\r
219                 /// <param name="name">検索にかけるパッケージ参照エントリ</param>\r
220                 public IEnumerable<TPackage> GetPackagesForEntry(Entry entry)\r
221                 {\r
222                         return packageArrayList.FindAll(GetPredicateForEntry(entry));\r
223                 }\r
224                 \r
225                 #endregion\r
226         }\r
227 }\r