// Copyright (C) Stichting Deltares 2016. All rights reserved. // // This file is part of Ringtoets. // // Ringtoets is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; using Core.Common.IO.Exceptions; using Core.Common.Utils; using Core.Components.Gis.Data; using DotSpatial.Data; using CoreCommonUtilsResources = Core.Common.Utils.Properties.Resources; namespace Core.Components.Gis.IO.Writers { /// /// The base class to write data to a shapefile. /// public abstract class ShapeFileWriterBase : IDisposable where T : FeatureBasedMapData { protected Shapefile ShapeFile; /// /// Adds a feature to the in-memory shapefile. /// /// The to add to the in-memory shapefile as a feature. /// Thrown when a contains different metadata keys /// than the of the first call to . public virtual void AddFeature(T mapData) {} /// /// Saves the in-memory shapefile to a file, overwriting when necessary. /// /// The path to the shapefile. /// Thrown when is invalid. /// Thrown when the shapefile cannot be written. public void SaveAs(string filePath) { FileUtils.ValidateFilePath(filePath); try { ShapeFile.SaveAs(filePath, true); } catch (Exception e) { throw new CriticalFileWriteException(string.Format(CoreCommonUtilsResources.Error_General_output_error_0, filePath), e); } } public void Dispose() { if (ShapeFile != null) { ShapeFile.Close(); } } } }