Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import com.example.roommate.annotations.ApplicationService;
import com.example.roommate.application.data.RoomApplicationData;
import com.example.roommate.controller.HomeController;
import com.example.roommate.domain.services.UserDomainService;
import com.example.roommate.exceptions.domainService.GeneralDomainException;
import com.example.roommate.interfaces.entities.IUser;
import com.example.roommate.interfaces.entities.IWorkspace;
import com.example.roommate.utility.IterableSupport;
import com.example.roommate.values.domainValues.BookedTimeframe;
import com.example.roommate.values.domainValues.DayTimeFrame;
import com.example.roommate.values.domainValues.IntermediateBookDataForm;
import com.example.roommate.values.domainValues.ItemName;
import com.example.roommate.domain.services.RoomDomainService;
Expand All @@ -16,6 +18,7 @@
import com.example.roommate.interfaces.entities.IRoom;
import com.example.roommate.values.forms.KeyMasterForm;
import com.example.roommate.values.models.RoomBookingModel;
import com.example.roommate.values.models.RoomHomeModel;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -26,6 +29,9 @@
import java.time.format.DateTimeFormatter;
import java.time.LocalDate;
import java.time.DayOfWeek;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

@ApplicationService
@SuppressFBWarnings(value="EI2", justification="RoomDomainService is properly injected")
Expand All @@ -41,8 +47,18 @@ public BookingApplicationService(RoomDomainService roomDomainService, UserDomain

}

public static List<String> getItemsOfWorkspace(IWorkspace workspace) {
return workspace.getItems().stream().map(ItemName::type).collect(Collectors.toList());
}

public static List<ItemName> convertToItemNameList(List<String> gegenstaende) {
return gegenstaende.stream()
.map(ItemName::new)
.toList();
}

