package com.example.java_testverbesserung_kerschbaumer; import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotation.*; import model.DataStore; import java.io.IOException; import java.util.UUID; @WebServlet(name = "AbsencesServlet", value = "/AbsencesServlet") public class AbsencesServlet extends HttpServlet { private DataStore dataStore = DataStore.getInstance(); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("absences", dataStore.getPupilById(UUID.fromString(request.getParameter("pupils"))).getAbsences()); request.getRequestDispatcher("absences.jsp").forward(request, response); } } ///////////////////////////////////////////////////////////////// package com.example.java_testverbesserung_kerschbaumer; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; @ApplicationPath("/api") public class HelloApplication extends Application { } ///////////////////////////////////////////////////////////////// package com.example.java_testverbesserung_kerschbaumer; import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotation.*; import model.DataStore; import java.io.IOException; @WebServlet(name = "PupilsServlet", value = "/PupilsServlet") public class PupilsServlet extends HttpServlet { DataStore dataStore = DataStore.getInstance(); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("pupils", dataStore.getPupils()); request.getRequestDispatcher("pupils.jsp").forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } ///////////////////////////////////////////////////////////////// package common; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import model.Pupil; import java.util.Set; @Path("/importData") public interface IDataResource { @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Set importData(Set pupils); } ///////////////////////////////////////////////////////////////// package common; import jakarta.ws.rs.*; import jakarta.ws.rs.core.MediaType; import model.Absence; @Path("/pupil") public interface IPupilResource { @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Path("{pupil_id}/absence") public Absence addAbsence(@PathParam("pupil_id") String pupil_id, Absence absence); @GET @Consumes(MediaType.APPLICATION_JSON) @Path("{pupil_id}/absence/{absence_id}") public Absence getAbsenceByID(@PathParam("pupil_id") String pupil_id, @PathParam("absence_id") String absence_id); @PUT @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Path("{pupil_id}/absence/{absence_id}/excuse") public Absence excuseAbsence(@PathParam("pupil_id") String pupil_id, @PathParam("absence_id") String absence_id); } ///////////////////////////////////////////////////////////////// package model; import java.time.LocalDate; import java.util.UUID; public class Absence { private UUID id; private LocalDate from; private LocalDate to; private String reason; private boolean excused; public Absence() { id = UUID.randomUUID(); } public Absence(UUID id, LocalDate from, LocalDate to, String reason) { this.id = id; this.from = from; this.to = to; this.reason = reason; } public UUID getId() { return id; } public LocalDate getFrom() { return from; } public LocalDate getTo() { return to; } public String getReason() { return reason; } public boolean getExcused() { return excused; } public void setExcused(boolean excused) { this.excused = excused; } public void setFrom(LocalDate from) { this.from = from; } public void setTo(LocalDate to) { this.to = to; } public void setReason(String reason) { this.reason = reason; } } ///////////////////////////////////////////////////////////////// package model; import java.util.HashSet; import java.util.Optional; import java.util.Set; import java.util.UUID; public class DataStore { private static DataStore instance; private Set pupils = new HashSet<>(); private DataStore() {} public static DataStore getInstance() { if (instance == null) { instance = new DataStore(); } return instance; } public Set getPupils(){ return pupils; } public void setPupils(Set pupils) { this.pupils = pupils; } public Pupil getPupilById(UUID id) { for(Pupil p : pupils) { if(p.getId().equals(id)) { return p; } } return null; } } ///////////////////////////////////////////////////////////////// package model; import java.time.LocalDate; import java.util.HashSet; import java.util.Set; import java.util.UUID; public class Pupil { private UUID id; private String firstName; private String lastName; private LocalDate dateOfBirth; private String studentNumber; private Set absences = new HashSet<>(); public Pupil() { id = UUID.randomUUID(); } public Pupil(UUID id, String firstName, String lastName, LocalDate dateOfBirth, String studentNumber) { this.id = id; this.firstName = firstName; this.lastName = lastName; this.dateOfBirth = dateOfBirth; this.studentNumber = studentNumber; } public UUID getId() { return id; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public LocalDate getDateOfBirth() { return dateOfBirth; } public String getStudentNumber() { return studentNumber; } public Set getAbsences() { return absences; } public void setFirstName(String firstName) { this.firstName = firstName; } public void setLastName(String lastName) { this.lastName = lastName; } public void setDateOfBirth(LocalDate dateOfBirth) { this.dateOfBirth = dateOfBirth; } public void setStudentNumber(String studentNumber) { this.studentNumber = studentNumber; } public void setAbsences(Set absences) { this.absences = absences; } public Absence getAbsenceByID(UUID id) { for(Absence absence : absences) { if(absence.getId().equals(id)) { return absence; } } return null; } } ///////////////////////////////////////////////////////////////// import common.IDataResource; import model.DataStore; import model.Pupil; import java.util.Set; public class DataResource implements IDataResource { @Override public Set importData(Set pupils) { DataStore dataStore = DataStore.getInstance(); dataStore.setPupils(pupils); return dataStore.getPupils(); } } ///////////////////////////////////////////////////////////////// import common.IPupilResource; import model.Absence; import model.DataStore; import model.Pupil; import java.util.UUID; public class PupilResource implements IPupilResource { private DataStore dataStore = DataStore.getInstance(); @Override public Absence addAbsence(String pupil_id, Absence absence) { Pupil pupil = dataStore.getPupilById(UUID.fromString(pupil_id)); pupil.getAbsences().add(absence); return pupil.getAbsenceByID(absence.getId()); } @Override public Absence getAbsenceByID(String pupil_id, String absence_id) { Pupil pupil = dataStore.getPupilById(UUID.fromString(pupil_id)); return pupil.getAbsenceByID(UUID.fromString(absence_id)); } @Override public Absence excuseAbsence(String pupil_id, String absence_id) { Pupil pupil = dataStore.getPupilById(UUID.fromString(pupil_id)); pupil.getAbsenceByID(UUID.fromString(absence_id)).setExcused(true); return pupil.getAbsenceByID(UUID.fromString(absence_id)); } }