Code review
This commit is contained in:
parent
618c152466
commit
4357606187
@ -23,7 +23,7 @@ public class Automation {
|
|||||||
@GsonExclude
|
@GsonExclude
|
||||||
private Set<Trigger<?>> triggers = new HashSet<>();
|
private Set<Trigger<?>> triggers = new HashSet<>();
|
||||||
|
|
||||||
@OneToMany(mappedBy = "scenes", cascade = CascadeType.DETACH)
|
@OneToMany(mappedBy = "scenes", cascade = CascadeType.REMOVE)
|
||||||
@GsonExclude
|
@GsonExclude
|
||||||
private Set<ScenePriority> scenes = new HashSet<>();
|
private Set<ScenePriority> scenes = new HashSet<>();
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import javax.persistence.InheritanceType;
|
|||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Inheritance(strategy = InheritanceType.JOINED)
|
@Inheritance(strategy = InheritanceType.JOINED)
|
||||||
public class BooleanTrigger<D extends Device> extends Trigger<D> {
|
public class BooleanTrigger<D extends Device & BooleanTriggerable> extends Trigger<D> {
|
||||||
|
|
||||||
@Column(name = "switchable_on")
|
@Column(name = "switchable_on")
|
||||||
private boolean on;
|
private boolean on;
|
||||||
@ -23,4 +23,9 @@ public class BooleanTrigger<D extends Device> extends Trigger<D> {
|
|||||||
public boolean check(boolean on) {
|
public boolean check(boolean on) {
|
||||||
return this.on == on;
|
return this.on == on;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends Device> boolean check() {
|
||||||
|
return getDevice().readTriggerState() == isOn();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||||
|
|
||||||
|
public interface BooleanTriggerable {
|
||||||
|
boolean readTriggerState();
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||||
|
|
||||||
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.GsonExclude;
|
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.GsonExclude;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
@ -19,8 +18,7 @@ public abstract class Dimmer extends InputDevice {
|
|||||||
@JoinTable(
|
@JoinTable(
|
||||||
name = "dimmer_dimmable",
|
name = "dimmer_dimmable",
|
||||||
joinColumns = @JoinColumn(name = "dimmer_id"),
|
joinColumns = @JoinColumn(name = "dimmer_id"),
|
||||||
inverseJoinColumns = @JoinColumn(name = "dimmable_id")
|
inverseJoinColumns = @JoinColumn(name = "dimmable_id"))
|
||||||
)
|
|
||||||
private Set<Dimmable> dimmables = new HashSet<>();
|
private Set<Dimmable> dimmables = new HashSet<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -8,10 +8,9 @@ import javax.persistence.Entity;
|
|||||||
* value, like a knob)
|
* value, like a knob)
|
||||||
*/
|
*/
|
||||||
@Entity
|
@Entity
|
||||||
public class KnobDimmer extends Dimmer {
|
public class KnobDimmer extends Dimmer implements RangeTriggerable {
|
||||||
|
|
||||||
@Column
|
@Column private int intensity = 0;
|
||||||
Integer intensity = 0;
|
|
||||||
|
|
||||||
public KnobDimmer() {
|
public KnobDimmer() {
|
||||||
super("knobDimmer");
|
super("knobDimmer");
|
||||||
@ -28,4 +27,9 @@ public class KnobDimmer extends Dimmer {
|
|||||||
dl.setIntensity(intensity);
|
dl.setIntensity(intensity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double readTriggerState() {
|
||||||
|
return intensity;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import javax.persistence.Entity;
|
|||||||
|
|
||||||
/** Represents a motion sensor device */
|
/** Represents a motion sensor device */
|
||||||
@Entity
|
@Entity
|
||||||
public class MotionSensor extends InputDevice {
|
public class MotionSensor extends InputDevice implements BooleanTriggerable {
|
||||||
|
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
private boolean detected;
|
private boolean detected;
|
||||||
@ -21,4 +21,9 @@ public class MotionSensor extends InputDevice {
|
|||||||
public MotionSensor() {
|
public MotionSensor() {
|
||||||
super("motionSensor");
|
super("motionSensor");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean readTriggerState() {
|
||||||
|
return detected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,11 @@ import javax.validation.constraints.NotNull;
|
|||||||
@Inheritance(strategy = InheritanceType.JOINED)
|
@Inheritance(strategy = InheritanceType.JOINED)
|
||||||
public class RangeTrigger<D extends Device> extends Trigger<D> {
|
public class RangeTrigger<D extends Device> extends Trigger<D> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends Device> boolean check(T d) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
enum Operator {
|
enum Operator {
|
||||||
EQUAL,
|
EQUAL,
|
||||||
LESS,
|
LESS,
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||||
|
|
||||||
|
public interface RangeTriggerable {
|
||||||
|
double readTriggerState();
|
||||||
|
}
|
@ -1,11 +1,8 @@
|
|||||||
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||||
|
|
||||||
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.GsonExclude;
|
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.GsonExclude;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.GenerationType;
|
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
import javax.persistence.JoinColumn;
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.ManyToOne;
|
import javax.persistence.ManyToOne;
|
||||||
@ -16,12 +13,6 @@ import javax.validation.constraints.NotNull;
|
|||||||
@Entity
|
@Entity
|
||||||
public class ScenePriority {
|
public class ScenePriority {
|
||||||
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
|
||||||
@Column(name = "id", updatable = false, nullable = false, unique = true)
|
|
||||||
@ApiModelProperty(hidden = true)
|
|
||||||
private long id;
|
|
||||||
|
|
||||||
@ManyToOne
|
@ManyToOne
|
||||||
@JoinColumn(name = "automation_id", updatable = false, insertable = false)
|
@JoinColumn(name = "automation_id", updatable = false, insertable = false)
|
||||||
@GsonExclude
|
@GsonExclude
|
||||||
@ -41,18 +32,11 @@ public class ScenePriority {
|
|||||||
@GsonExclude
|
@GsonExclude
|
||||||
private Scene scene;
|
private Scene scene;
|
||||||
|
|
||||||
@Column(name = "scene_id", nullable = false)
|
@Id
|
||||||
|
@Column(name = "scene_id", nullable = false, updatable = false, unique = true)
|
||||||
@NotNull
|
@NotNull
|
||||||
private Long sceneId;
|
private Long sceneId;
|
||||||
|
|
||||||
public long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getPriority() {
|
public Integer getPriority() {
|
||||||
return priority;
|
return priority;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ import javax.validation.constraints.NotNull;
|
|||||||
|
|
||||||
/** A sensor input device that measures a quantity in a continuous scale (e.g. temperature) */
|
/** A sensor input device that measures a quantity in a continuous scale (e.g. temperature) */
|
||||||
@Entity
|
@Entity
|
||||||
public class Sensor extends InputDevice {
|
public class Sensor extends InputDevice implements RangeTriggerable {
|
||||||
|
|
||||||
public static final Map<SensorType, BigDecimal> TYPICAL_VALUES =
|
public static final Map<SensorType, BigDecimal> TYPICAL_VALUES =
|
||||||
Map.of(
|
Map.of(
|
||||||
@ -19,6 +19,11 @@ public class Sensor extends InputDevice {
|
|||||||
SensorType.HUMIDITY, new BigDecimal(40.0),
|
SensorType.HUMIDITY, new BigDecimal(40.0),
|
||||||
SensorType.LIGHT, new BigDecimal(1000));
|
SensorType.LIGHT, new BigDecimal(1000));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double readTriggerState() {
|
||||||
|
return value.doubleValue();
|
||||||
|
}
|
||||||
|
|
||||||
/** Type of sensor, i.e. of the thing the sensor measures. */
|
/** Type of sensor, i.e. of the thing the sensor measures. */
|
||||||
public enum SensorType {
|
public enum SensorType {
|
||||||
/** A sensor that measures temperature in degrees celsius */
|
/** A sensor that measures temperature in degrees celsius */
|
||||||
|
@ -1,22 +1,20 @@
|
|||||||
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
|
||||||
|
|
||||||
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.GsonExclude;
|
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.GsonExclude;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
|
||||||
/** A switch input device */
|
/** A switch input device */
|
||||||
@Entity
|
@Entity
|
||||||
public class Switch extends InputDevice {
|
public class Switch extends InputDevice implements BooleanTriggerable {
|
||||||
|
|
||||||
@ManyToMany(cascade = CascadeType.DETACH)
|
@ManyToMany(cascade = CascadeType.DETACH)
|
||||||
@GsonExclude
|
@GsonExclude
|
||||||
@JoinTable(
|
@JoinTable(
|
||||||
name = "switch_switchable",
|
name = "switch_switchable",
|
||||||
joinColumns = @JoinColumn(name = "switch_id"),
|
joinColumns = @JoinColumn(name = "switch_id"),
|
||||||
inverseJoinColumns = @JoinColumn(name = "switchable_id")
|
inverseJoinColumns = @JoinColumn(name = "switchable_id"))
|
||||||
)
|
|
||||||
private Set<Switchable> switchables = new HashSet<>();
|
private Set<Switchable> switchables = new HashSet<>();
|
||||||
|
|
||||||
/** The state of this switch */
|
/** The state of this switch */
|
||||||
@ -57,4 +55,9 @@ public class Switch extends InputDevice {
|
|||||||
public Set<Switchable> getOutputs() {
|
public Set<Switchable> getOutputs() {
|
||||||
return switchables;
|
return switchables;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean readTriggerState() {
|
||||||
|
return on;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,7 @@ import ch.usi.inf.sa4.sanmarinoes.smarthut.config.GsonExclude;
|
|||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.OneToMany;
|
import javax.persistence.OneToMany;
|
||||||
@ -15,7 +13,7 @@ import javax.validation.constraints.NotNull;
|
|||||||
|
|
||||||
/** A thermostat capable of controlling cooling and heating. */
|
/** A thermostat capable of controlling cooling and heating. */
|
||||||
@Entity
|
@Entity
|
||||||
public class Thermostat extends Switchable {
|
public class Thermostat extends Switchable implements BooleanTriggerable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isOn() {
|
public boolean isOn() {
|
||||||
@ -56,6 +54,11 @@ public class Thermostat extends Switchable {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean readTriggerState() {
|
||||||
|
return mode != Mode.OFF;
|
||||||
|
}
|
||||||
|
|
||||||
public enum Mode {
|
public enum Mode {
|
||||||
@SerializedName("OFF")
|
@SerializedName("OFF")
|
||||||
OFF,
|
OFF,
|
||||||
@ -92,11 +95,6 @@ public class Thermostat extends Switchable {
|
|||||||
this.mode = Mode.OFF;
|
this.mode = Mode.OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Trigger<? extends Device>> triggeredTriggers() {
|
|
||||||
return triggers.stream().filter(t -> t.check(this.isOn())).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMode(Mode state) {
|
public void setMode(Mode state) {
|
||||||
this.mode = state;
|
this.mode = state;
|
||||||
}
|
}
|
||||||
|
@ -28,9 +28,10 @@ public class DeviceService {
|
|||||||
|
|
||||||
public <T extends Device> T save(T device) {
|
public <T extends Device> T save(T device) {
|
||||||
|
|
||||||
final Long deviceId = device.getId();
|
final long deviceId = device.getId();
|
||||||
|
|
||||||
List<Trigger<? extends Device>> triggers = triggerRepository.findAllByDeviceId(deviceId);
|
List<? extends Trigger<? extends Device>> triggers =
|
||||||
|
triggerRepository.findAllByDeviceId(deviceId);
|
||||||
|
|
||||||
// map activated -> automations
|
// map activated -> automations
|
||||||
// remove duplicates
|
// remove duplicates
|
||||||
|
Loading…
Reference in New Issue
Block a user