Example #1
0
        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);
        }