diff --git a/Stars Assistant/CSV/Planet.cs b/Stars Assistant/CSV/Planet.cs
new file mode 100644
index 0000000..a387716
--- /dev/null
+++ b/Stars Assistant/CSV/Planet.cs
@@ -0,0 +1,278 @@
+using System.ComponentModel.DataAnnotations;
+using System.Globalization;
+using CsvHelper.Configuration.Attributes;
+
+namespace StarsAssistant.CSV;
+
+public class Planet
+{
+ [Index(0)]
+ public required string Name { get; set; }
+
+ [Index(1)]
+ public string? Owner { get; set; }
+
+ [Index(2)]
+ public string? StarbaseType { get; set; }
+
+ [Index(3)]
+ public int ReportAge { get; set; } = 0;
+
+ [Index(4)]
+ public int? Population { get; set; }
+
+ [Ignore()]
+ public int? Value { get; private set; }
+
+ [Index(5)]
+ public string CSVValue {
+ set {
+ if ( value.Length >= 2
+ && int.TryParse(value[..^1], out int result))
+ {
+ Value = result;
+ } else {
+ Value = null;
+ }
+ }
+ }
+
+ [Index(7)]
+ public int? Mines { get; set; }
+
+ [Index(8)]
+ public int? Factories { get; set; }
+
+ [Ignore()]
+ public decimal? DefPercent { get; private set; }
+
+ [Index(9)]
+ public string CSVDefPercent {
+ set {
+ if ( value.Length >= 2
+ && Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
+ {
+ DefPercent = result;
+ } else {
+ DefPercent = null;
+ }
+ }
+ }
+
+ [Index(10)]
+ public int? SurfaceIronium { get; set; }
+
+ [Index(11)]
+ public int? SurfaceBoranium { get; set; }
+
+ [Index(12)]
+ public int? SurfaceGermanium { get; set; }
+
+ [Index(13)]
+ public int? MRIronium { get; set; }
+
+ [Index(14)]
+ public int? MRBoranium { get; set; }
+
+ [Index(15)]
+ public int? MRGermanium { get; set; }
+
+ [Index(16)]
+ public int? MCIronium { get; set; }
+
+ [Index(17)]
+ public int? MCBoranium { get; set; }
+
+ [Index(18)]
+ public int? MCGermanium { get; set; }
+
+ [Index(19)]
+ public int? Resources { get; set; }
+
+ [Ignore()]
+ public decimal? Gravity { get; private set; }
+
+ [Index(20)]
+ public string CSVGravity {
+ set {
+ if ( value.Length >= 2
+ && Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
+ {
+ Gravity = result;
+ } else {
+ Gravity = null;
+ }
+ }
+ }
+
+ [Ignore()]
+ public decimal? Temperature { get; private set; }
+
+ [Index(21)]
+ public string CSVTemperature {
+ set {
+ if ( value.Length >= 3
+ && Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
+ {
+ Temperature = result;
+ } else {
+ Temperature = null;
+ }
+ }
+ }
+
+ [Ignore()]
+ public decimal? Radiation { get; private set; }
+
+ [Index(22)]
+ public string CSVRadiation {
+ set {
+ if ( value.Length >= 3
+ && Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
+ {
+ Radiation = result;
+ } else {
+ Radiation = null;
+ }
+ }
+ }
+
+ [Ignore()]
+ public decimal? GravityOrig { get; private set; }
+
+ [Index(20)]
+ public string CSVGravityOrig {
+ set {
+ if ( value.Length >= 2
+ && Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
+ {
+ GravityOrig = result;
+ } else {
+ GravityOrig = null;
+ }
+ }
+ }
+ [Ignore()]
+ public decimal? TemperatureOrig { get; private set; }
+
+ [Index(24)]
+ public string CSVTemperatureOrig {
+ set {
+ if ( value.Length >= 3
+ && Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
+ {
+ TemperatureOrig = result;
+ } else {
+ TemperatureOrig = null;
+ }
+ }
+ }
+
+ [Ignore()]
+ public decimal? RadiationOrig { get; private set; }
+
+ [Index(25)]
+ public string CSVRadiationOrig {
+ set {
+ if ( value.Length >= 3
+ && Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
+ {
+ RadiationOrig = result;
+ } else {
+ RadiationOrig = null;
+ }
+ }
+ }
+
+ [Ignore()]
+ public int? MaxTerraforming { get; private set; }
+
+ [Index(26)]
+ public string CSVMaxTerraforming {
+ set {
+ if ( value.Length >= 2
+ && int.TryParse(value[..^1], out int result))
+ {
+ MaxTerraforming = result;
+ } else {
+ MaxTerraforming = null;
+ }
+ }
+ }
+
+ [Index(27)]
+ public int? CapacityPercent { get; set; }
+
+ [Index(28)]
+ public int? ScanRange { get; set; }
+
+ [Index(29)]
+ public int? PenScanRange { get; set; }
+
+ [Index(30)]
+ public int? Driver { get; set; }
+
+ [Index(31)]
+ public int? DriverWarp { get; set; }
+
+ [Index(32)]
+ public string? RouteTarget { get; set; }
+
+ [Index(33)]
+ public int? GateRange { get; set; }
+
+ [Index(34)]
+ public int? GateMass { get; set; }
+
+ [Index(35)]
+ public int? PctDamage { get; set; }
+
+ ///
+ /// This will update a DB Planet recrod with this CSV Data. The PK (Planet Name)
+ /// must already be set, DB/EF Handling has to be done by the caller, we'll take
+ /// care of none PK properties only.
+ ///
+ ///
+ public void UpdateDbPlanet(Model.Planet dbPlanet)
+ {
+ if (dbPlanet == null)
+ throw new InvalidOperationException("Cannot update a null DB Planet instance");
+ if (dbPlanet.Name != Name)
+ throw new InvalidOperationException($"DB Planet Name {dbPlanet.Name} does not macth the CSV Planet Name {Name}");
+
+ dbPlanet.Owner = Owner;
+ dbPlanet.StarbaseType = StarbaseType;
+ dbPlanet.ReportAge = ReportAge;
+ dbPlanet.Population = Population;
+ dbPlanet.Value = Value;
+ dbPlanet.Mines = Mines;
+ dbPlanet.Factories = Factories;
+ dbPlanet.DefPercent = DefPercent;
+ dbPlanet.SurfaceIronium = SurfaceIronium;
+ dbPlanet.SurfaceBoranium = SurfaceBoranium;
+ dbPlanet.SurfaceGermanium = SurfaceGermanium;
+ dbPlanet.MRIronium = MRIronium;
+ dbPlanet.MRBoranium = MRBoranium;
+ dbPlanet.MRGermanium = MRGermanium;
+ dbPlanet.MCIronium = MCIronium;
+ dbPlanet.MCBoranium = MCBoranium;
+ dbPlanet.MCGermanium = MCGermanium;
+ dbPlanet.Resources = Resources;
+ dbPlanet.Gravity = Gravity;
+ dbPlanet.Radiation = Radiation;
+ dbPlanet.Temperature = Temperature;
+ dbPlanet.GravityOrig = GravityOrig;
+ dbPlanet.TemperatureOrig = TemperatureOrig;
+ dbPlanet.RadiationOrig = RadiationOrig;
+ dbPlanet.MaxTerraforming = MaxTerraforming;
+ dbPlanet.CapacityPercent = CapacityPercent;
+ dbPlanet.ScanRange = ScanRange;
+ dbPlanet.PenScanRange = PenScanRange;
+ dbPlanet.Driver = Driver;
+ dbPlanet.DriverWarp = DriverWarp;
+ dbPlanet.RouteTarget = RouteTarget;
+ dbPlanet.GateRange = GateRange;
+ dbPlanet.GateMass = GateMass;
+ dbPlanet.PctDamage = PctDamage;
+ }
+}
\ No newline at end of file
diff --git a/Stars Assistant/Model/Planet.cs b/Stars Assistant/Model/Planet.cs
index 8ec66f9..1eaeb19 100644
--- a/Stars Assistant/Model/Planet.cs
+++ b/Stars Assistant/Model/Planet.cs
@@ -1,229 +1,78 @@
using System.ComponentModel.DataAnnotations;
using System.Globalization;
-using CSV = CsvHelper.Configuration.Attributes;
namespace StarsAssistant.Model;
public class Planet
{
- [Key, CSV.Index(0)]
+ [Key]
public required string Name { get; set; }
- [CSV.Index(1)]
public string? Owner { get; set; }
- [CSV.Index(2)]
public string? StarbaseType { get; set; }
- [CSV.Index(3)]
public int ReportAge { get; set; } = 0;
- [CSV.Index(4)]
public int? Population { get; set; }
- [CSV.Ignore()]
public int? Value { get; set; }
-
- [CSV.Index(5)]
- public string CSVValue {
- set {
- if ( value.Length >= 2
- && int.TryParse(value[..^1], out int result))
- {
- Value = result;
- } else {
- Value = null;
- }
- }
- }
- [CSV.Index(7)]
public int? Mines { get; set; }
- [CSV.Index(8)]
public int? Factories { get; set; }
- [CSV.Ignore()]
public decimal? DefPercent { get; set; }
- [CSV.Index(9)]
- public string CSVDefPercent {
- set {
- if ( value.Length >= 2
- && Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
- {
- DefPercent = result;
- } else {
- DefPercent = null;
- }
- }
- }
-
- [CSV.Index(10)]
public int? SurfaceIronium { get; set; }
- [CSV.Index(11)]
public int? SurfaceBoranium { get; set; }
- [CSV.Index(12)]
public int? SurfaceGermanium { get; set; }
- [CSV.Index(13)]
public int? MRIronium { get; set; }
- [CSV.Index(14)]
public int? MRBoranium { get; set; }
- [CSV.Index(15)]
public int? MRGermanium { get; set; }
- [CSV.Index(16)]
public int? MCIronium { get; set; }
- [CSV.Index(17)]
public int? MCBoranium { get; set; }
- [CSV.Index(18)]
- public int? MCGrmanium { get; set; }
+ public int? MCGermanium { get; set; }
- [CSV.Index(19)]
public int? Resources { get; set; }
- [CSV.Ignore()]
public decimal? Gravity { get; set; }
-
- [CSV.Index(20)]
- public string CSVGravity {
- set {
- if ( value.Length >= 2
- && Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
- {
- Gravity = result;
- } else {
- Gravity = null;
- }
- }
- }
- [CSV.Ignore()]
public decimal? Temperature { get; set; }
-
- [CSV.Index(21)]
- public string CSVTemperature {
- set {
- if ( value.Length >= 3
- && Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
- {
- Temperature = result;
- } else {
- Temperature = null;
- }
- }
- }
- [CSV.Ignore()]
public decimal? Radiation { get; set; }
- [CSV.Index(22)]
- public string CSVRadiation {
- set {
- if ( value.Length >= 3
- && Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
- {
- Radiation = result;
- } else {
- Radiation = null;
- }
- }
- }
-
- [CSV.Ignore()]
public decimal? GravityOrig { get; set; }
- [CSV.Index(20)]
- public string CSVGravityOrig {
- set {
- if ( value.Length >= 2
- && Decimal.TryParse(value[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
- {
- GravityOrig = result;
- } else {
- GravityOrig = null;
- }
- }
- }
- [CSV.Ignore()]
public decimal? TemperatureOrig { get; set; }
- [CSV.Index(24)]
- public string CSVTemperatureOrig {
- set {
- if ( value.Length >= 3
- && Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
- {
- TemperatureOrig = result;
- } else {
- TemperatureOrig = null;
- }
- }
- }
-
- [CSV.Ignore()]
public decimal? RadiationOrig { get; set; }
- [CSV.Index(25)]
- public string CSVRadiationOrig {
- set {
- if ( value.Length >= 3
- && Decimal.TryParse(value[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out decimal result))
- {
- RadiationOrig = result;
- } else {
- RadiationOrig = null;
- }
- }
- }
-
- [CSV.Ignore()]
public int? MaxTerraforming { get; set; }
- [CSV.Index(26)]
- public string CSVMaxTerraforming {
- set {
- if ( value.Length >= 2
- && int.TryParse(value[..^1], out int result))
- {
- MaxTerraforming = result;
- } else {
- MaxTerraforming = null;
- }
- }
- }
-
- [CSV.Index(27)]
public int? CapacityPercent { get; set; }
- [CSV.Index(28)]
public int? ScanRange { get; set; }
- [CSV.Index(29)]
public int? PenScanRange { get; set; }
- [CSV.Index(30)]
public int? Driver { get; set; }
- [CSV.Index(31)]
public int? DriverWarp { get; set; }
- [CSV.Index(32)]
public string? RouteTarget { get; set; }
- [CSV.Index(33)]
public int? GateRange { get; set; }
- [CSV.Index(34)]
public int? GateMass { get; set; }
- [CSV.Index(35)]
public int? PctDamage { get; set; }
}
\ No newline at end of file
diff --git a/Stars Assistant/Program.cs b/Stars Assistant/Program.cs
index 08f5c5b..6c5980a 100644
--- a/Stars Assistant/Program.cs
+++ b/Stars Assistant/Program.cs
@@ -50,9 +50,11 @@ sealed class Program
using (var reader = new StreamReader("/home/torben/goingth/GOINGTH.p1", System.Text.Encoding.Latin1))
using (var csv = new CsvReader(reader, config))
{
- List records = csv.GetRecords().ToList();
- foreach (Planet p in records)
+ List records = csv.GetRecords().ToList();
+ foreach (CSV.Planet csvp in records)
{
+ Planet p = new Planet{ Name = csvp.Name };
+ csvp.UpdateDbPlanet(p);
db.Add(p);
}
db.SaveChanges();