Files

197 lines
6.4 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace DaireApplication.DataBase;
public class Mapping
{
public int Id { get; set; }
public string Name { get; set; } = "";
public string Address { get; set; } = "";
public bool IsRead { get; set; } = false;
public List<int> BitNumbers { get; set; } = new();
public ushort getSetTempAddress(int tempAddress)
{
string tAddress = "4000";
tempAddress -= 30004;
tAddress += tempAddress;
return ushort.Parse(tAddress);
}
public List<Mapping> ReadMappings()
{
string filePath = DataPathManager.GetDataFilePath("Mapping.csv");
List<Mapping> mappings = new();
if (File.Exists(filePath))
{
using StreamReader reader = new(filePath);
string header = reader.ReadLine();
while (!reader.EndOfStream)
{
string[] columns = reader.ReadLine().Split(',');
mappings.Add(new Mapping
{
Id = int.Parse(columns[0]),
Name = columns[1],
Address = columns[2],
IsRead = columns[3] == "1"|| columns[3] == "True",
BitNumbers =columns[4]!=""? columns[4].Split('|').Select(int.Parse).ToList():new List<int>()
});
}
return mappings;
}
return null;
}
public int GetMaxId()
{
string filePath = DataPathManager.GetDataFilePath("Mapping.csv");
if (File.Exists(filePath))
{
return File.ReadAllLines(filePath)
.Select(line => line.Split(','))
.Where(columns => columns.Length > 0)
.Select(columns => int.TryParse(columns[0], out int id) ? id : 0)
.Max();
}
return -1;
}
public Mapping ReadMappingById(string id)
{
string filePath = DataPathManager.GetDataFilePath("Mapping.csv");
if (File.Exists(filePath))
{
foreach (var line in File.ReadLines(filePath))
{
string[] columns = line.Split(',');
if (columns[0] == id)
{
return new Mapping
{
Id = int.Parse(columns[0]),
Name = columns[1],
Address = columns[2],
IsRead = columns[3] == "1",
BitNumbers = columns[4].Split('|').Select(int.Parse).ToList()
};
}
}
}
return null;
}
public bool AddMapping(Mapping data)
{
string filePath = DataPathManager.GetDataFilePath("Mapping.csv");
if (File.Exists(filePath))
{
string newEntry = string.Join(",", [
GetMaxId() + 1,
data.Name,
data.Address,
data.IsRead ? "1" : "0",
string.Join("|", data.BitNumbers)
]);
File.AppendAllText(filePath, newEntry + Environment.NewLine);
return true;
}
return false;
}
public bool DeleteMapping(string id)
{
string filePath = DataPathManager.GetDataFilePath("Mapping.csv");
if (File.Exists(filePath))
{
var filteredLines = File.ReadLines(filePath).Where(line => !line.StartsWith(id + ",")).ToArray();
File.WriteAllLines(filePath, filteredLines);
return true;
}
return false;
}
public bool UpdateMapping(Mapping updatedMapping)
{
string filePath = DataPathManager.GetDataFilePath("Mapping.csv");
if (File.Exists(filePath))
{
string[] lines = File.ReadAllLines(filePath);
bool mappingFound = false;
for (int i = 1; i < lines.Length; i++)
{
string[] columns = lines[i].Split(',');
if (columns.Length < 5)
continue;
if (int.Parse(columns[0]) == updatedMapping.Id)
{
columns[1] = updatedMapping.Name;
columns[2] = updatedMapping.Address;
columns[3] = updatedMapping.IsRead ? "1" : "0";
columns[4] = string.Join("|", updatedMapping.BitNumbers);
lines[i] = string.Join(",", columns);
mappingFound = true;
break;
}
}
if (mappingFound)
{
File.WriteAllLines(filePath, lines);
return true;
}
}
return false;
}
public bool DeleteBitNumber(int id, int bitNumber)
{
string filePath = DataPathManager.GetDataFilePath("Mapping.csv");
if (!File.Exists(filePath))
return false;
List<Mapping> records = ReadMappings();
Mapping? record = records.Find(x => x.Id == id);
if (record != null && record.BitNumbers.Remove(bitNumber)) // Remove bit number if found
{
string header;
using (StreamReader sr = new StreamReader(filePath))
{
header = sr.ReadLine() ?? string.Empty;
}
using (StreamWriter writer = new StreamWriter(filePath))
{
writer.WriteLine(header);
string bitNumbersStr = "";
foreach (var rec in records)
{
if (rec.Id==id)
{
bitNumbersStr = record.BitNumbers.Count > 0 ? string.Join("|", record.BitNumbers) : "";
writer.WriteLine($"{rec.Id},{rec.Name},{rec.Address},{rec.IsRead},{bitNumbersStr}");
}
else
{
bitNumbersStr = rec.BitNumbers.Count > 0 ? string.Join("|", rec.BitNumbers) : "";
writer.WriteLine($"{rec.Id},{rec.Name},{rec.Address},{rec.IsRead},{bitNumbersStr}");
}
}
}
return true;
}
return false;
}
}