package de.ph87.homeautomation.device; import de.ph87.homeautomation.device.devices.*; import de.ph87.homeautomation.property.PropertyService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.stream.Collectors; @Slf4j @Service @Transactional @RequiredArgsConstructor public class DeviceReadService { private final DeviceRepository deviceRepository; private final PropertyService propertyService; public List findAll() { return deviceRepository.findAll().stream().map(this::toDto).collect(Collectors.toList()); } private DeviceDto toDto(final Device device) { if (device instanceof DeviceSwitch) { final DeviceSwitch deviceSwitch = (DeviceSwitch) device; return new DeviceSwitchDto(deviceSwitch, propertyService.readBoolean(deviceSwitch.getStatePropertyName())); } else if (device instanceof DeviceNumber) { final DeviceNumber deviceNumber = (DeviceNumber) device; return new DeviceNumberDto(deviceNumber, propertyService.readNumber(deviceNumber.getValuePropertyName())); } throw new RuntimeException("Not imeplemented: toDto(" + device + ")"); } }