@PostConstruct
public void initialize(){
public void initialize() {
roomDomainService.addDummyDummy();
}
public void addBookEntry(IntermediateBookDataForm form, String userHandle) throws NotFoundException, GeneralDomainException {
Expand All @@ -52,14 +68,13 @@ public void addBookEntry(IntermediateBookDataForm form, String userHandle) throw

List<BookedTimeframe> bookedTimeframes = IterableSupport.toList(form.bookingDays().toBookedTimeframes(userHandle));

try{
try {
for (BookedTimeframe bookedTimeframe : bookedTimeframes) {
roomDomainService.addBooking(bookedTimeframe,workspaceId,roomId);
roomDomainService.addBooking(bookedTimeframe, workspaceId, roomId);
}
if(bookedTimeframes.isEmpty())
if (bookedTimeframes.isEmpty())
throw new GeneralDomainException();
}
catch (NotFoundRepositoryException e){
} catch (NotFoundRepositoryException e) {

throw new NotFoundException();
}
Expand All @@ -75,7 +90,7 @@ public Collection<IRoom> getRooms() {

public void addRoom(IRoom room) throws NotFoundException {
roomDomainService.addRoom(new RoomApplicationData(room.getRoomID(), room.getRoomNumber()));
if(!IterableSupport.toList(room.getWorkspaces()).isEmpty())
if (!IterableSupport.toList(room.getWorkspaces()).isEmpty())
for (IWorkspace workspace : room.getWorkspaces()) {
try {
roomDomainService.addWorkspace(room, workspace);
Expand All @@ -85,14 +100,14 @@ public void addRoom(IRoom room) throws NotFoundException {
}
}

public IRoom findRoomByID(UUID roomID) throws NotFoundException{
public IRoom findRoomByID(UUID roomID) throws NotFoundException {
try {
return roomDomainService.findRoomByID(roomID);
} catch (NotFoundRepositoryException e) {
throw new NotFoundException();
}
}

public List<String> getItemsOfRoom(UUID roomId) throws NotFoundException {
List<String> items = new ArrayList<>();
IRoom room = findRoomByID(roomId);
Expand All @@ -118,7 +133,7 @@ public List<RoomBookingModel> findAvailableWorkspacesWithItems(List<ItemName> it
Collection<IRoom> rooms = roomDomainService.getRooms();
List<IRoom> availableRooms = rooms.stream()
.filter(room -> IterableSupport.toList(room.getWorkspaces()).stream()
.anyMatch(workspace->RoomDomainService.isWorkspaceAvailable(workspace, bookedTimeframe))
.anyMatch(workspace -> RoomDomainService.isWorkspaceAvailable(workspace, bookedTimeframe))
)
.toList();
List<RoomBookingModel> availableWorkspaces = availableRooms.stream()
Expand All @@ -128,7 +143,7 @@ public List<RoomBookingModel> findAvailableWorkspacesWithItems(List<ItemName> it
)
).toList();
return availableWorkspaces.stream()
.filter(rbm-> new HashSet<>(IterableSupport.toList(rbm.itemNameList())).containsAll(items))
.filter(rbm -> new HashSet<>(IterableSupport.toList(rbm.itemNameList())).containsAll(items))
.toList();
}

Expand Down Expand Up @@ -172,6 +187,52 @@ public void removeItem(String itemName) {
roomDomainService.removeItem(itemName);
}

public List<IWorkspace> getAllWorkspaces(Collection<IRoom> roomList) {
return roomList.stream()
.flatMap(room -> StreamSupport.stream(room.getWorkspaces().spliterator(), false))
.collect(Collectors.toList());
}

public IWorkspace getWorkspace(IRoom room, UUID workspaceId) throws NotFoundException {
Optional<? extends IWorkspace> optionalWorkspace = IterableSupport.toList(room.getWorkspaces()).stream()
.filter(x -> x.getId().equals(workspaceId))
.findFirst();
if (optionalWorkspace.isEmpty())
throw new NotFoundException();

IWorkspace workspace = optionalWorkspace.get();
return workspace;
}

public List<String> getUnusedItems(List<String> UsedItemsOfWorkspace) {
return allItems()
.stream()
.map(ItemName::type)
.filter(type -> !UsedItemsOfWorkspace.contains(type))
.toList();
}

public List<RoomHomeModel> getRoomHomeModels() {
return getRooms().stream()
.flatMap(BookingApplicationService::toRoomHomeModel)
.toList();
}
private static Stream<RoomHomeModel> toRoomHomeModel(IRoom room) {
List<RoomHomeModel> list = IterableSupport.toList(room.getWorkspaces()).stream()
.filter(workspace -> !IterableSupport.toList(workspace.getBookedTimeframes()).isEmpty())
.map(workspace -> new RoomHomeModel(room.getRoomID(),
workspace.getId(),
room.getRoomNumber(),
workspace.getWorkspaceNumber(),
DayTimeFrame.from(IterableSupport.toList(workspace.getBookedTimeframes())).convertToString(),
workspace.getItems()
))
.toList();
return list.stream();
}



public void addWorkspace(String workspaceString, UUID roomID) throws NotFoundRepositoryException {
int workspaceNumber;
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ public AdminController(BookingApplicationService bookingApplicationService) {
public String adminPage(Model model) {
Collection<ItemName> itemList = bookingApplicationService.allItems();
Collection<IRoom> roomList = bookingApplicationService.getRooms();
/* List<IWorkspace> workspaceList = roomList.stream()
.flatMap(room -> StreamSupport.stream(room.getWorkspaces().spliterator(), false))
.collect(Collectors.toList());*/

model.addAttribute("itemList", itemList);
model.addAttribute("roomList", roomList);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ public String index(Model model, OAuth2AuthenticationToken auth) {
}

*/

List<RoomHomeModel> roomModels = bookingApplicationService.getRooms().stream()
List<RoomHomeModel> roomModels = bookingApplicationService.getRoomHomeModels();
/* List<RoomHomeModel> roomModels = bookingApplicationService.getRooms().stream()
.flatMap(HomeController::toRoomHomeModel)
.toList();
.toList();*/
model.addAttribute("homeModels", roomModels);
return "home";
}

private static Stream<RoomHomeModel> toRoomHomeModel(IRoom room){
/* private static Stream<RoomHomeModel> toRoomHomeModel(IRoom room){
List<RoomHomeModel> list = IterableSupport.toList(room.getWorkspaces()).stream()
.filter(workspace -> !IterableSupport.toList(workspace.getBookedTimeframes()).isEmpty())
.map(workspace -> new RoomHomeModel(room.getRoomID(),
Expand All @@ -69,7 +69,8 @@ private static Stream<RoomHomeModel> toRoomHomeModel(IRoom room){
))
.toList();
return list.stream();
}
}*/


@PostMapping("/registration")
public String registerKey(String keyId, OAuth2AuthenticationToken auth, Model model) {
Expand Down
48 changes: 24 additions & 24 deletions src/main/java/com/example/roommate/controller/RoomController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
import com.example.roommate.application.services.AdminApplicationService;
import com.example.roommate.exceptions.ArgumentValidationException;
import com.example.roommate.interfaces.entities.IWorkspace;
import com.example.roommate.utility.IterableSupport;
import com.example.roommate.values.domainValues.*;
import com.example.roommate.exceptions.applicationService.NotFoundException;
import com.example.roommate.interfaces.entities.IRoom;
import com.example.roommate.exceptions.domainService.GeneralDomainException;
import com.example.roommate.values.forms.BookDataForm;
import com.example.roommate.application.services.BookingApplicationService;
import com.example.roommate.values.forms.RoomDataForm;
import com.example.roommate.values.forms.SearchTimeForm;
import com.example.roommate.values.models.RoomBookingModel;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.validation.Valid;
Expand All @@ -28,7 +28,6 @@
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.*;
import java.util.stream.Collectors;

@Controller
@SuppressFBWarnings(value="EI2", justification="BookingApplicationService & AdminApplicationService are properly injected")
Expand All @@ -48,27 +47,24 @@ public RoomController(BookingApplicationService bookingApplicationService, Admin
// http://localhost:8080/rooms?datum=1221-12-21&uhrzeit=12%3A21&gegenstaende=Table&gegenstaende=Desk

@GetMapping("/rooms")
public String changeBookings(@RequestParam(required = false) List<String> gegenstaende,
@RequestParam(required = false) String datum,
@RequestParam(required = false) String startUhrzeit, @RequestParam(required = false) String endUhrzeit,
Model model,
public String changeBookings(@RequestParam(required = false) List<String> gegenstaende, /*@RequestParam(required = false)*/ SearchTimeForm timeForm, Model model,
OAuth2AuthenticationToken auth) {
if (datum == null) datum = "2024-01-01";
if (startUhrzeit == null) startUhrzeit = "08:00";
if (endUhrzeit == null) endUhrzeit = "16:00";
/* if (timeForm.datum == null) timeForm.datum = "2024-01-01";
if (timeForm.startUhrzeit == null) timeForm.startUhrzeit = "08:00";
if (timeForm.endUhrzeit == null) timeForm.endUhrzeit = "16:00";*/
if (gegenstaende == null) gegenstaende = new ArrayList<>();

List<ItemName> selectedItemsList = gegenstaende.stream()
List<ItemName> selectedItemsList = BookingApplicationService.convertToItemNameList(gegenstaende);
/* List<ItemName> selectedItemsList = gegenstaende.stream()
.map(ItemName::new)
.toList();

.toList();*/
OAuth2User user = auth.getPrincipal();
String userHandle = user.getAttribute("login");

List<RoomBookingModel> availableWorkspacesWithItems = bookingApplicationService.findAvailableWorkspacesWithItems(selectedItemsList, datum, startUhrzeit, endUhrzeit, userHandle);
model.addAttribute("date", datum);
model.addAttribute("startTime", startUhrzeit);
model.addAttribute("endTime", endUhrzeit);
List<RoomBookingModel> availableWorkspacesWithItems = bookingApplicationService.findAvailableWorkspacesWithItems(selectedItemsList, timeForm.datum(), timeForm.startUhrzeit(), timeForm.endUhrzeit(), userHandle);
model.addAttribute("date", timeForm.datum());
model.addAttribute("startTime", timeForm.startUhrzeit());
model.addAttribute("endTime", timeForm.endUhrzeit());
model.addAttribute("items", bookingApplicationService.allItems());
model.addAttribute("gegenstaende", gegenstaende);
model.addAttribute("roomBookingModels", availableWorkspacesWithItems);
Expand All @@ -92,18 +88,21 @@ public String addRoom(RoomDataForm roomDataForm){
public ModelAndView roomDetails(Model model, @PathVariable UUID roomId, @PathVariable UUID workspaceId) {
try {
IRoom room = bookingApplicationService.findRoomByID(roomId);
Optional<? extends IWorkspace> optionalWorkspace = IterableSupport.toList(room.getWorkspaces()).stream()
IWorkspace workspace = bookingApplicationService.getWorkspace(room, workspaceId);
/* Optional<? extends IWorkspace> optionalWorkspace = IterableSupport.toList(room.getWorkspaces()).stream()
.filter(x -> x.getId().equals(workspaceId))
.findFirst();
if(optionalWorkspace.isEmpty())
throw new NotFoundException();
IWorkspace workspace = optionalWorkspace.get();
List<String> itemsOfWorkspace = workspace.getItems().stream().map(ItemName::type).collect(Collectors.toList());
List<String> filteredItems = bookingApplicationService.allItems()
.findFirst();*/
/* if(optionalWorkspace.isEmpty())
throw new NotFoundException();*/
// IWorkspace workspace = optionalWorkspace.get();
List<String> itemsOfWorkspace = BookingApplicationService.getItemsOfWorkspace(workspace);
// List<String> itemsOfWorkspace = workspace.getItems().stream().map(ItemName::type).collect(Collectors.toList());
List<String> filteredItems = bookingApplicationService.getUnusedItems(itemsOfWorkspace);
/* List<String> filteredItems = bookingApplicationService.allItems()
.stream()
.map(ItemName::type)
.filter(type -> !itemsOfWorkspace.contains(type))
.toList();
.toList();*/
DayTimeFrame dayTimeFrame = DayTimeFrame.from(workspace.getBookedTimeframes());
model.addAttribute("frame",dayTimeFrame);

Expand All @@ -124,6 +123,7 @@ public ModelAndView roomDetails(Model model, @PathVariable UUID roomId, @PathVar

@VerifiedOnly
@PostMapping("/rooms")

public ModelAndView addBooking(@Valid BookDataForm form
, BindingResult bindingResult
, RedirectAttributes redirectAttributes
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.example.roommate.values.forms;

public record SearchTimeForm (String datum,String startUhrzeit, String endUhrzeit){

public SearchTimeForm(String datum, String startUhrzeit, String endUhrzeit) {
if (datum == null) datum = "2024-01-01";
if (startUhrzeit == null) startUhrzeit = "08:00";
if (endUhrzeit == null) endUhrzeit = "16:00";

this.datum = datum;
this.startUhrzeit = startUhrzeit;
this.endUhrzeit = endUhrzeit;
}
/* public SearchTimeForm(){}*/
// public void setDatum(String datum){
// this.datum = datum;
// }
//
// public void setStartUhrzeit(String startUhrzeit){
// this.startUhrzeit = startUhrzeit;
// }
//
// public void setEndUhrzeit(String endUhrzeit){
// this.endUhrzeit = endUhrzeit;
// }


// public String getDatum() {
// return datum;
// }
//
// public String getStartUhrzeit() {
// return startUhrzeit;
// }
//
// public String getEndUhrzeit() {
// return endUhrzeit;
// }
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public class GetRoomIDTest {
void test_1() throws Exception {
Room office = Officer.Room();
Workspace officeWorkspace = Officer.Workspace();
when(bookingApplicationService.getWorkspace(office, officeWorkspace.getId())).thenReturn(officeWorkspace);
when(bookingApplicationService.findRoomByID(office.getRoomID())).thenReturn(office);

MvcResult result = mvc.perform(get("/room/{roomId}/workspace/{workspaceId}", office.getRoomID().toString(), officeWorkspace.getId().toString()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public class GetRoomTest {
public void test_1() throws Exception {
Room office = Officer.Room();
Workspace officeWorkspace = Officer.Workspace();
when(bookingApplicationService.getWorkspace(office, officeWorkspace.getId())).thenReturn(officeWorkspace);
when(bookingApplicationService.findRoomByID(office.getRoomID())).thenReturn(office);

MvcResult result = mvc.perform(get("/room/{roomId}/workspace/{workspaceId}",office.getRoomID(), officeWorkspace.getId()))
Expand Down