public IMoBiProject Load(IMoBiContext context) { var projectFromDb = projectFromDatabase(); if (projectFromDb == null) { return(null); } if (!ProjectVersions.CanLoadVersion(projectFromDb.Version)) { throw new InvalidProjectFileException(projectFromDb.Version); } var project = projectFrom(projectFromDb); _postSerializationStepsMaker.PerformPostDeserializationFor(project, projectFromDb.Version); context.LoadFrom(project); return(project); }
public IEnumerable <T> LoadMany <T>(string fileName, bool resetIds = false) { _projectConverterLogger.Clear(); XElement xelRoot = XElement.Load(fileName); if (string.IsNullOrEmpty(fileName)) { return(Enumerable.Empty <T>()); } var possibleElementsToDeserialize = retrieveElementsToDeserializeFromFile <T>(xelRoot, fileName).ToList(); var selection = possibleElementsToDeserialize.Count > 1 ? selectToDeserialize(possibleElementsToDeserialize, _objectTypeResolver.TypeFor <T>()) : possibleElementsToDeserialize; if (!selection.Any()) { return(Enumerable.Empty <T>()); } var deserializedObjects = new List <T>(); int version = _xmlSerializationService.VersionFrom(xelRoot); var currentProject = _context.CurrentProject; selection.Each(element => deserializedObjects.Add(_xmlSerializationService.Deserialize <T>(element, currentProject, version))); var notificationMessages = _projectConverterLogger.AllMessages().ToList(); if (notificationMessages.Any()) { _context.PublishEvent(new ShowNotificationsEvent(notificationMessages)); } _postSerializationSteps.PerformPostDeserializationFor(deserializedObjects, version, resetIds); return(deserializedObjects); }