public void CommitChanges() { _logger.WriteLine("Testing consistency..."); if (TestConsistency()) { _logger.WriteLine("Can't save broken database"); return; } _logger.WriteLine("Saving..."); for (int i = 0; i < _xDocuments.Length; i++) { int projectId = EcCard.GetProjectNumber(_xDocuments[i]); EcCard.UpdateAll(_xDocuments[i], _allCards.Where(c => c.ProjectNumber == projectId).OrderBy(c => c.ID)); } // Make backups foreach (var fileName in _fileNames) { File.Delete($"{fileName}.5"); } for (int i = 5; i > 0; i--) { foreach (var fileName in _fileNames) { var dest = $"{fileName}.{i}"; var src = fileName; if (i > 1) { src += "." + (i - 1); } if (File.Exists(src)) { File.Move(src, dest); } } } for (int i = 0; i < _xDocuments.Length; i++) { _xDocuments[i].Save(_fileNames[i]); } }
public void LoadDocuments(FileInfo projectFile1, FileInfo projectFile2, FileInfo projectFile3) { // Load all documents _fileNames = new[] { projectFile1.FullName, projectFile2.FullName, projectFile3.FullName }; _xDocuments = new XDocument[3]; _allCards = new List <EcCard>(); var projects = new HashSet <int>(); for (int i = 0; i < _xDocuments.Length; i++) { _xDocuments[i] = XDocument.Load(_fileNames[i]); int projectId = EcCard.GetProjectNumber(_xDocuments[i]); if (!EcCard.ProjectIds.Contains(projectId)) { throw new Exception($"Project {i+1} has an invalid Project id of {projectId}"); } if (projects.Contains(projectId)) { throw new Exception($"Project {projectId} already loaded"); } projects.Add(projectId); _allCards.AddRange(EcCard.LoadAll(_xDocuments[i])); } }