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