using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using NaGet.Tasks;
namespace NaGet.SubCommands
{
///
/// NaGetタスク処理のパック
///
[Obsolete]
public abstract class NaGetTaskSet : Task
{
///
/// タスク処理中の質問のハンドラ
///
public event NaGetTaskQueryHandler TaskQueryRaised;
///
/// 文字列で表現した作業一覧リスト
///
protected IList taskSetNames;
///
/// 文字列で表現した作業一覧リスト
///
public virtual IList TaskSetNames {
get {
return new ReadOnlyCollection(taskSetNames);
}
}
///
/// 現在実行中の作業番号
///
public abstract int CurrentTaskSetIndex {
get;
}
///
/// 現在の進捗を戻す。
///
/// 作業の状態
/// サブタスクの進捗
/// 現在の進捗
protected virtual float GetProgressPercent(TaskEventType type, float subTaskProgress)
{
if (CurrentTaskSetIndex >= 0) {
if (subTaskProgress >= 0) {
return (CurrentTaskSetIndex * 100 + subTaskProgress) / taskSetNames.Count;
}
switch (type) {
case TaskEventType.STARTED:
return 0;
case TaskEventType.COMPLETED:
return 100;
case TaskEventType.COMPLETED_SUBTASK:
return ((CurrentTaskSetIndex+1) * 100) / taskSetNames.Count;
default:
return (CurrentTaskSetIndex * 100) / taskSetNames.Count;
}
}
return -1;
}
#region TaskEvent便利メソッド
protected virtual void RaiseTaskSetEvent(TaskEventType type, string message)
{
RaiseTaskSetEvent(type, message, GetProgressPercent(type, -1));
}
protected virtual void ReceivedErrorData(object sender, NaGet.Utils.AnyDataEventArgs e)
{
if (! string.IsNullOrEmpty(e.Data)) {
RaiseTaskSetEvent(TaskEventType.WARNING, e.Data);
}
}
protected virtual void ReceivedOutputData(object sender, NaGet.Utils.AnyDataEventArgs e)
{
if (! string.IsNullOrEmpty(e.Data)) {
RaiseTaskSetEvent(TaskEventType.INFO, e.Data);
}
}
#endregion
protected virtual NaGetTaskQueryResult RaiseTaskSetQueryEvent(string message, NaGetTaskQueryResult selection)
{
if (TaskQueryRaised != null) {
return TaskQueryRaised(this, new NaGetTaskQueryArgs(message, selection));
}
return NaGetTaskQueryResult.CANCELED_AUTOMATICALLY;
}
public override bool Running {
get { return CurrentTaskSetIndex >= 0 && !Done; }
}
}
}