View Javadoc
1   package io.extact.rms.client.console.ui.admin;
2   
3   import static io.extact.rms.client.console.ui.ClientConstants.*;
4   import static io.extact.rms.client.console.ui.textio.TextIoUtils.*;
5   
6   import lombok.RequiredArgsConstructor;
7   
8   import io.extact.rms.client.api.RentalReservationClientApi;
9   import io.extact.rms.client.api.dto.RentalItemClientDto;
10  import io.extact.rms.client.api.dto.UserAccountClientDto;
11  import io.extact.rms.client.api.exception.BusinessFlowClientException;
12  import io.extact.rms.client.console.ui.ClientConstants;
13  import io.extact.rms.client.console.ui.TransitionMap.RmsScreen;
14  import io.extact.rms.client.console.ui.TransitionMap.Transition;
15  import io.extact.rms.client.console.ui.textio.RmsStringInputReader.PatternMessage;
16  import io.extact.rms.client.console.ui.textio.TextIoUtils;
17  
18  @RequiredArgsConstructor
19  public class EntryRentalItemScreen implements RmsScreen {
20  
21      private final RentalReservationClientApi clientApi;
22  
23      @Override
24      public Transition play(UserAccountClientDto loginUser, boolean printHeader) {
25  
26          if (printHeader) {
27              printScreenHeader(loginUser, "レンタル品登録画面");
28          }
29  
30          // 入力インフォメーションの表示
31          println(ENTRY_RENTAL_ITEM_INFORMATION);
32  
33          // シリアル番号の入力
34          var serialNo = newStringInputReader()
35                  .withMinLength(1)
36                  .withMaxLength(15)
37                  .withPattern(PatternMessage.SERIAL_NO)
38                  .read("シリアル番号");
39          if (TextIoUtils.isBreak(serialNo)) {
40              return Transition.ADMIN_MAIN;
41          }
42  
43          // 品名の入力
44          var itemName = newStringInputReader()
45                  .withMaxLength(15)
46                  .withDefaultValue("")
47                  .read("品名(空白可)");
48  
49          blankLine();
50  
51          // レンタル品登録の実行
52          try {
53              var addItem = RentalItemClientDto.ofTransient(serialNo, itemName);
54              var newItem = clientApi.addRentalItem(addItem);
55              printResultInformation(newItem);
56              return Transition.ADMIN_MAIN;
57  
58          } catch (BusinessFlowClientException e) {
59              printServerError(e);
60              return play(loginUser, false); // start over!!
61  
62          }
63      }
64  
65      private void printResultInformation(RentalItemClientDto newItem) {
66          println("***** レンタル品登録結果 *****");
67          printf(ClientConstants.RENATL_ITEM_FORMAT.format(newItem));
68          blankLine();
69          waitPressEnter();
70      }
71  }