public static void SaveDelta(string path, SCDeltaManager deltaManager) { using (SQLiteDB db = new SQLiteDB(path)) { foreach (DataDelta delta in deltaManager.Deltas) { if (delta.PropertyChangedArgs != null) { //Edit PropertyChangedEventArgs args = delta.PropertyChangedArgs; if (delta.Sender is Commodity commodity) { //Commodity if (args.PropertyName == "Name") { db.EditProperty("Name", commodity.Guid.ToString(), commodity.Name); } } else if (delta.Sender is TradingPort port) { //TradingPort if (args.PropertyName == "Name") { db.EditProperty("Name", port.Guid.ToString(), port.Name); } } } else if (delta.RelationshipChangedArgs != null) { RelationshipChangedArgs args = delta.RelationshipChangedArgs; NotifyCollectionChangedEventArgs notifyArgs = args.Args; //Add/Remove if (notifyArgs.Action == NotifyCollectionChangedAction.Add) { foreach (object item in notifyArgs.NewItems) { if (item is Commodity commodity) { addCommodity(db, commodity); } else if (item is TradingPort port) { addTradingPort(db, port); } else if (item is CommodityPrice price) { addCommodityPrice(db, price); if (args.Parent is TradingPort priceParent) { addTradingPortCommodityPrice(db, priceParent, price); } else { Console.WriteLine("No parent to TradingPort"); } } else if (item is PricePoint point) { if (args.Parent is CommodityPrice pointParent) { addPricePoint(db, point, pointParent); } else { Console.WriteLine("No parent to PricePoint."); } } } } else if (notifyArgs.Action == NotifyCollectionChangedAction.Remove) { foreach (object item in notifyArgs.OldItems) { if (item is Commodity commodity) { removeCommodity(db, commodity); } else if (item is TradingPort port) { removeTradingPort(db, port); } else if (item is CommodityPrice price) { removeCommodityPrice(db, price); removePricePointsInCommodityPrice(db, price); if (args.Parent is TradingPort priceParent) { removeTradingPortCommodityPrice(db, priceParent, price); } else { Console.WriteLine("No parent to Trading Port"); } } } } else { Console.WriteLine("Unhandled Collection Changed Action: {0}", notifyArgs.Action); } } else { Console.WriteLine("Empty delta. Sender: {0}", delta.Sender); } } } }
public static SCDataManager Load(string path) { using (SQLiteDB db = new SQLiteDB(path)) { SCDataManager dataManager = new SCDataManager(); //Commodity DataTable commodityTable = db.GetDataFromTable("Commodity"); foreach (DataRow row in commodityTable.Rows) { Guid guid = new Guid(row.ItemArray[0].ToString()); string name = row.ItemArray[1].ToString(); Commodity commodity = new Commodity(name, guid); dataManager.Commodities.Add(commodity); } Dictionary <Guid, Commodity> commodityDict = createGuidDictionary(dataManager.Commodities); //TradingPort DataTable tradingPortTable = db.GetDataFromTable("TradingPort"); foreach (DataRow row in tradingPortTable.Rows) { Guid guid = new Guid(row.ItemArray[0].ToString()); string name = row.ItemArray[1].ToString(); TradingPort port = new TradingPort(name, guid); dataManager.TradingPorts.Add(port); } Dictionary <Guid, TradingPort> portDict = createGuidDictionary(dataManager.TradingPorts); //TradingPortComodityPrice DataTable portPriceTable = db.GetDataFromTable("TradingPortCommodityPrice"); Dictionary <Guid, TradingPort> priceToPort = new Dictionary <Guid, TradingPort>(); foreach (DataRow row in portPriceTable.Rows) { Guid portGuid = new Guid(row.ItemArray[0].ToString()); Guid priceGuid = new Guid(row.ItemArray[1].ToString()); priceToPort.Add(priceGuid, portDict[portGuid]); } //CommodityPrice DataTable priceTable = db.GetDataFromTable("CommodityPrice"); List <CommodityPrice> allPrices = new List <CommodityPrice>(); foreach (DataRow row in priceTable.Rows) { Guid guid = new Guid(row.ItemArray[0].ToString()); Guid commodityGuid = new Guid(row.ItemArray[1].ToString()); Commodity commodity = commodityDict[commodityGuid]; PriceType type = PriceTypeUtils.ConvertString(row.ItemArray[2].ToString()); CommodityPrice price = new CommodityPrice(commodity, type, guid); TradingPort port = priceToPort[price.Guid]; port.Prices.Add(price); allPrices.Add(price); } Dictionary <Guid, CommodityPrice> priceDict = createGuidDictionary(allPrices); //PricePoint DataTable pointTable = db.GetDataFromTable("PricePoint"); foreach (DataRow row in pointTable.Rows) { Guid commodityPriceGuid = new Guid(row.ItemArray[0].ToString()); double priceDouble = (double)row.ItemArray[1]; DateTime dateTime = new DateTime(Convert.ToInt64(row.ItemArray[2])); CommodityPrice commodityPrice = priceDict[commodityPriceGuid]; commodityPrice.AddPrice(priceDouble, dateTime); } return(dataManager); } }