public static Researcher.Researcher[] fetchBasicResearcherDetails()
        {
            MySqlDataReader rdr = null;
            List <Researcher.Researcher> researcherList = new List <Researcher.Researcher>();

            GetConnection();

            try
            {
                // Open the connection
                conn.Open();

                // 1. Instantiate a new command with a query and connection
                MySqlCommand cmd = new MySqlCommand("select id, given_name, family_name, level, title from researcher", conn);

                // 2. Call Execute reader to get query results
                rdr = cmd.ExecuteReader();

                // print the CategoryName of each record
                while (rdr.Read())
                {
                    //This illustrates how the raw data can be obtained using an indexer [] or a particular data type can be obtained using a GetTYPENAME() method.
                    //Console.WriteLine("{0} {1}", rdr[0], rdr.GetString(1));
                    var enumerated            = rdr[3] != DBNull.Value ? rdr.GetString(3) : "Student";
                    Researcher.Researcher res = new Researcher.Researcher {
                        GivenName = rdr.GetString(1), FamilyName = rdr.GetString(2), ID = rdr.GetInt32(0), Title = rdr.GetString(4), level = (Researcher.EmploymentLevel)Enum.Parse(typeof(Researcher.EmploymentLevel), enumerated)
                    };
                    res.positions = new List <Researcher.Position>();
                    //https://stackoverflow.com/questions/20547261/database-field-enum-to-c-sharp-list
                    Researcher.Position pos = new Researcher.Position {
                        level = (Researcher.EmploymentLevel)Enum.Parse(typeof(Researcher.EmploymentLevel), enumerated)
                    };
                    res.positions.Add(pos);
                    //Employee e = new Employee { Name = combined, ID = rdr.GetInt32(2) };
                    researcherList.Add(res);
                }
            }
            finally
            {
                // close the reader
                if (rdr != null)
                {
                    rdr.Close();
                }

                // Close the connection
                if (conn != null)
                {
                    conn.Close();
                }
            }
            return(researcherList.ToArray());
        }
        public static Researcher.Publication[] fetchBasicPublicationDetails(Researcher.Researcher r)
        {
            int researcherID = r.ID;

            //Fetch Positions
            MySqlDataReader rdr = null;

            GetConnection();
            List <Researcher.Publication> publication = new List <Researcher.Publication>();

            try
            {
                // Open the connection
                conn.Open();

                // 1. Instantiate a new command with a query and connection
                MySqlCommand cmd = new MySqlCommand("select publication.title, publication.year, publication.DOI from researcher_publication join publication on researcher_publication.doi = publication.doi where researcher_publication.researcher_id = " + researcherID + " order by year DESC, title;", conn);

                // 2. Call Execute reader to get query results
                rdr = cmd.ExecuteReader();

                // print the CategoryName of each record
                while (rdr.Read())
                {
                    //This illustrates how the raw data can be obtained using an indexer [] or a particular data type can be obtained using a GetTYPENAME() method.
                    //Console.WriteLine("{0} {1}", rdr[0], rdr.GetString(1));
                    //https://stackoverflow.com/questions/20547261/database-field-enum-to-c-sharp-list
                    publication.Add(new Researcher.Publication {
                        Title = rdr.GetString(0), Year = rdr.GetInt32(1), DOI = rdr.GetString(2)
                    });
                }
            }
            finally
            {
                // close the reader
                if (rdr != null)
                {
                    rdr.Close();
                }

                // Close the connection
                if (conn != null)
                {
                    conn.Close();
                }
            }
            return(publication.ToArray());
        }
        public static List <int[]> cumulativeCounts(Researcher.Researcher researcher)
        {
            int id = researcher.ID;

            int currentyear = 0;

            List <int[]>    cumulativeCount             = new List <int[]>();
            MySqlDataReader rdr                         = null;
            List <Researcher.Researcher> researcherList = new List <Researcher.Researcher>();

            GetConnection();

            try
            {
                // Open the connection
                conn.Open();

                // 1. Instantiate a new command with a query and connection
                MySqlCommand cmd = new MySqlCommand("select publication.year from researcher_publication join publication on researcher_publication.doi = publication.doi where researcher_publication.researcher_id = " + id + " order by year;", conn);

                // 2. Call Execute reader to get query results
                rdr = cmd.ExecuteReader();

                // print the CategoryName of each record
                while (rdr.Read())
                {
                    //This illustrates how the raw data can be obtained using an indexer [] or a particular data type can be obtained using a GetTYPENAME() method.
                    //Console.WriteLine("{0} {1}", rdr[0], rdr.GetString(1));
                    if (currentyear == 0)
                    {
                        currentyear = rdr.GetInt32(0);
                        cumulativeCount.Add(new int[] { currentyear, 1 });
                    }
                    else
                    {
                        currentyear = rdr.GetInt32(0);
                        if (currentyear == cumulativeCount.LastOrDefault()[0])
                        {
                            cumulativeCount.LastOrDefault()[1] += 1;
                        }
                        else
                        {
                            cumulativeCount.Add(new int[] { currentyear, 1 });
                        }
                    }
                }
            }
            finally
            {
                // close the reader
                if (rdr != null)
                {
                    rdr.Close();
                }

                // Close the connection
                if (conn != null)
                {
                    conn.Close();
                }
            }
            return(cumulativeCount);
        }
 public Researcher.Publication[] loadPublicationsFor(Researcher.Researcher r)
 {
     return(Adapters.ERDAdapter.fetchBasicPublicationDetails(r));
 }
 public void loadPublications(Researcher.Researcher r)
 {
     mainList    = new List <Researcher.Publication>(loadPublicationsFor(r));
     displayList = new ObservableCollection <Researcher.Publication>(mainList);
 }