OSDN Git Service

na-get-lib,パッケージコレクションに関するリファクタリング。(loadPackagesメソッドの抽象化
[applistation/AppliStation.git] / na-get-lib / NaGet.Packages / PackageCollectionFileData.cs
1 using System;\r
2 using System.Text;\r
3 using System.IO;\r
4 using System.Collections.Generic;\r
5 \r
6 namespace NaGet.Packages\r
7 {\r
8         /// <summary>\r
9         /// 環境構築/移行を便利にするためのパッケージ名リストの表現クラス\r
10         /// </summary>\r
11         public class PackageCollectionFileData : System.Collections.ObjectModel.Collection<string>\r
12         {\r
13                 public PackageCollectionFileData()\r
14                 {\r
15                 }\r
16                 \r
17                 /// <summary>\r
18                 /// パッケージ名をリストに入れる\r
19                 /// </summary>\r
20                 /// <param name="pkgs">パッケージ情報</param>\r
21                 public void loadPackages<T>(IEnumerable<T> pkgs) where T : Package\r
22                 {\r
23                         foreach (Package pkg in pkgs) {\r
24                                 if (this.IndexOf(pkg.Name) < 0) {\r
25                                         this.Add(pkg.Name);\r
26                                 }\r
27                         }\r
28                 }\r
29                 \r
30                 /// <summary>\r
31                 /// このリストからパッケージのリストを得る\r
32                 /// </summary>\r
33                 /// <returns>パッケージのリスト</returns>\r
34                 public void generatePackages(PackageListsManager pkgMan, out IList<Package> pkgs, out IList<string> invalidPkgNames)\r
35                 {\r
36                         pkgs = new List<Package>();\r
37                         invalidPkgNames = new List<string>();\r
38                         \r
39                         foreach (string pkgName in this) {\r
40                                 Package pkg = pkgMan.availablePkgList.GetPackageForName(pkgName);\r
41                                 if (pkg != null) {\r
42                                         if ((pkgMan.installedPkgList.GetPackageForName(pkgName) == null)\r
43                                            && (pkgMan.systemInstalledPkgList.GetPackageForName(pkgName) == null)) {\r
44                                                 pkgs.Add(pkg);\r
45                                         } else {\r
46                                                 // すでにインストールされている場合は何もしない\r
47                                         }\r
48                                 } else {\r
49                                         invalidPkgNames.Add(pkgName);\r
50                                 }\r
51                         }\r
52                 }\r
53                 \r
54                 #region ファイル入出力\r
55                 \r
56                 /// <summary>\r
57                 /// リストをストリームに保存する\r
58                 /// </summary>\r
59                 /// <param name="stream">保存先</param>\r
60                 public void saveAs(StreamWriter stream)\r
61                 {\r
62                         foreach (string name in this) {\r
63                                 stream.WriteLine("{0}", name);\r
64                         }\r
65                 }\r
66                 \r
67                 /// <summary>\r
68                 /// リストをファイルに保存する\r
69                 /// </summary>\r
70                 /// <param name="filepath">保存先</param>\r
71                 public void saveAs(String filepath)\r
72                 {\r
73                         using (FileStream stream = new FileStream(filepath, FileMode.Create)) {\r
74                                 using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8)) {\r
75                                         saveAs(sw);\r
76                                 }\r
77                         }\r
78                 }\r
79                 \r
80                 /// <summary>\r
81                 /// ストリームからリストを読み込む\r
82                 /// </summary>\r
83                 /// <param name="stream">読み取り元</param>\r
84                 public void load(StreamReader stream)\r
85                 {\r
86                         string line = null;\r
87                         \r
88                         while ((line = stream.ReadLine()) != null) {\r
89                                 this.Add(line.Trim());\r
90                         }\r
91                 }\r
92 \r
93                 /// <summary>\r
94                 /// ファイルからリストを読み込む\r
95                 /// </summary>\r
96                 /// <param name="stream">読み取り元</param>\r
97                 public void load(string filepath)\r
98                 {\r
99                         using (FileStream fs = new FileStream(filepath, FileMode.Open)) {\r
100                                 using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) {\r
101                                         load(sr);\r
102                                 }\r
103                         }\r
104                 }\r
105                 \r
106                 #endregion\r
107         }\r
108 }\r