public override void Save(string path, AbstractPlanning p) { p.weeks = null; var planningJson = GetJson(p); SetPlanningFileJson(path, planningJson); }
public override AbstractPlanning LoadFromJson(string json, Type t) { AbstractPlanning p = null; if (t == typeof(MockPlanning)) { p = JsonConvert.DeserializeObject <MockPlanning>(json, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto, ObjectCreationHandling = ObjectCreationHandling.Replace }); } else if (t == typeof(ConsolePlanning)) { p = JsonConvert.DeserializeObject <ConsolePlanning>(json, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto, ObjectCreationHandling = ObjectCreationHandling.Replace }); } if (p != null) { if (p.weeks != null) { if (p.weeks[0].days != null) { p.SetContent(p.weeks); } else { throw new JsonReaderException("Planning loaded but didn't parse correctly the weeks"); } } else { throw new NullReferenceException("The planning to load doesn't have a 'week' field "); } } if (p.preMenu != null) { // Solve circular dependency issues here foreach (var choice in p.preMenu.availableChoices) { choice.preMenu = p.preMenu; choice.preMenu.planning = p; } } if (p.plugins != null) { foreach (var plugin in p.plugins) { plugin.planning = p; } } return(p); }
public void LoadTest() { var p = new MockPlanning(); var firstTask = new MockTask(); var secondTask = new MockTask(); int index = 10; p.currentDayIndex = index; p.SetContent(new List <IWeek> { new IWeek(new List <AbstractDay> { new Day(new List <AbstractTask> { firstTask }), new Day(), new Day(), new Day(), new Day(), new Day(), new Day(), }), new IWeek(new List <AbstractDay> { new Day(new List <AbstractTask> { secondTask }), new Day(), new Day(), new Day(), new Day(), new Day(), new Day(new List <AbstractTask> { new MockTask() }), }) }); var rm = new ConsoleRoadmap(p); rm.ShowRoadmap(); var loader = new PlanningLoader(); var json = loader.GetJson(p); AbstractPlanning loadedPlanningMemory = loader.LoadFromJson(json, typeof(MockPlanning)); Assert.IsNotNull(loadedPlanningMemory); Assert.IsNotNull(loadedPlanningMemory.GetDays()); string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Loaded planning test.json"; loader.Save(path, loadedPlanningMemory); AbstractPlanning loadedPlanningWithFile = loader.Load(path, typeof(MockPlanning)); Assert.IsNotNull(loadedPlanningWithFile); Assert.IsNotNull(loadedPlanningMemory.GetDays()); File.Delete(path); Assert.AreEqual(index, p.currentDayIndex); }
public override string GetJson(AbstractPlanning p) { if (p.weeks == null) { if (AbstractPlanning.LOG_SAVE) { Console.WriteLine("Getting json mode : Saving"); } p.weeks = new List <IWeek>(); var allDays = p.GetDays(); // Console.WriteLine("Days to save : " + allDays.Count); var dayIndex = 0; for (int i = 0; i < p.GetWeekCount(); i++) { var days = new List <AbstractDay>(); for (int j = 0; j < 7 && dayIndex < allDays.Count; j++) { days.Add(allDays[dayIndex]); dayIndex++; } // If the week is not complete, fill it with empty days p.weeks.Add(new IWeek(days)); } } else { Console.WriteLine("Getting json mode : Loading"); var allDays = p.GetDays(); if (allDays == null) { p.SetContent(p.weeks); } } return(JsonConvert.SerializeObject(p, Formatting.Indented, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto })); }
// Inherit constructor public ConsoleRoadmap(AbstractPlanning p) : base(p) { }