using System;
using System.Text;
using System.IO;
using System.Collections.Generic;
namespace NaGet.Packages
{
///
/// 環境構築/移行を便利にするためのパッケージ名リストの表現クラス
///
public class PackageCollectionFileData : System.Collections.ObjectModel.Collection
{
public PackageCollectionFileData()
{
}
///
/// パッケージ名をリストに入れる
///
/// パッケージ情報
public void loadPackages(IEnumerable pkgs) where T : Package
{
foreach (Package pkg in pkgs) {
if (this.IndexOf(pkg.Name) < 0) {
this.Add(pkg.Name);
}
}
}
///
/// パッケージ名をリストに入れる
///
/// パッケージ情報
public void loadPackages(IEnumerator e) where T : Package
{
while(e.MoveNext()) {
T pkg = e.Current;
if (this.IndexOf(pkg.Name) < 0) {
this.Add(pkg.Name);
}
}
}
///
/// このリストからパッケージのリストを得る
///
/// パッケージのリスト
public void generatePackages(PackageListsManager pkgMan, out IList pkgs, out IList invalidPkgNames)
{
pkgs = new List();
invalidPkgNames = new List();
foreach (string pkgName in this) {
Package pkg = pkgMan.availablePkgList.GetPackageForName(pkgName);
if (pkg != null) {
if ((pkgMan.installedPkgList.GetPackageForName(pkgName) == null)
&& (pkgMan.systemInstalledPkgList.GetPackageForName(pkgName) == null)) {
pkgs.Add(pkg);
} else {
// すでにインストールされている場合は何もしない
}
} else {
invalidPkgNames.Add(pkgName);
}
}
}
#region ファイル入出力
///
/// リストをストリームに保存する
///
/// 保存先
public void saveAs(StreamWriter stream)
{
foreach (string name in this) {
stream.WriteLine("{0}", name);
}
}
///
/// リストをファイルに保存する
///
/// 保存先
public void saveAs(String filepath)
{
using (FileStream stream = new FileStream(filepath, FileMode.Create)) {
using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8)) {
saveAs(sw);
}
}
}
///
/// ストリームからリストを読み込む
///
/// 読み取り元
public void load(StreamReader stream)
{
string line = null;
while ((line = stream.ReadLine()) != null) {
this.Add(line.Trim());
}
}
///
/// ファイルからリストを読み込む
///
/// 読み取り元
public void load(string filepath)
{
using (FileStream fs = new FileStream(filepath, FileMode.Open)) {
using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) {
load(sr);
}
}
}
#endregion
}
}