diff --git a/.idea/jpa-buddy.xml b/.idea/jpa-buddy.xml new file mode 100644 index 0000000000000000000000000000000000000000..9309f17bc69a469c4570e95743915df691951916 --- /dev/null +++ b/.idea/jpa-buddy.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="JpaBuddyIdeaProjectConfig" ddlActionDbType="maria"> + <option name="defaultUnitInitialized" value="true" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000000000000000000000000000000000000..280ac52a8cee8757263389e9302e00be8445d5be --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="AutoImportSettings"> + <option name="autoReloadType" value="SELECTIVE" /> + </component> + <component name="ChangeListManager"> + <list default="true" id="0d616560-06e0-45af-8dd9-ccab83963a0f" name="Changes" comment="Hibernate ORM for DB"> + <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/Application.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/Application.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/classes/Course.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/classes/Course.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/classes/CoursesOfStudy.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/classes/CoursesOfStudy.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/classes/Enrollment.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/classes/Enrollment.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/classes/Lecturer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/classes/Lecturer.java" afterDir="false" /> + </list> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="FileTemplateManagerImpl"> + <option name="RECENT_TEMPLATES"> + <list> + <option value="Class" /> + </list> + </option> + </component> + <component name="Git.Settings"> + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> + </component> + <component name="JpbToolWindowState"> + <option name="myId2FirstActivated"> + <map> + <entry key="com.haulmont.jpb.jpaInspector" value="true" /> + <entry key="com.haulmont.jpb.jpaPalette" value="true" /> + <entry key="com.haulmont.jpb.jpaStructure" value="true" /> + </map> + </option> + <option name="myId2Visible"> + <map> + <entry key="com.haulmont.jpb.jpaInspector" value="false" /> + <entry key="com.haulmont.jpb.jpaPalette" value="false" /> + <entry key="com.haulmont.jpb.jpaStructure" value="false" /> + </map> + </option> + </component> + <component name="MarkdownSettingsMigration"> + <option name="stateVersion" value="1" /> + </component> + <component name="ProblemsViewState"> + <option name="selectedTabId" value="CurrentFile" /> + </component> + <component name="ProjectId" id="2AA7EXVwC9qbqrXYGnaxyK7xE03" /> + <component name="ProjectLevelVcsManager" settingsEditedManually="true"> + <ConfirmationsSetting value="2" id="Add" /> + </component> + <component name="ProjectViewState"> + <option name="hideEmptyMiddlePackages" value="true" /> + <option name="showLibraryContents" value="true" /> + </component> + <component name="PropertiesComponent">{ + "keyToString": { + "ASKED_ADD_EXTERNAL_FILES": "true", + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "SHARE_PROJECT_CONFIGURATION_FILES": "true", + "project.structure.last.edited": "Modules", + "project.structure.proportion": "0.15", + "project.structure.side.proportion": "0.2", + "settings.editor.selected.configurable": "DBNavigator.Project.ConnectionSettings" + } +}</component> + <component name="RecentsManager"> + <key name="MoveFile.RECENT_KEYS"> + <recent name="C:\Users\tayfu\IdeaProjects\jpa-hibernate\src\main" /> + </key> + </component> + <component name="RunManager"> + <configuration name="Application" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> + <option name="MAIN_CLASS_NAME" value="Application" /> + <module name="jpa-hibernate" /> + <method v="2"> + <option name="Make" enabled="true" /> + </method> + </configuration> + <recent_temporary> + <list> + <item itemvalue="Application.Application" /> + </list> + </recent_temporary> + </component> + <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="0d616560-06e0-45af-8dd9-ccab83963a0f" name="Changes" comment="" /> + <created>1654440427551</created> + <option name="number" value="Default" /> + <option name="presentableId" value="Default" /> + <updated>1654440427551</updated> + </task> + <task id="LOCAL-00001" summary="Hibernate ORM for DB"> + <created>1655210036433</created> + <option name="number" value="00001" /> + <option name="presentableId" value="LOCAL-00001" /> + <option name="project" value="LOCAL" /> + <updated>1655210036433</updated> + </task> + <option name="localTasksCounter" value="2" /> + <servers /> + </component> + <component name="Vcs.Log.Tabs.Properties"> + <option name="TAB_STATES"> + <map> + <entry key="MAIN"> + <value> + <State /> + </value> + </entry> + </map> + </option> + </component> + <component name="VcsManagerConfiguration"> + <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" /> + <MESSAGE value="Hibernate ORM for DB" /> + <option name="LAST_COMMIT_MESSAGE" value="Hibernate ORM for DB" /> + </component> +</project> \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5c3206ebc3a60fda94fcb762d64c46e218cff4dc..711806cd1f5d3541b18a2b6a8a23c73134d218a8 100644 --- a/pom.xml +++ b/pom.xml @@ -1,17 +1,20 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +<<<<<<< pom.xml xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> - <artifactId>GradeManager_GUI</artifactId> + <artifactId>GradeManager</artifactId> <version>1.0-SNAPSHOT</version> - <name>GradeManager_GUI</name> + <name>GradeManager</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>5.8.2</junit.version> + <maven.compiler.source>18</maven.compiler.source> + <maven.compiler.target>18</maven.compiler.target> </properties> <dependencies> <dependency> @@ -37,6 +40,27 @@ <version>${junit.version}</version> <scope>test</scope> </dependency> + + <dependency> + <groupId>jakarta.persistence</groupId> + <artifactId>jakarta.persistence-api</artifactId> + <version>3.1.0</version> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-core-jakarta</artifactId> + <version>5.6.8.Final</version> + </dependency> + <dependency> + <groupId>org.glassfish.jaxb</groupId> + <artifactId>jaxb-runtime</artifactId> + <version>3.0.2</version> + </dependency> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>8.0.29</version> + </dependency> </dependencies> <build> @@ -72,9 +96,4 @@ </executions> </plugin> </plugins> - </build> - - - - -</project> \ No newline at end of file + </build> \ No newline at end of file diff --git a/src/main/Application.java b/src/main/Application.java new file mode 100644 index 0000000000000000000000000000000000000000..9241b496e60edaf8fbdfd3afaac5128fff6c217e --- /dev/null +++ b/src/main/Application.java @@ -0,0 +1,37 @@ +import classes.*; +import enumeration.*; + +import java.time.Duration; + +/** + * Defines the entry point of the Java application. + */ +public class Application +{ + private static JpaService jpaService = JpaService.getInstance(); + + public static void main(String[] args) + { + try + { + jpaService.runInTransaction(entityManager -> { + // name, semester, courseType, sws, ects, examType, isCredited + //entityManager.persist(new Course("Numerische Methoden", Semester.SIXTH.getSemester(), CourseType.REQUIRED.getCourseType(), 4, 5, ExamType.WRITTEN.getExamType(), null)); + //entityManager.persist(new Course("Echtzeitsysteme", Semester.SIXTH.getSemester(), CourseType.REQUIRED.getCourseType(), 4, 5, ExamType.WRITTEN.getExamType(), null)); + //entityManager.persist(new Course("Digitale Signalverarbeitung", Semester.SIXTH.getSemester(), CourseType.REQUIRED.getCourseType(), 4, 5, ExamType.WRITTEN.getExamType(), null)); + //int id, String name, String degree, int duration, int fees, String fieldOfStudy + CoursesOfStudy coursesOfStudy = new CoursesOfStudy("Angewandte Informatik", Degree.BACHELOR_OF_SCIENCE.getDegree(), 7, 62, FieldOfStudy.B_ACS_EMBEDDED_SYSTEMS.getFieldOfStudy()); + + coursesOfStudy.addCourse(new Course("Systemprogrammierung", Semester.SIXTH.getSemester(), CourseType.REQUIRED.getCourseType(), 4, 5, ExamType.WRITTEN.getExamType(), null)); + + entityManager.persist(coursesOfStudy); + + return null; + }); + } + finally + { + jpaService.closeResource(); + } + } +} \ No newline at end of file diff --git a/src/main/JpaService.java b/src/main/JpaService.java new file mode 100644 index 0000000000000000000000000000000000000000..18e432b8d52bbee5fbc2d73c5d45509b19c70b4b --- /dev/null +++ b/src/main/JpaService.java @@ -0,0 +1,76 @@ +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.EntityTransaction; +import jakarta.persistence.Persistence; +import java.util.function.Function; + +/** + * A singleton implementation that encapsulates the JPA logic. + * You can configure the database connection in the + * {@link /src/main/resources/META-INF/persistence.xml} file. + */ +public class JpaService +{ + private static JpaService instance; + private EntityManagerFactory entityManagerFactory; + + private JpaService() + { + entityManagerFactory = Persistence.createEntityManagerFactory("jpa-hibernate-notenmanager"); + } + + public static synchronized JpaService getInstance() + { + return instance == null ? instance = new JpaService() : instance; + } + + public void closeResource() + { + if(entityManagerFactory != null) + { + entityManagerFactory.close(); + } + } + + public EntityManagerFactory getEntityManagerFactory() + { + return entityManagerFactory; + } + + /** + * Runs the specified function inside a transaction boundary. The function has + * access to a ready to use {@link EntityManager} and can return any type of + * value ({@code T}). + * + * @param function The function to run. + * @param <T> The function's return type. + * @return the value returned by the specified function. + */ + public <T> T runInTransaction(Function <EntityManager, T> function) + { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + EntityTransaction entityTransaction = entityManager.getTransaction(); + boolean isPersisted = false; + + entityTransaction.begin(); + + try + { + T returnValue = function.apply(entityManager); + isPersisted = true; + + return returnValue; + } + finally + { + if(isPersisted) + { + entityTransaction.commit(); + } + else + { + entityTransaction.rollback(); + } + } + } +} diff --git a/src/main/abstractClasses/UniversityMember.java b/src/main/abstractClasses/UniversityMember.java new file mode 100644 index 0000000000000000000000000000000000000000..e66139bc83a1966a8b5580df81c78879191ee2eb --- /dev/null +++ b/src/main/abstractClasses/UniversityMember.java @@ -0,0 +1,164 @@ +package abstractClasses; + +import enumeration.Gender; +import jakarta.persistence.*; + +import java.util.Objects; + +@MappedSuperclass +@Table(name = "Hochschulmitglied") +public abstract class UniversityMember +{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private int id; + + @Column(name = "Geschlecht") + private String gender; + + @Column(name = "Vorname") + private String firstName; + + @Column(name = "Nachname") + private String lastName; + + @Column(name = "Wohnort") + private String placeOfResidence; + + @Column(name = "Geburtsort") + private String birthPlace; + + @Column(name = "Hochschul E-Mail") + private String officialEmail; + + @Column(name = "Private E-Mail") + private String privateEmail; + + @Column(name = "Angemeldet") + private Boolean isSignedUpForCourse; + + protected UniversityMember() + { + + } + + protected UniversityMember(int id, String gender, String firstName, String lastName, String placeOfResidence, String birthPlace, + String officialEmail, String privateEmail, Boolean isSignedUpForCourse) + { + this.id = id; + this.gender = gender; + this.firstName = firstName; + this.lastName = lastName; + this.placeOfResidence = placeOfResidence; + this.birthPlace = birthPlace; + this.officialEmail = officialEmail; + this.privateEmail = privateEmail; + this.isSignedUpForCourse = isSignedUpForCourse; + } + + @Override + public boolean equals(Object o) + { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + UniversityMember that = (UniversityMember) o; + return id == that.id; + } + + @Override + public int hashCode() + { + return Objects.hash(id); + } + + public int getId() + { + return id; + } + + public void setId(int id) + { + this.id = id; + } + + public String getGender() + { + return gender; + } + + public void setGender(String gender) + { + this.gender = gender; + } + + public String getFirstName() + { + return firstName; + } + + public void setFirstName(String firstName) + { + this.firstName = firstName; + } + + public String getLastName() + { + return lastName; + } + + public void setLastName(String lastName) + { + this.lastName = lastName; + } + + public String getPlaceOfResidence() + { + return placeOfResidence; + } + + public void setPlaceOfResidence(String placeOfResidence) + { + this.placeOfResidence = placeOfResidence; + } + + public String getBirthPlace() + { + return birthPlace; + } + + public void setBirthPlace(String birthPlace) + { + this.birthPlace = birthPlace; + } + + public String getOfficialEmail() + { + return officialEmail; + } + + public void setOfficialEmail(String officialEmail) + { + this.officialEmail = officialEmail; + } + + public String getPrivateEmail() + { + return privateEmail; + } + + public void setPrivateEmail(String privateEmail) + { + this.privateEmail = privateEmail; + } + + public Boolean getSignedUpForCourse() + { + return isSignedUpForCourse; + } + + public void setSignedUpForCourse(Boolean signedUpForCourse) + { + isSignedUpForCourse = signedUpForCourse; + } +} diff --git a/src/main/classes/Course.java b/src/main/classes/Course.java new file mode 100644 index 0000000000000000000000000000000000000000..d44236f44f0b9ced8b8b95517bf8e971c323ea17 --- /dev/null +++ b/src/main/classes/Course.java @@ -0,0 +1,154 @@ +package classes; + +import jakarta.persistence.*; +import java.util.Objects; + +@Entity +@Table(name = "Kurs") +public class Course +{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private int id; + + @Column(name = "Name") + private String name; + + @Column(name = "Semester") + private int semester; + + @Column(name = "Typ") + private String courseType; + + @Column(name = "SWS") + private int sws; + + @Column(name = "ECTS") + private double ects; + + @Column(name = "Prüfungstyp") + private String examType; + + @Column(name = "Anrechnung") + private Boolean isCredited; + + @ManyToOne(fetch = FetchType.LAZY) + private CoursesOfStudy coursesOfStudy; + + public Course() + { + + } + + public Course(String name, int semester, String courseType, int sws, double ects, String examType, Boolean isCredited) + { + this.name = name; + this.semester = semester; + this.courseType = courseType; + this.sws = sws; + this.ects = ects; + this.examType = examType; + this.isCredited = isCredited; + } + + @Override + public boolean equals(Object o) + { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Course course = (Course) o; + return id == course.id; + } + + @Override + public int hashCode() + { + return Objects.hash(id); + } + + public int getId() + { + return id; + } + + public void setId(int id) + { + this.id = id; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public int getSemester() + { + return semester; + } + + public void setSemester(int semester) + { + this.semester = semester; + } + + public String getCourseType() + { + return courseType; + } + + public void setCourseType(String courseType) + { + this.courseType = courseType; + } + + public int getSws() + { + return sws; + } + + public void setSws(int sws) + { + this.sws = sws; + } + + public double getEcts() + { + return ects; + } + + public void setEcts(double ects) + { + this.ects = ects; + } + + public String getExamType() + { + return examType; + } + + public void setExamType(String examType) + { + this.examType = examType; + } + + public Boolean isCredited() + { + return isCredited; + } + + public void setCredited(Boolean credited) + { + isCredited = credited; + } + + public void setCoursesOfStudy(CoursesOfStudy coursesOfStudy) + { + this.coursesOfStudy = coursesOfStudy; + } +} diff --git a/src/main/classes/CoursesOfStudy.java b/src/main/classes/CoursesOfStudy.java new file mode 100644 index 0000000000000000000000000000000000000000..5d160765897cd856aa85479431b985f4b8b2b905 --- /dev/null +++ b/src/main/classes/CoursesOfStudy.java @@ -0,0 +1,153 @@ +package classes; + +import jakarta.persistence.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@Entity +@Table(name = "Studiengang") +public class CoursesOfStudy +{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private int id; + + @Column(name = "Name") + private String name; + + @Column(name = "Abschluss") + private String degree; + + @Column(name = "Dauer") + private int duration; + + @Column(name = "Studiengebühr") + private int fees; + + @Column(name = "Schwerpunkt") + private String fieldOfStudy; + + @OneToMany( + mappedBy = "coursesOfStudy", + cascade = CascadeType.ALL, + orphanRemoval = true + ) + private List<Course> courses = new ArrayList<>(); + @ManyToOne + @JoinColumn(name = "courses_of_study_id") + private CoursesOfStudy coursesOfStudy; + + public CoursesOfStudy getCoursesOfStudy() { + return coursesOfStudy; + } + + /* + @ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "courses_of_study_id") + private CoursesOfStudy coursesOfStudy; + */ + + public CoursesOfStudy() + { + + } + + public CoursesOfStudy(String name, String degree, int duration, int fees, String fieldOfStudy) + { + this.name = name; + this.degree = degree; + this.duration = duration; + this.fees = fees; + this.fieldOfStudy = fieldOfStudy; + } + + @Override + public boolean equals(Object o) + { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CoursesOfStudy that = (CoursesOfStudy) o; + return id == that.id; + } + + @Override + public int hashCode() + { + return Objects.hash(id); + } + + public int getId() + { + return id; + } + + public void setId(int id) + { + this.id = id; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getDegree() + { + return degree; + } + + public void setDegree(String degree) + { + this.degree = degree; + } + + public int getDuration() + { + return duration; + } + + public void setDuration(int duration) + { + this.duration = duration; + } + + public int getFees() + { + return fees; + } + + public void setFees(int fees) + { + this.fees = fees; + } + + public String getFieldOfStudy() + { + return fieldOfStudy; + } + + public void setFieldOfStudy(String fieldOfStudy) + { + this.fieldOfStudy = fieldOfStudy; + } + + public void addCourse(Course course) + { + courses.add(course); + course.setCoursesOfStudy(this); + } + + public void removeCourse(Course course) + { + courses.remove(course); + course.setCoursesOfStudy(null); + } +} diff --git a/src/main/classes/Enrollment.java b/src/main/classes/Enrollment.java new file mode 100644 index 0000000000000000000000000000000000000000..64f7c8911f6d1ab096459f8df4ad79ebe533e21a --- /dev/null +++ b/src/main/classes/Enrollment.java @@ -0,0 +1,96 @@ +package classes; + +import jakarta.persistence.*; + +import java.time.LocalDateTime; +import java.util.Objects; + +@Entity +@Table(name = "Kursanmeldung") +public class Enrollment +{ + @Id + @Column(name = "ID") + private int id; + + @ManyToOne + @JoinColumn(name = "Matrikelnummer") + Student student; + + @ManyToOne + @JoinColumn(name = "Kursnummer") + Course course; + + @Column(name = "Datum der Anmeldung") + private LocalDateTime enrollmentDate; + + @Column(name = "Note") + private double grade; + + public Enrollment() + { + + } + + public Enrollment(Student student, Course course, LocalDateTime enrollmentDate) + { + this.student = student; + this.course = course; + this.enrollmentDate = enrollmentDate; + } + + @Override + public boolean equals(Object o) + { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Enrollment that = (Enrollment) o; + return student == that.student && course == that.course; + } + + @Override + public int hashCode() + { + return Objects.hash(student, course); + } + + public Student getStudent() + { + return student; + } + + public void setStudent(Student student) + { + this.student = student; + } + + public Course getCourse() + { + return course; + } + + public void setCourse(Course course) + { + this.course = course; + } + + public LocalDateTime getEnrollmentDate() + { + return enrollmentDate; + } + + public void setEnrollmentDate(LocalDateTime enrollmentDate) + { + this.enrollmentDate = enrollmentDate; + } + + public double getGrade() + { + return grade; + } + + public void setGrade(double grade) + { + this.grade = grade; + } +} diff --git a/src/main/classes/Lecturer.java b/src/main/classes/Lecturer.java new file mode 100644 index 0000000000000000000000000000000000000000..f067a1f2be916338d44b495753cdc8b66b23242d --- /dev/null +++ b/src/main/classes/Lecturer.java @@ -0,0 +1,37 @@ +package classes; + +import abstractClasses.UniversityMember; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "Dozent") +public class Lecturer extends UniversityMember +{ + @Column(name = "Fakultaet") + String faculty; + + public Lecturer() + { + + } + + public Lecturer(int id, String gender, String firstName, String lastName, String placeOfResidence, String birthPlace, + String officialEmail, String privateEmail, Boolean isSignedUpForCourse, String faculty) + { + super(id, gender, firstName, lastName, placeOfResidence, birthPlace, + officialEmail, privateEmail, isSignedUpForCourse); + this.faculty = faculty; + } + + public String getFaculty() + { + return faculty; + } + + public void setFaculty(String faculty) + { + this.faculty = faculty; + } +} diff --git a/src/main/classes/Student.java b/src/main/classes/Student.java new file mode 100644 index 0000000000000000000000000000000000000000..e3f3775430b019fd01f95f694217024748d20040 --- /dev/null +++ b/src/main/classes/Student.java @@ -0,0 +1,82 @@ +package classes; + +import abstractClasses.UniversityMember; +import interfaces.Calculable; +import jakarta.persistence.*; + +import java.util.Set; + +@Entity +@Table(name = "Student") +public class Student extends UniversityMember implements Calculable +{ + @Column(name = "Status") + private String status; + + @Column(name = "Gebühren bezahlt") + private boolean paidFees; + + @Column(name = "Semester") + private int semester; + + @OneToMany(mappedBy = "student") + Set<Enrollment> enrollments; + + public Student() + { + + } + + public Student(int id, String gender, String firstName, String lastName, String placeOfResidence, String birthPlace, + String officialEmail, String privateEmail, Boolean isSignedUpForCourse, String status, + boolean paidFess, int semester) + { + super(id, gender, firstName, lastName, placeOfResidence, birthPlace, + officialEmail, privateEmail, isSignedUpForCourse); + this.status = status; + this.paidFees = paidFess; + this.semester = semester; + } + + @Override + public double calculateAverage() + { + return 0; + } + + @Override + public int calculateMedian() + { + return 0; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public boolean isPaidFees() + { + return paidFees; + } + + public void setPaidFees(boolean paidFees) + { + this.paidFees = paidFees; + } + + public int getSemester() + { + return semester; + } + + public void setSemester(int semester) + { + this.semester = semester; + } +} \ No newline at end of file diff --git a/src/main/enumeration/CourseType.java b/src/main/enumeration/CourseType.java new file mode 100644 index 0000000000000000000000000000000000000000..a38e51e4630f464eca70ec43d2c04c166519cfe1 --- /dev/null +++ b/src/main/enumeration/CourseType.java @@ -0,0 +1,22 @@ +package enumeration; + +public enum CourseType +{ + COMPULSORY("FWP"), + ELECTIVE("AWP"), + PLV("PLV"), + REQUIRED("Required"), + VOLUNTARY("Voluntary"); + + private String courseType; + + private CourseType(String courseType) + { + this.courseType = courseType; + } + + public String getCourseType() + { + return courseType; + } +} diff --git a/src/main/enumeration/Degree.java b/src/main/enumeration/Degree.java new file mode 100644 index 0000000000000000000000000000000000000000..6325147084e0970b864f707292fbfbfc0ed1a985 --- /dev/null +++ b/src/main/enumeration/Degree.java @@ -0,0 +1,23 @@ +package enumeration; + +public enum Degree +{ + BACHELOR_OF_ARTS("B.A."), + BACHELOR_OF_ENGINEERING("B.Eng."), + BACHELOR_OF_SCIENCE("B.Sc."), + MASTER_OF_ARTS("M.A."), + MASTER_OF_ENGINEERING("M.Eng."), + MASTER_OF_SCIENCE("M.Sc."); + + private String degree; + + private Degree(String degree) + { + this.degree = degree; + } + + public String getDegree() + { + return degree; + } +} diff --git a/src/main/enumeration/ExamType.java b/src/main/enumeration/ExamType.java new file mode 100644 index 0000000000000000000000000000000000000000..13627e62f3d6c7b7e323e57e327077e5ad63c7ad --- /dev/null +++ b/src/main/enumeration/ExamType.java @@ -0,0 +1,25 @@ +package enumeration; + +public enum ExamType +{ + BACHELOR_THESIS("BA"), + INTERNSHIP("Pr"), + MASTER_THESIS("MA"), + ORAL("mdlP"), + PERFORMANCE_RECORD("LN"), + PROOF_OF_PARTICIPATION("TN"), + RESEARCH_PROJECT("PStA"), + WRITTEN("schrP"); + + private String examType; + + private ExamType(String examType) + { + this.examType = examType; + } + + public String getExamType() + { + return examType; + } +} diff --git a/src/main/enumeration/FieldOfStudy.java b/src/main/enumeration/FieldOfStudy.java new file mode 100644 index 0000000000000000000000000000000000000000..c24baf737c395f9f8f140f0236c995d8387c9f10 --- /dev/null +++ b/src/main/enumeration/FieldOfStudy.java @@ -0,0 +1,19 @@ +package enumeration; + +public enum FieldOfStudy +{ + B_ACS_EMBEDDED_SYSTEMS("Embedded Systems"), + B_ACS_MOBILE_AND_SPATIAL_SYSTEMS("Mobile and Spatial Systems"); + + private String fieldOfStudy; + + private FieldOfStudy(String fieldOfStudy) + { + this.fieldOfStudy = fieldOfStudy; + } + + public String getFieldOfStudy() + { + return fieldOfStudy; + } +} diff --git a/src/main/enumeration/Gender.java b/src/main/enumeration/Gender.java new file mode 100644 index 0000000000000000000000000000000000000000..6ff2250cbd5356250a0ce59a405be26ca23a1a9a --- /dev/null +++ b/src/main/enumeration/Gender.java @@ -0,0 +1,20 @@ +package enumeration; + +public enum Gender +{ + MALE("Male"), + FEMALE("Female"), + OTHER("Other"); + + private String gender; + + private Gender(String gender) + { + this.gender = gender; + } + + public String getGender() + { + return gender; + } +} diff --git a/src/main/enumeration/Mark.java b/src/main/enumeration/Mark.java new file mode 100644 index 0000000000000000000000000000000000000000..677a033fa2007a84b00ced4e11ffb9d4449c50d5 --- /dev/null +++ b/src/main/enumeration/Mark.java @@ -0,0 +1,30 @@ +package enumeration; + +public enum Mark +{ + EINS_NULL(1.0), + EINS_DREI(1.3), + EINS_SIEBEN(1.7), + ZWEI_NULL(2.0), + ZWEI_DREI(2.3), + ZWEI_SIEBEN(2.7), + DREI_NULL(3.0), + DREI_DREI(3.3), + DREI_SIEBEN(3.7), + VIER_NULL(4.0), + FUENF_NULL(5.0), + SECHS_NULL(6.0), + SIEBEN_NULL(7.0); + + private double mark; + + Mark(double mark) + { + this.mark = mark; + } + + public double getMark() + { + return mark; + } +} diff --git a/src/main/enumeration/Semester.java b/src/main/enumeration/Semester.java new file mode 100644 index 0000000000000000000000000000000000000000..864f22a346fff34e9e2ce3e95ffe6124d7cea735 --- /dev/null +++ b/src/main/enumeration/Semester.java @@ -0,0 +1,31 @@ +package enumeration; + +public enum Semester +{ + FIRST(1), + SECOND(2), + THIRD(3), // Regelstudienzeit Master + FOURTH(4), + FIFTH(5), // Erstmaliges Ablegen der Masterarbeit; nur ein weiterer Versuch erlaubt + SIXTH(6), // max. Anzahl an Master-Semester; bis hier: ohne Corona + SEVENTH(7), // Regelstudienzeit Bachelor // M: WS 2021/22 + EIGHTH(8), // M: SS 2021 + NINTH(9), // Erstmaliges Ablegen der Bachelorarbeit; nur ein weiterer Versuch erlaubt // M: WS 2020/21 + TENTH(10), // max. Anzahl an Bachelor-Semester; bis hier: ohne Corona // M: vor und zum SS 2020 + ELEVENTH(11), // B: WS 2021/22 + TWELFTH(12), // B: SS 2021 + THIRTEENTH(13), // B: WS 2020/21 + FOURTEENTH(14); // B: vor und zum SS 2020 + + private final int semester; + + private Semester(final int semester) + { + this.semester = semester; + } + + public int getSemester() + { + return semester; + } +} diff --git a/src/main/enumeration/Status.java b/src/main/enumeration/Status.java new file mode 100644 index 0000000000000000000000000000000000000000..a56370cd8b802ec3573d91f77dc239274fee81b9 --- /dev/null +++ b/src/main/enumeration/Status.java @@ -0,0 +1,20 @@ +package enumeration; + +public enum Status +{ + ENROLLED("Enrolled"), + WITHDRAWAL("Withdrawing"), + DISMISSAL("Dismissed"); + + private String status; + + private Status(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } +} diff --git a/src/main/interfaces/Calculable.java b/src/main/interfaces/Calculable.java new file mode 100644 index 0000000000000000000000000000000000000000..e49ea804341396b0a478ec3b98855ade8e059ca8 --- /dev/null +++ b/src/main/interfaces/Calculable.java @@ -0,0 +1,7 @@ +package interfaces; + +public interface Calculable +{ + double calculateAverage(); + int calculateMedian(); +} diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000000000000000000000000000000000000..1593f7f5fbdc503a774fa8db817a57b499f52b28 --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,14 @@ +<persistence xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" + version="2.0"> + <persistence-unit name="jpa-hibernate-notenmanager" transaction-type="RESOURCE_LOCAL"> + <properties> + <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/notenmanager"/> + <property name="jakarta.persistence.jdbc.user" value="root"/> + <property name="jakarta.persistence.jdbc.password" value=""/> + <property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create"/> + </properties> + </persistence-unit> +</persistence> +