ScreenController.java
package io.extact.rms.client.console.ui;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Event;
import jakarta.inject.Inject;
import io.extact.rms.client.api.RentalReservationClientApi;
import io.extact.rms.client.api.login.LoggedInEvent;
import io.extact.rms.client.console.login.LoginEventReciever;
import io.extact.rms.client.console.ui.TransitionMap.RmsScreen;
import io.extact.rms.client.console.ui.TransitionMap.Transition;
import io.extact.rms.client.console.ui.admin.AdminMainScreen;
import io.extact.rms.client.console.ui.admin.EditUserScreen;
import io.extact.rms.client.console.ui.admin.EntryRentalItemScreen;
import io.extact.rms.client.console.ui.admin.EntryUserScreen;
import io.extact.rms.client.console.ui.member.CancelReservationScreen;
import io.extact.rms.client.console.ui.member.InquiryReservationScreen;
import io.extact.rms.client.console.ui.member.MemberMainScreen;
import io.extact.rms.client.console.ui.member.ReserveRentalItemScreen;
/**
* アプリケーションの画面遷移を制御するクラス
*/
@ApplicationScoped
public class ScreenController {
private TransitionMap transitionMap;
private LoginEventReciever loginEventReciever;
@Inject
public ScreenController(RentalReservationClientApi clientApi, Event<LoggedInEvent> event, LoginEventReciever reciever) {
this.transitionMap = new TransitionMap();
transitionMap.add(Transition.LOGIN, new LoginScreen(clientApi, event));
transitionMap.add(Transition.MEMBER_MAIN, new MemberMainScreen());
transitionMap.add(Transition.INQUIRY_RESERVATION, new InquiryReservationScreen(clientApi));
transitionMap.add(Transition.ENTRY_RESERVATRION, new ReserveRentalItemScreen(clientApi));
transitionMap.add(Transition.CANCEL_RESERVATRION, new CancelReservationScreen(clientApi));
transitionMap.add(Transition.ADMIN_MAIN, new AdminMainScreen());
transitionMap.add(Transition.ENTRY_RENTAL_ITEM, new EntryRentalItemScreen(clientApi));
transitionMap.add(Transition.ENTRY_USER, new EntryUserScreen(clientApi));
transitionMap.add(Transition.EDIT_USER, new EditUserScreen(clientApi));
transitionMap.add(Transition.END, new EndScreen());
loginEventReciever = reciever;
}
public void start() {
var loginScreen = transitionMap.stratScreen();
doPlay(loginScreen);
}
private RmsScreen doPlay(RmsScreen screen) {
var next = screen.play(loginEventReciever.getLoginUser(), true);
return next != null ? doPlay(transitionMap.nextScreen(next)) : null;
}
}