diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7c6191b..241f098 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,7 @@
-
+
\ No newline at end of file
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/JWTAuthenticationController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/AuthenticationController.java
similarity index 73%
rename from src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/JWTAuthenticationController.java
rename to src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/AuthenticationController.java
index 6e3d01b..f7dee78 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/JWTAuthenticationController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/AuthenticationController.java
@@ -1,7 +1,12 @@
package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.JWTTokenUtil;
+import ch.usi.inf.sa4.sanmarinoes.smarthut.dto.JWTRequest;
+import ch.usi.inf.sa4.sanmarinoes.smarthut.dto.JWTResponse;
+import ch.usi.inf.sa4.sanmarinoes.smarthut.dto.UserUpdateRequest;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*;
+import java.security.Principal;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
@@ -14,10 +19,12 @@ import org.springframework.web.bind.annotation.*;
@RestController
@CrossOrigin
@RequestMapping("/auth")
-public class JWTAuthenticationController {
+public class AuthenticationController {
@Autowired private AuthenticationManager authenticationManager;
+ @Autowired private UserRepository userRepository;
+
@Autowired private JWTTokenUtil jwtTokenUtil;
@Autowired private JWTUserDetailsService userDetailsService;
@@ -36,12 +43,21 @@ public class JWTAuthenticationController {
}
@PostMapping("/register")
- public User register(@RequestBody User user) {
+ public User register(@Valid @RequestBody User user) {
user.setPassword(encoder.encode(user.getPassword()));
users.save(user);
return user;
}
+ @PutMapping("/update")
+ public User update(@Valid @RequestBody final UserUpdateRequest u, final Principal principal) {
+ final User oldUser = userRepository.findByUsername(principal.getName());
+ oldUser.setName(u.getName());
+ oldUser.setEmail(u.getEmail());
+ oldUser.setPassword(encoder.encode(u.getPassword()));
+ return userRepository.save(oldUser);
+ }
+
private void authenticate(String username, String password) throws Exception {
try {
authenticationManager.authenticate(
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/ButtonDimmerController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/ButtonDimmerController.java
index 1098824..7c2d0b7 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/ButtonDimmerController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/ButtonDimmerController.java
@@ -3,6 +3,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.ButtonDimmer;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.ButtonDimmerRepository;
import java.util.Optional;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -31,12 +32,12 @@ public class ButtonDimmerController {
}
@PostMapping
- public ButtonDimmer save(@RequestBody ButtonDimmer bd) {
+ public ButtonDimmer save(@Valid @RequestBody ButtonDimmer bd) {
return buttonDimmerService.save(bd);
}
@PutMapping
- public ButtonDimmer update(@RequestBody ButtonDimmer bd) {
+ public ButtonDimmer update(@Valid @RequestBody ButtonDimmer bd) {
return buttonDimmerService.save(bd);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/DimmableLightController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/DimmableLightController.java
index 32faf36..5391e43 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/DimmableLightController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/DimmableLightController.java
@@ -3,6 +3,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.DimmableLight;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.DimmableLightRepository;
import java.util.Optional;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -32,12 +33,12 @@ public class DimmableLightController {
}
@PostMapping
- public DimmableLight save(@RequestBody DimmableLight dl) {
+ public DimmableLight save(@Valid @RequestBody DimmableLight dl) {
return dimmableLightService.save(dl);
}
@PutMapping
- public DimmableLight update(@RequestBody DimmableLight dl) {
+ public DimmableLight update(@Valid @RequestBody DimmableLight dl) {
return dimmableLightService.save(dl);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/KnobDimmerController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/KnobDimmerController.java
index 0696202..3dd53d7 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/KnobDimmerController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/KnobDimmerController.java
@@ -3,6 +3,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.KnobDimmer;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.KnobDimmerRepository;
import java.util.Optional;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -32,12 +33,12 @@ public class KnobDimmerController {
}
@PostMapping
- public KnobDimmer save(@RequestBody KnobDimmer kd) {
+ public KnobDimmer save(@Valid @RequestBody KnobDimmer kd) {
return knobDimmerService.save(kd);
}
@PutMapping
- public KnobDimmer update(@RequestBody KnobDimmer kd) {
+ public KnobDimmer update(@Valid @RequestBody KnobDimmer kd) {
return knobDimmerService.save(kd);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/MotionSensorController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/MotionSensorController.java
index 5ac2612..15c964f 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/MotionSensorController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/MotionSensorController.java
@@ -3,6 +3,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.MotionSensor;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.MotionSensorRepository;
import java.util.Optional;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -32,12 +33,12 @@ public class MotionSensorController {
}
@PostMapping
- public MotionSensor save(@RequestBody MotionSensor ms) {
+ public MotionSensor save(@Valid @RequestBody MotionSensor ms) {
return motionSensorService.save(ms);
}
@PutMapping
- public MotionSensor update(@RequestBody MotionSensor ms) {
+ public MotionSensor update(@Valid @RequestBody MotionSensor ms) {
return motionSensorService.save(ms);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RegularLightController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RegularLightController.java
index 9a97abb..2ec1453 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RegularLightController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RegularLightController.java
@@ -3,6 +3,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.RegularLight;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.RegularLightRepository;
import java.util.Optional;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -32,12 +33,12 @@ public class RegularLightController {
}
@PostMapping
- public RegularLight save(@RequestBody RegularLight rl) {
+ public RegularLight save(@Valid @RequestBody RegularLight rl) {
return regularLightService.save(rl);
}
@PutMapping
- public RegularLight update(@RequestBody RegularLight rl) {
+ public RegularLight update(@Valid @RequestBody RegularLight rl) {
return regularLightService.save(rl);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RoomController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RoomController.java
index 7d23922..9ff6e2e 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RoomController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/RoomController.java
@@ -2,6 +2,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*;
import java.util.*;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.*;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -28,7 +29,7 @@ public class RoomController {
}
@PostMapping
- public Room save(@RequestBody Room r) {
+ public Room save(@Valid @RequestBody Room r) {
final Object principal =
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
@@ -46,7 +47,7 @@ public class RoomController {
}
@PutMapping
- public Room update(@RequestBody Room r) {
+ public Room update(@Valid @RequestBody Room r) {
return roomRepository.save(r);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SensorController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SensorController.java
index 04fe6fb..957328e 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SensorController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SensorController.java
@@ -2,6 +2,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*;
import java.util.*;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@@ -24,12 +25,12 @@ public class SensorController {
}
@PostMapping
- public Sensor save(@RequestBody Sensor s) {
+ public Sensor save(@Valid @RequestBody Sensor s) {
return sensorRepository.save(s);
}
@PutMapping
- public Sensor update(@RequestBody Sensor s) {
+ public Sensor update(@Valid @RequestBody Sensor s) {
return sensorRepository.save(s);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SmartPlugController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SmartPlugController.java
index a6304b4..a0aee71 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SmartPlugController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SmartPlugController.java
@@ -2,6 +2,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*;
import java.util.*;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@@ -24,12 +25,12 @@ public class SmartPlugController {
}
@PostMapping
- public SmartPlug save(@RequestBody SmartPlug sp) {
+ public SmartPlug save(@Valid @RequestBody SmartPlug sp) {
return smartPlugRepository.save(sp);
}
@PutMapping
- public SmartPlug update(@RequestBody SmartPlug sp) {
+ public SmartPlug update(@Valid @RequestBody SmartPlug sp) {
return smartPlugRepository.save(sp);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SwitchController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SwitchController.java
index 4cceb34..7eb83a0 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SwitchController.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/SwitchController.java
@@ -2,6 +2,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*;
import java.util.*;
+import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@@ -24,12 +25,12 @@ public class SwitchController {
}
@PostMapping
- public Switch save(@RequestBody Switch s) {
+ public Switch save(@Valid @RequestBody Switch s) {
return switchRepository.save(s);
}
@PutMapping
- public Switch update(@RequestBody Switch s) {
+ public Switch update(@Valid @RequestBody Switch s) {
return switchRepository.save(s);
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/UserController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/UserController.java
deleted file mode 100644
index 941cf9b..0000000
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/UserController.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package ch.usi.inf.sa4.sanmarinoes.smarthut.controller;
-
-import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*;
-import java.util.*;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.*;
-import org.springframework.web.bind.annotation.*;
-
-@RestController
-@EnableAutoConfiguration
-@RequestMapping("/user")
-public class UserController {
-
- @Autowired private UserRepository userRepository;
-
- @GetMapping
- public Iterable findAll() {
- return userRepository.findAll();
- }
-
- @GetMapping("/{id}")
- public Optional findById(@PathVariable("id") long id) {
- return userRepository.findById(id);
- }
-
- @PostMapping
- public User save(@RequestBody User u) {
- return userRepository.save(u);
- }
-
- @PutMapping
- public User update(@RequestBody User u) {
- return userRepository.save(u);
- }
-
- @DeleteMapping("/{id}")
- public void deleteById(@PathVariable("id") long id) {
- userRepository.deleteById(id);
- }
-}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/JWTRequest.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/JWTRequest.java
similarity index 60%
rename from src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/JWTRequest.java
rename to src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/JWTRequest.java
index 66d0c75..d750a50 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/JWTRequest.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/JWTRequest.java
@@ -1,17 +1,9 @@
-package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
+package ch.usi.inf.sa4.sanmarinoes.smarthut.dto;
public class JWTRequest {
private String username;
private String password;
- // need default constructor for JSON Parsing
- public JWTRequest() {}
-
- public JWTRequest(String username, String password) {
- this.setUsername(username);
- this.setPassword(password);
- }
-
public String getUsername() {
return this.username;
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/JWTResponse.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/JWTResponse.java
similarity index 80%
rename from src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/JWTResponse.java
rename to src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/JWTResponse.java
index 9eb1092..7bc04f2 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/JWTResponse.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/JWTResponse.java
@@ -1,4 +1,4 @@
-package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
+package ch.usi.inf.sa4.sanmarinoes.smarthut.dto;
public class JWTResponse {
private final String jwttoken;
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/UserUpdateRequest.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/UserUpdateRequest.java
new file mode 100644
index 0000000..5000bb1
--- /dev/null
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/dto/UserUpdateRequest.java
@@ -0,0 +1,51 @@
+package ch.usi.inf.sa4.sanmarinoes.smarthut.dto;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+public class UserUpdateRequest {
+ /** The full name of the user */
+ @NotEmpty(message = "Please provide a full name")
+ private String name;
+
+ /** A non-salted password */
+ @NotNull
+ @NotEmpty(message = "Please provide a password")
+ private String password;
+
+ /**
+ * The user's email (validated according to criteria used in >input type="email"<>
+ *
, technically not RFC 5322 compliant
+ */
+ @NotNull
+ @NotEmpty(message = "Please provide an email")
+ @Pattern(
+ message = "Please provide a valid email",
+ regexp = "/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/")
+ private String email;
+
+ public String getName() {
+ return name;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Device.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Device.java
index 3ec45b9..834104d 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Device.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Device.java
@@ -1,6 +1,8 @@
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
+import com.google.gson.annotations.SerializedName;
import javax.persistence.*;
+import javax.validation.constraints.NotNull;
/** Generic abstraction for a smart home device */
@Entity
@@ -9,7 +11,10 @@ public abstract class Device {
/** Ways a device can behave in the automation flow. For now only input/output */
public enum FlowType {
+ @SerializedName("INPUT")
INPUT,
+
+ @SerializedName("OUTPUT")
OUTPUT
}
@@ -28,11 +33,14 @@ public abstract class Device {
* The room this device belongs in, as a foreign key id. To use when updating and inserting from
* a REST call.
*/
- @Column(name = "room_id")
+ @Column(name = "room_id", nullable = false)
+ @NotNull
private Long roomId;
/** The name of the device as assigned by the user (e.g. 'Master bedroom light') */
- @Column private String name;
+ @NotNull
+ @Column(nullable = false)
+ private String name;
/**
* The name for the category of this particular device (e.g 'dimmer'). Not stored in the
@@ -70,6 +78,14 @@ public abstract class Device {
this.name = name;
}
+ public Long getRoomId() {
+ return roomId;
+ }
+
+ public void setRoomId(Long roomId) {
+ this.roomId = roomId;
+ }
+
public Device(String kind, FlowType flowType) {
this.kind = kind;
this.flowType = flowType;
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/DimmableLight.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/DimmableLight.java
index 666fbee..6a35248 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/DimmableLight.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/DimmableLight.java
@@ -2,6 +2,9 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
/** Represent a dimmable light */
@Entity
@@ -12,13 +15,17 @@ public class DimmableLight extends Light {
}
/** The light intensity value. Goes from 0 (off) to 100 (on) */
- @Column private int intensity = 0;
+ @NotNull
+ @Column(nullable = false)
+ @Min(1)
+ @Max(100)
+ private Integer intensity = 0;
- public int getIntensity() {
+ public Integer getIntensity() {
return intensity;
}
- public void setIntensity(int intensity) throws IllegalArgumentException {
+ public void setIntensity(Integer intensity) throws IllegalArgumentException {
if (intensity < 0 || intensity > 100) {
throw new IllegalArgumentException("The intensity level can't go below 0 or above 100");
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Light.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Light.java
index bf1ed39..68a819b 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Light.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Light.java
@@ -4,6 +4,7 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
+import javax.validation.constraints.NotNull;
/** Represents a generic light */
@Entity
@@ -11,7 +12,8 @@ import javax.persistence.InheritanceType;
public abstract class Light extends OutputDevice {
/** Whether the light is on or not */
- @Column(name = "light_on")
+ @Column(name = "light_on", nullable = false)
+ @NotNull
boolean on;
protected Light(String kind) {
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Room.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Room.java
index f297927..c0fae3f 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Room.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Room.java
@@ -2,6 +2,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
import java.util.Set;
import javax.persistence.*;
+import javax.validation.constraints.NotNull;
/** Represents a room in the house owned by the user */
@Entity
@@ -18,31 +19,36 @@ public class Room {
* https://www.baeldung.com/java-base64-image-string
* https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html
*/
- @Column(name = "icon", nullable = false)
+ @Lob
+ @Column(name = "icon", columnDefinition = "TEXT")
private byte[] icon;
- @Column(name = "image", nullable = false)
+ @Lob
+ @Column(name = "image", columnDefinition = "TEXT")
private byte[] image;
- /** User that owns the house this room is in */
- @ManyToOne
- @JoinColumn(name = "user_id", nullable = false, updatable = false, insertable = false)
- private User user;
-
/**
* User that owns the house this room is in as a foreign key id. To use when updating and
* inserting from a REST call.
*/
- @Column(name = "user_id")
+ @NotNull
+ @Column(name = "user_id", nullable = false)
private Long userId;
/** The user given name of this room (e.g. 'Master bedroom') */
- @Column private String name;
+ @NotNull
+ @Column(nullable = false)
+ private String name;
/** Collection of devices present in this room */
@OneToMany(mappedBy = "room")
private Set devices;
+ /** User that owns the house this room is in */
+ @ManyToOne
+ @JoinColumn(name = "user_id", nullable = false, updatable = false, insertable = false)
+ private User user;
+
public Long getId() {
return id;
}
@@ -79,6 +85,22 @@ public class Room {
return devices;
}
+ public byte[] getIcon() {
+ return icon;
+ }
+
+ public void setIcon(byte[] icon) {
+ this.icon = icon;
+ }
+
+ public byte[] getImage() {
+ return image;
+ }
+
+ public void setImage(byte[] image) {
+ this.image = image;
+ }
+
@Override
public String toString() {
return "Room{" + "id=" + id + ", user=" + user + ", name='" + name + "\'}";
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Sensor.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Sensor.java
index e5d7938..e3fbae0 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Sensor.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Sensor.java
@@ -1,31 +1,45 @@
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
+import com.google.gson.annotations.SerializedName;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
+import javax.validation.constraints.NotNull;
/** A sensor input device that measures a quantity in a continuous scale (e.g. temperature) */
@Entity
public class Sensor extends InputDevice {
/** Type of sensor, i.e. of the thing the sensor measures. */
- enum SensorType {
+ public enum SensorType {
/** A sensor that measures temperature in degrees celsius */
+ @SerializedName("TEMPERATURE")
TEMPERATURE,
/** A sensor that measures relative humidity in percentage points */
+ @SerializedName("HUMIDITY")
HUMIDITY,
/** A sensor that measures light in degrees */
+ @SerializedName("LIGHT")
LIGHT
}
/** The type of this sensor */
- @Column
+ @Column(nullable = false)
+ @NotNull
@Enumerated(value = EnumType.STRING)
private SensorType sensor;
+ public SensorType getSensor() {
+ return sensor;
+ }
+
+ public void setSensor(SensorType sensor) {
+ this.sensor = sensor;
+ }
+
public Sensor() {
super("sensor");
}
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SmartPlug.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SmartPlug.java
index e7fd36a..e0d7981 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SmartPlug.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SmartPlug.java
@@ -2,13 +2,15 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.validation.constraints.NotNull;
/** A smart plug that can be turned either on or off */
@Entity
public class SmartPlug extends OutputDevice {
/** Whether the smart plug is on */
- @Column(name = "smart_plug_on")
+ @Column(name = "smart_plug_on", nullable = false)
+ @NotNull
private boolean on;
public boolean isOn() {
diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/User.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/User.java
index 7f9ec95..a8f239c 100644
--- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/User.java
+++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/User.java
@@ -2,7 +2,9 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
import java.util.Set;
import javax.persistence.*;
+import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
/** A user of the Smarthut application */
@Entity(name = "smarthutuser")
@@ -14,16 +16,34 @@ public class User {
private Long id;
/** The full name of the user */
- @Column @NotNull private String name;
+ @NotNull
+ @Column(nullable = false)
+ @NotEmpty(message = "Please provide a full name")
+ private String name;
/** The full name of the user */
- @Column @NotNull private String username;
+ @NotNull
+ @Column(nullable = false)
+ @NotEmpty(message = "Please provide a username")
+ private String username;
- /** A properly salted way to store the password TODO: define the implementation of salt */
- @Column @NotNull private String password;
+ /** A properly salted way to store the password */
+ @NotNull
+ @Column(nullable = false)
+ @NotEmpty(message = "Please provide a password")
+ private String password;
- /** The user's email TODO: validate email in setters */
- @Column @NotNull private String email;
+ /**
+ * The user's email (validated according to criteria used in >input type="email"<>
+ *
, technically not RFC 5322 compliant
+ */
+ @Column(nullable = false)
+ @NotNull
+ @NotEmpty(message = "Please provide an email")
+ @Pattern(
+ message = "Please provide a valid email",
+ regexp = "^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$")
+ private String email;
/** All rooms in the user's house */
@OneToMany(mappedBy = "user")