diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/AutomationRepository.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/AutomationRepository.java new file mode 100644 index 0000000..b8b2ac2 --- /dev/null +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/models/AutomationRepository.java @@ -0,0 +1,5 @@ +package ch.usi.inf.sa4.sanmarinoes.smarthut.models; + +import org.springframework.data.repository.CrudRepository; + +public interface AutomationRepository extends CrudRepository {} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/service/DeviceService.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/service/DeviceService.java index 04512e5..273fe09 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/service/DeviceService.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/service/DeviceService.java @@ -1,10 +1,14 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.service; +import ch.usi.inf.sa4.sanmarinoes.smarthut.models.AutomationRepository; import ch.usi.inf.sa4.sanmarinoes.smarthut.models.Device; import ch.usi.inf.sa4.sanmarinoes.smarthut.models.DeviceRepository; +import ch.usi.inf.sa4.sanmarinoes.smarthut.models.ScenePriority; +import ch.usi.inf.sa4.sanmarinoes.smarthut.models.SceneRepository; import ch.usi.inf.sa4.sanmarinoes.smarthut.models.Trigger; import ch.usi.inf.sa4.sanmarinoes.smarthut.models.TriggerRepository; import java.util.Collection; +import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; @@ -13,19 +17,10 @@ import org.springframework.stereotype.Component; @Component public class DeviceService { - /* - Automation entity - - name - - id - - Set - - OrderedList // define order of application of scenes of the automation - // separate AutomationWithOrder id entity: - // - application_order_id (1 for first, 2 for second) - // - scene - // - FK automation - */ - @Autowired DeviceRepository deviceRepository; + @Autowired AutomationRepository automationRepository; + @Autowired SceneRepository sceneRepository; + // @Autowired SceneService sceneService; @Autowired TriggerRepository> triggerRepository; public List saveAll(Collection devices) { @@ -38,12 +33,20 @@ public class DeviceService { List> triggers = triggerRepository.findAllByDeviceId(deviceId); - List> triggeredTriggers = - triggers.stream().filter(Trigger::triggered).collect(Collectors.toList()); + triggers.stream() + .filter(Trigger::triggered) + .map(Trigger::getAutomationId) + .map(t -> automationRepository.findById(t)) + .distinct() + .map(t -> t.get().getScenes()) + .flatMap(Collection::stream) + .distinct() + .sorted(Comparator.comparing(ScenePriority::getPriority)) + .map(t -> sceneRepository.findById(t.getSceneId())) + .forEach(SceneService::apply); // map activated -> automations // remove duplicates - // sort automations per priority // sort scenes inside automations per priority // apply scenes (SceneService.apply())