diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/WelcomeController.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/WelcomeController.java index 4069d44..fa38d1b 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/WelcomeController.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/controller/WelcomeController.java @@ -14,6 +14,7 @@ public class WelcomeController { @GetMapping("/") List testDevices() { - return Arrays.asList(new Dimmer(), new Light(), new MotionSensor(), new Sensor(), new SmartPlug(), new Switch()); + return Arrays.asList(new KnobDimmer(), new RegularLight(), new MotionSensor(), + new Sensor(), new SmartPlug(), new Switch()); } } diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/ButtonDimmer.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/ButtonDimmer.java new file mode 100644 index 0000000..bb1f70a --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/ButtonDimmer.java @@ -0,0 +1,14 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import javax.persistence.Entity; + +/** + * Represents a dimmer that can only instruct an increase or decrease of intensity + * (i.e. like a dimmer with a '+' and a '-' button) + */ +@Entity +public class ButtonDimmer extends Dimmer { + public ButtonDimmer() { + super("button-dimmer"); + } +} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/ButtonDimmerRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/ButtonDimmerRepository.java new file mode 100644 index 0000000..af1a566 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/ButtonDimmerRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface ButtonDimmerRepository extends CrudRepository { +} 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 3f373d6..54eba35 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 @@ -6,7 +6,7 @@ import javax.persistence.*; * Generic abstraction for a smart home device */ @Entity -@Inheritance(strategy = InheritanceType.JOINED) +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class Device { /** @@ -25,27 +25,55 @@ public abstract class Device { @Column(name = "id", updatable = false, nullable = false) private long id; + /** + * The room this device belongs in + */ + @ManyToOne + @JoinColumn(name="room_id") + private Room room; + /** * The name of the device as assigned by the user (e.g. 'Master bedroom light') */ + @Column private String name; /** * The name for the category of this particular device (e.g 'dimmer'). + * Not stored in the database (thanks to 'transient') but set thanks to constructors */ - @Column - private final String kind; + private transient final String kind; /** * The way this device behaves in the automation flow. + * Not stored in the database (thanks to 'transient') but set thanks to constructors */ - private final FlowType flowType; - + private transient final FlowType flowType; public long getId() { return id; } + public void setId(long id) { + this.id = id; + } + + public Room getRoom() { + return room; + } + + public void setRoom(Room room) { + this.room = room; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + 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 87c1fe7..24d1672 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 @@ -1,13 +1,22 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; +import javax.persistence.Column; import javax.persistence.Entity; +/** + * Represent a dimmable light + */ @Entity public class DimmableLight extends Light { + public DimmableLight() { + super("light"); + } + /** * The light intensity value. Goes from 0 (off) to 100 (on) */ + @Column private int intensity = 0; public int getIntensity() { diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/DimmableLightRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/DimmableLightRepository.java new file mode 100644 index 0000000..741aecf --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/DimmableLightRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface DimmableLightRepository extends CrudRepository { +} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Dimmer.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Dimmer.java index 691a7b7..b88a6a2 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Dimmer.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Dimmer.java @@ -1,10 +1,16 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; import javax.persistence.Entity; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +/** + * Represents a generic dimmer input device + */ @Entity -public class Dimmer extends InputDevice { - public Dimmer() { - super("dimmer"); +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public abstract class Dimmer extends InputDevice { + public Dimmer(String kind) { + super(kind); } } diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/InputDevice.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/InputDevice.java index cd36ea4..4b5d562 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/InputDevice.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/InputDevice.java @@ -2,6 +2,10 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; import javax.persistence.Entity; +/** + * A generic abstraction for an input device, i.e. something that captures input either from the environment (sensor) + * or the user (switch / dimmer). + */ @Entity public abstract class InputDevice extends Device { public InputDevice(String kind) { diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/KnobDimmer.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/KnobDimmer.java new file mode 100644 index 0000000..cc5f6b5 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/KnobDimmer.java @@ -0,0 +1,13 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import javax.persistence.Entity; + +/** + * Represents a dimmer able to set absolute intensity values (i.e. knowing the absolute intensity value, like a knob) + */ +@Entity +public class KnobDimmer extends Dimmer { + public KnobDimmer() { + super("knob-dimmer"); + } +} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/KnobDimmerRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/KnobDimmerRepository.java new file mode 100644 index 0000000..2dbe912 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/KnobDimmerRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface KnobDimmerRepository extends CrudRepository { +} 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 dd17db9..2624cc0 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 @@ -5,14 +5,21 @@ import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; +/** + * Represents a generic light + */ @Entity -@Inheritance(strategy = InheritanceType.JOINED) -public class Light extends OutputDevice { +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public abstract class Light extends OutputDevice { + + /** + * Whether the light is on or not + */ @Column(name="light_on") boolean on; - public Light() { - super("light"); + protected Light(String kind) { + super(kind); this.on = false; } diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/MotionSensor.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/MotionSensor.java index 4526e97..a3491e0 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/MotionSensor.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/MotionSensor.java @@ -2,6 +2,9 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; import javax.persistence.Entity; +/** + * Represents a motion sensor device + */ @Entity public class MotionSensor extends InputDevice { public MotionSensor() { diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/MotionSensorRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/MotionSensorRepository.java new file mode 100644 index 0000000..801da31 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/MotionSensorRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface MotionSensorRepository extends CrudRepository { +} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/OutputDevice.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/OutputDevice.java index 8c94814..aecad0d 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/OutputDevice.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/OutputDevice.java @@ -4,8 +4,11 @@ import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; +/** + * Represents a generic output device, i.e. something that causes some behaviour (light, smartPlugs, ...). + */ @Entity -@Inheritance(strategy = InheritanceType.JOINED) +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class OutputDevice extends Device { public OutputDevice(String kind) { super(kind, FlowType.OUTPUT); diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RegularLight.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RegularLight.java new file mode 100644 index 0000000..402f677 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RegularLight.java @@ -0,0 +1,13 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import javax.persistence.Entity; + +/** + * Represents a standard non-dimmable light + */ +@Entity +public class RegularLight extends Light { + public RegularLight() { + super("regular-light"); + } +} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RegularLightRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RegularLightRepository.java new file mode 100644 index 0000000..1031db9 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RegularLightRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface RegularLightRepository extends CrudRepository { +} 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 6e4afa3..9e0a211 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 @@ -1,7 +1,11 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; import javax.persistence.*; +import java.util.Set; +/** + * Represents a room in the house owned by the user + */ @Entity public class Room { @@ -10,13 +14,25 @@ public class Room { @Column(name = "id", updatable = false, nullable = false) private Long id; + /** + * User that owns the house this room is in + */ @ManyToOne @JoinColumn(name="user_id") private User user; + /** + * The user given name of this room (e.g. 'Master bedroom') + */ @Column private String name; + /** + * Collectiion of devices present in this room + */ + @OneToMany(mappedBy = "room") + private Set devices; + public Long getId() { return id; } @@ -41,12 +57,17 @@ public class Room { this.name = name; } + public Set getDevices() { + return devices; + } + @Override public String toString() { return "Room{" + "id=" + id + ", user=" + user + ", name='" + name + '\'' + + ", devices=" + devices + '}'; } } diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RoomRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RoomRepository.java new file mode 100644 index 0000000..35371b1 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/RoomRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface RoomRepository extends CrudRepository { +} 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 e92c6db..ec22464 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,9 +1,43 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; +import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +/** + * 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 { + /** + * A sensor that measures temperature in degrees celsius + */ + TEMPERATURE, + + /** + * A sensor that measures relative humidity in percentage points + */ + HUMIDITY, + + /** + * A sensor that measures light in degrees + */ + LIGHT + } + + /** + * The type of this sensor + */ + @Column + @Enumerated(value=EnumType.STRING) + private SensorType sensor; + public Sensor() { super("sensor"); } diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SensorRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SensorRepository.java new file mode 100644 index 0000000..1cc8e62 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SensorRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface SensorRepository extends CrudRepository { +} 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 6d7db70..4a54912 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 @@ -1,9 +1,28 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; +import javax.persistence.Column; import javax.persistence.Entity; +/** + * 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") + private boolean on; + + public boolean isOn() { + return on; + } + + public void setOn(boolean on) { + this.on = on; + } + public SmartPlug() { super("smart-plug"); } diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SmartPlugRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SmartPlugRepository.java new file mode 100644 index 0000000..9099b85 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SmartPlugRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface SmartPlugRepository extends CrudRepository { +} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Switch.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Switch.java index 142665c..5e915f2 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Switch.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/Switch.java @@ -2,6 +2,10 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; import javax.persistence.Entity; +/** + * A switch input device + * TODO: define switch behaviour (push button vs on/off state) + */ @Entity public class Switch extends InputDevice { public Switch() { diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SwitchRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SwitchRepository.java new file mode 100644 index 0000000..d59bbe3 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/SwitchRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface SwitchRepository extends CrudRepository { +} 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 a68c6cd..1190652 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 @@ -3,6 +3,9 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models; import javax.persistence.*; import java.util.Set; +/** + * A user of the Smarthut application + */ @Entity(name = "smarthutuser") public class User { @@ -11,15 +14,29 @@ public class User { @Column(name = "id", updatable = false, nullable = false) private Long id; + /** + * The full name of the user + */ @Column private String name; + /** + * A properly salted way to store the password + * TODO: define the implementation of salt + */ @Column private String hashedPassword; + /** + * The user's email + * TODO: validate email in setters + */ @Column private String email; + /** + * All rooms in the user's house + */ @OneToMany(mappedBy = "user") private Set rooms; diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/UserRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/UserRepository.java new file mode 100644 index 0000000..f33a9b7 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/UserRepository.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface UserRepository extends CrudRepository { +} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/house.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/house.java deleted file mode 100644 index 49c17fa..0000000 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/house.java +++ /dev/null @@ -1,29 +0,0 @@ -package ch.usi.inf.sa4.sanmarinoes.smarthut.models; - -import java.util.ArrayList; - -public class house { - //a list of the rooms present in the house - private ArrayList rooms; - - //Constructor - public house(){ - this.rooms=new ArrayList(); - } - - //this method add a Room to the house - public void addRoom(Room room){ - if(!this.rooms.contains(room)) { - this.rooms.add(room); - } - } - - //this method removes the given room if it is present in the house - public void remove(Room room){ - int a=this.rooms.indexOf(room); - if(a!=-1) { - this.rooms.remove(a); - } - } - -}