public void Setup()
        {
            var examplesFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "\\ExampleJson");
            FileIOPermission fileIoPermission = new FileIOPermission(FileIOPermissionAccess.Read, examplesFolder);
            fileIoPermission.Demand();

            var transcriptJson = File.ReadAllText(examplesFolder + "\\Transcript.json");
            transcript = JsonConvert.DeserializeObject<Transcript>(transcriptJson);

            var courseJson = File.ReadAllText(examplesFolder + "\\Course.json");
            course = JsonConvert.DeserializeObject<Course>(courseJson);

            var courseModulesJson = File.ReadAllText(examplesFolder + "\\CourseModules.json");
            course.CourseModules = JsonConvert.DeserializeObject<List<CourseModule>>(courseModulesJson);
        }
        public IHttpActionResult CourseData(string coursename)
        {
            Course course = new Course();
            String json = String.Empty;
            try
            {
                using (var webClient = new WebClient())
                {
                    json = webClient.DownloadString(string.Format(Constants.COURSE_DATA_URL, coursename));
                    course = JsonConvert.DeserializeObject<Course>(json);

                    NameValueCollection postData = new NameValueCollection() { { "courseId", coursename } };
                    byte[] responsebytes = webClient.UploadValues(Constants.COURSE_PAYLOAD_DATA_URL, postData);
                    json = Encoding.UTF8.GetString(responsebytes);
                    var coursePayload = JsonConvert.DeserializeObject<CoursePayload>(json);
                    course.SupportsWideScreenVideoFormats = coursePayload.SupportsWideScreenVideoFormats;

                    json = webClient.DownloadString(string.Format(Constants.COURSE_CONTENT_DATA_URL, coursename));
                    course.CourseModules = JsonConvert.DeserializeObject<List<CourseModule>>(json);

                    SetupAuthenticationCookie(webClient);
                    // TODO: check if the user has access to exercise files.
                    //json = webClient.DownloadString(string.Format(Constants.COURSE_EXERCISE_FILES_URL, coursename));
                    //course.ExerciseFiles = JsonConvert.DeserializeObject<ExerciseFiles>(json);

                    json = webClient.DownloadString(string.Format(Constants.COURSE_TRANSCRIPT_URL, coursename));
                    var transcript = JsonConvert.DeserializeObject<Transcript>(json);

                    course.CourseModules.ForEachWithIndex((module, moduleIndex) =>
                    {
                        module.Clips.ForEachWithIndex((clip, clipIndex) =>
                        {
                            clip.TranscriptClip = transcript.Modules[moduleIndex].Clips[clipIndex];
                        });
                    });
                }
            }
            catch (Exception exception)
            {
                return HandleException(exception);
            }

            return Ok(course);
        }