├── .editorconfig ├── .github ├── gifs │ └── application.gif ├── images │ ├── db_schema.png │ ├── form1.png │ ├── form2.png │ ├── forms.png │ ├── reports.png │ └── spring_boot.png └── workflows │ ├── docker-image.yml │ └── maven.yml ├── .gitignore ├── .mvn └── wrapper │ └── maven-wrapper.properties ├── LICENSE ├── README.md ├── code-rules ├── checkstyle │ ├── checkstyle-suppressions.xml │ └── checkstyle.xml └── pmd │ └── pmd-ruleSet.xml ├── docker-compose.yml ├── mvnw ├── mvnw.cmd ├── pom.xml └── src └── main ├── java └── com │ └── danielmichalski │ └── reservations │ ├── Application.java │ ├── commons │ ├── date │ │ ├── DateFormatterService.java │ │ └── DateFormatterServiceImpl.java │ ├── entity │ │ └── BaseEntity.java │ ├── time │ │ ├── CurrentTimeService.java │ │ └── CurrentTimeServiceImpl.java │ └── validation │ │ ├── ValidationError.java │ │ ├── ValidationSupport.java │ │ └── Validator.java │ ├── domain │ ├── address │ │ ├── entity │ │ │ └── AddressEntity.java │ │ ├── repository │ │ │ └── AddressRepository.java │ │ ├── service │ │ │ ├── AddressService.java │ │ │ └── AddressServiceImpl.java │ │ └── validation │ │ │ └── AddressValidator.java │ ├── client │ │ ├── dto │ │ │ └── ClientReservationCountDto.java │ │ ├── entity │ │ │ └── ClientEntity.java │ │ ├── repository │ │ │ └── ClientRepository.java │ │ ├── service │ │ │ ├── ClientService.java │ │ │ └── ClientServiceImpl.java │ │ └── validation │ │ │ └── ClientValidator.java │ ├── payment │ │ ├── dto │ │ │ └── PaymentMethodCountDto.java │ │ ├── entity │ │ │ ├── PaymentEntity.java │ │ │ └── PaymentMethodEntity.java │ │ ├── repository │ │ │ ├── PaymentMethodRepository.java │ │ │ └── PaymentRepository.java │ │ ├── service │ │ │ ├── PaymentMethodService.java │ │ │ ├── PaymentMethodServiceImpl.java │ │ │ ├── PaymentService.java │ │ │ └── PaymentServiceImpl.java │ │ └── validation │ │ │ ├── PaymentMethodValidator.java │ │ │ └── PaymentValidator.java │ ├── rate │ │ ├── entity │ │ │ └── RateEntity.java │ │ ├── repository │ │ │ └── RateRepository.java │ │ ├── service │ │ │ ├── RateService.java │ │ │ └── RateServiceImpl.java │ │ └── validation │ │ │ └── RateValidator.java │ ├── reservation │ │ ├── entity │ │ │ ├── ReservationEntity.java │ │ │ └── ReservationStatusEntity.java │ │ ├── repository │ │ │ ├── ReservationRepository.java │ │ │ └── ReservationStatusRepository.java │ │ ├── service │ │ │ ├── ReservationService.java │ │ │ ├── ReservationServiceImpl.java │ │ │ ├── ReservationStatusService.java │ │ │ └── ReservationStatusServiceImpl.java │ │ └── validation │ │ │ ├── ReservationStatusValidator.java │ │ │ └── ReservationValidator.java │ └── room │ │ ├── dto │ │ └── RoomStatusesCountDto.java │ │ ├── entity │ │ ├── RoomEntity.java │ │ ├── RoomStatusEntity.java │ │ ├── RoomTypeEntity.java │ │ ├── RoomXReservationEntity.java │ │ └── RoomXReservationPK.java │ │ ├── repository │ │ ├── RoomRepository.java │ │ ├── RoomStatusRepository.java │ │ ├── RoomTypeRepository.java │ │ └── RoomXReservationRepository.java │ │ ├── service │ │ ├── RoomService.java │ │ ├── RoomServiceImpl.java │ │ ├── RoomStatusService.java │ │ ├── RoomStatusServiceImpl.java │ │ ├── RoomTypeService.java │ │ ├── RoomTypeServiceImpl.java │ │ ├── RoomXReservationService.java │ │ └── RoomXReservationServiceImpl.java │ │ └── validation │ │ ├── RoomStatusValidator.java │ │ ├── RoomTypeValidator.java │ │ ├── RoomValidator.java │ │ └── RoomXReservationValidator.java │ ├── ui │ ├── forms │ │ ├── address │ │ │ ├── controller │ │ │ │ └── AddressController.java │ │ │ ├── model │ │ │ │ └── AddressTableModel.java │ │ │ └── view │ │ │ │ ├── AddressTableBtnPanel.java │ │ │ │ ├── AddressTableFrame.java │ │ │ │ ├── AddressTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddAddressFrame.java │ │ │ │ ├── AddressFormBtnPanel.java │ │ │ │ └── AddressFormPanel.java │ │ ├── client │ │ │ ├── controller │ │ │ │ └── ClientController.java │ │ │ ├── model │ │ │ │ ├── AddressComboBoxModel.java │ │ │ │ └── ClientTableModel.java │ │ │ └── view │ │ │ │ ├── ClientFrame.java │ │ │ │ ├── ClientTablePanel.java │ │ │ │ ├── TableBtnPanel.java │ │ │ │ └── modal │ │ │ │ ├── AddClientFrame.java │ │ │ │ ├── FormBtnPanel.java │ │ │ │ └── FormPanel.java │ │ ├── forms │ │ │ ├── controller │ │ │ │ └── FormsController.java │ │ │ └── view │ │ │ │ └── FormsFrame.java │ │ ├── payment │ │ │ ├── controller │ │ │ │ └── PaymentController.java │ │ │ ├── model │ │ │ │ ├── PaymentMethodComboBoxModel.java │ │ │ │ └── PaymentTableModel.java │ │ │ └── view │ │ │ │ ├── PaymentTableBtnPanel.java │ │ │ │ ├── PaymentTableFrame.java │ │ │ │ ├── PaymentTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddPaymentFrame.java │ │ │ │ ├── PaymentFormBtnPanel.java │ │ │ │ └── PaymentFormPanel.java │ │ ├── paymentmethod │ │ │ ├── controller │ │ │ │ └── PaymentMethodController.java │ │ │ ├── model │ │ │ │ └── PaymentMethodTableModel.java │ │ │ └── view │ │ │ │ ├── PaymentMethodTableBtnPanel.java │ │ │ │ ├── PaymentMethodTableFrame.java │ │ │ │ ├── PaymentMethodTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddPaymentMethodFrame.java │ │ │ │ ├── PaymentMethodFormBtnPanel.java │ │ │ │ └── PaymentMethodFormPanel.java │ │ ├── rate │ │ │ ├── controller │ │ │ │ └── RateController.java │ │ │ ├── model │ │ │ │ ├── RateTableModel.java │ │ │ │ ├── RoomComboBoxModel.java │ │ │ │ └── RoomTypeComboBoxModel.java │ │ │ └── view │ │ │ │ ├── RateTableBtnPanel.java │ │ │ │ ├── RateTableFrame.java │ │ │ │ ├── RateTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddRateFame.java │ │ │ │ ├── RateFormBtnPanel.java │ │ │ │ └── RateFormPanel.java │ │ ├── reservation │ │ │ ├── controller │ │ │ │ └── ReservationController.java │ │ │ ├── model │ │ │ │ ├── ClientComboBoxModel.java │ │ │ │ ├── PaymentComboBoxModel.java │ │ │ │ ├── ReservationStatusComboBoxModel.java │ │ │ │ └── ReservationTableModel.java │ │ │ └── view │ │ │ │ ├── ReservationTableBtnPanel.java │ │ │ │ ├── ReservationTableFrame.java │ │ │ │ ├── ReservationTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddReservationFrame.java │ │ │ │ ├── ReservationFormBtnPanel.java │ │ │ │ └── ReservationFormPanel.java │ │ ├── reservationstatus │ │ │ ├── controller │ │ │ │ └── ReservationStatusController.java │ │ │ ├── model │ │ │ │ └── ReservationStatusTableModel.java │ │ │ └── view │ │ │ │ ├── ReservationStatusTableBtnPanel.java │ │ │ │ ├── ReservationStatusTableFrame.java │ │ │ │ ├── ReservationStatusTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddReservationStatusFrame.java │ │ │ │ ├── ReservationStatusFormBtnPanel.java │ │ │ │ └── ReservationStatusFormPanel.java │ │ ├── room │ │ │ ├── controller │ │ │ │ └── RoomController.java │ │ │ ├── model │ │ │ │ ├── RoomStatusComboBoxModel.java │ │ │ │ └── RoomTableModel.java │ │ │ └── view │ │ │ │ ├── RoomTableBtnPanel.java │ │ │ │ ├── RoomTableFrame.java │ │ │ │ ├── RoomTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddRoomFrame.java │ │ │ │ ├── RoomFormBtnPanel.java │ │ │ │ └── RoomFormPanel.java │ │ ├── roomstatus │ │ │ ├── controller │ │ │ │ └── RoomStatusController.java │ │ │ ├── model │ │ │ │ └── RoomStatusTableModel.java │ │ │ └── view │ │ │ │ ├── RoomStatusTableBtnPanel.java │ │ │ │ ├── RoomStatusTableFrame.java │ │ │ │ ├── RoomStatusTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddRoomStatusFrame.java │ │ │ │ ├── RoomStatusFormBtnPanel.java │ │ │ │ └── RoomStatusFormPanel.java │ │ ├── roomtype │ │ │ ├── controller │ │ │ │ └── RoomTypeController.java │ │ │ ├── model │ │ │ │ └── RoomTypeTableModel.java │ │ │ └── view │ │ │ │ ├── RoomTypeTableBtnPanel.java │ │ │ │ ├── RoomTypeTableFrame.java │ │ │ │ ├── RoomTypeTablePanel.java │ │ │ │ └── modal │ │ │ │ ├── AddRoomTypeFrame.java │ │ │ │ ├── RoomTypeFormBtnPanel.java │ │ │ │ └── RoomTypeFormPanel.java │ │ └── roomxreservation │ │ │ ├── controller │ │ │ └── RoomXReservationController.java │ │ │ ├── model │ │ │ ├── ReservationsComboBoxModel.java │ │ │ └── RoomXReservationTableModel.java │ │ │ └── view │ │ │ ├── RoomXReservationTableBtnPanel.java │ │ │ ├── RoomXReservationTableFrame.java │ │ │ ├── RoomXReservationTablePanel.java │ │ │ └── modal │ │ │ ├── AddRoomXReservationFame.java │ │ │ ├── RoomXReservationFormBtnPanel.java │ │ │ └── RoomXReservationFormPanel.java │ ├── mainmenu │ │ ├── controller │ │ │ └── MainMenuController.java │ │ └── view │ │ │ └── MainMenuFrame.java │ ├── reports │ │ ├── clientreservations │ │ │ ├── controller │ │ │ │ └── ClientReservationsReportController.java │ │ │ ├── model │ │ │ │ └── ClientReservationsReportModel.java │ │ │ └── view │ │ │ │ ├── ClientReservationsReportTableFrame.java │ │ │ │ └── ClientReservationsReportTablePanel.java │ │ ├── payments │ │ │ ├── controller │ │ │ │ └── PaymentReportController.java │ │ │ ├── model │ │ │ │ └── PaymentReportModel.java │ │ │ └── view │ │ │ │ ├── PaymentReportTableFrame.java │ │ │ │ └── PaymentReportTablePanel.java │ │ ├── reports │ │ │ ├── controller │ │ │ │ └── ReportsController.java │ │ │ └── view │ │ │ │ └── ReportsFrame.java │ │ └── roomstatuses │ │ │ ├── controller │ │ │ └── RoomStatusReportController.java │ │ │ ├── model │ │ │ └── RoomStatusReportModel.java │ │ │ └── view │ │ │ ├── RoomStatusReportTableFrame.java │ │ │ └── RoomStatusReportTablePanel.java │ └── shared │ │ ├── controller │ │ └── AbstractFrameController.java │ │ └── model │ │ ├── DefaultAbstractComboBoxModel.java │ │ └── DefaultTableModel.java │ └── util │ ├── annotation │ ├── TransactionalReadOnly.java │ └── TransactionalWrite.java │ ├── border │ └── Borders.java │ ├── constant │ ├── ConstMessagesEN.java │ └── ConstMessagesPL.java │ ├── notification │ └── Notifications.java │ └── ui │ └── LookAndFeelUtils.java └── resources ├── application.yml ├── banner.txt └── db ├── data └── test │ ├── csv │ ├── address.csv │ ├── client.csv │ ├── payment.csv │ ├── payment_method.csv │ ├── rate.csv │ ├── reservation.csv │ ├── reservation_status.csv │ ├── room.csv │ ├── room_status.csv │ ├── room_type.csv │ └── room_x_reservation.csv │ └── liquibase-changelog-test-data.xml ├── functions └── liquibase-changelog-functions.xml ├── liquibase-changelog-master.xml ├── schema └── liquibase-changelog-schema.xml └── views └── liquibase-changelog-views.xml /.github/gifs/application.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DanielMichalski/spring-boot-java-swing-reservations/b0e5b27f09f2303f036f2d973a8c508dffa2e26b/.github/gifs/application.gif -------------------------------------------------------------------------------- /.github/images/db_schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DanielMichalski/spring-boot-java-swing-reservations/b0e5b27f09f2303f036f2d973a8c508dffa2e26b/.github/images/db_schema.png -------------------------------------------------------------------------------- /.github/images/form1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DanielMichalski/spring-boot-java-swing-reservations/b0e5b27f09f2303f036f2d973a8c508dffa2e26b/.github/images/form1.png -------------------------------------------------------------------------------- /.github/images/form2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DanielMichalski/spring-boot-java-swing-reservations/b0e5b27f09f2303f036f2d973a8c508dffa2e26b/.github/images/form2.png -------------------------------------------------------------------------------- /.github/images/forms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DanielMichalski/spring-boot-java-swing-reservations/b0e5b27f09f2303f036f2d973a8c508dffa2e26b/.github/images/forms.png -------------------------------------------------------------------------------- /.github/images/reports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DanielMichalski/spring-boot-java-swing-reservations/b0e5b27f09f2303f036f2d973a8c508dffa2e26b/.github/images/reports.png -------------------------------------------------------------------------------- /.github/images/spring_boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DanielMichalski/spring-boot-java-swing-reservations/b0e5b27f09f2303f036f2d973a8c508dffa2e26b/.github/images/spring_boot.png -------------------------------------------------------------------------------- /.github/workflows/docker-image.yml: -------------------------------------------------------------------------------- 1 | name: Docker Image CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | 11 | build: 12 | 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v2 17 | - name: Build the Docker image 18 | run: docker-compose build 19 | -------------------------------------------------------------------------------- /.github/workflows/maven.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven 3 | 4 | # This workflow uses actions that are not certified by GitHub. 5 | # They are provided by a third-party and are governed by 6 | # separate terms of service, privacy policy, and support 7 | # documentation. 8 | 9 | name: Java CI with Maven 10 | 11 | on: 12 | push: 13 | branches: [ "master" ] 14 | pull_request: 15 | branches: [ "master" ] 16 | 17 | jobs: 18 | build: 19 | 20 | runs-on: ubuntu-latest 21 | 22 | steps: 23 | - uses: actions/checkout@v3 24 | - name: Set up JDK 17 25 | uses: actions/setup-java@v3 26 | with: 27 | java-version: '17' 28 | distribution: 'temurin' 29 | cache: maven 30 | - name: Build with Maven 31 | run: mvn -B package --file pom.xml 32 | 33 | # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive 34 | - name: Update dependency graph 35 | uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .mvn/wrapper/maven-wrapper.jar 3 | *.iml 4 | target 5 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Daniel Michalski 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /code-rules/checkstyle/checkstyle-suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /code-rules/pmd/pmd-ruleSet.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | PMD RuleSet 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | reservations-db: 5 | container_name: reservations-db 6 | image: postgres:16.1 7 | ports: 8 | - '5555:5432' 9 | environment: 10 | POSTGRES_DB: reservations 11 | POSTGRES_USER: reservations_user 12 | POSTGRES_PASSWORD: reservations_psw 13 | restart: 14 | unless-stopped 15 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/Application.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations; 2 | 3 | import com.danielmichalski.reservations.ui.mainmenu.controller.MainMenuController; 4 | import com.danielmichalski.reservations.util.ui.LookAndFeelUtils; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.boot.builder.SpringApplicationBuilder; 7 | import org.springframework.context.ConfigurableApplicationContext; 8 | 9 | import javax.swing.SwingUtilities; 10 | 11 | @SpringBootApplication 12 | public class Application { 13 | 14 | public static void main(String... args) { 15 | LookAndFeelUtils.setWindowsLookAndFeel(); 16 | ConfigurableApplicationContext context = createApplicationContext(args); 17 | displayMainFrame(context); 18 | } 19 | 20 | private static ConfigurableApplicationContext createApplicationContext(String... args) { 21 | return new SpringApplicationBuilder(Application.class) 22 | .headless(false) 23 | .run(args); 24 | } 25 | 26 | private static void displayMainFrame(ConfigurableApplicationContext context) { 27 | SwingUtilities.invokeLater(() -> { 28 | MainMenuController mainMenuController = context.getBean(MainMenuController.class); 29 | mainMenuController.prepareAndOpenFrame(); 30 | }); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/commons/date/DateFormatterService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.commons.date; 2 | 3 | import java.util.Date; 4 | 5 | public interface DateFormatterService { 6 | 7 | String formatDate(Date date); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/commons/date/DateFormatterServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.commons.date; 2 | 3 | import org.springframework.stereotype.Service; 4 | 5 | import java.text.SimpleDateFormat; 6 | import java.util.Date; 7 | 8 | @Service 9 | class DateFormatterServiceImpl implements DateFormatterService { 10 | 11 | private static final String DEFAULT_DATE_FORMAT = "dd-MM-yyyy"; 12 | 13 | @Override 14 | public String formatDate(Date date) { 15 | SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_DATE_FORMAT); 16 | return formatter.format(date); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/commons/entity/BaseEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.commons.entity; 2 | 3 | import jakarta.persistence.GeneratedValue; 4 | import jakarta.persistence.GenerationType; 5 | import jakarta.persistence.Id; 6 | import jakarta.persistence.MappedSuperclass; 7 | import lombok.Getter; 8 | 9 | import java.io.Serializable; 10 | 11 | @MappedSuperclass 12 | @Getter 13 | public abstract class BaseEntity implements Serializable { 14 | 15 | @Id 16 | @GeneratedValue(strategy = GenerationType.IDENTITY) 17 | private Long id; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/commons/time/CurrentTimeService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.commons.time; 2 | 3 | import java.util.Date; 4 | 5 | public interface CurrentTimeService { 6 | 7 | Date getCurrentDate(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/commons/time/CurrentTimeServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.commons.time; 2 | 3 | import org.springframework.stereotype.Service; 4 | 5 | import java.util.Date; 6 | 7 | @Service 8 | class CurrentTimeServiceImpl implements CurrentTimeService { 9 | 10 | @Override 11 | public Date getCurrentDate() { 12 | return new Date(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/commons/validation/ValidationError.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.commons.validation; 2 | 3 | public record ValidationError(String message) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/commons/validation/ValidationSupport.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.commons.validation; 2 | 3 | @SuppressWarnings("PMD.AbstractClassWithoutAbstractMethod") 4 | public abstract class ValidationSupport { 5 | 6 | protected boolean isNullOrEmptyString(String value) { 7 | return value == null || value.isEmpty(); 8 | } 9 | 10 | protected boolean isNullValue(Object value) { 11 | return value == null; 12 | } 13 | 14 | protected boolean isValueNotGreaterThanZero(Long value) { 15 | return isNullValue(value) || value <= 0; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/commons/validation/Validator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.commons.validation; 2 | 3 | import java.util.Optional; 4 | 5 | public interface Validator { 6 | 7 | Optional validate(K k); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/address/entity/AddressEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.address.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import jakarta.persistence.Entity; 5 | import jakarta.persistence.Table; 6 | import lombok.AccessLevel; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Getter; 9 | import lombok.NoArgsConstructor; 10 | 11 | @Entity 12 | @Table(name = "address") 13 | @AllArgsConstructor 14 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 15 | @Getter 16 | public class AddressEntity extends BaseEntity { 17 | 18 | private String street; 19 | 20 | private String houseNumber; 21 | 22 | private String flatNumber; 23 | 24 | private String city; 25 | 26 | private String postalCode; 27 | 28 | @Override 29 | public String toString() { 30 | return street + " " 31 | + houseNumber 32 | + "/" + flatNumber + " " 33 | + city + " " 34 | + postalCode; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/address/repository/AddressRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.address.repository; 2 | 3 | import com.danielmichalski.reservations.domain.address.entity.AddressEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface AddressRepository extends JpaRepository { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/address/service/AddressService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.address.service; 2 | 3 | import com.danielmichalski.reservations.domain.address.entity.AddressEntity; 4 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 6 | 7 | import java.util.List; 8 | 9 | public interface AddressService { 10 | 11 | @TransactionalReadOnly 12 | List findAll(); 13 | 14 | @TransactionalWrite 15 | void remove(AddressEntity address); 16 | 17 | @TransactionalWrite 18 | void save(AddressEntity address); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/address/service/AddressServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.address.service; 2 | 3 | import com.danielmichalski.reservations.domain.address.entity.AddressEntity; 4 | import com.danielmichalski.reservations.domain.address.repository.AddressRepository; 5 | import lombok.AllArgsConstructor; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | @AllArgsConstructor 12 | class AddressServiceImpl implements AddressService { 13 | 14 | private final AddressRepository addressRepository; 15 | 16 | @Override 17 | public List findAll() { 18 | return addressRepository.findAll(); 19 | } 20 | 21 | @Override 22 | public void remove(AddressEntity address) { 23 | addressRepository.delete(address); 24 | } 25 | 26 | @Override 27 | public void save(AddressEntity address) { 28 | addressRepository.save(address); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/address/validation/AddressValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.address.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.address.entity.AddressEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | 13 | @Component 14 | public class AddressValidator extends ValidationSupport implements Validator { 15 | 16 | @Override 17 | public Optional validate(AddressEntity address) { 18 | if (isNullOrEmptyString(address.getStreet()) 19 | || isNullOrEmptyString(address.getHouseNumber()) 20 | || isNullOrEmptyString(address.getFlatNumber()) 21 | || isNullOrEmptyString(address.getCity()) 22 | || isNullOrEmptyString(address.getPostalCode())) { 23 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 24 | } 25 | return Optional.empty(); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/client/dto/ClientReservationCountDto.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.client.dto; 2 | 3 | public record ClientReservationCountDto(String name, String email, long count) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/client/entity/ClientEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.client.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import com.danielmichalski.reservations.domain.address.entity.AddressEntity; 5 | import jakarta.persistence.Entity; 6 | import jakarta.persistence.JoinColumn; 7 | import jakarta.persistence.ManyToOne; 8 | import jakarta.persistence.Table; 9 | import lombok.AccessLevel; 10 | import lombok.AllArgsConstructor; 11 | import lombok.Getter; 12 | import lombok.NoArgsConstructor; 13 | 14 | @Entity 15 | @Table(name = "client") 16 | @AllArgsConstructor 17 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 18 | @Getter 19 | public class ClientEntity extends BaseEntity { 20 | 21 | @ManyToOne 22 | @JoinColumn(name = "address_id") 23 | private AddressEntity address; 24 | 25 | private String name; 26 | 27 | private String surname; 28 | 29 | private String pesel; 30 | 31 | private String phoneNumber; 32 | 33 | private String email; 34 | 35 | @Override 36 | public String toString() { 37 | return name + " " + surname; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/client/repository/ClientRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.client.repository; 2 | 3 | import com.danielmichalski.reservations.domain.client.entity.ClientEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.Query; 6 | import org.springframework.stereotype.Repository; 7 | 8 | @Repository 9 | public interface ClientRepository extends JpaRepository { 10 | 11 | @Query(""" 12 | SELECT CONCAT(c.name, ' ', c.surname) AS name, c.email AS email, COUNT(r.id) AS count 13 | FROM ReservationEntity r JOIN r.client c 14 | GROUP BY c.id 15 | HAVING COUNT (r.id) >= 3 16 | """ 17 | ) 18 | Object[][] getClientReservationsCount(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/client/service/ClientService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.client.service; 2 | 3 | import com.danielmichalski.reservations.domain.client.dto.ClientReservationCountDto; 4 | import com.danielmichalski.reservations.domain.client.entity.ClientEntity; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 6 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 7 | 8 | import java.util.List; 9 | 10 | public interface ClientService { 11 | 12 | @TransactionalReadOnly 13 | List findAll(); 14 | 15 | @TransactionalWrite 16 | void save(ClientEntity client); 17 | 18 | @TransactionalWrite 19 | void remove(ClientEntity client); 20 | 21 | @TransactionalReadOnly 22 | List getClientReservationsCount(); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/client/service/ClientServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.client.service; 2 | 3 | import com.danielmichalski.reservations.domain.client.dto.ClientReservationCountDto; 4 | import com.danielmichalski.reservations.domain.client.entity.ClientEntity; 5 | import com.danielmichalski.reservations.domain.client.repository.ClientRepository; 6 | import lombok.AllArgsConstructor; 7 | import org.springframework.stereotype.Service; 8 | 9 | import java.util.List; 10 | import java.util.stream.Stream; 11 | 12 | import static java.util.stream.Collectors.toList; 13 | 14 | @Service 15 | @AllArgsConstructor 16 | class ClientServiceImpl implements ClientService { 17 | 18 | public static final int NAME_INDEX = 0; 19 | public static final int EMAIL_INDEX = 1; 20 | public static final int COUNT_INDEX = 2; 21 | 22 | private final ClientRepository clientRepository; 23 | 24 | @Override 25 | public List findAll() { 26 | return clientRepository.findAll(); 27 | } 28 | 29 | @Override 30 | public void save(ClientEntity client) { 31 | clientRepository.save(client); 32 | } 33 | 34 | @Override 35 | public void remove(ClientEntity client) { 36 | clientRepository.delete(client); 37 | } 38 | 39 | @Override 40 | public List getClientReservationsCount() { 41 | Object[][] clientReservationsCount = clientRepository.getClientReservationsCount(); 42 | return Stream.of(clientReservationsCount) 43 | .map(this::convertToClientReservationCountDto) 44 | .collect(toList()); 45 | } 46 | 47 | private ClientReservationCountDto convertToClientReservationCountDto(Object... crc) { 48 | String name = (String) crc[NAME_INDEX]; 49 | String email = (String) crc[EMAIL_INDEX]; 50 | long count = (long) crc[COUNT_INDEX]; 51 | return new ClientReservationCountDto(name, email, count); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/client/validation/ClientValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.client.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.client.entity.ClientEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.PESEL_LENGTH_INCORRECT; 12 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 13 | 14 | @Component 15 | public class ClientValidator extends ValidationSupport implements Validator { 16 | 17 | private static final int PESEL_LENGTH = 11; 18 | 19 | @Override 20 | public Optional validate(ClientEntity client) { 21 | if (isNullOrEmptyString(client.getName()) 22 | || isNullOrEmptyString(client.getSurname()) 23 | || isNullOrEmptyString(client.getPesel()) 24 | || isNullOrEmptyString(client.getPhoneNumber()) 25 | || isNullOrEmptyString(client.getEmail()) 26 | || isNullValue(client.getAddress())) { 27 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 28 | } 29 | if (PESEL_LENGTH != client.getPesel().length()) { 30 | return Optional.of(new ValidationError(PESEL_LENGTH_INCORRECT)); 31 | } 32 | return Optional.empty(); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/dto/PaymentMethodCountDto.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.dto; 2 | 3 | public record PaymentMethodCountDto(String name, long count) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/entity/PaymentEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import jakarta.persistence.Entity; 5 | import jakarta.persistence.JoinColumn; 6 | import jakarta.persistence.ManyToOne; 7 | import jakarta.persistence.Table; 8 | import lombok.AccessLevel; 9 | import lombok.Getter; 10 | import lombok.NoArgsConstructor; 11 | import org.apache.logging.log4j.util.Strings; 12 | 13 | import java.util.Date; 14 | 15 | @Entity 16 | @Table(name = "payment") 17 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 18 | @Getter 19 | public class PaymentEntity extends BaseEntity { 20 | 21 | @ManyToOne 22 | @JoinColumn(name = "payment_method_id") 23 | private PaymentMethodEntity paymentMethod; 24 | 25 | private Long value; 26 | 27 | private Date dateOfPayment; 28 | 29 | public PaymentEntity(PaymentMethodEntity paymentMethod, 30 | Long value, 31 | Date dateOfPayment) { 32 | this.paymentMethod = paymentMethod; 33 | this.value = value; 34 | this.dateOfPayment = new Date(dateOfPayment.getTime()); 35 | } 36 | 37 | @Override 38 | public String toString() { 39 | return paymentMethod + Strings.EMPTY; 40 | } 41 | 42 | public Date getDateOfPayment() { 43 | return new Date(dateOfPayment.getTime()); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/entity/PaymentMethodEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import jakarta.persistence.Entity; 5 | import jakarta.persistence.Table; 6 | import lombok.AccessLevel; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Getter; 9 | import lombok.NoArgsConstructor; 10 | 11 | @Entity 12 | @Table(name = "payment_method") 13 | @AllArgsConstructor 14 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 15 | @Getter 16 | public class PaymentMethodEntity extends BaseEntity { 17 | 18 | private String name; 19 | 20 | @Override 21 | public String toString() { 22 | return name; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/repository/PaymentMethodRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.repository; 2 | 3 | import com.danielmichalski.reservations.domain.payment.entity.PaymentMethodEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.Query; 6 | import org.springframework.stereotype.Repository; 7 | 8 | @Repository 9 | public interface PaymentMethodRepository extends JpaRepository { 10 | 11 | @Query(""" 12 | SELECT pm.name AS name, COUNT(p.id) AS count 13 | FROM PaymentEntity p 14 | JOIN p.paymentMethod pm 15 | GROUP BY pm.name 16 | """ 17 | ) 18 | Object[][] getPaymentMethodCount(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/repository/PaymentRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.repository; 2 | 3 | import com.danielmichalski.reservations.domain.payment.entity.PaymentEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface PaymentRepository extends JpaRepository { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/service/PaymentMethodService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.service; 2 | 3 | import com.danielmichalski.reservations.domain.payment.dto.PaymentMethodCountDto; 4 | import com.danielmichalski.reservations.domain.payment.entity.PaymentMethodEntity; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 6 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 7 | 8 | import java.util.List; 9 | 10 | public interface PaymentMethodService { 11 | 12 | @TransactionalReadOnly 13 | List findAll(); 14 | 15 | @TransactionalWrite 16 | void remove(PaymentMethodEntity paymentMethod); 17 | 18 | @TransactionalWrite 19 | void save(PaymentMethodEntity paymentMethod); 20 | 21 | @TransactionalReadOnly 22 | List getPaymentMethodCount(); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/service/PaymentMethodServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.service; 2 | 3 | import com.danielmichalski.reservations.domain.payment.dto.PaymentMethodCountDto; 4 | import com.danielmichalski.reservations.domain.payment.entity.PaymentMethodEntity; 5 | import com.danielmichalski.reservations.domain.payment.repository.PaymentMethodRepository; 6 | import lombok.AllArgsConstructor; 7 | import org.springframework.stereotype.Service; 8 | 9 | import java.util.List; 10 | import java.util.stream.Collectors; 11 | import java.util.stream.Stream; 12 | 13 | @Service 14 | @AllArgsConstructor 15 | class PaymentMethodServiceImpl implements PaymentMethodService { 16 | 17 | public static final int NAME_INDEX = 0; 18 | public static final int COUNT_INDEX = 1; 19 | 20 | private final PaymentMethodRepository paymentMethodRepository; 21 | 22 | @Override 23 | public List findAll() { 24 | return paymentMethodRepository.findAll(); 25 | } 26 | 27 | @Override 28 | public void remove(PaymentMethodEntity paymentMethod) { 29 | paymentMethodRepository.delete(paymentMethod); 30 | } 31 | 32 | @Override 33 | public void save(PaymentMethodEntity paymentMethod) { 34 | paymentMethodRepository.save(paymentMethod); 35 | } 36 | 37 | @Override 38 | public List getPaymentMethodCount() { 39 | Object[][] paymentMethodCount = paymentMethodRepository.getPaymentMethodCount(); 40 | return Stream.of(paymentMethodCount) 41 | .map(this::convertToPaymentMethodCountDto) 42 | .collect(Collectors.toList()); 43 | } 44 | 45 | private PaymentMethodCountDto convertToPaymentMethodCountDto(Object... pmc) { 46 | String name = (String) pmc[NAME_INDEX]; 47 | long count = (long) pmc[COUNT_INDEX]; 48 | return new PaymentMethodCountDto(name, count); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/service/PaymentService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.service; 2 | 3 | import com.danielmichalski.reservations.domain.payment.entity.PaymentEntity; 4 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 6 | 7 | import java.util.List; 8 | 9 | public interface PaymentService { 10 | 11 | @TransactionalReadOnly 12 | List findAll(); 13 | 14 | @TransactionalWrite 15 | void remove(PaymentEntity payment); 16 | 17 | @TransactionalWrite 18 | void save(PaymentEntity payment); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/service/PaymentServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.service; 2 | 3 | import com.danielmichalski.reservations.domain.payment.entity.PaymentEntity; 4 | import com.danielmichalski.reservations.domain.payment.repository.PaymentRepository; 5 | import lombok.AllArgsConstructor; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | @AllArgsConstructor 12 | class PaymentServiceImpl implements PaymentService { 13 | 14 | private final PaymentRepository paymentRepository; 15 | 16 | @Override 17 | public List findAll() { 18 | return paymentRepository.findAll(); 19 | } 20 | 21 | @Override 22 | public void remove(PaymentEntity payment) { 23 | paymentRepository.delete(payment); 24 | } 25 | 26 | @Override 27 | public void save(PaymentEntity payment) { 28 | paymentRepository.save(payment); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/validation/PaymentMethodValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.payment.entity.PaymentMethodEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | 13 | @Component 14 | public class PaymentMethodValidator extends ValidationSupport implements Validator { 15 | 16 | @Override 17 | public Optional validate(PaymentMethodEntity paymentMethod) { 18 | if (isNullOrEmptyString(paymentMethod.getName())) { 19 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 20 | } 21 | return Optional.empty(); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/payment/validation/PaymentValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.payment.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.payment.entity.PaymentEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | import static java.util.Optional.empty; 13 | 14 | @Component 15 | public class PaymentValidator extends ValidationSupport implements Validator { 16 | 17 | @Override 18 | public Optional validate(PaymentEntity payment) { 19 | if (isNullValue(payment.getPaymentMethod()) 20 | || isValueNotGreaterThanZero(payment.getValue()) 21 | || isNullValue(payment.getDateOfPayment())) { 22 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 23 | } 24 | return empty(); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/rate/entity/RateEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.rate.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import com.danielmichalski.reservations.domain.room.entity.RoomEntity; 5 | import com.danielmichalski.reservations.domain.room.entity.RoomTypeEntity; 6 | import jakarta.persistence.Entity; 7 | import jakarta.persistence.JoinColumn; 8 | import jakarta.persistence.ManyToOne; 9 | import jakarta.persistence.Table; 10 | import lombok.AccessLevel; 11 | import lombok.AllArgsConstructor; 12 | import lombok.Getter; 13 | import lombok.NoArgsConstructor; 14 | 15 | @Entity 16 | @Table(name = "rate") 17 | @AllArgsConstructor 18 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 19 | @Getter 20 | public class RateEntity extends BaseEntity { 21 | 22 | @ManyToOne 23 | @JoinColumn(name = "room_id") 24 | private RoomEntity room; 25 | 26 | @ManyToOne 27 | @JoinColumn(name = "room_type_id") 28 | private RoomTypeEntity roomType; 29 | 30 | private Long defaultRate; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/rate/repository/RateRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.rate.repository; 2 | 3 | import com.danielmichalski.reservations.domain.rate.entity.RateEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface RateRepository extends JpaRepository { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/rate/service/RateService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.rate.service; 2 | 3 | import com.danielmichalski.reservations.domain.rate.entity.RateEntity; 4 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 6 | 7 | import java.util.List; 8 | 9 | public interface RateService { 10 | 11 | @TransactionalReadOnly 12 | List findAll(); 13 | 14 | @TransactionalWrite 15 | void remove(RateEntity rate); 16 | 17 | @TransactionalWrite 18 | void save(RateEntity rate); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/rate/service/RateServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.rate.service; 2 | 3 | import com.danielmichalski.reservations.domain.rate.entity.RateEntity; 4 | import com.danielmichalski.reservations.domain.rate.repository.RateRepository; 5 | import lombok.AllArgsConstructor; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | @AllArgsConstructor 12 | class RateServiceImpl implements RateService { 13 | 14 | private final RateRepository rateRepository; 15 | 16 | @Override 17 | public List findAll() { 18 | return rateRepository.findAll(); 19 | } 20 | 21 | @Override 22 | public void remove(RateEntity rate) { 23 | rateRepository.delete(rate); 24 | } 25 | 26 | @Override 27 | public void save(RateEntity rate) { 28 | rateRepository.save(rate); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/rate/validation/RateValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.rate.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.rate.entity.RateEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | 13 | @Component 14 | public class RateValidator extends ValidationSupport implements Validator { 15 | 16 | @Override 17 | public Optional validate(RateEntity rate) { 18 | if (isNullValue(rate.getRoom()) 19 | || isNullValue(rate.getRoomType()) 20 | || isValueNotGreaterThanZero(rate.getDefaultRate())) { 21 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 22 | } 23 | return Optional.empty(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/entity/ReservationStatusEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import jakarta.persistence.Entity; 5 | import jakarta.persistence.Table; 6 | import lombok.AccessLevel; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Getter; 9 | import lombok.NoArgsConstructor; 10 | 11 | @Entity 12 | @Table(name = "reservation_status") 13 | @AllArgsConstructor 14 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 15 | @Getter 16 | public class ReservationStatusEntity extends BaseEntity { 17 | 18 | private String status; 19 | 20 | @Override 21 | public String toString() { 22 | return status; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/repository/ReservationRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.repository; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface ReservationRepository extends JpaRepository { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/repository/ReservationStatusRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.repository; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationStatusEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface ReservationStatusRepository extends JpaRepository { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/service/ReservationService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.service; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationEntity; 4 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 6 | 7 | import java.util.List; 8 | 9 | public interface ReservationService { 10 | 11 | @TransactionalReadOnly 12 | List findAll(); 13 | 14 | @TransactionalWrite 15 | void remove(ReservationEntity reservation); 16 | 17 | @TransactionalWrite 18 | void save(ReservationEntity reservation); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/service/ReservationServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.service; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationEntity; 4 | import com.danielmichalski.reservations.domain.reservation.repository.ReservationRepository; 5 | import lombok.AllArgsConstructor; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | @AllArgsConstructor 12 | class ReservationServiceImpl implements ReservationService { 13 | 14 | private final ReservationRepository reservationRepository; 15 | 16 | @Override 17 | public List findAll() { 18 | return reservationRepository.findAll(); 19 | } 20 | 21 | @Override 22 | public void remove(ReservationEntity reservation) { 23 | reservationRepository.delete(reservation); 24 | } 25 | 26 | @Override 27 | public void save(ReservationEntity reservation) { 28 | reservationRepository.save(reservation); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/service/ReservationStatusService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.service; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationStatusEntity; 4 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 6 | 7 | import java.util.List; 8 | 9 | public interface ReservationStatusService { 10 | 11 | @TransactionalReadOnly 12 | List findAll(); 13 | 14 | @TransactionalWrite 15 | void remove(ReservationStatusEntity reservationStatus); 16 | 17 | @TransactionalWrite 18 | void save(ReservationStatusEntity reservationStatus); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/service/ReservationStatusServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.service; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationStatusEntity; 4 | import com.danielmichalski.reservations.domain.reservation.repository.ReservationStatusRepository; 5 | import lombok.AllArgsConstructor; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | @AllArgsConstructor 12 | class ReservationStatusServiceImpl implements ReservationStatusService { 13 | 14 | private final ReservationStatusRepository reservationStatusRepository; 15 | 16 | @Override 17 | public List findAll() { 18 | return reservationStatusRepository.findAll(); 19 | } 20 | 21 | @Override 22 | public void remove(ReservationStatusEntity reservationStatus) { 23 | reservationStatusRepository.delete(reservationStatus); 24 | } 25 | 26 | @Override 27 | public void save(ReservationStatusEntity reservationStatus) { 28 | reservationStatusRepository.save(reservationStatus); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/validation/ReservationStatusValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationStatusEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | 13 | @Component 14 | public class ReservationStatusValidator extends ValidationSupport implements Validator { 15 | 16 | @Override 17 | public Optional validate(ReservationStatusEntity reservationStatus) { 18 | if (isNullOrEmptyString(reservationStatus.getStatus())) { 19 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 20 | } 21 | return Optional.empty(); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/reservation/validation/ReservationValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.reservation.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.DATE_FROM_MUST_BE_EARLIER_THAN_TO_DATE; 12 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 13 | import static java.util.Optional.empty; 14 | 15 | @Component 16 | public class ReservationValidator extends ValidationSupport implements Validator { 17 | 18 | @Override 19 | public Optional validate(ReservationEntity reservation) { 20 | if (isNullValue(reservation.getReservationStatus()) 21 | || isNullValue(reservation.getPayment()) 22 | || isNullValue(reservation.getClient()) 23 | || isNullValue(reservation.getFromDate()) 24 | || isNullValue(reservation.getToDate()) 25 | || isNullValue(reservation.getReservationDate()) 26 | || isValueNotGreaterThanZero(reservation.getAmount())) { 27 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 28 | } 29 | if (reservation.getFromDate().after(reservation.getToDate())) { 30 | return Optional.of(new ValidationError(DATE_FROM_MUST_BE_EARLIER_THAN_TO_DATE)); 31 | } 32 | return empty(); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/dto/RoomStatusesCountDto.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.dto; 2 | 3 | public record RoomStatusesCountDto(String status, long count) { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/entity/RoomEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import jakarta.persistence.Column; 5 | import jakarta.persistence.Entity; 6 | import jakarta.persistence.JoinColumn; 7 | import jakarta.persistence.ManyToOne; 8 | import jakarta.persistence.Table; 9 | import lombok.AccessLevel; 10 | import lombok.AllArgsConstructor; 11 | import lombok.Getter; 12 | import lombok.NoArgsConstructor; 13 | 14 | @Entity 15 | @Table(name = "room") 16 | @AllArgsConstructor 17 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 18 | @Getter 19 | public class RoomEntity extends BaseEntity { 20 | 21 | @ManyToOne 22 | @JoinColumn(name = "room_status_id") 23 | private RoomStatusEntity roomStatus; 24 | 25 | @Column(name = "number_of_people") 26 | private Integer numberOfPeople; 27 | 28 | @Column(name = "description") 29 | private String description; 30 | 31 | @Override 32 | public String toString() { 33 | return description; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/entity/RoomStatusEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import jakarta.persistence.Entity; 5 | import jakarta.persistence.Table; 6 | import lombok.AccessLevel; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Getter; 9 | import lombok.NoArgsConstructor; 10 | 11 | @Entity 12 | @Table(name = "room_status") 13 | @AllArgsConstructor 14 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 15 | @Getter 16 | public class RoomStatusEntity extends BaseEntity { 17 | 18 | private String status; 19 | 20 | private String statusDescription; 21 | 22 | @Override 23 | public String toString() { 24 | return status + " " + statusDescription; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/entity/RoomTypeEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.entity; 2 | 3 | import com.danielmichalski.reservations.commons.entity.BaseEntity; 4 | import jakarta.persistence.Entity; 5 | import jakarta.persistence.Table; 6 | import lombok.AccessLevel; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Getter; 9 | import lombok.NoArgsConstructor; 10 | 11 | @Entity 12 | @Table(name = "room_type") 13 | @AllArgsConstructor 14 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 15 | @Getter 16 | public class RoomTypeEntity extends BaseEntity { 17 | 18 | private String description; 19 | 20 | private Integer multiplier; 21 | 22 | @Override 23 | public String toString() { 24 | return description; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/entity/RoomXReservationEntity.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.entity; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationEntity; 4 | import jakarta.persistence.EmbeddedId; 5 | import jakarta.persistence.Entity; 6 | import jakarta.persistence.Table; 7 | 8 | @Entity 9 | @Table(name = "room_x_reservation") 10 | public class RoomXReservationEntity { 11 | 12 | @EmbeddedId 13 | private RoomXReservationPK roomXReservationPK; 14 | 15 | private Integer roomPrice; 16 | 17 | public RoomXReservationEntity() { 18 | } 19 | 20 | public RoomXReservationEntity(RoomXReservationPK roomXReservationPK) { 21 | this.roomXReservationPK = roomXReservationPK; 22 | } 23 | 24 | public RoomEntity getRoom() { 25 | return roomXReservationPK.getRoom(); 26 | } 27 | 28 | public void setRoom(RoomEntity room) { 29 | roomXReservationPK.setRoom(room); 30 | } 31 | 32 | public ReservationEntity getReservation() { 33 | return roomXReservationPK.getReservation(); 34 | } 35 | 36 | public void setReservation(ReservationEntity reservation) { 37 | roomXReservationPK.setReservation(reservation); 38 | } 39 | 40 | public long getRoomPrice() { 41 | return roomPrice; 42 | } 43 | 44 | public void setRoomPrice(Integer roomPrice) { 45 | this.roomPrice = roomPrice; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/entity/RoomXReservationPK.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.entity; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationEntity; 4 | import jakarta.persistence.Embeddable; 5 | import jakarta.persistence.JoinColumn; 6 | import jakarta.persistence.ManyToOne; 7 | import lombok.AccessLevel; 8 | import lombok.AllArgsConstructor; 9 | import lombok.Data; 10 | import lombok.NoArgsConstructor; 11 | 12 | import java.io.Serializable; 13 | 14 | @Embeddable 15 | @AllArgsConstructor 16 | @NoArgsConstructor(access = AccessLevel.PROTECTED) 17 | @Data 18 | public class RoomXReservationPK implements Serializable { 19 | 20 | @ManyToOne 21 | @JoinColumn(name = "room_id") 22 | private RoomEntity room; 23 | 24 | @ManyToOne 25 | @JoinColumn(name = "reservation_id") 26 | private ReservationEntity reservation; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/repository/RoomRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.repository; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface RoomRepository extends JpaRepository { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/repository/RoomStatusRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.repository; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomStatusEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.Query; 6 | import org.springframework.stereotype.Repository; 7 | 8 | @Repository 9 | public interface RoomStatusRepository extends JpaRepository { 10 | 11 | @Query(""" 12 | SELECT rs.status AS name, COUNT(r.id) AS count 13 | FROM RoomEntity r 14 | JOIN r.roomStatus rs 15 | GROUP BY rs.status 16 | """ 17 | ) 18 | Object[][] getRoomStatusesCount(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/repository/RoomTypeRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.repository; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomTypeEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface RoomTypeRepository extends JpaRepository { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/repository/RoomXReservationRepository.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.repository; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomXReservationEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface RoomXReservationRepository extends JpaRepository { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/service/RoomService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.service; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomEntity; 4 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 6 | 7 | import java.util.List; 8 | 9 | public interface RoomService { 10 | 11 | @TransactionalReadOnly 12 | List findAll(); 13 | 14 | @TransactionalWrite 15 | void remove(RoomEntity room); 16 | 17 | @TransactionalWrite 18 | void save(RoomEntity room); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/service/RoomServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.service; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomEntity; 4 | import com.danielmichalski.reservations.domain.room.repository.RoomRepository; 5 | import lombok.AllArgsConstructor; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | @AllArgsConstructor 12 | class RoomServiceImpl implements RoomService { 13 | 14 | private final RoomRepository roomRepository; 15 | 16 | @Override 17 | public List findAll() { 18 | return roomRepository.findAll(); 19 | } 20 | 21 | @Override 22 | public void remove(RoomEntity room) { 23 | roomRepository.delete(room); 24 | } 25 | 26 | @Override 27 | public void save(RoomEntity room) { 28 | roomRepository.save(room); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/service/RoomStatusService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.service; 2 | 3 | import com.danielmichalski.reservations.domain.room.dto.RoomStatusesCountDto; 4 | import com.danielmichalski.reservations.domain.room.entity.RoomStatusEntity; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 6 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 7 | 8 | import java.util.List; 9 | 10 | public interface RoomStatusService { 11 | 12 | @TransactionalReadOnly 13 | List findAll(); 14 | 15 | @TransactionalWrite 16 | void remove(RoomStatusEntity roomStatus); 17 | 18 | @TransactionalWrite 19 | void save(RoomStatusEntity roomStatus); 20 | 21 | @TransactionalReadOnly 22 | List getRoomStatusesCount(); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/service/RoomStatusServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.service; 2 | 3 | import com.danielmichalski.reservations.domain.room.dto.RoomStatusesCountDto; 4 | import com.danielmichalski.reservations.domain.room.entity.RoomStatusEntity; 5 | import com.danielmichalski.reservations.domain.room.repository.RoomStatusRepository; 6 | import lombok.AllArgsConstructor; 7 | import org.springframework.stereotype.Service; 8 | 9 | import java.util.List; 10 | import java.util.stream.Stream; 11 | 12 | import static java.util.stream.Collectors.toList; 13 | 14 | @Service 15 | @AllArgsConstructor 16 | class RoomStatusServiceImpl implements RoomStatusService { 17 | 18 | public static final int STATUS_INDEX = 0; 19 | public static final int COUNT_INDEX = 1; 20 | 21 | private final RoomStatusRepository roomStatusRepository; 22 | 23 | @Override 24 | public List findAll() { 25 | return roomStatusRepository.findAll(); 26 | } 27 | 28 | @Override 29 | public void remove(RoomStatusEntity roomStatus) { 30 | roomStatusRepository.delete(roomStatus); 31 | } 32 | 33 | @Override 34 | public void save(RoomStatusEntity roomStatus) { 35 | roomStatusRepository.save(roomStatus); 36 | } 37 | 38 | @Override 39 | public List getRoomStatusesCount() { 40 | Object[][] roomStatusesCount = roomStatusRepository.getRoomStatusesCount(); 41 | return Stream.of(roomStatusesCount) 42 | .map(this::convertToRoomStatusesCountDto) 43 | .collect(toList()); 44 | } 45 | 46 | private RoomStatusesCountDto convertToRoomStatusesCountDto(Object... rsc) { 47 | String status = (String) rsc[STATUS_INDEX]; 48 | long count = (long) rsc[COUNT_INDEX]; 49 | return new RoomStatusesCountDto(status, count); 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/service/RoomTypeService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.service; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomTypeEntity; 4 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 6 | 7 | import java.util.List; 8 | 9 | public interface RoomTypeService { 10 | 11 | @TransactionalReadOnly 12 | List findAll(); 13 | 14 | @TransactionalWrite 15 | void remove(RoomTypeEntity roomType); 16 | 17 | @TransactionalWrite 18 | void save(RoomTypeEntity roomType); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/service/RoomTypeServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.service; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomTypeEntity; 4 | import com.danielmichalski.reservations.domain.room.repository.RoomTypeRepository; 5 | import lombok.AllArgsConstructor; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | @AllArgsConstructor 12 | class RoomTypeServiceImpl implements RoomTypeService { 13 | 14 | private final RoomTypeRepository roomTypeRepository; 15 | 16 | @Override 17 | public List findAll() { 18 | return roomTypeRepository.findAll(); 19 | } 20 | 21 | @Override 22 | public void remove(RoomTypeEntity roomType) { 23 | roomTypeRepository.delete(roomType); 24 | } 25 | 26 | @Override 27 | public void save(RoomTypeEntity roomType) { 28 | roomTypeRepository.save(roomType); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/service/RoomXReservationService.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.service; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomXReservationEntity; 4 | import com.danielmichalski.reservations.util.annotation.TransactionalReadOnly; 5 | import com.danielmichalski.reservations.util.annotation.TransactionalWrite; 6 | 7 | import java.util.List; 8 | 9 | public interface RoomXReservationService { 10 | 11 | @TransactionalReadOnly 12 | List findAll(); 13 | 14 | @TransactionalWrite 15 | void remove(RoomXReservationEntity roomXReservation); 16 | 17 | @TransactionalWrite 18 | void save(RoomXReservationEntity roomXReservation); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/service/RoomXReservationServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.service; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomXReservationEntity; 4 | import com.danielmichalski.reservations.domain.room.repository.RoomXReservationRepository; 5 | import lombok.AllArgsConstructor; 6 | import org.springframework.stereotype.Service; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | @AllArgsConstructor 12 | class RoomXReservationServiceImpl implements RoomXReservationService { 13 | 14 | private final RoomXReservationRepository roomXReservationRepository; 15 | 16 | @Override 17 | public List findAll() { 18 | return roomXReservationRepository.findAll(); 19 | } 20 | 21 | @Override 22 | public void remove(RoomXReservationEntity roomXReservation) { 23 | roomXReservationRepository.delete(roomXReservation); 24 | } 25 | 26 | @Override 27 | public void save(RoomXReservationEntity roomXReservation) { 28 | roomXReservationRepository.save(roomXReservation); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/validation/RoomStatusValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.room.entity.RoomStatusEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | 13 | @Component 14 | public class RoomStatusValidator extends ValidationSupport implements Validator { 15 | 16 | @Override 17 | public Optional validate(RoomStatusEntity roomStatus) { 18 | if (isNullOrEmptyString(roomStatus.getStatus()) 19 | || isNullOrEmptyString(roomStatus.getStatusDescription())) { 20 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 21 | } 22 | return Optional.empty(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/validation/RoomTypeValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.room.entity.RoomTypeEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | 13 | @Component 14 | public class RoomTypeValidator extends ValidationSupport implements Validator { 15 | 16 | @Override 17 | public Optional validate(RoomTypeEntity roomType) { 18 | if (isNullOrEmptyString(roomType.getDescription()) 19 | || isValueNotGreaterThanZero(Long.valueOf(roomType.getMultiplier()))) { 20 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 21 | } 22 | return Optional.empty(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/validation/RoomValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.room.entity.RoomEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | 13 | @Component 14 | public class RoomValidator extends ValidationSupport implements Validator { 15 | 16 | @Override 17 | public Optional validate(RoomEntity room) { 18 | if (isNullValue(room.getRoomStatus()) 19 | || isValueNotGreaterThanZero(Long.valueOf(room.getNumberOfPeople())) 20 | || isNullOrEmptyString(room.getDescription())) { 21 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 22 | } 23 | return Optional.empty(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/domain/room/validation/RoomXReservationValidator.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.domain.room.validation; 2 | 3 | import com.danielmichalski.reservations.commons.validation.ValidationError; 4 | import com.danielmichalski.reservations.commons.validation.ValidationSupport; 5 | import com.danielmichalski.reservations.commons.validation.Validator; 6 | import com.danielmichalski.reservations.domain.room.entity.RoomXReservationEntity; 7 | import org.springframework.stereotype.Component; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.danielmichalski.reservations.util.constant.ConstMessagesEN.ValidationMessages.REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA; 12 | 13 | @Component 14 | public class RoomXReservationValidator extends ValidationSupport implements Validator { 15 | 16 | @Override 17 | public Optional validate(RoomXReservationEntity roomXReservation) { 18 | if (isNullValue(roomXReservation.getReservation()) 19 | || isNullValue(roomXReservation.getReservation()) 20 | || isValueNotGreaterThanZero(roomXReservation.getRoomPrice())) { 21 | return Optional.of(new ValidationError(REQUIRED_DATA_NOT_FILLED_OR_BAD_DATA)); 22 | } 23 | return Optional.empty(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/address/model/AddressTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.address.model; 2 | 3 | import com.danielmichalski.reservations.domain.address.entity.AddressEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class AddressTableModel extends DefaultTableModel { 11 | 12 | private static final int STREET_INDEX = 0; 13 | private static final int HOUSE_NUMBER_INDEX = 1; 14 | private static final int FLAT_NUMBER_INDEX = 2; 15 | private static final int CITY_INDEX = 3; 16 | private static final int POSTAL_CODE_INDEX = 4; 17 | 18 | @Override 19 | public String[] getColumnLabels() { 20 | return new String[]{ 21 | ConstMessagesEN.Labels.STREET, 22 | ConstMessagesEN.Labels.HOUSE_NUMBER, 23 | ConstMessagesEN.Labels.FLAT_NUMBER, 24 | ConstMessagesEN.Labels.CITY, 25 | ConstMessagesEN.Labels.POSTAL_CODE}; 26 | } 27 | 28 | @Override 29 | public Object getValueAt(int rowIndex, int columnIndex) { 30 | AddressEntity address = entities.get(rowIndex); 31 | 32 | switch (columnIndex) { 33 | case STREET_INDEX: 34 | return address.getStreet(); 35 | case HOUSE_NUMBER_INDEX: 36 | return address.getHouseNumber(); 37 | case FLAT_NUMBER_INDEX: 38 | return address.getFlatNumber(); 39 | case CITY_INDEX: 40 | return address.getCity(); 41 | case POSTAL_CODE_INDEX: 42 | return address.getPostalCode(); 43 | default: 44 | return Strings.EMPTY; 45 | } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/address/view/AddressTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.address.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class AddressTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/address/view/AddressTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.address.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddressTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final AddressTablePanel tablePanel; 22 | private final AddressTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.ADDRESSES); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/address/view/AddressTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.address.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.address.model.AddressTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class AddressTablePanel extends JPanel { 17 | 18 | private final AddressTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | AddressTablePanel(AddressTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/address/view/modal/AddAddressFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.address.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddAddressFrame extends JDialog { 17 | 18 | private final AddressFormPanel formPanel; 19 | private final AddressFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.ADDRESS_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/address/view/modal/AddressFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.address.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class AddressFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/client/model/AddressComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.client.model; 2 | 3 | import com.danielmichalski.reservations.domain.address.entity.AddressEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class AddressComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/client/model/ClientTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.client.model; 2 | 3 | import com.danielmichalski.reservations.domain.client.entity.ClientEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class ClientTableModel extends DefaultTableModel { 11 | 12 | private static final int NAME_INDEX = 0; 13 | private static final int SURNAME_INDEX = 1; 14 | private static final int PESEL_INDEX = 2; 15 | private static final int PHONE_NUMBER_INDEX = 3; 16 | private static final int EMAIL_INDEX = 4; 17 | private static final int ADDRESS_INDEX = 5; 18 | 19 | @Override 20 | public String[] getColumnLabels() { 21 | return new String[]{ 22 | ConstMessagesEN.Labels.NAME, 23 | ConstMessagesEN.Labels.SURNAME, 24 | ConstMessagesEN.Labels.PESEL, 25 | ConstMessagesEN.Labels.PHONE_NUMBER, 26 | ConstMessagesEN.Labels.EMAIL, 27 | ConstMessagesEN.Labels.ADDRESS}; 28 | } 29 | 30 | @Override 31 | public Object getValueAt(int rowIndex, int columnIndex) { 32 | ClientEntity client = entities.get(rowIndex); 33 | 34 | switch (columnIndex) { 35 | case NAME_INDEX: 36 | return client.getName(); 37 | case SURNAME_INDEX: 38 | return client.getSurname(); 39 | case PESEL_INDEX: 40 | return client.getPesel(); 41 | case PHONE_NUMBER_INDEX: 42 | return client.getPhoneNumber(); 43 | case EMAIL_INDEX: 44 | return client.getEmail(); 45 | case ADDRESS_INDEX: 46 | return client.getAddress(); 47 | default: 48 | return Strings.EMPTY; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/client/view/ClientFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.client.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class ClientFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 750; 19 | private static final int DEFAULT_HEIGHT = 340; 20 | 21 | private final ClientTablePanel clientTablePanel; 22 | private final TableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.CLIENTS); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(clientTablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/client/view/ClientTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.client.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.client.model.ClientTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class ClientTablePanel extends JPanel { 17 | 18 | private final ClientTableModel clientTableModel; 19 | 20 | private JTable clientTable; 21 | 22 | ClientTablePanel(ClientTableModel clientTableModel) { 23 | this.clientTableModel = clientTableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | clientTable = new JTable(clientTableModel); 39 | clientTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(clientTable); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/client/view/TableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.client.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class TableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/client/view/modal/AddClientFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.client.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import java.awt.BorderLayout; 11 | 12 | @Component 13 | @AllArgsConstructor 14 | @Getter 15 | public class AddClientFrame extends JDialog { 16 | 17 | private final FormPanel formPanel; 18 | private final FormBtnPanel formBtnPanel; 19 | 20 | @PostConstruct 21 | @SuppressWarnings("PMD.UnusedPrivateMethod") 22 | private void prepareFrame() { 23 | setFrameUp(); 24 | initComponents(); 25 | pack(); 26 | } 27 | 28 | private void setFrameUp() { 29 | setTitle(ConstMessagesEN.DialogTitles.CLIENT_MODAL); 30 | setDefaultCloseOperation(HIDE_ON_CLOSE); 31 | setLocationRelativeTo(null); 32 | setResizable(false); 33 | setModal(true); 34 | } 35 | 36 | private void initComponents() { 37 | add(formPanel, BorderLayout.CENTER); 38 | add(formBtnPanel, BorderLayout.SOUTH); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/client/view/modal/FormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.client.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class FormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void initPanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/payment/model/PaymentMethodComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.payment.model; 2 | 3 | import com.danielmichalski.reservations.domain.payment.entity.PaymentMethodEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class PaymentMethodComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/payment/model/PaymentTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.payment.model; 2 | 3 | import com.danielmichalski.reservations.commons.date.DateFormatterService; 4 | import com.danielmichalski.reservations.domain.payment.entity.PaymentEntity; 5 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 6 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 7 | import lombok.AllArgsConstructor; 8 | import org.apache.logging.log4j.util.Strings; 9 | import org.springframework.stereotype.Component; 10 | 11 | @Component 12 | @AllArgsConstructor 13 | public class PaymentTableModel extends DefaultTableModel { 14 | 15 | private static final int PAYMENT_METHOD_INDEX = 0; 16 | private static final int VALUE_INDEX = 1; 17 | private static final int DATE_OF_PAYMENT_INDEX = 2; 18 | 19 | private final DateFormatterService dateFormatterService; 20 | 21 | @Override 22 | public Object getValueAt(int rowIndex, int columnIndex) { 23 | PaymentEntity payment = entities.get(rowIndex); 24 | switch (columnIndex) { 25 | case PAYMENT_METHOD_INDEX: 26 | return payment.getPaymentMethod(); 27 | case VALUE_INDEX: 28 | return payment.getValue(); 29 | case DATE_OF_PAYMENT_INDEX: 30 | return dateFormatterService.formatDate(payment.getDateOfPayment()); 31 | default: 32 | return Strings.EMPTY; 33 | } 34 | } 35 | 36 | @Override 37 | public String[] getColumnLabels() { 38 | return new String[]{ 39 | ConstMessagesEN.Labels.PAYMENT_METHOD, 40 | ConstMessagesEN.Labels.VALUE, 41 | ConstMessagesEN.Labels.DATE_OF_PAYMENT}; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/payment/view/PaymentTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.payment.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class PaymentTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/payment/view/PaymentTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.payment.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class PaymentTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final PaymentTablePanel tablePanel; 22 | private final PaymentTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.PAYMENTS); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/payment/view/PaymentTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.payment.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.payment.model.PaymentTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class PaymentTablePanel extends JPanel { 17 | 18 | private final PaymentTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | PaymentTablePanel(PaymentTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/payment/view/modal/AddPaymentFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.payment.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddPaymentFrame extends JDialog { 17 | 18 | private final PaymentFormPanel formPanel; 19 | private final PaymentFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.PAYMENT_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/payment/view/modal/PaymentFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.payment.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class PaymentFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/paymentmethod/model/PaymentMethodTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.paymentmethod.model; 2 | 3 | import com.danielmichalski.reservations.domain.payment.entity.PaymentMethodEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class PaymentMethodTableModel extends DefaultTableModel { 11 | 12 | private static final int NAME_INDEX = 0; 13 | 14 | @Override 15 | public Object getValueAt(int rowIndex, int columnIndex) { 16 | PaymentMethodEntity paymentMethod = entities.get(rowIndex); 17 | if (columnIndex == NAME_INDEX) { 18 | return paymentMethod.getName(); 19 | } 20 | return Strings.EMPTY; 21 | } 22 | 23 | @Override 24 | public String[] getColumnLabels() { 25 | return new String[]{ 26 | ConstMessagesEN.Labels.PAYMENT_METHOD}; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/paymentmethod/view/PaymentMethodTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.paymentmethod.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class PaymentMethodTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/paymentmethod/view/PaymentMethodTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.paymentmethod.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class PaymentMethodTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final PaymentMethodTablePanel tablePanel; 22 | private final PaymentMethodTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.PAYMENT_METHODS); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/paymentmethod/view/PaymentMethodTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.paymentmethod.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.paymentmethod.model.PaymentMethodTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class PaymentMethodTablePanel extends JPanel { 17 | 18 | private final PaymentMethodTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | PaymentMethodTablePanel(PaymentMethodTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/paymentmethod/view/modal/AddPaymentMethodFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.paymentmethod.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddPaymentMethodFrame extends JDialog { 17 | 18 | private final PaymentMethodFormPanel formPanel; 19 | private final PaymentMethodFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.PAYMENT_METHOD_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/paymentmethod/view/modal/PaymentMethodFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.paymentmethod.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class PaymentMethodFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/paymentmethod/view/modal/PaymentMethodFormPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.paymentmethod.view.modal; 2 | 3 | import com.danielmichalski.reservations.domain.payment.entity.PaymentMethodEntity; 4 | import com.danielmichalski.reservations.util.border.Borders; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import jakarta.annotation.PostConstruct; 7 | import org.apache.logging.log4j.util.Strings; 8 | import org.springframework.stereotype.Component; 9 | 10 | import javax.swing.JLabel; 11 | import javax.swing.JPanel; 12 | import javax.swing.JTextField; 13 | import java.awt.GridLayout; 14 | 15 | @Component 16 | public class PaymentMethodFormPanel extends JPanel { 17 | 18 | private static final int LAYOUT_ROWS = 1; 19 | private static final int LAYOUT_COLS = 2; 20 | private static final int HORIZONTAL_GAP = 0; 21 | private static final int VERTICAL_GAP = 20; 22 | private static final int TEXT_FIELD_COLUMNS = 20; 23 | 24 | private JTextField paymentMethodTF; 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setBorder(Borders.createEmptyBorder()); 35 | setLayout(new GridLayout(LAYOUT_ROWS, LAYOUT_COLS, HORIZONTAL_GAP, VERTICAL_GAP)); 36 | } 37 | 38 | private void initComponents() { 39 | JLabel paymentMethodLbl = new JLabel(ConstMessagesEN.Labels.PAYMENT_METHOD); 40 | paymentMethodTF = new JTextField(TEXT_FIELD_COLUMNS); 41 | add(paymentMethodLbl); 42 | add(paymentMethodTF); 43 | } 44 | 45 | public PaymentMethodEntity getEntityFromForm() { 46 | return new PaymentMethodEntity(paymentMethodTF.getText()); 47 | } 48 | 49 | public void clearForm() { 50 | paymentMethodTF.setText(Strings.EMPTY); 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/rate/model/RateTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.rate.model; 2 | 3 | import com.danielmichalski.reservations.domain.rate.entity.RateEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class RateTableModel extends DefaultTableModel { 11 | 12 | private static final int ROOM_INDEX = 0; 13 | private static final int ROOM_TYPE_INDEX = 1; 14 | private static final int DEFAULT_RATE_INDEX = 2; 15 | 16 | @Override 17 | public Object getValueAt(int rowIndex, int columnIndex) { 18 | RateEntity rate = entities.get(rowIndex); 19 | switch (columnIndex) { 20 | case ROOM_INDEX: 21 | return rate.getRoom(); 22 | case ROOM_TYPE_INDEX: 23 | return rate.getRoomType(); 24 | case DEFAULT_RATE_INDEX: 25 | return rate.getDefaultRate(); 26 | default: 27 | return Strings.EMPTY; 28 | } 29 | } 30 | 31 | @Override 32 | public String[] getColumnLabels() { 33 | return new String[]{ 34 | ConstMessagesEN.Labels.ROOM, 35 | ConstMessagesEN.Labels.ROOM_TYPE, 36 | ConstMessagesEN.Labels.BASIC_RATE}; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/rate/model/RoomComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.rate.model; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class RoomComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/rate/model/RoomTypeComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.rate.model; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomTypeEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class RoomTypeComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/rate/view/RateTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.rate.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RateTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/rate/view/RateTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.rate.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class RateTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final RateTablePanel tablePanel; 22 | private final RateTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.RATES); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/rate/view/RateTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.rate.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.rate.model.RateTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class RateTablePanel extends JPanel { 17 | 18 | private final RateTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | RateTablePanel(RateTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/rate/view/modal/AddRateFame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.rate.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddRateFame extends JDialog { 17 | 18 | private final RateFormPanel formPanel; 19 | private final RateFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.RATE_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/rate/view/modal/RateFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.rate.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RateFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservation/model/ClientComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservation.model; 2 | 3 | import com.danielmichalski.reservations.domain.client.entity.ClientEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class ClientComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservation/model/PaymentComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservation.model; 2 | 3 | import com.danielmichalski.reservations.domain.payment.entity.PaymentEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class PaymentComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservation/model/ReservationStatusComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservation.model; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationStatusEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class ReservationStatusComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservation/view/ReservationTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservation.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class ReservationTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservation/view/ReservationTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservation.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class ReservationTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 900; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final ReservationTablePanel tablePanel; 22 | private final ReservationTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.RESERVATIONS); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservation/view/ReservationTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservation.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.reservation.model.ReservationTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class ReservationTablePanel extends JPanel { 17 | 18 | private final ReservationTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | ReservationTablePanel(ReservationTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservation/view/modal/AddReservationFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservation.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddReservationFrame extends JDialog { 17 | 18 | private final ReservationFormPanel formPanel; 19 | private final ReservationFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.RESERVATION_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservation/view/modal/ReservationFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservation.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class ReservationFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservationstatus/model/ReservationStatusTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservationstatus.model; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationStatusEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class ReservationStatusTableModel extends DefaultTableModel { 11 | 12 | private static final int RESERVATION_STATUS_INDEX = 0; 13 | 14 | @Override 15 | public Object getValueAt(int rowIndex, int columnIndex) { 16 | ReservationStatusEntity reservationStatus = entities.get(rowIndex); 17 | if (columnIndex == RESERVATION_STATUS_INDEX) { 18 | return reservationStatus.getStatus(); 19 | } 20 | return Strings.EMPTY; 21 | } 22 | 23 | @Override 24 | public String[] getColumnLabels() { 25 | return new String[]{ 26 | ConstMessagesEN.Labels.RESERVATION_STATUS}; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservationstatus/view/ReservationStatusTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservationstatus.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class ReservationStatusTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservationstatus/view/ReservationStatusTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservationstatus.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class ReservationStatusTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final ReservationStatusTablePanel tablePanel; 22 | private final ReservationStatusTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.RESERVATION_STATUSES); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservationstatus/view/ReservationStatusTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservationstatus.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.reservationstatus.model.ReservationStatusTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class ReservationStatusTablePanel extends JPanel { 17 | 18 | private final ReservationStatusTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | ReservationStatusTablePanel(ReservationStatusTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservationstatus/view/modal/AddReservationStatusFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservationstatus.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddReservationStatusFrame extends JDialog { 17 | 18 | private final ReservationStatusFormPanel formPanel; 19 | private final ReservationStatusFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.ADDRESS_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservationstatus/view/modal/ReservationStatusFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservationstatus.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class ReservationStatusFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/reservationstatus/view/modal/ReservationStatusFormPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.reservationstatus.view.modal; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationStatusEntity; 4 | import com.danielmichalski.reservations.util.border.Borders; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import jakarta.annotation.PostConstruct; 7 | import org.apache.logging.log4j.util.Strings; 8 | import org.springframework.stereotype.Component; 9 | 10 | import javax.swing.JLabel; 11 | import javax.swing.JPanel; 12 | import javax.swing.JTextField; 13 | import java.awt.GridLayout; 14 | 15 | @Component 16 | public class ReservationStatusFormPanel extends JPanel { 17 | 18 | private static final int LAYOUT_ROWS = 1; 19 | private static final int LAYOUT_COLS = 2; 20 | private static final int HORIZONTAL_GAP = 0; 21 | private static final int VERTICAL_GAP = 20; 22 | private static final int TEXT_FIELD_COLUMNS = 20; 23 | 24 | private JTextField reservationStatusTF; 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setBorder(Borders.createEmptyBorder()); 35 | setLayout(new GridLayout(LAYOUT_ROWS, LAYOUT_COLS, HORIZONTAL_GAP, VERTICAL_GAP)); 36 | } 37 | 38 | private void initComponents() { 39 | JLabel reservationStatusLbl = new JLabel(ConstMessagesEN.Labels.RESERVATION_STATUS); 40 | reservationStatusTF = new JTextField(TEXT_FIELD_COLUMNS); 41 | add(reservationStatusLbl); 42 | add(reservationStatusTF); 43 | } 44 | 45 | public ReservationStatusEntity getEntityFromForm() { 46 | return new ReservationStatusEntity( 47 | reservationStatusTF.getText() 48 | ); 49 | } 50 | 51 | public void clearForm() { 52 | reservationStatusTF.setText(Strings.EMPTY); 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/room/model/RoomStatusComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.room.model; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomStatusEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class RoomStatusComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/room/model/RoomTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.room.model; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class RoomTableModel extends DefaultTableModel { 11 | 12 | private static final int ROOM_STATUS_INDEX = 0; 13 | private static final int ROOM_NUMBER_OF_PEOPLE_INDEX = 1; 14 | private static final int ROOM_DESCRIPTION_INDEX = 2; 15 | 16 | @Override 17 | public Object getValueAt(int rowIndex, int columnIndex) { 18 | RoomEntity room = entities.get(rowIndex); 19 | switch (columnIndex) { 20 | case ROOM_STATUS_INDEX: 21 | return room.getRoomStatus(); 22 | case ROOM_NUMBER_OF_PEOPLE_INDEX: 23 | return room.getNumberOfPeople(); 24 | case ROOM_DESCRIPTION_INDEX: 25 | return room.getDescription(); 26 | default: 27 | return Strings.EMPTY; 28 | } 29 | } 30 | 31 | @Override 32 | public String[] getColumnLabels() { 33 | return new String[]{ 34 | ConstMessagesEN.Labels.ROOM_STATUS, 35 | ConstMessagesEN.Labels.ROOM_NUMBER_OF_PEOPLE, 36 | ConstMessagesEN.Labels.ROOM_DESCRIPTION}; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/room/view/RoomTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.room.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RoomTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | public JButton getAddBtn() { 33 | return addBtn; 34 | } 35 | 36 | public JButton getRemoveBtn() { 37 | return removeBtn; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/room/view/RoomTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.room.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class RoomTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final RoomTablePanel tablePanel; 22 | private final RoomTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void preparePanel() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.ROOMS); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/room/view/RoomTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.room.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.room.model.RoomTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class RoomTablePanel extends JPanel { 17 | 18 | private final RoomTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | RoomTablePanel(RoomTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/room/view/modal/AddRoomFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.room.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddRoomFrame extends JDialog { 17 | 18 | private final RoomFormPanel formPanel; 19 | private final RoomFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.ROOM_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/room/view/modal/RoomFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.room.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RoomFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomstatus/model/RoomStatusTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomstatus.model; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomStatusEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class RoomStatusTableModel extends DefaultTableModel { 11 | 12 | private static final int ROOM_STATUS_INDEX = 0; 13 | private static final int ROOM_STATUS_DESCRIPTION_INDEX = 1; 14 | 15 | @Override 16 | public Object getValueAt(int rowIndex, int columnIndex) { 17 | RoomStatusEntity roomStatus = entities.get(rowIndex); 18 | switch (columnIndex) { 19 | case ROOM_STATUS_INDEX: 20 | return roomStatus.getStatus(); 21 | case ROOM_STATUS_DESCRIPTION_INDEX: 22 | return roomStatus.getStatusDescription(); 23 | default: 24 | return Strings.EMPTY; 25 | } 26 | } 27 | 28 | @Override 29 | public String[] getColumnLabels() { 30 | return new String[]{ 31 | ConstMessagesEN.Labels.ROOM_STATUS, 32 | ConstMessagesEN.Labels.ROOM_STATUS_DESCRIPTION}; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomstatus/view/RoomStatusTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomstatus.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RoomStatusTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomstatus/view/RoomStatusTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomstatus.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class RoomStatusTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final RoomStatusTablePanel tablePanel; 22 | private final RoomStatusTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.ROOM_STATUSES); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomstatus/view/RoomStatusTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomstatus.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.roomstatus.model.RoomStatusTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class RoomStatusTablePanel extends JPanel { 17 | 18 | private final RoomStatusTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | RoomStatusTablePanel(RoomStatusTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomstatus/view/modal/AddRoomStatusFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomstatus.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddRoomStatusFrame extends JDialog { 17 | 18 | private final RoomStatusFormPanel formPanel; 19 | private final RoomStatusFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.ROOM_STATUS_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomstatus/view/modal/RoomStatusFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomstatus.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RoomStatusFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomstatus/view/modal/RoomStatusFormPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomstatus.view.modal; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomStatusEntity; 4 | import com.danielmichalski.reservations.util.border.Borders; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import jakarta.annotation.PostConstruct; 7 | import org.apache.logging.log4j.util.Strings; 8 | import org.springframework.stereotype.Component; 9 | 10 | import javax.swing.JLabel; 11 | import javax.swing.JPanel; 12 | import javax.swing.JTextField; 13 | import java.awt.GridLayout; 14 | 15 | @Component 16 | public class RoomStatusFormPanel extends JPanel { 17 | 18 | private static final int LAYOUT_ROWS = 2; 19 | private static final int LAYOUT_COLS = 2; 20 | private static final int HORIZONTAL_GAP = 0; 21 | private static final int VERTICAL_GAP = 20; 22 | private static final int TEXT_FIELD_COLUMNS = 20; 23 | 24 | private JTextField roomStatusTF; 25 | private JTextField roomStatusDescriptionTF; 26 | 27 | @PostConstruct 28 | @SuppressWarnings("PMD.UnusedPrivateMethod") 29 | private void preparePanel() { 30 | setPanelUp(); 31 | initComponents(); 32 | } 33 | 34 | private void setPanelUp() { 35 | setBorder(Borders.createEmptyBorder()); 36 | setLayout(new GridLayout(LAYOUT_ROWS, LAYOUT_COLS, HORIZONTAL_GAP, VERTICAL_GAP)); 37 | } 38 | 39 | private void initComponents() { 40 | final JLabel roomStatusLbl = new JLabel(ConstMessagesEN.Labels.ROOM_STATUS); 41 | final JLabel roomStatusDescriptionLbl = new JLabel(ConstMessagesEN.Labels.ROOM_STATUS_DESCRIPTION); 42 | 43 | roomStatusTF = new JTextField(TEXT_FIELD_COLUMNS); 44 | roomStatusDescriptionTF = new JTextField(TEXT_FIELD_COLUMNS); 45 | 46 | add(roomStatusLbl); 47 | add(roomStatusTF); 48 | add(roomStatusDescriptionLbl); 49 | add(roomStatusDescriptionTF); 50 | } 51 | 52 | public RoomStatusEntity getEntityFromForm() { 53 | return new RoomStatusEntity( 54 | roomStatusTF.getText(), 55 | roomStatusDescriptionTF.getText() 56 | ); 57 | } 58 | 59 | public void clearForm() { 60 | roomStatusTF.setText(Strings.EMPTY); 61 | roomStatusDescriptionTF.setText(Strings.EMPTY); 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomtype/model/RoomTypeTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomtype.model; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomTypeEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class RoomTypeTableModel extends DefaultTableModel { 11 | 12 | private static final int ROOM_TYPE_INDEX = 0; 13 | private static final int ROOM_MULTIPLIER_INDEX = 1; 14 | 15 | @Override 16 | public Object getValueAt(int rowIndex, int columnIndex) { 17 | RoomTypeEntity roomType = entities.get(rowIndex); 18 | switch (columnIndex) { 19 | case ROOM_TYPE_INDEX: 20 | return roomType.getDescription(); 21 | case ROOM_MULTIPLIER_INDEX: 22 | return roomType.getMultiplier(); 23 | default: 24 | return Strings.EMPTY; 25 | } 26 | } 27 | 28 | @Override 29 | public String[] getColumnLabels() { 30 | return new String[]{ 31 | ConstMessagesEN.Labels.ROOM_TYPE, 32 | ConstMessagesEN.Labels.ROOM_MULTIPLIER}; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomtype/view/RoomTypeTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomtype.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RoomTypeTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomtype/view/RoomTypeTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomtype.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class RoomTypeTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final RoomTypeTablePanel tablePanel; 22 | private final RoomTypeTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.ROOM_TYPES); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomtype/view/RoomTypeTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomtype.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.roomtype.model.RoomTypeTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class RoomTypeTablePanel extends JPanel { 17 | 18 | private final RoomTypeTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | RoomTypeTablePanel(RoomTypeTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomtype/view/modal/AddRoomTypeFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomtype.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddRoomTypeFrame extends JDialog { 17 | 18 | private final RoomTypeFormPanel formPanel; 19 | private final RoomTypeFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.ROOM_TYPE_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomtype/view/modal/RoomTypeFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomtype.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RoomTypeFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomtype/view/modal/RoomTypeFormPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomtype.view.modal; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomTypeEntity; 4 | import com.danielmichalski.reservations.util.border.Borders; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import jakarta.annotation.PostConstruct; 7 | import org.apache.logging.log4j.util.Strings; 8 | import org.springframework.stereotype.Component; 9 | 10 | import javax.swing.JLabel; 11 | import javax.swing.JPanel; 12 | import javax.swing.JSpinner; 13 | import javax.swing.JTextField; 14 | import javax.swing.SpinnerNumberModel; 15 | import java.awt.GridLayout; 16 | 17 | @Component 18 | public class RoomTypeFormPanel extends JPanel { 19 | 20 | private static final int LAYOUT_ROWS = 2; 21 | private static final int LAYOUT_COLS = 2; 22 | private static final int HORIZONTAL_GAP = 0; 23 | private static final int VERTICAL_GAP = 20; 24 | private static final int TEXT_FIELD_COLUMNS = 20; 25 | 26 | private JTextField descriptionTF; 27 | private JSpinner multiplierJS; 28 | 29 | @PostConstruct 30 | @SuppressWarnings("PMD.UnusedPrivateMethod") 31 | private void preparePanel() { 32 | setPanelUp(); 33 | initComponents(); 34 | } 35 | 36 | private void setPanelUp() { 37 | setBorder(Borders.createEmptyBorder()); 38 | setLayout(new GridLayout(LAYOUT_ROWS, LAYOUT_COLS, HORIZONTAL_GAP, VERTICAL_GAP)); 39 | } 40 | 41 | private void initComponents() { 42 | final JLabel roomDescriptionLbl = new JLabel(ConstMessagesEN.Labels.ROOM_TYPE_DESCRIPTION); 43 | final JLabel roomMultiplierLbl = new JLabel(ConstMessagesEN.Labels.ROOM_MULTIPLIER); 44 | 45 | descriptionTF = new JTextField(TEXT_FIELD_COLUMNS); 46 | multiplierJS = new JSpinner(new SpinnerNumberModel(1, 1, 10, 1)); 47 | 48 | add(roomDescriptionLbl); 49 | add(descriptionTF); 50 | add(roomMultiplierLbl); 51 | add(multiplierJS); 52 | } 53 | 54 | public RoomTypeEntity getEntityFromForm() { 55 | return new RoomTypeEntity( 56 | descriptionTF.getText(), 57 | (Integer) multiplierJS.getValue() 58 | ); 59 | } 60 | 61 | public void clearForm() { 62 | descriptionTF.setText(Strings.EMPTY); 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomxreservation/model/ReservationsComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomxreservation.model; 2 | 3 | import com.danielmichalski.reservations.domain.reservation.entity.ReservationEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultAbstractComboBoxModel; 5 | import org.springframework.stereotype.Component; 6 | 7 | @Component 8 | public class ReservationsComboBoxModel extends DefaultAbstractComboBoxModel { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomxreservation/model/RoomXReservationTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomxreservation.model; 2 | 3 | import com.danielmichalski.reservations.domain.room.entity.RoomXReservationEntity; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class RoomXReservationTableModel extends DefaultTableModel { 11 | 12 | private static final int ROOM_INDEX = 0; 13 | private static final int ROOM_TYPE_INDEX = 1; 14 | private static final int BASIC_RATE_INDEX = 2; 15 | 16 | @Override 17 | public Object getValueAt(int rowIndex, int columnIndex) { 18 | RoomXReservationEntity roomXReservation = entities.get(rowIndex); 19 | switch (columnIndex) { 20 | case ROOM_INDEX: 21 | return roomXReservation.getReservation(); 22 | case ROOM_TYPE_INDEX: 23 | return roomXReservation.getRoom(); 24 | case BASIC_RATE_INDEX: 25 | return roomXReservation.getRoomPrice(); 26 | default: 27 | return Strings.EMPTY; 28 | } 29 | } 30 | 31 | @Override 32 | public String[] getColumnLabels() { 33 | return new String[]{ 34 | ConstMessagesEN.Labels.ROOM, 35 | ConstMessagesEN.Labels.ROOM_TYPE, 36 | ConstMessagesEN.Labels.BASIC_RATE}; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomxreservation/view/RoomXReservationTableBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomxreservation.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RoomXReservationTableBtnPanel extends JPanel { 14 | 15 | private JButton addBtn; 16 | private JButton removeBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | addBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(addBtn); 27 | 28 | removeBtn = new JButton(ConstMessagesEN.Labels.REMOVE_BTN); 29 | add(removeBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomxreservation/view/RoomXReservationTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomxreservation.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class RoomXReservationTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final RoomXReservationTablePanel tablePanel; 22 | private final RoomXReservationTableBtnPanel tableBtnPanel; 23 | 24 | @PostConstruct 25 | @SuppressWarnings("PMD.UnusedPrivateMethod") 26 | private void prepareFrame() { 27 | setFrameUp(); 28 | initComponents(); 29 | } 30 | 31 | private void setFrameUp() { 32 | setTitle(ConstMessagesEN.Labels.ROOM_X_RESERVATIONS); 33 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 34 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | } 38 | 39 | private void initComponents() { 40 | add(tablePanel, BorderLayout.CENTER); 41 | add(tableBtnPanel, BorderLayout.SOUTH); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomxreservation/view/RoomXReservationTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomxreservation.view; 2 | 3 | import com.danielmichalski.reservations.ui.forms.roomxreservation.model.RoomXReservationTableModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class RoomXReservationTablePanel extends JPanel { 17 | 18 | private final RoomXReservationTableModel tableModel; 19 | 20 | private JTable table; 21 | 22 | RoomXReservationTablePanel(RoomXReservationTableModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomxreservation/view/modal/AddRoomXReservationFame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomxreservation.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JDialog; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class AddRoomXReservationFame extends JDialog { 17 | 18 | private final RoomXReservationFormPanel formPanel; 19 | private final RoomXReservationFormBtnPanel formBtnPanel; 20 | 21 | @PostConstruct 22 | @SuppressWarnings("PMD.UnusedPrivateMethod") 23 | private void prepareFrame() { 24 | setFrameUp(); 25 | initComponents(); 26 | pack(); 27 | } 28 | 29 | private void setFrameUp() { 30 | setTitle(ConstMessagesEN.DialogTitles.ROOM_X_RESERVATION_MODAL); 31 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 32 | setLocationRelativeTo(null); 33 | setResizable(false); 34 | setModal(true); 35 | } 36 | 37 | private void initComponents() { 38 | add(formPanel, BorderLayout.CENTER); 39 | add(formBtnPanel, BorderLayout.SOUTH); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/forms/roomxreservation/view/modal/RoomXReservationFormBtnPanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.forms.roomxreservation.view.modal; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JButton; 9 | import javax.swing.JPanel; 10 | 11 | @Component 12 | @Getter 13 | public class RoomXReservationFormBtnPanel extends JPanel { 14 | 15 | private JButton saveBtn; 16 | private JButton cancelBtn; 17 | 18 | @PostConstruct 19 | @SuppressWarnings("PMD.UnusedPrivateMethod") 20 | private void preparePanel() { 21 | initComponents(); 22 | } 23 | 24 | private void initComponents() { 25 | saveBtn = new JButton(ConstMessagesEN.Labels.ADD_BTN); 26 | add(saveBtn); 27 | 28 | cancelBtn = new JButton(ConstMessagesEN.Labels.CANCEL_BTN); 29 | add(cancelBtn); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/mainmenu/controller/MainMenuController.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.mainmenu.controller; 2 | 3 | import com.danielmichalski.reservations.ui.forms.forms.controller.FormsController; 4 | import com.danielmichalski.reservations.ui.mainmenu.view.MainMenuFrame; 5 | import com.danielmichalski.reservations.ui.reports.reports.controller.ReportsController; 6 | import com.danielmichalski.reservations.ui.shared.controller.AbstractFrameController; 7 | import lombok.AllArgsConstructor; 8 | import org.springframework.stereotype.Controller; 9 | 10 | @Controller 11 | @AllArgsConstructor 12 | public class MainMenuController extends AbstractFrameController { 13 | 14 | private final MainMenuFrame mainMenuFrame; 15 | private final FormsController formsController; 16 | private final ReportsController reportsController; 17 | 18 | @Override 19 | public void prepareAndOpenFrame() { 20 | registerAction(mainMenuFrame.getFormsBtn(), (e) -> openFormsWindow()); 21 | registerAction(mainMenuFrame.getReportsBtn(), (e) -> openReportsWindow()); 22 | mainMenuFrame.setVisible(true); 23 | } 24 | 25 | private void openFormsWindow() { 26 | formsController.prepareAndOpenFrame(); 27 | } 28 | 29 | private void openReportsWindow() { 30 | reportsController.prepareAndOpenFrame(); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/mainmenu/view/MainMenuFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.mainmenu.view; 2 | 3 | import com.danielmichalski.reservations.util.border.Borders; 4 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 5 | import com.danielmichalski.reservations.util.ui.LookAndFeelUtils; 6 | import jakarta.annotation.PostConstruct; 7 | import lombok.Getter; 8 | import org.springframework.stereotype.Component; 9 | 10 | import javax.swing.JButton; 11 | import javax.swing.JFrame; 12 | import javax.swing.WindowConstants; 13 | import java.awt.GridLayout; 14 | 15 | @Component 16 | @Getter 17 | public class MainMenuFrame extends JFrame { 18 | 19 | private JButton formsBtn; 20 | private JButton reportsBtn; 21 | 22 | @PostConstruct 23 | @SuppressWarnings("PMD.UnusedPrivateMethod") 24 | private void prepareFrame() { 25 | setFrameUp(); 26 | initComponents(); 27 | pack(); 28 | } 29 | 30 | private void setFrameUp() { 31 | getRootPane().setBorder(Borders.createEmptyBorder()); 32 | setTitle(ConstMessagesEN.Labels.MAIN_MENU); 33 | setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 34 | setLocationRelativeTo(null); 35 | setResizable(false); 36 | LookAndFeelUtils.setWindowsLookAndFeel(); 37 | setLayout(new GridLayout(1, 2, 20, 20)); 38 | } 39 | 40 | private void initComponents() { 41 | formsBtn = new JButton(ConstMessagesEN.Labels.FORMS); 42 | reportsBtn = new JButton(ConstMessagesEN.Labels.REPORTS); 43 | 44 | add(formsBtn); 45 | add(reportsBtn); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/clientreservations/controller/ClientReservationsReportController.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.clientreservations.controller; 2 | 3 | import com.danielmichalski.reservations.domain.client.dto.ClientReservationCountDto; 4 | import com.danielmichalski.reservations.domain.client.service.ClientService; 5 | import com.danielmichalski.reservations.ui.reports.clientreservations.model.ClientReservationsReportModel; 6 | import com.danielmichalski.reservations.ui.reports.clientreservations.view.ClientReservationsReportTableFrame; 7 | import com.danielmichalski.reservations.ui.shared.controller.AbstractFrameController; 8 | import lombok.AllArgsConstructor; 9 | import org.springframework.stereotype.Controller; 10 | 11 | import java.util.List; 12 | 13 | @Controller 14 | @AllArgsConstructor 15 | public class ClientReservationsReportController extends AbstractFrameController { 16 | 17 | private final ClientReservationsReportTableFrame tableFrame; 18 | private final ClientReservationsReportModel tableModel; 19 | private final ClientService clientService; 20 | 21 | @Override 22 | public void prepareAndOpenFrame() { 23 | loadEntities(); 24 | showTableFrame(); 25 | } 26 | 27 | private void loadEntities() { 28 | List entities = clientService.getClientReservationsCount(); 29 | tableModel.clear(); 30 | tableModel.addEntities(entities); 31 | } 32 | 33 | private void showTableFrame() { 34 | tableFrame.setVisible(true); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/clientreservations/model/ClientReservationsReportModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.clientreservations.model; 2 | 3 | import com.danielmichalski.reservations.domain.client.dto.ClientReservationCountDto; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class ClientReservationsReportModel extends DefaultTableModel { 11 | 12 | private static final int NAME_INDEX = 0; 13 | private static final int EMAIL_INDEX = 1; 14 | private static final int NUMBER_OF_RESERVATIONS_INDEX = 2; 15 | 16 | @Override 17 | public Object getValueAt(int rowIndex, int columnIndex) { 18 | ClientReservationCountDto clientReservationCountDto = entities.get(rowIndex); 19 | 20 | switch (columnIndex) { 21 | case NAME_INDEX: 22 | return clientReservationCountDto.name(); 23 | case EMAIL_INDEX: 24 | return clientReservationCountDto.email(); 25 | case NUMBER_OF_RESERVATIONS_INDEX: 26 | return clientReservationCountDto.count(); 27 | default: 28 | return Strings.EMPTY; 29 | } 30 | } 31 | 32 | @Override 33 | public String[] getColumnLabels() { 34 | return new String[]{ 35 | ConstMessagesEN.Labels.NAME, 36 | ConstMessagesEN.Labels.EMAIL, 37 | ConstMessagesEN.Labels.NUMBER_OF_RESERVATIONS 38 | }; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/clientreservations/view/ClientReservationsReportTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.clientreservations.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class ClientReservationsReportTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final ClientReservationsReportTablePanel tablePanel; 22 | 23 | @PostConstruct 24 | @SuppressWarnings("PMD.UnusedPrivateMethod") 25 | private void prepareFrame() { 26 | setFrameUp(); 27 | initComponents(); 28 | } 29 | 30 | private void setFrameUp() { 31 | setTitle(ConstMessagesEN.Labels.CLIENT_RESERVATIONS); 32 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 33 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 34 | setLocationRelativeTo(null); 35 | setResizable(false); 36 | } 37 | 38 | private void initComponents() { 39 | add(tablePanel, BorderLayout.CENTER); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/clientreservations/view/ClientReservationsReportTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.clientreservations.view; 2 | 3 | import com.danielmichalski.reservations.ui.reports.clientreservations.model.ClientReservationsReportModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class ClientReservationsReportTablePanel extends JPanel { 17 | 18 | private final ClientReservationsReportModel tableModel; 19 | 20 | private JTable table; 21 | 22 | ClientReservationsReportTablePanel(ClientReservationsReportModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/payments/controller/PaymentReportController.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.payments.controller; 2 | 3 | import com.danielmichalski.reservations.domain.payment.dto.PaymentMethodCountDto; 4 | import com.danielmichalski.reservations.domain.payment.service.PaymentMethodService; 5 | import com.danielmichalski.reservations.ui.reports.payments.model.PaymentReportModel; 6 | import com.danielmichalski.reservations.ui.reports.payments.view.PaymentReportTableFrame; 7 | import com.danielmichalski.reservations.ui.shared.controller.AbstractFrameController; 8 | import lombok.AllArgsConstructor; 9 | import org.springframework.stereotype.Controller; 10 | 11 | import java.util.List; 12 | 13 | @Controller 14 | @AllArgsConstructor 15 | public class PaymentReportController extends AbstractFrameController { 16 | 17 | private final PaymentReportTableFrame tableFrame; 18 | private final PaymentReportModel tableModel; 19 | private final PaymentMethodService paymentMethodService; 20 | 21 | @Override 22 | public void prepareAndOpenFrame() { 23 | loadEntities(); 24 | showTableFrame(); 25 | } 26 | 27 | private void loadEntities() { 28 | tableModel.clear(); 29 | List paymentMethodCount = paymentMethodService.getPaymentMethodCount(); 30 | tableModel.addEntities(paymentMethodCount); 31 | } 32 | 33 | private void showTableFrame() { 34 | tableFrame.setVisible(true); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/payments/model/PaymentReportModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.payments.model; 2 | 3 | import com.danielmichalski.reservations.domain.payment.dto.PaymentMethodCountDto; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class PaymentReportModel extends DefaultTableModel { 11 | 12 | private static final int PAYMENT_METHOD_INDEX = 0; 13 | private static final int PAYMENT_COUNT_INDEX = 1; 14 | 15 | @Override 16 | public Object getValueAt(int rowIndex, int columnIndex) { 17 | PaymentMethodCountDto paymentMethodCount = entities.get(rowIndex); 18 | 19 | switch (columnIndex) { 20 | case PAYMENT_METHOD_INDEX: 21 | return paymentMethodCount.name(); 22 | case PAYMENT_COUNT_INDEX: 23 | return paymentMethodCount.count(); 24 | default: 25 | return Strings.EMPTY; 26 | } 27 | } 28 | 29 | @Override 30 | public String[] getColumnLabels() { 31 | return new String[]{ 32 | ConstMessagesEN.Labels.PAYMENT_METHOD, 33 | ConstMessagesEN.Labels.PAYMENT_COUNT 34 | }; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/payments/view/PaymentReportTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.payments.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class PaymentReportTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final PaymentReportTablePanel tablePanel; 22 | 23 | @PostConstruct 24 | @SuppressWarnings("PMD.UnusedPrivateMethod") 25 | private void prepareFrame() { 26 | setFrameUp(); 27 | initComponents(); 28 | } 29 | 30 | private void setFrameUp() { 31 | setTitle(ConstMessagesEN.Labels.PAYMENT_METHODS); 32 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 33 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 34 | setLocationRelativeTo(null); 35 | setResizable(false); 36 | } 37 | 38 | private void initComponents() { 39 | add(tablePanel, BorderLayout.CENTER); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/payments/view/PaymentReportTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.payments.view; 2 | 3 | import com.danielmichalski.reservations.ui.reports.payments.model.PaymentReportModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class PaymentReportTablePanel extends JPanel { 17 | 18 | private final PaymentReportModel tableModel; 19 | 20 | private JTable table; 21 | 22 | PaymentReportTablePanel(PaymentReportModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/reports/controller/ReportsController.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.reports.controller; 2 | 3 | import com.danielmichalski.reservations.ui.reports.clientreservations.controller.ClientReservationsReportController; 4 | import com.danielmichalski.reservations.ui.reports.payments.controller.PaymentReportController; 5 | import com.danielmichalski.reservations.ui.reports.reports.view.ReportsFrame; 6 | import com.danielmichalski.reservations.ui.reports.roomstatuses.controller.RoomStatusReportController; 7 | import com.danielmichalski.reservations.ui.shared.controller.AbstractFrameController; 8 | import lombok.AllArgsConstructor; 9 | import org.springframework.stereotype.Controller; 10 | 11 | @Controller 12 | @AllArgsConstructor 13 | public class ReportsController extends AbstractFrameController { 14 | 15 | private final ReportsFrame mainMenuFrame; 16 | private final PaymentReportController paymentReportController; 17 | private final RoomStatusReportController roomStatusReportController; 18 | private final ClientReservationsReportController clientReservationsReportController; 19 | 20 | @Override 21 | public void prepareAndOpenFrame() { 22 | registerAction(mainMenuFrame.getPaymentMethodReportBtn(), (e) -> openPaymentMethodReportWindow()); 23 | registerAction(mainMenuFrame.getRoomStatusesReportBtn(), (e) -> openRoomStatusReportWindow()); 24 | registerAction(mainMenuFrame.getClientReservationsReportBtn(), (e) -> openClientReservationReportWindow()); 25 | mainMenuFrame.setVisible(true); 26 | } 27 | 28 | private void openPaymentMethodReportWindow() { 29 | paymentReportController.prepareAndOpenFrame(); 30 | } 31 | 32 | private void openRoomStatusReportWindow() { 33 | roomStatusReportController.prepareAndOpenFrame(); 34 | } 35 | 36 | private void openClientReservationReportWindow() { 37 | clientReservationsReportController.prepareAndOpenFrame(); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/reports/view/ReportsFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.reports.view; 2 | 3 | import com.danielmichalski.reservations.util.border.Borders; 4 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 5 | import com.danielmichalski.reservations.util.ui.LookAndFeelUtils; 6 | import jakarta.annotation.PostConstruct; 7 | import lombok.Getter; 8 | import org.springframework.stereotype.Component; 9 | 10 | import javax.swing.JButton; 11 | import javax.swing.JFrame; 12 | import javax.swing.WindowConstants; 13 | import java.awt.GridLayout; 14 | 15 | @Component 16 | @Getter 17 | public class ReportsFrame extends JFrame { 18 | 19 | private JButton paymentMethodReportBtn; 20 | private JButton roomStatusesReportBtn; 21 | private JButton clientReservationsReportBtn; 22 | 23 | @PostConstruct 24 | @SuppressWarnings("PMD.UnusedPrivateMethod") 25 | private void prepareFrame() { 26 | setFrameUp(); 27 | initComponents(); 28 | pack(); 29 | } 30 | 31 | private void setFrameUp() { 32 | getRootPane().setBorder(Borders.createEmptyBorder()); 33 | setTitle(ConstMessagesEN.Labels.REPORTS); 34 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 35 | setLocationRelativeTo(null); 36 | setResizable(false); 37 | LookAndFeelUtils.setWindowsLookAndFeel(); 38 | setLayout(new GridLayout(3, 1, 20, 20)); 39 | } 40 | 41 | private void initComponents() { 42 | paymentMethodReportBtn = new JButton(ConstMessagesEN.Labels.PAYMENT_METHODS); 43 | roomStatusesReportBtn = new JButton(ConstMessagesEN.Labels.ROOM_STATUSES); 44 | clientReservationsReportBtn = new JButton(ConstMessagesEN.Labels.CLIENT_RESERVATIONS); 45 | 46 | add(paymentMethodReportBtn); 47 | add(roomStatusesReportBtn); 48 | add(clientReservationsReportBtn); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/roomstatuses/controller/RoomStatusReportController.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.roomstatuses.controller; 2 | 3 | import com.danielmichalski.reservations.domain.room.dto.RoomStatusesCountDto; 4 | import com.danielmichalski.reservations.domain.room.service.RoomStatusService; 5 | import com.danielmichalski.reservations.ui.reports.roomstatuses.model.RoomStatusReportModel; 6 | import com.danielmichalski.reservations.ui.reports.roomstatuses.view.RoomStatusReportTableFrame; 7 | import com.danielmichalski.reservations.ui.shared.controller.AbstractFrameController; 8 | import lombok.AllArgsConstructor; 9 | import org.springframework.stereotype.Controller; 10 | 11 | import java.util.List; 12 | 13 | @Controller 14 | @AllArgsConstructor 15 | public class RoomStatusReportController extends AbstractFrameController { 16 | 17 | private final RoomStatusReportTableFrame tableFrame; 18 | private final RoomStatusReportModel tableModel; 19 | private final RoomStatusService roomStatusService; 20 | 21 | @Override 22 | public void prepareAndOpenFrame() { 23 | loadEntities(); 24 | showTableFrame(); 25 | } 26 | 27 | private void loadEntities() { 28 | tableModel.clear(); 29 | List entities = roomStatusService.getRoomStatusesCount(); 30 | tableModel.addEntities(entities); 31 | } 32 | 33 | private void showTableFrame() { 34 | tableFrame.setVisible(true); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/roomstatuses/model/RoomStatusReportModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.roomstatuses.model; 2 | 3 | import com.danielmichalski.reservations.domain.room.dto.RoomStatusesCountDto; 4 | import com.danielmichalski.reservations.ui.shared.model.DefaultTableModel; 5 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 6 | import org.apache.logging.log4j.util.Strings; 7 | import org.springframework.stereotype.Component; 8 | 9 | @Component 10 | public class RoomStatusReportModel extends DefaultTableModel { 11 | 12 | private static final int ROOM_STATUS_INDEX = 0; 13 | private static final int NUMBER_OF_COUNT_INDEX = 1; 14 | 15 | @Override 16 | public String[] getColumnLabels() { 17 | return new String[]{ 18 | ConstMessagesEN.Labels.ROOM_STATUS, 19 | ConstMessagesEN.Labels.NUMBER_OF_COUNT 20 | }; 21 | } 22 | 23 | @Override 24 | public Object getValueAt(int rowIndex, int columnIndex) { 25 | RoomStatusesCountDto roomStatusesCount = entities.get(rowIndex); 26 | 27 | switch (columnIndex) { 28 | case ROOM_STATUS_INDEX: 29 | return roomStatusesCount.status(); 30 | case NUMBER_OF_COUNT_INDEX: 31 | return roomStatusesCount.count(); 32 | default: 33 | return Strings.EMPTY; 34 | } 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/roomstatuses/view/RoomStatusReportTableFrame.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.roomstatuses.view; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.springframework.stereotype.Component; 8 | 9 | import javax.swing.JFrame; 10 | import javax.swing.WindowConstants; 11 | import java.awt.BorderLayout; 12 | 13 | @Component 14 | @AllArgsConstructor 15 | @Getter 16 | public class RoomStatusReportTableFrame extends JFrame { 17 | 18 | private static final int DEFAULT_WIDTH = 500; 19 | private static final int DEFAULT_HEIGHT = 300; 20 | 21 | private final RoomStatusReportTablePanel tablePanel; 22 | 23 | @PostConstruct 24 | @SuppressWarnings("PMD.UnusedPrivateMethod") 25 | private void prepareFrame() { 26 | setFrameUp(); 27 | initComponents(); 28 | } 29 | 30 | private void setFrameUp() { 31 | setTitle(ConstMessagesEN.Labels.ROOM_STATUSES); 32 | setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 33 | setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 34 | setLocationRelativeTo(null); 35 | setResizable(false); 36 | } 37 | 38 | private void initComponents() { 39 | add(tablePanel, BorderLayout.CENTER); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/reports/roomstatuses/view/RoomStatusReportTablePanel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.reports.roomstatuses.view; 2 | 3 | import com.danielmichalski.reservations.ui.reports.roomstatuses.model.RoomStatusReportModel; 4 | import jakarta.annotation.PostConstruct; 5 | import lombok.Getter; 6 | import org.springframework.stereotype.Component; 7 | 8 | import javax.swing.JPanel; 9 | import javax.swing.JScrollPane; 10 | import javax.swing.JTable; 11 | import javax.swing.ListSelectionModel; 12 | import java.awt.BorderLayout; 13 | 14 | @Component 15 | @Getter 16 | public class RoomStatusReportTablePanel extends JPanel { 17 | 18 | private final RoomStatusReportModel tableModel; 19 | 20 | private JTable table; 21 | 22 | RoomStatusReportTablePanel(RoomStatusReportModel tableModel) { 23 | this.tableModel = tableModel; 24 | } 25 | 26 | @PostConstruct 27 | @SuppressWarnings("PMD.UnusedPrivateMethod") 28 | private void preparePanel() { 29 | setPanelUp(); 30 | initComponents(); 31 | } 32 | 33 | private void setPanelUp() { 34 | setLayout(new BorderLayout()); 35 | } 36 | 37 | private void initComponents() { 38 | table = new JTable(tableModel); 39 | table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 40 | 41 | JScrollPane paneWithTable = new JScrollPane(table); 42 | add(paneWithTable, BorderLayout.CENTER); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/shared/controller/AbstractFrameController.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.shared.controller; 2 | 3 | import javax.swing.JButton; 4 | import java.awt.event.ActionListener; 5 | 6 | public abstract class AbstractFrameController { 7 | 8 | public abstract void prepareAndOpenFrame(); 9 | 10 | protected void registerAction(JButton button, ActionListener listener) { 11 | button.addActionListener(listener); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/shared/model/DefaultAbstractComboBoxModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.shared.model; 2 | 3 | import java.util.List; 4 | 5 | public abstract class DefaultAbstractComboBoxModel extends javax.swing.DefaultComboBoxModel { 6 | 7 | @Override 8 | public T getSelectedItem() { 9 | return (T) super.getSelectedItem(); 10 | } 11 | 12 | public void addElements(List elements) { 13 | elements.forEach(this::addElement); 14 | } 15 | 16 | public void clear() { 17 | removeAllElements(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/ui/shared/model/DefaultTableModel.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.ui.shared.model; 2 | 3 | import javax.swing.table.AbstractTableModel; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | public abstract class DefaultTableModel extends AbstractTableModel { 8 | 9 | protected final List entities = new ArrayList<>(); 10 | 11 | public abstract String[] getColumnLabels(); 12 | 13 | @Override 14 | public int getRowCount() { 15 | return entities.size(); 16 | } 17 | 18 | @Override 19 | public int getColumnCount() { 20 | return getColumnLabels().length; 21 | } 22 | 23 | @Override 24 | public String getColumnName(int column) { 25 | return getColumnLabels()[column]; 26 | } 27 | 28 | public void addEntity(T entity) { 29 | entities.add(entity); 30 | fireTableDataChanged(); 31 | } 32 | 33 | public void addEntities(List entities) { 34 | this.entities.addAll(entities); 35 | fireTableDataChanged(); 36 | } 37 | 38 | public T getEntityByRow(int rowIndex) { 39 | return entities.get(rowIndex); 40 | } 41 | 42 | public void removeRow(int row) { 43 | entities.remove(row); 44 | fireTableDataChanged(); 45 | } 46 | 47 | public void clear() { 48 | entities.clear(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/util/annotation/TransactionalReadOnly.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.util.annotation; 2 | 3 | import org.springframework.transaction.annotation.Transactional; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Transactional(readOnly = true) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | 13 | @Target({ElementType.TYPE, ElementType.METHOD}) 14 | public @interface TransactionalReadOnly { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/util/annotation/TransactionalWrite.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.util.annotation; 2 | 3 | import org.springframework.transaction.annotation.Transactional; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Transactional(rollbackFor = Exception.class) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Target({ElementType.TYPE, ElementType.METHOD}) 13 | public @interface TransactionalWrite { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/util/border/Borders.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.util.border; 2 | 3 | import javax.swing.BorderFactory; 4 | import javax.swing.border.Border; 5 | 6 | public class Borders { 7 | 8 | private static final int WIDTH = 40; 9 | private static final int HEIGHT = 20; 10 | 11 | public static Border createEmptyBorder() { 12 | return BorderFactory.createEmptyBorder(HEIGHT, WIDTH, HEIGHT, WIDTH); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/util/notification/Notifications.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.util.notification; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | 5 | import javax.swing.JOptionPane; 6 | 7 | public class Notifications { 8 | 9 | public static void showFormValidationAlert(String message) { 10 | JOptionPane.showMessageDialog( 11 | null, 12 | message, 13 | ConstMessagesEN.Messages.INFORMATION_TITLE, 14 | JOptionPane.INFORMATION_MESSAGE 15 | ); 16 | } 17 | 18 | public static void showDeleteRowErrorMessage() { 19 | JOptionPane.showMessageDialog( 20 | null, 21 | ConstMessagesEN.Messages.DELETE_ROW_ERROR, 22 | ConstMessagesEN.Messages.ALERT_TILE, 23 | JOptionPane.ERROR_MESSAGE 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/danielmichalski/reservations/util/ui/LookAndFeelUtils.java: -------------------------------------------------------------------------------- 1 | package com.danielmichalski.reservations.util.ui; 2 | 3 | import com.danielmichalski.reservations.util.constant.ConstMessagesEN; 4 | 5 | import javax.swing.JOptionPane; 6 | import javax.swing.UIManager; 7 | 8 | public class LookAndFeelUtils { 9 | 10 | public static void setWindowsLookAndFeel() { 11 | try { 12 | UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 13 | } catch (Exception e) { 14 | JOptionPane.showMessageDialog( 15 | null, 16 | ConstMessagesEN.Messages.WINDOWS_STYLE_LOADING_ERROR_MESSAGE + e, 17 | ConstMessagesEN.Messages.ALERT_TILE, 18 | JOptionPane.ERROR_MESSAGE 19 | ); 20 | } 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | driver-class-name: org.postgresql.Driver 4 | url: 'jdbc:postgresql://localhost:5555/reservations' 5 | username: 'reservations_user' 6 | password: 'reservations_psw' 7 | jpa: 8 | properties: 9 | hibernate: 10 | hbm2ddl.auto: validate 11 | format_sql: false 12 | liquibase: 13 | change-log: 'classpath:db/liquibase-changelog-master.xml' 14 | contexts: 'test-data' 15 | -------------------------------------------------------------------------------- /src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | _ _ 2 | | | (_) 3 | _ __ ___ ___ ___ _ ____ ____ _| |_ _ ___ _ __ ___ 4 | | '__/ _ / __|/ _ | '__\ \ / / _` | __| |/ _ \| '_ \/ __| 5 | | | | __\__ | __| | \ V | (_| | |_| | (_) | | | \__ \ 6 | |_| \___|___/\___|_| \_/ \__,_|\__|_|\___/|_| |_|___/ Spring Boot ${spring-boot.version} 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/address.csv: -------------------------------------------------------------------------------- 1 | street;house_number;flat_number;city;postal_code 2 | Long;5;34;New York;44-300 3 | Long street;54;66;Paris;49-321 4 | 18 Street;31;43;Sydney;34-323 5 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/client.csv: -------------------------------------------------------------------------------- 1 | address_id;name;surname;pesel;phone_number;email 2 | (SELECT id FROM address WHERE street = 'Long');John;New;86012932465;500493003;janek21313@oc.eu 3 | (SELECT id FROM address WHERE street = 'Long street');Mark;Spencer;72053148211;504939203;kulek123121@oc.eu 4 | (SELECT id FROM address WHERE street = '18 Street');Jules;Black;46111267536;511493003;marta3421@oc.eu 5 | (SELECT id FROM address WHERE street = 'Long');Maria;White;87052056951;521493003;jannowosielski2344@oc.eu 6 | (SELECT id FROM address WHERE street = 'Long street');Paris;Mary;00211037385;503493003;martakorycka2349@oc.eu 7 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/payment.csv: -------------------------------------------------------------------------------- 1 | payment_method_id;value;date_of_payment 2 | (SELECT id FROM payment_method WHERE name = 'Debit card');100;NOW() 3 | (SELECT id FROM payment_method WHERE name = 'Credit card');220;NOW() 4 | (SELECT id FROM payment_method WHERE name = 'Cash');260;NOW() 5 | (SELECT id FROM payment_method WHERE name = 'Cash');150;NOW() 6 | (SELECT id FROM payment_method WHERE name = 'Credit card');240;NOW() 7 | (SELECT id FROM payment_method WHERE name = 'Credit card');130;NOW() 8 | (SELECT id FROM payment_method WHERE name = 'Cash');355;NOW() 9 | (SELECT id FROM payment_method WHERE name = 'Credit card');435;NOW() 10 | (SELECT id FROM payment_method WHERE name = 'Credit card');755;NOW() 11 | (SELECT id FROM payment_method WHERE name = 'Debit card');125;NOW() 12 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/payment_method.csv: -------------------------------------------------------------------------------- 1 | name 2 | Debit card 3 | Credit card 4 | Cash 5 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/rate.csv: -------------------------------------------------------------------------------- 1 | room_id;room_type_id;default_rate 2 | (SELECT id FROM room WHERE id = '1');(SELECT id FROM room_type WHERE description = 'Premium');200 3 | (SELECT id FROM room WHERE id = '2');(SELECT id FROM room_type WHERE description = 'Premium');200 4 | (SELECT id FROM room WHERE id = '3');(SELECT id FROM room_type WHERE description = 'Luxury');200 5 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/reservation_status.csv: -------------------------------------------------------------------------------- 1 | status 2 | New 3 | Finished 4 | Canceled 5 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/room.csv: -------------------------------------------------------------------------------- 1 | room_status_id;number_of_people;description 2 | (SELECT id FROM room_status WHERE status = 'Not empty');3;A triple room 3 | (SELECT id FROM room_status WHERE status = 'Reserved');4;Four-person room 4 | (SELECT id FROM room_status WHERE status = 'Empty');4;Four-person room 5 | (SELECT id FROM room_status WHERE status = 'Reserved');5;Five-person room 6 | (SELECT id FROM room_status WHERE status = 'Empty');2;Double room 7 | (SELECT id FROM room_status WHERE status = 'Reserved');2;Double room 8 | (SELECT id FROM room_status WHERE status = 'Not empty');3;A triple room 9 | (SELECT id FROM room_status WHERE status = 'Empty');4;Four-person room 10 | (SELECT id FROM room_status WHERE status = 'Not empty');5;Five-person room 11 | (SELECT id FROM room_status WHERE status = 'Empty');5;Five-person room 12 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/room_status.csv: -------------------------------------------------------------------------------- 1 | status;status_description 2 | Not empty;Room not empty 3 | Empty;Room empty 4 | Reserved;Room reserved 5 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/room_type.csv: -------------------------------------------------------------------------------- 1 | description;multiplier 2 | Basic;1 3 | Premium;2 4 | Luxury;3 5 | -------------------------------------------------------------------------------- /src/main/resources/db/data/test/csv/room_x_reservation.csv: -------------------------------------------------------------------------------- 1 | reservation_id;room_id;room_price 2 | (SELECT id FROM reservation WHERE id = 1);(SELECT id FROM room WHERE id = 1);420 3 | (SELECT id FROM reservation WHERE id = 2);(SELECT id FROM room WHERE id = 2);120 4 | (SELECT id FROM reservation WHERE id = 3);(SELECT id FROM room WHERE id = 2);135 5 | (SELECT id FROM reservation WHERE id = 4);(SELECT id FROM room WHERE id = 1);200 6 | (SELECT id FROM reservation WHERE id = 5);(SELECT id FROM room WHERE id = 2);150 7 | -------------------------------------------------------------------------------- /src/main/resources/db/liquibase-changelog-master.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/db/views/liquibase-changelog-views.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | Create basic information view 9 | 10 | 11 | SELECT c.name, c.surname, a.city 12 | FROM client c 13 | LEFT JOIN address a ON c.address_id = a.id 14 | ORDER BY c.name 15 | 16 | 17 | 18 | 19 | Create number of empty rooms view 20 | 21 | 22 | SELECT rs.status_description, COUNT(r_type.description) 23 | FROM room r 24 | LEFT JOIN rate rt ON rt.room_id = r.id 25 | LEFT JOIN room_type r_type ON rt.room_type_id = r_type.id 26 | LEFT JOIN room_status rs ON r.room_status_id = rs.id 27 | WHERE rs.id = 2 28 | GROUP BY (rs.status_description) 29 | 30 | 31 | 32 | 33 | Create client reservations view 34 | 35 | 36 | SELECT c.email, COUNT(r.id) "Number of reservations" 37 | FROM client c 38 | LEFT JOIN reservation r ON c.id = r.client_id 39 | GROUP BY c.email 40 | ORDER BY "Number of reservations" DESC 41 | 42 | 43 | 44 | 45 | --------------------------------------------------------------------------------