using System; using System.Collections.Generic; using Orienteering.Standard; namespace Orienteering.Data { public class Stage { private int number; private DateTime startTime; private string organizer, mapPath; private Orienteering.Data.Competition competition; public Stage() { } public Stage(int _number, string _organizer, Competition _comp) { number = _number; organizer = _organizer; competition = _comp; } public DateTime StartTime { get { return startTime; } set { startTime = value; } } public string MapPath { get { return mapPath; } set { mapPath = value; } } public string Organizer { get { return organizer; } set { organizer = value; } } public int Number { get { return number; } set { number = value; } } public Competition Competition { get { return competition; } set { competition = value; } } public void AddCourse(Course course, DataBase dataBase) { if (dataBase.db.Query(delegate(Course cour) { return cour.Stage == this && course.Name == cour.Name; }).Count == 0) { dataBase.db.Set(course); } else throw new AlreadyExists(); } public void AddObject(Object obj, DataBase dataBase) { if (dataBase.db.Query(delegate(Object o) { return o.Stage == this && obj.Number == o.Number && o.GetType() == obj.GetType(); }).Count == 0) { dataBase.db.Set(obj); } else { throw new AlreadyExists(); } } public List Objects(DataBase dataBase) { return new List( dataBase.db.Query( delegate(Object obj) { return obj.Stage == this; } ) ); } public List Courses(DataBase dataBase) { return new List( dataBase.db.Query( delegate(Course course) { return course.Stage == this; } ) ); } public List Categories(DataBase dataBase) { return new List( dataBase.db.Query( delegate(Category category) { return category.Course.Stage == this; } ) ); } public Course Course(string name, DataBase dataBase) { IList res = dataBase.db.Query( delegate(Course course) { return course.Name == name && course.Stage == this; } ); if (res.Count == 0) throw new DoesntExist(); else return res[0]; } public Start Start(int num, DataBase dataBase) { IList res = dataBase.db.Query( delegate(Start start) { return start.Number == num && start.Stage == this; } ); if (res.Count == 0) throw new DoesntExist(); else return res[0]; } public Control Control(int num, DataBase dataBase) { IList res = dataBase.db.Query( delegate(Control control) { return control.Number == num && control.Stage == this; } ); if (res.Count == 0) throw new DoesntExist(); else return res[0]; } public Finish Finish(int num, DataBase dataBase) { IList res = dataBase.db.Query( delegate(Finish finish) { return finish.Number == num && finish.Stage == this; } ); if (res.Count == 0) throw new DoesntExist(); else return res[0]; } public List Starts(DataBase dataBase) { return new List( dataBase.db.Query( delegate(Start start) { return start.Stage == this; } ) ); } public List Finishes(DataBase dataBase) { return new List( dataBase.db.Query( delegate(Finish finish) { return finish.Stage == this; } ) ); } public List Controls(DataBase dataBase) { return new List( dataBase.db.Query( delegate(Control control) { return control.Stage == this; } ) ); } public void Save(DataBase dataBase) { dataBase.db.Set(this); } } }