/////////Methods///////// /// <summary> /// Loads all publications for a given researcher /// </summary> /// <param name="researcher">The researcher whose publications are being loaded</param> /// <returns>A list of basic publications</returns> public List <Model.Publication> LoadPublicationsFor(Model.Researcher researcher) { //set variables for current researcher currentResearcher = researcher; //return the basic publication details return(Database.ERDAdapter.fetchBasicPublicationDetails(researcher)); }
/// <summary> /// User selects a researcher from the list /// </summary> private void ResearcherListView_DisplayBox_SelectedIndexChanged(object sender, System.EventArgs e) { //Display the details of the selected researcher if (ResearcherListView_DisplayBox.SelectedIndex != -1) { Model.Researcher researcher = ResearcherListView_DisplayBox.SelectedItem as Model.Researcher; controller.LoadResearcherDetails(researcher); } }
} //Current Window //////////Methods////////////// /// <summary> /// Adds the details of a given researcher to the view /// </summary> /// <param name="researcher">The researhcer details being added to the screen</param> public void SetDetails(Model.Researcher researcher) { //add data to text boxes ResearcherDetailsView_Name_Value.Text = researcher.GivenName + " " + researcher.FamilyName; ResearcherDetailsView_Title_Value.Text = researcher.Title; ResearcherDetailsView_Unit_Value.Text = researcher.School; ResearcherDetailsView_Campus_Value.Text = researcher.Campus; ResearcherDetailsView_Email_Value.Text = researcher.Email; ResearcherDetailsView_CurrentJob_Value.Text = researcher.CurrentJobTitle(); ResearcherDetailsView_ComInst_Value.Text = researcher.GetEarliestJob().Start.ToString("dd/MM/yyyy"); ResearcherDetailsView_ComPos_Value.Text = researcher.GetCurrentJob().Start.ToString("dd/MM/yyyy"); ResearcherDetailsView_Tenure_Value.Text = researcher.Tenure().ToString() + " years"; ResearcherDetailsView_Publications_Value.Text = researcher.PublicationsCount().ToString(); ResearcherDetailsView_ProfileImage.Source = new BitmapImage(researcher.Photo); PublicationsListView.PublicationsListView_Display_Box.ItemsSource = new ObservableCollection <Model.Publication>(researcher.Publications); //Staff only details if (researcher.Type == "Staff") { int count = 0; //Supervised students count Model.Staff staffCast = (Model.Staff)researcher; //Current researcher object //Get count of supervised students foreach (Model.Student i in staffCast.Supervisions) { count++; } ResearcherDetailsView_3YAv_Value.Text = staffCast.ThreeYearAverage().ToString(); ResearcherDetailsView_Supervisions_Value.Text = count.ToString(); Window.SupervisionsListView.SupervisionsListView_Display_Box.ItemsSource = new ObservableCollection <Model.Researcher>(staffCast.Supervisions as List <Model.Student>); ResearcherDetailsView_Performance_Value.Text = staffCast.Performance().ToString() + "%"; ResearcherDetailsView_PrevPos_Data.ItemsSource = researcher.Positions; //Reset any set student details ResearcherDetailsView_Degree_Value.Text = ""; ResearcherDetailsView_Supervisor_Value.Text = ""; } //Students only details else { Model.Student stundetCast = (Model.Student)researcher; //Current researcher object ResearcherDetailsView_Degree_Value.Text = stundetCast.Degree; ResearcherDetailsView_Supervisor_Value.Text = stundetCast.SupervisorName; //Reset any set staff details ResearcherDetailsView_3YAv_Value.Text = ""; ResearcherDetailsView_Supervisions_Value.Text = ""; Window.SupervisionsListView.SupervisionsListView_Display_Box.ItemsSource = new ObservableCollection <Model.Researcher>(); ResearcherDetailsView_Performance_Value.Text = ""; ResearcherDetailsView_PrevPos_Data.ItemsSource = null; } }
//////////Methods////////////// /// <summary> /// Loads the culmulative publication counts per year for a given researcher /// </summary> /// <param name="researcher">The researhcer the counts are being calculated for</param> public void LoadCumulativeCount(Model.Researcher researcher) { //Calculate the counts researcher.calPubPerYear(); //Get the count for each year and create a list out of those value List <KeyValuePair <string, int> > data = researcher.CumulativeCount.ToList(); //Add list to view CumulativeCountView_Display_Data.ItemsSource = data; }
/// <summary> /// Loads full researcher details /// </summary> /// <param name="researcher">A researcher object with basic details</param> public void LoadResearcherDetails(Model.Researcher researcher) { //Get full details Model.Researcher details = Database.ERDAdapter.FetchFullResearcherDetails(researcher.ID, Reseachers); //Get publications details.Publications = pubController.LoadPublicationsFor(details); pubController.CurrentListCopy = details.Publications; //Adds details to view Window.ResearcherDetailView.SetDetails(details); Window.ResearcherDetailView.ActivatePubList(); Window.CumulativeCountView.LoadCumulativeCount(details); }
// Fetch list of researchers from database. //TODO: public static List <Model.Researcher> fetchResearcherList() { MySqlCommand cmd = new MySqlCommand("SELECT * FROM researcher", conn); MySqlDataReader rdr = null; rdr = cmd.ExecuteReader(); List <Model.Researcher> researchers = new List <Model.Researcher>(); while (rdr.Read()) { Model.Staff staff; Model.Student student; Model.Researcher researcher = new Model.Researcher { Id = rdr.GetInt32(rdr.GetOrdinal("id")), FirstName = rdr.GetString(rdr.GetOrdinal("given_name")), LastName = rdr.GetString(rdr.GetOrdinal("family_name")), Title = rdr.GetString(rdr.GetOrdinal("title")), Email = rdr.GetString(rdr.GetOrdinal("title")), Photo = new Uri(rdr.GetString(rdr.GetOrdinal("photo"))), StartInstitution = rdr.GetDateTime(rdr.GetOrdinal("utas_start")), StartCurrentJob = rdr.GetDateTime(rdr.GetOrdinal("current_start")) }; switch (rdr.GetString(rdr.GetOrdinal("type"))) { case "Staff": staff = (Model.Staff)researcher; staff.Level = (EmploymentLevel)Enum.Parse( typeof(EmploymentLevel), rdr.GetString(rdr.GetOrdinal("level"))); break; case "Student": student = (Model.Student)researcher; student.Degree = rdr.GetString(rdr.GetOrdinal("degree")); student.SupervisorId = rdr.GetInt32(rdr.GetOrdinal("supervisor_id")); break; default: break; } } return(null); }
// Fetch all of researcher's publications from database. public static List <Model.Publication> fetchPublications(Model.Researcher r) { MySqlCommand cmd = new MySqlCommand("SELECT * FROM publication" + "WHERE doi=" + "(" + "SELECT doi FROM researcher_publication" + "WHERE id=?id" + ")", conn); cmd.Parameters.AddWithValue("id", r.Id); MySqlDataReader rdr = null; rdr = cmd.ExecuteReader(); List <Model.Publication> publications = new List <Model.Publication>(); while (rdr.Read()) { // Add publication from database to list publications.Add(new Model.Publication { Doi = rdr.GetString(rdr.GetOrdinal("doi")), Title = rdr.GetString(rdr.GetOrdinal("title")), //PublicationDate = rdr.GetDateTime(rdr.GetOrdinal("publication_date")), PublicationDate = new DateTime(rdr.GetInt32((rdr.GetOrdinal("year"))), 0, 0), Type = (PublicationType)Enum.Parse( typeof(PublicationType), rdr.GetString(rdr.GetOrdinal("type"))), CiteAs = rdr.GetString(rdr.GetOrdinal("cite_as")), AvailabilityDate = rdr.GetDateTime(rdr.GetOrdinal("available")) }); } return(publications); }
// Fetch list of researcher's publications from database. public static List <string> fetchPublicationList(Model.Researcher r) { return(null); }
/// <summary> /// returns basic publication details for a researcher /// </summary> /// <param name="researcher"></param> /// <returns>A list of publications</returns> public static List <Model.Publication> fetchBasicPublicationDetails(Model.Researcher researcher) { int id = researcher.ID; List <Model.Publication> publications = new List <Model.Publication>(); List <string> dois = new List <string>(); MySqlDataReader rdr = null; GetConnection(); try { //Open Database connection db_conn.Open(); //Create command, including database connection MySqlCommand cmd = new MySqlCommand("SELECT doi FROM researcher_publication WHERE researcher_id=?id", db_conn); //get the ids of the publications for the researcher cmd.Parameters.AddWithValue("id", id); rdr = cmd.ExecuteReader(); while (rdr.Read()) { dois.Add(rdr.GetString(0)); } } //Catch any database errors catch (MySqlException e) { Console.WriteLine("Error: Cannot connect to database " + e); } //Close data reader finally { if (rdr != null) { rdr.Close(); } if (db_conn != null) { db_conn.Close(); } } //for each id, fetch the basic publication details foreach (string doi in dois) { try { //Open Database connection db_conn.Open(); //Create command, including database connection MySqlCommand cmd = new MySqlCommand("SELECT title, year FROM publication WHERE doi = ?doi", db_conn); cmd.Parameters.AddWithValue("doi", doi); rdr = cmd.ExecuteReader(); while (rdr.Read()) { publications.Add(new Model.Publication { DOI = doi, Title = rdr.GetString(0), Year = new DateTime(rdr.GetInt32(1), 1, 1)//rdr.GetDateTime(1) }); } rdr.Close(); } //Catch any database errors catch (MySqlException e) { Console.WriteLine("Error: Cannot connect to database " + e); } //Close data reader finally { if (rdr != null) { rdr.Close(); } if (db_conn != null) { db_conn.Close(); } } } //sort publications list publications = new List <Model.Publication>(from Model.Publication p in publications orderby p.Year descending, p.Title ascending select p); return(publications); }
/// <summary> /// <para>Gets the details of a given researcher from the database</para> /// <para>Used to populate the Researcher Details View</para> /// </summary> /// <param name="id">The database ID number of the given researcher</param> /// <returns>A complete researcher object</returns> public static Model.Researcher FetchFullResearcherDetails(int id, List <Model.Researcher> researchers) { Model.Researcher researcher = null; //Researcher data object being returned MySqlDataReader rdr = null; //MySQL data reader GetConnection(); try { //Open database connection db_conn.Open(); //Create command, including database connection MySqlCommand cmd = new MySqlCommand("SELECT * FROM researcher WHERE id=?id", db_conn); cmd.Parameters.AddWithValue("id", id); //Get query results rdr = cmd.ExecuteReader(); //Add resulting object to Researcher object while (rdr.Read()) { switch (rdr.GetString(1)) { case "Student": Model.Student student = new Model.Student { ID = rdr.GetInt32(0), Type = rdr.GetString(1), GivenName = rdr.GetString(2), FamilyName = rdr.GetString(3), Title = rdr.GetString(4), School = rdr.GetString(5), Campus = rdr.GetString(6), Email = rdr.GetString(7), Photo = new Uri(rdr.GetString(8), UriKind.Absolute), Degree = rdr.GetString(9), Supervisor = rdr.GetInt32(10) }; student.Publications = new List <Model.Publication>(); student.Positions = new List <Model.Position>(); student.Positions.Add(new Model.Position { Level = Model.EmploymentLevel.Student, Start = rdr.GetDateTime(12), End = default(DateTime) }); //Get supervisor foreach (Model.Researcher i in researchers) { if (student.Supervisor == i.ID) { student.SupervisorName = i.FamilyName + ", " + i.GivenName + " (" + i.Title + ")"; } } researcher = student; break; case "Staff": //Get any supervisions the staff member List <Model.Student> supervisions = new List <Model.Student>(); foreach (Model.Researcher i in researchers) { if (i.Type == "Student") { Model.Student studentCast = (Model.Student)i; if (rdr.GetInt32(0) == studentCast.Supervisor) { supervisions.Add(studentCast); } } } researcher = new Model.Staff { ID = rdr.GetInt32(0), Type = rdr.GetString(1), GivenName = rdr.GetString(2), FamilyName = rdr.GetString(3), Title = rdr.GetString(4), School = rdr.GetString(5), Campus = rdr.GetString(6), Email = rdr.GetString(7), Photo = new Uri(rdr.GetString(8), UriKind.Absolute), Supervisions = new List <Model.Student>(supervisions), }; researcher.Publications = new List <Model.Publication>(); break; } } } //Catch any database errors catch (MySqlException e) { Console.WriteLine("Error: Cannot connect to database " + e); } //Close database connection and data reader finally { if (rdr != null) { rdr.Close(); } if (db_conn != null) { db_conn.Close(); } } //Get any previous positions that staff members have held if (researcher.Type != "Student") { researcher.Positions = FetchPositions(researcher.ID); } return(researcher); }