aboutsummaryrefslogtreecommitdiff
path: root/src/com.example.portfolio2/com/example/portfolio2/Database.java
blob: 6abaa545703579ee9f026e1d58096e035ddfd3de (plain)
  1. // SPDX-FileCopyrightText: 2025 Jonas Smedegaard <dr@jones.dk>
  2. // SPDX-FileCopyrightText: 2025 <Alexander Marthin Klemensen stud-marthin@ruc.dk>
  3. // SPDX-FileCopyrightText: 2025 <Ian Valentin Christensen stud-ianc@ruc.dk>
  4. // SPDX-FileCopyrightText: 2025 <Zahed Noos zahed@ruc.dk>
  5. // SPDX-License-Identifier: GPL-3.0-or-later
  6. package com.example.portfolio2;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. /// Bachelorizer - database model
  10. ///
  11. /// This model handles all interaction with the database.
  12. class Database {
  13. /// database singleton
  14. private MyDB db = new MyDB();
  15. /// default constructor
  16. // (declared explicitly only to silence javadoc)
  17. Database() { }
  18. /// clear the participation database at program launch
  19. void initialize() {
  20. clearParticipation();
  21. }
  22. /// resolve activity index from name
  23. ///
  24. /// @param name activity name
  25. /// @return index of activity as integer
  26. int getActivityIndeks(final String name) {
  27. if (name == null) {
  28. return -1;
  29. }
  30. ArrayList<String> result = db.query(
  31. "SELECT indeks FROM activity"
  32. + " WHERE name IS '" + name + "';",
  33. "indeks");
  34. return Integer.parseInt(result.getFirst());
  35. }
  36. /// insert activity into participation
  37. ///
  38. /// @param activityIndex index of activity
  39. void addParticipation(final int activityIndex) {
  40. db.cmd("INSERT INTO participation VALUES(123, "
  41. + activityIndex + ");");
  42. }
  43. /// list currently participating activities
  44. ///
  45. /// @param program programme name
  46. /// @return names of participating activities
  47. ArrayList<String> getParticipation(final String program) {
  48. return db.query(
  49. "SELECT name FROM participation p"
  50. + " INNER JOIN activity a ON p.indeks = a.indeks"
  51. + " WHERE program IS '" + program + "';",
  52. "name");
  53. }
  54. /// purge participation database
  55. void clearParticipation() {
  56. db.cmd("DELETE FROM participation");
  57. }
  58. /// list activities within a program
  59. ///
  60. /// @param program programme name
  61. /// @return names of contained activities
  62. ArrayList<String> selectProgram(final String program) {
  63. return db.query(
  64. "SELECT name FROM activity"
  65. + " WHERE program IS '" + program + "';",
  66. "name");
  67. }
  68. /// sum of ECTS points under the given category
  69. ///
  70. /// @param program programme name
  71. /// @return ECTS points as String
  72. String getSumEcts(final String program) {
  73. if (program == null) {
  74. return "0";
  75. }
  76. ArrayList<String> result = db.query(
  77. "SELECT SUM(activity.ects)"
  78. + " AS total_ects,student.name"
  79. + " FROM student LEFT OUTER JOIN participation"
  80. + " ON student.studid = participation.studid"
  81. + " INNER JOIN activity"
  82. + " ON participation.indeks = activity.indeks"
  83. + " WHERE program IS '" + program + "'"
  84. + " GROUP BY student.studid ;",
  85. "total_ects");
  86. if (result.isEmpty()) {
  87. return "0";
  88. }
  89. return result.getFirst();
  90. }
  91. /// list of available subject modules
  92. ///
  93. /// @return names of all subject modules as list of strings
  94. List<String> getAllSubjects() {
  95. return db.query(
  96. "SELECT DISTINCT program FROM activity"
  97. + " WHERE program NOT IN ("
  98. + " SELECT program from activity"
  99. + " WHERE name LIKE 'BP1 %')",
  100. "program");
  101. }
  102. /// list of available activities
  103. ///
  104. /// @return names of all activities as list of strings
  105. ArrayList<String> getAllActivities() {
  106. return db.query("SELECT name FROM activity;", "name");
  107. }
  108. }