agrobot_base/AgroBase/OperationControl/Mapas/Services/MapaDocumentoCloneService.cs

110 lines
2.8 KiB
C#

using OperationControl.Mapas.Models;
namespace OperationControl.Mapas.Services
{
/// <summary>
/// Responsável por criar cópias profundas e independentes
/// de documentos canônicos do subsistema de mapas.
///
/// Nenhuma coleção, MapaRua ou geometria mutável é
/// compartilhada entre origem e clone.
/// </summary>
public sealed class MapaDocumentoCloneService
{
public MapaDocumento Clonar(
MapaDocumento origem)
{
if (origem == null)
{
throw new ArgumentNullException(
nameof(origem)
);
}
var clone =
new MapaDocumento
{
Nome =
origem.Nome,
CaminhoOrigem =
origem.CaminhoOrigem,
FormatoOrigem =
origem.FormatoOrigem,
Tipo =
origem.Tipo,
Modificado =
origem.Modificado
};
if (origem.AvisosImportacao != null)
{
clone
.AvisosImportacao
.AddRange(
origem.AvisosImportacao
);
}
if (origem.Ruas == null)
return clone;
foreach (
var rua
in origem.Ruas)
{
if (rua == null)
continue;
clone.Ruas.Add(
new MapaRua
{
Id =
rua.Id,
IdOriginal =
rua.IdOriginal,
IdGeradoAutomaticamente =
rua.IdGeradoAutomaticamente,
Nome =
rua.Nome,
Geometria =
rua.Geometria == null
? null
: (NetTopologySuite
.Geometries
.LineString)
rua.Geometria
.Copy(),
ComprimentoMetros =
rua.ComprimentoMetros,
Dist1 =
rua.Dist1,
Dist2 =
rua.Dist2,
IndiceFeatureOrigem =
rua.IndiceFeatureOrigem
}
);
}
return clone;
}
}
}