public void Run(IService service) { _remapList = new List<Tuple<RemapLogParameter, Action<LogItem[]>[], LogItem>>(); foreach (var log in _logs.Values) { var getInfo = log.GetInfo(); var p = new RemapLogParameter { ItemTimesToDelete = log.TimesForDelete(), ItemToSave = log.ItemToSave(), GetItemsParameters = getInfo.Select(i => new Tuple<CriteriaType, DateTime, int, bool>( i.Item1, i.Item2, i.Item3, i.Item4)).ToArray() }; if (!p.ItemTimesToDelete.Any() && p.ItemToSave == null && !p.GetItemsParameters.Any()) continue; p.LogId = log.Id; _remapList.Add(new Tuple<RemapLogParameter, Action<LogItem[]>[], LogItem>( p, getInfo.Select(i => i.Item5).ToArray(), p.ItemToSave)); } if (!_remapList.Any()) return; var parameters = _remapList.Select(t => t.Item1).ToArray(); var result = service.RemapLogs(parameters); for (var i = 0; i < parameters.Length; i++) { var getCallbacks = _remapList[i].Item2; var itemToSave = _remapList[i].Item3; if (itemToSave != null) { itemToSave.Time = result[i].SaveResult; } var r = result[i]; for (var j = 0; j < r.Items.Length; j++) { var items = r.Items[j]; var callback = getCallbacks[j]; callback(items); } } }
public RemapLogResult[] RemapLogs(RemapLogParameter[] parameters) { if (NotValid()) return null; var result = new RemapLogResult[parameters.Length]; for (var i = 0; i < parameters.Length; i++) { var parameter = parameters[i]; var maintainer = _project.LogMaintainers[parameter.LogId]; var r = new RemapLogResult(); DeleteItems(maintainer, parameter); SaveItem(maintainer, parameter, r); GetItems(maintainer, parameter, r); result[i] = r; } return result; }
private static void SaveItem(ILogMaintainer maintainer, RemapLogParameter parameter, RemapLogResult remapLogResult) { if (parameter.ItemToSave == null) return; remapLogResult.SaveResult = maintainer.Save(parameter.ItemToSave); }
private static void GetItems(ILogMaintainer maintainer, RemapLogParameter parameter, RemapLogResult remapLogResult) { remapLogResult.Items = parameter.GetItemsParameters.Any() ? maintainer.GetItems(parameter.GetItemsParameters) : new LogItem[0][]; }
private static void DeleteItems(ILogMaintainer maintainer, RemapLogParameter parameter) { maintainer.Delete(parameter.ItemTimesToDelete); }