diff --git a/src/main/angular/src/app/api/property/property.service.ts b/src/main/angular/src/app/api/property/property.service.ts index ef9b5f6..c80a58e 100644 --- a/src/main/angular/src/app/api/property/property.service.ts +++ b/src/main/angular/src/app/api/property/property.service.ts @@ -36,4 +36,8 @@ export class PropertyService implements ISearchService { this.api.postReturnItem("property/set/" + property.id + "/" + key, value, Property.fromJson, next, error); } + create(next: (item: Property) => void, error: (error: any) => void = NO_OP): void { + this.api.getItem("property/create/", Property.fromJson, next, error); + } + } diff --git a/src/main/angular/src/app/pages/device-list/device-list.component.less b/src/main/angular/src/app/pages/device-list/device-list.component.less index 299ef49..0142b11 100644 --- a/src/main/angular/src/app/pages/device-list/device-list.component.less +++ b/src/main/angular/src/app/pages/device-list/device-list.component.less @@ -69,8 +69,3 @@ .shutterUnknown { background-color: gray; } - -.config { - clear: both; - margin-bottom: 5px; -} diff --git a/src/main/angular/src/app/pages/property-list/property-list.component.html b/src/main/angular/src/app/pages/property-list/property-list.component.html index 22b9a2a..39682ec 100644 --- a/src/main/angular/src/app/pages/property-list/property-list.component.html +++ b/src/main/angular/src/app/pages/property-list/property-list.component.html @@ -2,6 +2,10 @@ - +
+ +
+ diff --git a/src/main/angular/src/app/pages/property-list/property-list.component.ts b/src/main/angular/src/app/pages/property-list/property-list.component.ts index c495d77..487a652 100644 --- a/src/main/angular/src/app/pages/property-list/property-list.component.ts +++ b/src/main/angular/src/app/pages/property-list/property-list.component.ts @@ -73,7 +73,11 @@ export class PropertyListComponent implements OnInit { } set(property: Property, key: string, value: any): void { + this.propertyService.set(property, key, value, property => this.updateProperty(property, true)); + } + create(): void { + this.propertyService.create(property => this.updateProperty(property, true)); } } diff --git a/src/main/angular/src/styles.less b/src/main/angular/src/styles.less index 307568b..6f9a838 100644 --- a/src/main/angular/src/styles.less +++ b/src/main/angular/src/styles.less @@ -106,3 +106,7 @@ table.vertical { } } +.config { + clear: both; + margin-bottom: 5px; +} diff --git a/src/main/java/de/ph87/homeautomation/channel/ChannelRepository.java b/src/main/java/de/ph87/homeautomation/channel/ChannelRepository.java index 8049107..e9947dc 100644 --- a/src/main/java/de/ph87/homeautomation/channel/ChannelRepository.java +++ b/src/main/java/de/ph87/homeautomation/channel/ChannelRepository.java @@ -4,4 +4,6 @@ import org.springframework.data.repository.CrudRepository; public interface ChannelRepository extends CrudRepository { + Channel getById(long id); + } diff --git a/src/main/java/de/ph87/homeautomation/channel/ChannelService.java b/src/main/java/de/ph87/homeautomation/channel/ChannelService.java index fb4dba5..7c85fca 100644 --- a/src/main/java/de/ph87/homeautomation/channel/ChannelService.java +++ b/src/main/java/de/ph87/homeautomation/channel/ChannelService.java @@ -60,4 +60,8 @@ public class ChannelService { return channelRepository.findById(id).map(this::toDto); } + public Channel getById(final long id) { + return channelRepository.getById(id); + } + } diff --git a/src/main/java/de/ph87/homeautomation/device/DeviceController.java b/src/main/java/de/ph87/homeautomation/device/DeviceController.java index 5f20857..81d2d63 100644 --- a/src/main/java/de/ph87/homeautomation/device/DeviceController.java +++ b/src/main/java/de/ph87/homeautomation/device/DeviceController.java @@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; -import static de.ph87.homeautomation.shared.Helpers.mapIfNotNull; +import static de.ph87.homeautomation.shared.Helpers.mapOrNull; @RestController @RequestMapping("device") @@ -53,22 +53,22 @@ public class DeviceController { @PostMapping("set/{id}/DeviceSwitch/stateProperty") public DeviceDto setDeviceSwitchStateProperty(@PathVariable final long id, @RequestBody(required = false) final Long propertyId) { - return deviceWriteService.setDeviceSwitch(id, (device, v) -> device.setStateProperty(mapIfNotNull(v, propertyReadService::getById)), propertyId); + return deviceWriteService.setDeviceSwitch(id, (device, v) -> device.setStateProperty(mapOrNull(v, propertyReadService::getById)), propertyId); } @PostMapping("set/{id}/DeviceStateScene/stateProperty") public DeviceDto setDeviceStateSceneStateProperty(@PathVariable final long id, @RequestBody(required = false) final Long propertyId) { - return deviceWriteService.setDeviceStateScene(id, (device, v) -> device.setStateProperty(mapIfNotNull(v, propertyReadService::getById)), propertyId); + return deviceWriteService.setDeviceStateScene(id, (device, v) -> device.setStateProperty(mapOrNull(v, propertyReadService::getById)), propertyId); } @PostMapping("set/{id}/DeviceStateScene/sceneProperty") public DeviceDto setDeviceStateSceneSceneProperty(@PathVariable final long id, @RequestBody(required = false) final Long propertyId) { - return deviceWriteService.setDeviceStateScene(id, (device, v) -> device.setSceneProperty(mapIfNotNull(v, propertyReadService::getById)), propertyId); + return deviceWriteService.setDeviceStateScene(id, (device, v) -> device.setSceneProperty(mapOrNull(v, propertyReadService::getById)), propertyId); } @PostMapping("set/{id}/DeviceShutter/positionProperty") public DeviceDto setDeviceShutterPositionProperty(@PathVariable final long id, @RequestBody(required = false) final Long propertyId) { - return deviceWriteService.setDeviceShutter(id, (device, v) -> device.setPositionProperty(mapIfNotNull(v, propertyReadService::getById)), propertyId); + return deviceWriteService.setDeviceShutter(id, (device, v) -> device.setPositionProperty(mapOrNull(v, propertyReadService::getById)), propertyId); } } diff --git a/src/main/java/de/ph87/homeautomation/device/DeviceReadService.java b/src/main/java/de/ph87/homeautomation/device/DeviceReadService.java index b5bb882..d074b1c 100644 --- a/src/main/java/de/ph87/homeautomation/device/DeviceReadService.java +++ b/src/main/java/de/ph87/homeautomation/device/DeviceReadService.java @@ -11,7 +11,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.stream.Collectors; -import static de.ph87.homeautomation.shared.Helpers.mapIfNotNull; +import static de.ph87.homeautomation.shared.Helpers.mapOrNull; @Slf4j @Service @@ -30,13 +30,13 @@ public class DeviceReadService { public DeviceDto toDto(final Device device) { if (device instanceof DeviceSwitch) { final DeviceSwitch deviceSwitch = (DeviceSwitch) device; - return new DeviceSwitchDto(deviceSwitch, mapIfNotNull(deviceSwitch.getStateProperty(), propertyMapper::toDto)); + return new DeviceSwitchDto(deviceSwitch, mapOrNull(deviceSwitch.getStateProperty(), propertyMapper::toDto)); } else if (device instanceof DeviceStateScene) { final DeviceStateScene deviceStateScene = (DeviceStateScene) device; - return new DeviceStateSceneDto(deviceStateScene, mapIfNotNull(deviceStateScene.getStateProperty(), propertyMapper::toDto), mapIfNotNull(deviceStateScene.getSceneProperty(), propertyMapper::toDto)); + return new DeviceStateSceneDto(deviceStateScene, mapOrNull(deviceStateScene.getStateProperty(), propertyMapper::toDto), mapOrNull(deviceStateScene.getSceneProperty(), propertyMapper::toDto)); } else if (device instanceof DeviceShutter) { final DeviceShutter deviceShutter = (DeviceShutter) device; - return new DeviceShutterDto(deviceShutter, mapIfNotNull(deviceShutter.getPositionProperty(), propertyMapper::toDto)); + return new DeviceShutterDto(deviceShutter, mapOrNull(deviceShutter.getPositionProperty(), propertyMapper::toDto)); } throw new RuntimeException(); } diff --git a/src/main/java/de/ph87/homeautomation/property/PropertyController.java b/src/main/java/de/ph87/homeautomation/property/PropertyController.java index 9e0f0e3..15a97ef 100644 --- a/src/main/java/de/ph87/homeautomation/property/PropertyController.java +++ b/src/main/java/de/ph87/homeautomation/property/PropertyController.java @@ -1,5 +1,6 @@ package de.ph87.homeautomation.property; +import de.ph87.homeautomation.channel.ChannelService; import de.ph87.homeautomation.shared.ISearchController; import de.ph87.homeautomation.shared.SearchResult; import lombok.RequiredArgsConstructor; @@ -17,6 +18,13 @@ public class PropertyController implements ISearchController { private final PropertyReadService propertyReadService; + private final ChannelService channelService; + + @GetMapping("create") + public PropertyDto create() { + return propertyWriteService.create(); + } + @GetMapping("findAll") public List findAll() { return propertyReadService.findAllDto(); @@ -37,6 +45,16 @@ public class PropertyController implements ISearchController { return propertyWriteService.set(id, propertyWriteService::write, value); } + @PostMapping("set/{id}/readChannel") + public PropertyDto setReadChannel(@PathVariable final long id, @RequestBody(required = false) final Long channelId) { + return propertyWriteService.set(id, Property::setReadChannel, channelService.getById(channelId)); + } + + @PostMapping("set/{id}/writeChannel") + public PropertyDto setWriteChannel(@PathVariable final long id, @RequestBody(required = false) final Long channelId) { + return propertyWriteService.set(id, Property::setWriteChannel, channelService.getById(channelId)); + } + @Override @GetMapping("getById/{id}") public SearchResult getById(@PathVariable final long id) { diff --git a/src/main/java/de/ph87/homeautomation/property/PropertyWriteService.java b/src/main/java/de/ph87/homeautomation/property/PropertyWriteService.java index b6210d8..d82f022 100644 --- a/src/main/java/de/ph87/homeautomation/property/PropertyWriteService.java +++ b/src/main/java/de/ph87/homeautomation/property/PropertyWriteService.java @@ -47,9 +47,10 @@ public class PropertyWriteService { } public PropertyDto create() { - final Property entry = new Property(); - entry.setTitle(generateUnusedTitle()); - return publish(propertyRepository.save(entry), true); + final Property property = new Property(); + property.setTitle(generateUnusedTitle()); + property.setType(PropertyType.BOOLEAN); + return publish(propertyRepository.save(property), true); } private String generateUnusedTitle() { diff --git a/src/main/java/de/ph87/homeautomation/schedule/ScheduleController.java b/src/main/java/de/ph87/homeautomation/schedule/ScheduleController.java index d99a896..d402750 100644 --- a/src/main/java/de/ph87/homeautomation/schedule/ScheduleController.java +++ b/src/main/java/de/ph87/homeautomation/schedule/ScheduleController.java @@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; -import static de.ph87.homeautomation.shared.Helpers.mapIfNotNull; +import static de.ph87.homeautomation.shared.Helpers.mapOrNull; @RestController @RequestMapping("schedule") @@ -51,7 +51,7 @@ public class ScheduleController { @PostMapping("set/{id}/property") public ScheduleDto setPropertyName(@PathVariable final long id, @RequestBody(required = false) final Long propertyId) { - return scheduleWriteService.set(id, (schedule, v) -> schedule.setProperty(mapIfNotNull(v, propertyReadService::getById)), propertyId); + return scheduleWriteService.set(id, Schedule::setProperty, mapOrNull(propertyId, propertyReadService::getById)); } } diff --git a/src/main/java/de/ph87/homeautomation/schedule/ScheduleMapper.java b/src/main/java/de/ph87/homeautomation/schedule/ScheduleMapper.java index 835600c..ccdcd01 100644 --- a/src/main/java/de/ph87/homeautomation/schedule/ScheduleMapper.java +++ b/src/main/java/de/ph87/homeautomation/schedule/ScheduleMapper.java @@ -6,7 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import static de.ph87.homeautomation.shared.Helpers.mapIfNotNull; +import static de.ph87.homeautomation.shared.Helpers.mapOrNull; @Slf4j @Service @@ -17,7 +17,7 @@ public class ScheduleMapper { private final PropertyMapper propertyMapper; public ScheduleDto toDto(final Schedule schedule) { - return new ScheduleDto(schedule, mapIfNotNull(schedule.getProperty(), propertyMapper::toDto)); + return new ScheduleDto(schedule, mapOrNull(schedule.getProperty(), propertyMapper::toDto)); } } diff --git a/src/main/java/de/ph87/homeautomation/shared/Helpers.java b/src/main/java/de/ph87/homeautomation/shared/Helpers.java index e83a145..25ce171 100644 --- a/src/main/java/de/ph87/homeautomation/shared/Helpers.java +++ b/src/main/java/de/ph87/homeautomation/shared/Helpers.java @@ -21,7 +21,7 @@ public class Helpers { return value; } - public static U mapIfNotNull(final T value, final Function map) { + public static U mapOrNull(final T value, final Function map) { if (value == null) { return null; }
Bezeichnung