Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/FailureMechanismSectionsImporter.cs =================================================================== diff -u -rfcc49aac894f989182fb9faa487e50a585fbed03 -rd066b31047707b6fb1453bd83a65fe773b5838cb --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/FailureMechanismSectionsImporter.cs (.../FailureMechanismSectionsImporter.cs) (revision fcc49aac894f989182fb9faa487e50a585fbed03) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/FileImporters/FailureMechanismSectionsImporter.cs (.../FailureMechanismSectionsImporter.cs) (revision d066b31047707b6fb1453bd83a65fe773b5838cb) @@ -2,18 +2,30 @@ using System.Drawing; using Core.Common.Base.IO; +using Core.Common.IO.Exceptions; +using Core.Common.IO.Readers; +using log4net; + +using Ringtoets.Common.Data; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.Common.IO; +using Ringtoets.Integration.Plugin.Properties; using RingtoetsCommonDataResources = Ringtoets.Common.Data.Properties.Resources; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; using CoreCommonBaseResources = Core.Common.Base.Properties.Resources; namespace Ringtoets.Integration.Plugin.FileImporters { + /// + /// Imports instances from a shapefile that contains + /// one or more polylines and stores them in a . + /// public class FailureMechanismSectionsImporter : FileImporterBase { + private static readonly ILog log = LogManager.GetLogger(typeof(FailureMechanismSectionsImporter)); + public override string Name { get @@ -58,17 +70,85 @@ public override bool Import(object targetItem, string filePath) { - var context = (FailureMechanismSectionsContext)targetItem; - using (var reader = new FailureMechanismSectionReader(filePath)) + ReadResult readResults = ReadFailureMechanismSections(filePath); + + if (readResults.CriticalErrorOccurred) { + return false; + } + + AddImportedDataToModel(targetItem, readResults); + return true; + } + + private ReadResult ReadFailureMechanismSections(string filePath) + { + using (FailureMechanismSectionReader reader = CreateFileReader(filePath)) + { + if (reader == null) + { + return new ReadResult(true); + } + + return ReadFile(reader); + } + } + + private FailureMechanismSectionReader CreateFileReader(string filePath) + { + try + { + return new FailureMechanismSectionReader(filePath); + } + catch (ArgumentException e) + { + LogCriticalFileReadError(e); + } + catch (CriticalFileReadException e) + { + LogCriticalFileReadError(e); + } + return null; + } + + private ReadResult ReadFile(FailureMechanismSectionReader reader) + { + try + { var count = reader.GetFailureMechanismSectionCount(); + + var importedSections = new FailureMechanismSection[count]; for (int i = 0; i < count; i++) { - var section = reader.ReadFailureMechanismSection(); - context.ParentFailureMechanism.AddSection(section); + importedSections[i] = reader.ReadFailureMechanismSection(); } + + return new ReadResult(false) + { + ImportedItems = importedSections + }; } - return true; + catch (CriticalFileReadException e) + { + LogCriticalFileReadError(e); + return new ReadResult(true); + } } + + private void LogCriticalFileReadError(Exception exception) + { + var errorMessage = String.Format(Resources.FailureMechanismSectionsImporter_CriticalErrorMessage_0_No_sections_imported, + exception.Message); + log.Error(errorMessage); + } + + private void AddImportedDataToModel(object targetItem, ReadResult readResults) + { + var context = (FailureMechanismSectionsContext)targetItem; + foreach (FailureMechanismSection section in readResults.ImportedItems) + { + context.ParentFailureMechanism.AddSection(section); + } + } } } \ No newline at end of file