private static int SortCoursesByLength(Course x, Course y)
 {
     if (x.NumberOfBlocks > y.NumberOfBlocks)
         return -1;
     if (x.NumberOfBlocks < y.NumberOfBlocks)
         return +1;
     return 0;
 }
        public TimetableData(Block[] blocks, Course[] courses, Lecturer[] lecturers, Room[] rooms, Group[] groups)
            : base()
        {
            this.Blocks = blocks;
            this.Courses = courses;
            this.Lecturers = lecturers;
            this.Rooms = rooms;
            this.Groups = groups;

            Array.Sort(courses, SortCoursesByLength);
        }
        private static void Export(short[, ,] dataToExport, Block[] blocks, Course[] courses, string title, string filePath)
        {
            //output[col,row]
            string[,] output = new string[dataToExport.GetLength(1) + 1, dataToExport.GetLength(2) + 2];

            //Day/Block-frame for the data
            output[0, 0] = title;
            for (int day = 0; day < dataToExport.GetLength(1); day++)
            {
                output[day + 1, 1] = Enum.GetName(typeof(DayOfWeek), day + 1);
            }
            for (int block = 0; block < dataToExport.GetLength(2); block++)
            {
                output[0, block] = blocks[block].Start.ToShortTimeString() + " - " + blocks[block].End.ToShortTimeString();
            }

            //data
            for (int column = 1; column < dataToExport.GetLength(1) + 1; column++)
            {
                for (int row = 2; row < dataToExport.GetLength(2) + 2; row++)
                {

                }
            }

            //string[][] output = new string[][]{  
            //        new string[]{"Col 1 Row 1", "Col 2 Row 1", "Col 3 Row 1"},  
            //        new string[]{"Col1 Row 2", "Col2 Row 2", "Col3 Row 2"}  
            //    };


            StringBuilder sb = new StringBuilder();
            for (int column = 0; column < output.GetLength(0); column++)
            {
                for (int row = 0; row < output.GetLength(1); row++)
                {
                    sb.Append("," + output[column, row]);
                }
                sb.AppendLine();
                //sb.AppendLine(string.Join(",", output[column]));
            }
            File.WriteAllText(filePath, sb.ToString());
        }
        private static void AppendCourses(Course[] courses, StringBuilder output)
        {
            Dictionary<Course, short> coursesDict = new Dictionary<Course, short>();
            foreach (Course c in courses)
            {
                Course listedCourse = null;
                if (coursesDict.Keys.Count > 0)
                {
                    foreach (Course k in coursesDict.Keys)
                    {
                        if (k.Id.Equals(c.Id))
                        {
                            listedCourse = k;
                            break;
                        }
                    }
                }
                if (listedCourse == null)
                    coursesDict.Add(c, 1);
                else
                    coursesDict[listedCourse]++;
            }

            output.Append("<courses>");
            foreach (Course c in coursesDict.Keys)
            {
                output.Append("<course cId=\"" + c.Id + "\"");
                output.Append(" gId=\"" + c.Group.Id + "\"");
                output.Append(" repeatsPerWeek=\"" + coursesDict[c] + "\"");
                output.Append(" numberOfBlocks=\"" + c.NumberOfBlocks + "\"");
                output.Append(" needsLab=\"" + c.NeedsLab + "\"");
                output.Append(" name=\"" + c.Name + "\"");
                output.Append(" isDummy=\"" + c.IsDummy + "\"");
                if (c.RoomPreference != null)
                    output.Append(" roomPreference=\"" + c.RoomPreference + "\"");
                for (int i = 0; i < c.Lecturers.Length; i++)
                {
                    output.Append(" lId" + i + "=\"" + c.Lecturers[i].Id + "\"");
                }
                output.Append("/>");
            }
            output.Append("</courses>");
        }
 private void AddCourses(CourseController CourseContext, Course[] courses)
 {
     foreach (Course course in courses)
     {
         bool isListed = false;
         foreach (Course storedCourse in CourseContext.Repetitions.Keys)
         {
             if (storedCourse.Id.Equals(course.Id))
             {
                 isListed = true;
                 CourseContext.Repetitions[storedCourse]++;
                 break;
             }
         }
         if (!isListed)
         {
             CourseContext.CourseList.Add(course);
             CourseContext.Repetitions.Add(course, 1);
         }
     }
 }
 internal Course[] GetCourseExportArray()
 {
     List<Course> cList = new List<Course>();
     foreach (var course in CourseList)
     {
         for (int i = 0; i < Repetitions[course]; i++)
         {
             Course c = new Course(course.Id, course.Name, course.Lecturers, course.RoomPreference,
                 course.Group, course.NeedsLab, course.IsDummy, course.NumberOfBlocks);
             cList.Add(c);
         }
     }
     return cList.ToArray();
 }
        public override void New()
        {
            if (!DataIsValid())
                return;

            Course newCourse = new Course();

            if (HasPreference)
                newCourse.RoomPreference = RoomPreferenceList[SelectedRoomPreferenceIndex];

            if (!HasSecondLecturer)
                newCourse.Lecturers = new Lecturer[] { LecturerList[SelectedLecturer1Index] };
            else if (SelectedLecturer2Index > 0)
                newCourse.Lecturers = new Lecturer[] { LecturerList[SelectedLecturer1Index], LecturerList[SelectedLecturer2Index] };

            newCourse.Group = GroupList[SelectedGroupIndex];
            newCourse.NumberOfBlocks = BlockCount;

            if (!Repetitions.ContainsKey(newCourse))
                Repetitions.Add(newCourse, RepetitionCount);

            newCourse.Name = CourseName;
            newCourse.Id = CourseId;

            newCourse.NeedsLab = NeedsLab;
            newCourse.IsDummy = IsDummy;

            CourseList.Add(newCourse);
        }