/// <summary> /// Import movie file. Filename has been provided in the constructor. /// </summary> public override void Import(object o) { // Initialise progress to zero for progress bar. Progress = 0f; ImportResult results = new ImportResult(); try { // Read file string fileData = null; using (StreamReader reader = File.OpenText(fileName)) { // Read file using ReadToEnd fileData = reader.ReadToEnd(); } string[] lines = fileData.Replace("\r\n", "\n").Replace("\r", "\n").Split('\n'); // To deal with Windows, Mac and Linux line endings the same. // Check if first line is column names. string firstLine = lines[0]; //receives first line of file import //Sets the first line of the lines array to blank to remove column headings in csv file string[] columns = firstLine.Split(','); string column1 = columns[0].ToLower().Trim(); string column2 = columns[1].ToLower().Trim(); if (columns.Length == 2 && column1.Equals("movieid") && column2.Equals("title")) { lines[0] = ""; } // Line count and line numbers to allow progress tracking. int lineCount = lines.Length; //for use by the progress bar int lineNum = 1; //for tracking importing and creating error messages // Get all movies. List <Movie> movies = DataLayer.DataLayer.GetAllMovies(); foreach (string line in lines) // Check whether we need to stop after importing each line. { if (Stop) { return; } // Just to make it slow enough to test stopping functionality. Thread.Sleep(500); // Update progress of import. try { //THIS WILL NEED MORE CODE AROUND PROGRESS UPDATE: STEP 25, PAGE 1-71 Progress = lineNum / lineCount; RaiseProgressChanged(); // Skip blank lines if (String.IsNullOrEmpty(line)) { continue; } else { results.TotalRows = results.TotalRows++; } // Break up line by commas, each item in array will be one column. columns = line.Split(','); if (columns.Length != 2) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: Wrong number of columns.", lineNum)); continue; } // Check the format of data, and update ImportResult accordingly. int movieID = 0; if (!int.TryParse(columns[0], out movieID)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: MovieID is not a number.", lineNum)); continue; } //Check that the title field contains a string string title = ""; title = columns[1].Trim(); if (String.IsNullOrEmpty(title)) { results.FailedRows = results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: Movie title is blank.", lineNum)); continue; } // Insert/update DB if okay. Movie movieToUpdate = movies.Where(m => m.MovieID == movieID).FirstOrDefault(); if (movieToUpdate == null) { Movie movieToAdd = new Movie() { MovieID = movieID, Title = title }; DataLayer.DataLayer.AddMovie(movieToAdd); } else { movieToUpdate.Title = title; DataLayer.DataLayer.UpdateMovie(movieToUpdate); } results.ImportedRows = results.ImportedRows++; //Successfully imported row } catch { results.ErrorMessages.Add(string.Format("Line {0}: Some unknown error within the foreach loop.", lineNum)); } finally { lineNum++; } } } catch (IOException) { results.ErrorMessages.Add(String.Format("An Input/Output error has occurred.")); } catch (Exception) { results.ErrorMessages.Add(String.Format("A general exception has occurred. Program better bozo!")); } finally { RaiseCompleted(results); } }
/// <summary> /// Import session file. Filename has been provided in the constructor. /// </summary> public override void Import(object o) { // Initialise progress to zero for progress bar. Progress = 0f; ImportResult results = new ImportResult(); try { // Read file string fileData = null; using (StreamReader reader = File.OpenText(fileName)) { fileData = reader.ReadToEnd(); } string[] lines = fileData.Replace("\r\n", "\n").Replace("\r", "\n").Split('\n'); // To deal with Windows, Mac and Linux line endings the same. // Check if first line is column names. string firstLine = lines[0]; string[] columns = firstLine.Split(','); if (columns.Length == 4) { if (columns[0].Trim().ToLower() == "sessionid" && columns[1].Trim().ToLower() == "movieid" && columns[2].Trim().ToLower() == "sessiondate" && columns[3].Trim().ToLower() == "cinemanumber") { lines[0] = ""; } } // Line count and line numbers to allow progress tracking. int lineCount = lines.Length; int lineNum = 1; // Get all movies. These will be used to check that MovieIDs are valid. List <Movie> movies = DataLayer.DataLayer.GetAllMovies(); foreach (string line in lines) { // Check whether we need to stop after importing each line. if (Stop) { return; } try { // Just to make it slow enough to testing stopping functionality. Thread.Sleep(500); // Update progress of import. Progress = lineNum / lineCount; RaiseProgressChanged(); // Skip blank lines if (line == "") { continue; } results.TotalRows++; // Break up line by commas, each item in array will be one column. columns = line.Split(','); if (columns.Length != 4) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: Wrong number of columns.", lineNum)); continue; } // Check the format of data, and update ImportResult accordingly. // Check session ID. int sessionID = 0; if (!int.TryParse(columns[0].Trim(), out sessionID)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: SessionID is not a number.", lineNum)); continue; } // Check movie ID. int movieID = 0; if (!int.TryParse(columns[1].Trim(), out movieID)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: MovieID is not a number.", lineNum)); continue; } if (movies.Count(m => m.MovieID == movieID) < 1) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: MovieID not found in movie database.", lineNum)); continue; } // Check session date/time. DateTime sessionDate = DateTime.MinValue; if (!DateTime.TryParse(columns[2].Trim(), out sessionDate)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line{0}: Session date is not a date/time.", lineNum)); continue; } // Check cinema number. byte cinemaNumber; if (!byte.TryParse(columns[3].Trim(), out cinemaNumber)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line{0}: Cinema number is not a byte.", lineNum)); continue; } if (!((int)cinemaNumber >= 1)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line{0}: Cinema number cannot be less than 1.", lineNum)); continue; } // Insert/update DB if okay. Session sessionToUpdate = DataLayer.DataLayer.GetSessionByID(sessionID); if (sessionToUpdate == null) { Session sessionToAdd = new Session() { SessionID = sessionID, MovieID = movieID, SessionDate = sessionDate, CinemaNumber = cinemaNumber }; DataLayer.DataLayer.AddSession(sessionToAdd); } else { sessionToUpdate.MovieID = movieID; sessionToUpdate.SessionDate = sessionDate; sessionToUpdate.CinemaNumber = cinemaNumber; DataLayer.DataLayer.UpdateSession(sessionToUpdate); } results.ImportedRows++; } catch (System.Data.Common.DbException dbEx) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: Database error occurred updating data.", lineNum)); } finally { lineNum++; } } } catch (System.IO.IOException) { results.ErrorMessages.Add("Error occurred opening file. Please check that the file exists and that you have permissions to open it."); } catch (Exception) { results.ErrorMessages.Add("An unknown error occurred during importing."); } finally { // Do callback to end import. RaiseCompleted(results); } }
/// <summary> /// Import movie file. Filename has been provided in the constructor. /// </summary> public override void Import(object o) { ImportResult results = new ImportResult(); Progress = 0;// Initialise progress to zero for progress bar. try { // Read file string fileData = null; using (StreamReader reader = File.OpenText(fileName)) { // Read file using ReadToEnd String line = reader.ReadToEnd(); } string[] lines = fileData.Replace("\r\n", "\n").Replace("\r", "\n").Split('\n'); // To deal with Windows, Mac and Linux line endings the same. // Check if first line is column names. String firstLine = lines[0]; String[] columns = firstLine.Split(','); if (columns.Length != 2) { lines[0] = ""; } // Line count and line numbers to allow progress tracking. int lineCount; lineCount = lines.Length; int lineNum = 1; List <Movie> movies = DataLayer.DataLayer.GetAllMovies(); // Get all movies. foreach (string line in lines) { try { // Check whether we need to stop after importing each line. if (Stop) { return; } // Just to make it slow enough to test stopping functionality. Thread.Sleep(500); // Update progress of import. Progress = Progress / lineCount; RaiseProgressChanged(); // Skip blank lines if (line.Equals(null)) { continue; } if (line != null) { results.TotalRows++; } // Break up line by commas, each item in array will be one column. columns = line.Split(','); if (columns.Length != 2) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: Wrong number of columns.", lineNum)); continue; } // Check the format of data, and update ImportResult accordingly. int movieID = 0; if (!int.TryParse(columns[0], out movieID)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: MovieID is not a number.", lineNum)); continue; } String title; title = columns.ToString(); title = title.Trim(); if (title == null) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: title is empty", lineNum)); continue; } // Insert/update DB if okay. Movie movieToUpdate = movies.Where(m => m.movieId == movieID).FirstOrDefault(); if (movieToUpdate == null) { Movie movieToAdd = new Movie(); //{ // SetMovieId(movieID), title = title //}; movieToAdd.SetMovieId(movieID); movieToAdd.SetTitle(title); DataLayer.DataLayer.AddMovie(movieToAdd); } else { movieToUpdate.SetTitle(title); movieToUpdate.SetMovieId(movieID); // movieToUpdate title = title; DataLayer.DataLayer.UpdateMovie(movieToUpdate); } results.ImportedRows++; } finally { lineNum++; } } } catch (System.IO.IOException ex) { results.ErrorMessages.Add("format expection"); Console.WriteLine(ex); results.FailedRows++; } catch (Exception e) { Console.WriteLine(e); results.FailedRows++; // results.ErrorMessages.Add("Exception occurred "); } finally { RaiseCompleted(results); } }
/// <summary> /// Import movie file. Filename has been provided in the constructor. /// </summary> public override void Import(object o) { // Initialise progress to zero for progress bar. Progress = 0f; ImportResult results = new ImportResult(); try { // Read file string fileData = null; using (StreamReader reader = File.OpenText(fileName)) { fileData = reader.ReadToEnd(); } string[] lines = fileData.Replace("\r\n", "\n").Replace("\r", "\n").Split('\n'); // To deal with Windows, Mac and Linux line endings the same. // Check if first line is column names. string firstLine = lines[0]; string[] columns = firstLine.Split(','); if (columns.Length == 2) { if (columns[0].Trim().ToLower() == "movieid" && columns[1].Trim().ToLower() == "title") { lines[0] = ""; } } // Line count and line numbers to allow progress tracking. int lineCount = lines.Length; int lineNum = 1; // Get all movies. List <Movie> movies = DataLayer.DataLayer.GetAllMovies(); foreach (string line in lines) { // Check whether we need to stop after importing each line. if (Stop) { return; } // Just to make it slow enough to test stopping functionality. Thread.Sleep(500); // Update progress of import. try { Progress = lineNum / lineCount; RaiseProgressChanged(); // Skip blank lines if (line == "") { continue; } results.TotalRows++; // Break up line by commas, each item in array will be one column. columns = line.Split(','); if (columns.Length != 2) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: Wrong number of columns.", lineNum)); continue; } // Check the format of data, and update ImportResult accordingly. int movieID = 0; if (!int.TryParse(columns[0], out movieID)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: MovieID is not a number.", lineNum)); continue; } string title = columns[1].Trim(); if (title == "") { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: Title is empty.", lineNum)); continue; } // Insert/update DB if okay. Movie movieToUpdate = movies.Where(m => m.MovieID == movieID).FirstOrDefault(); if (movieToUpdate == null) { Movie movieToAdd = new Movie() { MovieID = movieID, Title = title }; DataLayer.DataLayer.AddMovie(movieToAdd); } else { movieToUpdate.Title = title; DataLayer.DataLayer.UpdateMovie(movieToUpdate); } results.ImportedRows++; } finally { lineNum++; } } } catch (IOException ioe) { results.ErrorMessages.Add("Input/Output error occurred."); } catch (Exception e) { results.ErrorMessages.Add("Unknown occurred."); } finally { RaiseCompleted(results); } }
/// <summary> /// Import session file. Filename has been provided in the constructor. /// </summary> public override void Import(object o) { // Initialise progress to zero for progress bar. Progress = 0f; ImportResult results = new ImportResult(); try { // Read file string fileData = null; using (StreamReader reader = File.OpenText(fileName)) { fileData = reader.ReadToEnd(); } string[] lines = fileData.Replace("\r\n", "\n").Replace("\r", "\n").Split('\n'); // To deal with Windows, Mac and Linux line endings the same. String firstLine = lines[0]; String[] columns = firstLine.Split(','); if (columns.Length != 4) { lines[0] = ""; } // Check if first line is column names. // Line count and line numbers to allow progress tracking. int lineCount = lines.Length; int lineNum = 1; foreach (string line in lines) { // Check whether we need to stop after importing each line. if (Stop) { return; } try { // Just to make it slow enough to testing stopping functionality. Thread.Sleep(500); // Update progress of import. Progress = Progress / lineCount; RaiseProgressChanged(); // Skip blank lines if (line.Equals(null)) { continue; } if (line != null) { results.TotalRows++; } // Break up line by commas, each item in array will be one column. columns = line.Split(','); // Check the format of data, and update ImportResult accordingly. // Check session ID. int sessionID = 0; if (!int.TryParse(columns[0].Trim(), out sessionID)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: sessionid is not a number.", lineNum)); continue; } // Check cinema number. byte cinemaNumber = 0; if (!byte.TryParse(columns[3].Trim(), out cinemaNumber)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: cinemanumber is not a number.", lineNum)); continue; } // Check session date/time. DateTime sessionDate = DateTime.MinValue; if (!DateTime.TryParse(columns[2].Trim(), out sessionDate)) { results.FailedRows++; results.ErrorMessages.Add(string.Format("Line{0}: Session date is not a date/time", lineNum)); continue; } int.TryParse(columns[1], out int movieID); // Insert/update DB if okay. // int movieID = columns[1].Trim(); Session sessionToUpdate; sessionToUpdate = DataLayer.DataLayer.GetSessionByID(sessionID); if (sessionToUpdate.Equals(null)) { Session sessionToAdd = new Session(); sessionToAdd.SetMovieId(movieID); sessionToAdd.SetSessionDate(sessionDate); sessionToAdd.SetSessionId(sessionID); sessionToAdd.SetCinemaNumber(cinemaNumber); DataLayer.DataLayer.AddSession(sessionToAdd); } else { //update session // sessionToUpdate. = title; sessionToUpdate.SetMovieId(movieID); sessionToUpdate.SetSessionDate(sessionDate); sessionToUpdate.SetSessionId(sessionID); sessionToUpdate.SetCinemaNumber(cinemaNumber); DataLayer.DataLayer.UpdateSession(sessionToUpdate); } results.ImportedRows++; } catch (DbException dbx) { Console.WriteLine(dbx); results.FailedRows++; results.ErrorMessages.Add(string.Format("Line {0}: Database error occurred updating data.", lineNum)); } finally { lineNum++; } } } catch (System.IO.IOException) { results.ErrorMessages.Add("Error occurred opening file. Please check that the file exists and that you have permissions to open it."); } catch (Exception) { results.ErrorMessages.Add("An unknown error occurred during importing."); } finally { // Do callback to end import. RaiseCompleted(results); } }
public CompletedEventArgs(ImportResult result) { Result = result; }