From 41a54a2e8b76ced99e34f40c5c52286347aa974a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Al=C5=BEbeta=20Hajn=C3=A1?= <xhajna@fi.muni.cz>
Date: Sun, 16 Apr 2023 16:36:21 +0200
Subject: [PATCH] feat(core): validaion annotations for Nonull and Nullable

---
 core/src/main/java/cz/muni/pa165/data/model/Car.java   |  4 ++++
 .../java/cz/muni/pa165/data/model/CarComponent.java    |  6 ++++++
 .../main/java/cz/muni/pa165/data/model/Department.java |  5 +++++
 .../java/cz/muni/pa165/data/model/DomainObject.java    |  2 ++
 .../src/main/java/cz/muni/pa165/data/model/Driver.java | 10 ++++++++++
 .../main/java/cz/muni/pa165/data/model/Engineer.java   |  6 ++++++
 6 files changed, 33 insertions(+)

diff --git a/core/src/main/java/cz/muni/pa165/data/model/Car.java b/core/src/main/java/cz/muni/pa165/data/model/Car.java
index 4dc4fad..cfd36d0 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/Car.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/Car.java
@@ -1,5 +1,7 @@
 package cz.muni.pa165.data.model;
 
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
 import jakarta.persistence.*;
 
 import java.io.Serializable;
@@ -12,11 +14,13 @@ import java.util.Set;
 public class Car extends DomainObject implements Serializable {
     @OneToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "driver_id")
+    @Nullable
     private Driver driver;
 
     @OneToMany(fetch = FetchType.LAZY,
             mappedBy = "car",
             cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE})
+    @Nonnull
     private Set<CarComponent> components;
 
     public Car() {
diff --git a/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java b/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java
index 39ada1b..8876317 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/CarComponent.java
@@ -1,6 +1,8 @@
 package cz.muni.pa165.data.model;
 
 import cz.muni.pa165.data.enums.ComponentTypeEnum;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
 import jakarta.persistence.*;
 
 import java.io.Serializable;
@@ -12,14 +14,18 @@ public class CarComponent extends DomainObject implements Serializable {
 
     @Column(name = "component_type")
     @Enumerated(EnumType.STRING)
+    @Nonnull
     private ComponentTypeEnum componentType;
 
+    @Nonnull
     private Double weight;
 
+    @Nonnull
     private String information;
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "car_id")
+    @Nullable
     private Car car;
 
     public CarComponent() {
diff --git a/core/src/main/java/cz/muni/pa165/data/model/Department.java b/core/src/main/java/cz/muni/pa165/data/model/Department.java
index 9cdda6a..9e2726f 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/Department.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/Department.java
@@ -1,5 +1,7 @@
 package cz.muni.pa165.data.model;
 
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
 import jakarta.persistence.*;
 
 import java.io.Serializable;
@@ -9,11 +11,14 @@ import java.util.Set;
 @Entity
 @Table(name = "department")
 public class Department extends DomainObject implements Serializable {
+
+    @Nonnull
     private String specialization;
 
     @OneToMany(fetch = FetchType.LAZY,
             mappedBy = "department",
             cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE})
+    @Nullable
     private Set<Engineer> engineers;
 
     public Department() {
diff --git a/core/src/main/java/cz/muni/pa165/data/model/DomainObject.java b/core/src/main/java/cz/muni/pa165/data/model/DomainObject.java
index 0cbfd03..9e982d2 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/DomainObject.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/DomainObject.java
@@ -1,5 +1,6 @@
 package cz.muni.pa165.data.model;
 
+import jakarta.annotation.Nonnull;
 import jakarta.persistence.GeneratedValue;
 import jakarta.persistence.GenerationType;
 import jakarta.persistence.Id;
@@ -12,6 +13,7 @@ import jakarta.persistence.MappedSuperclass;
 public abstract class DomainObject {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Nonnull
     private Long id;
 
     public Long getId() {
diff --git a/core/src/main/java/cz/muni/pa165/data/model/Driver.java b/core/src/main/java/cz/muni/pa165/data/model/Driver.java
index 20bfbe4..d5058f4 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/Driver.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/Driver.java
@@ -1,6 +1,8 @@
 package cz.muni.pa165.data.model;
 
 import cz.muni.pa165.data.enums.CharacteristicsEnum;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
 import jakarta.persistence.*;
 
 import java.io.Serializable;
@@ -12,24 +14,32 @@ import java.util.Set;
 @Table(name = "driver")
 public class Driver extends DomainObject implements Serializable {
 
+    @Nonnull
     private String name;
 
+    @Nonnull
     private String surname;
 
+    @Nullable
     private Integer height;
 
+    @Nullable
     private LocalDate birthday;
 
+    @Nonnull
     private String nationality;
+
     @ElementCollection(targetClass = CharacteristicsEnum.class)
     @CollectionTable(name = "driver_characteristics", joinColumns = @JoinColumn(name = "driver_id", nullable = false))
     @Column(name = "characteristic")
     @Enumerated(EnumType.STRING)
+    @Nonnull
     private Set<CharacteristicsEnum> characteristics;
 
     @OneToOne(fetch = FetchType.LAZY,
             mappedBy = "driver",
             cascade = {CascadeType.REMOVE, CascadeType.PERSIST, CascadeType.MERGE})
+    @Nullable
     private Car car;
 
     public Driver() {
diff --git a/core/src/main/java/cz/muni/pa165/data/model/Engineer.java b/core/src/main/java/cz/muni/pa165/data/model/Engineer.java
index 2d06297..050f88c 100644
--- a/core/src/main/java/cz/muni/pa165/data/model/Engineer.java
+++ b/core/src/main/java/cz/muni/pa165/data/model/Engineer.java
@@ -1,5 +1,7 @@
 package cz.muni.pa165.data.model;
 
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
 import jakarta.persistence.*;
 
 import java.io.Serializable;
@@ -8,12 +10,16 @@ import java.util.Objects;
 @Entity
 @Table(name = "engineer")
 public class Engineer extends DomainObject implements Serializable {
+
+    @Nonnull
     private String name;
 
+    @Nonnull
     private String surname;
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "department_id")
+    @Nullable
     private Department department;
 
     public Engineer() {
-- 
GitLab