/////////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);
     }
 }
Пример #3
0
        }                                                                                          //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;
            }
        }
Пример #4
0
        //////////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);
        }
Пример #6
0
        // 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);
        }
Пример #7
0
        // 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);
        }
Пример #8
0
 // Fetch list of researcher's publications from database.
 public static List <string> fetchPublicationList(Model.Researcher r)
 {
     return(null);
 }
Пример #9
0
        /// <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);
        }
Пример #10
0
        /// <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);
        }