diff --git a/src/main/angular/src/app/api/device/Device.ts b/src/main/angular/src/app/api/device/Device.ts index 24983a6..e5019bd 100644 --- a/src/main/angular/src/app/api/device/Device.ts +++ b/src/main/angular/src/app/api/device/Device.ts @@ -36,7 +36,11 @@ export abstract class Device { return item.title; } - public static compareTitle(a: Device, b: Device): number { + public static compareTypeThenTitle(a: Device, b: Device): number { + const type: number = -a.type.localeCompare(b.type); + if (type !== 0) { + return type; + } return a.title.localeCompare(b.title); } diff --git a/src/main/angular/src/app/api/property/Property.ts b/src/main/angular/src/app/api/property/Property.ts index 6629aba..00c3ec6 100644 --- a/src/main/angular/src/app/api/property/Property.ts +++ b/src/main/angular/src/app/api/property/Property.ts @@ -35,8 +35,12 @@ export class Property { return item.name; } - public static compareName(a: Property, b: Property): number { - return a.name.localeCompare(b.name); + public static compareTypeThenTitle(a: Property, b: Property): number { + const type: number = -a.type.localeCompare(b.type); + if (type !== 0) { + return type; + } + return a.title.localeCompare(b.title); } } diff --git a/src/main/angular/src/app/pages/device-list/device-list.component.html b/src/main/angular/src/app/pages/device-list/device-list.component.html index 2d89c96..2ad582a 100644 --- a/src/main/angular/src/app/pages/device-list/device-list.component.html +++ b/src/main/angular/src/app/pages/device-list/device-list.component.html @@ -1,4 +1,4 @@ - +
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 11a5dd8..3e8b679 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 @@ -6,7 +6,7 @@ Wert Zeitstempel - + 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 92dc3d5..44b6ba8 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 @@ -11,6 +11,8 @@ import {SceneService} from "../../api/scene/scene.service"; }) export class PropertyListComponent implements OnInit { + Property = Property; + properties: Property[] = []; scenes: Scene[] = []; @@ -23,7 +25,7 @@ export class PropertyListComponent implements OnInit { } ngOnInit(): void { - this.propertyService.findAll(properties => this.properties = properties, Property.compareName); + this.propertyService.findAll(properties => this.properties = properties, Property.compareTypeThenTitle); this.propertyService.subscribe(update => this.updateProperty(update.payload, update.existing)); this.sceneService.findAll(scenes => this.scenes = scenes, Scene.compareNumber); diff --git a/src/main/java/de/ph87/homeautomation/DemoDataService.java b/src/main/java/de/ph87/homeautomation/DemoDataService.java index 75f7984..c54bd5a 100644 --- a/src/main/java/de/ph87/homeautomation/DemoDataService.java +++ b/src/main/java/de/ph87/homeautomation/DemoDataService.java @@ -48,24 +48,39 @@ public class DemoDataService { private final SceneWriteService sceneWriteService; public void insertDemoData() { + final Property fernseher = createProperty("fernseher.eg", PropertyType.SWITCH, "Fernseher", knx(0, 0, 20), knx(0, 0, 4)); + final Property verstaerker = createProperty("verstaerker", PropertyType.SWITCH, "Verstärker", knx(0, 3, 57), knx(0, 3, 56)); + final Property garten_steckdosen = createProperty("garten.steckdosen", PropertyType.SWITCH, "Garten Steckdosen", knx(0, 4, 12), knx(0, 4, 11)); + final Property terrasse = createProperty("terrasse", PropertyType.SWITCH, "Terrasse Licht", knx(0, 4, 1), knx(0, 4, 0)); + final Property ambiente_eg = createProperty("ambiente.eg", PropertyType.SWITCH, "Ambiente EG", knx(0, 3, 81), knx(0, 3, 80)); final Property ambiente_og = createProperty("ambiente.og", PropertyType.SWITCH, "Ambiente OG", knx(0, 6, 2), knx(0, 6, 3)); + final Property bad_licht = createProperty("bad.licht", PropertyType.SWITCH, "Bad Licht", knx(0, 5, 19), knx(0, 3, 73)); - final Property bad_licht_mitte = createProperty("bad.licht.mitte", PropertyType.SWITCH, "Bad Licht Mitte", knx(0, 3, 30), knx(0, 3, 29)); final Property flur_eg_licht = createProperty("flur.eg.licht", PropertyType.SWITCH, "Flur EG Licht", knx(0, 4, 8), knx(0, 5, 14)); + final Property wohnzimmer_rollladen = createProperty("wohnzimmer.rollladen", PropertyType.SHUTTER, "Wohnzimmer Rollladen", null, knx(0, 4, 24)); final Property schlafzimmer_rollladen = createProperty("schlafzimmer_rollladen", PropertyType.SHUTTER, "Schlafzimmer Rollladen", null, knx(0, 3, 3)); final Property flur_og_rollladen = createProperty("flur_og_rollladen", PropertyType.SHUTTER, "Flur OG Rollladen", null, knx(0, 5, 13)); + final Property helligkeit = createProperty("helligkeit", PropertyType.LUX, "Helligkeit", knx(0, 5, 6), null); final Property szene_haus = createProperty("szene_haus", PropertyType.SCENE, "Szene Haus ", null, knx(0, 0, 21)); if (deviceRepository.count() == 0) { - deviceWriteService.createDeviceSwitch("Ambiente EG", ambiente_eg); - deviceWriteService.createDeviceSwitch("Ambiente OG", ambiente_og); - deviceWriteService.createDeviceSwitch("Bad Licht", bad_licht); - deviceWriteService.createDeviceShutter("Wohnzimmer Rollladen", wohnzimmer_rollladen); - deviceWriteService.createDeviceShutter("Schlafzimmer Rollladen", schlafzimmer_rollladen); - deviceWriteService.createDeviceShutter("Flur Rollladen", flur_og_rollladen); + deviceWriteService.createDeviceSwitch(fernseher); + deviceWriteService.createDeviceSwitch(verstaerker); + deviceWriteService.createDeviceSwitch(garten_steckdosen); + deviceWriteService.createDeviceSwitch(terrasse); + + deviceWriteService.createDeviceSwitch(ambiente_eg); + deviceWriteService.createDeviceSwitch(ambiente_og); + + deviceWriteService.createDeviceSwitch(bad_licht); + deviceWriteService.createDeviceSwitch(flur_eg_licht); + + deviceWriteService.createDeviceShutter(wohnzimmer_rollladen); + deviceWriteService.createDeviceShutter(schlafzimmer_rollladen); + deviceWriteService.createDeviceShutter(flur_og_rollladen); } if (sceneRepository.count() == 0) { @@ -116,17 +131,6 @@ public class DemoDataService { createSunset(scheduleFlurRollladen, true, BETWEEN_OFFICIAL_AND_CIVIL, 0, 100); scheduleRepository.save(scheduleFlurRollladen); - final Schedule scheduleBadLichtMitte = createSchedule(false, "Bad Licht Mitte", bad_licht_mitte); - createTime(scheduleBadLichtMitte, true, 10, 30, 0, MIN30, true); - createTime(scheduleBadLichtMitte, true, 11, 30, 0, MIN30, false); - createTime(scheduleBadLichtMitte, true, 15, 30, 0, MIN30, true); - createTime(scheduleBadLichtMitte, true, 16, 30, 0, MIN30, false); - createTime(scheduleBadLichtMitte, true, 21, 0, 0, MIN30, true); - createTime(scheduleBadLichtMitte, true, 22, 0, 0, MIN30, false); - createTime(scheduleBadLichtMitte, true, 0, 0, 0, MIN30, true); - createTime(scheduleBadLichtMitte, true, 1, 0, 0, MIN30, false); - scheduleRepository.save(scheduleBadLichtMitte); - final Schedule scheduleSzeneHaus = createSchedule(true, "Dekoration", szene_haus); createTime(scheduleSzeneHaus, true, 6, 0, 0, 0, 31); createTime(scheduleSzeneHaus, true, 8, 30, 0, 0, 30); diff --git a/src/main/java/de/ph87/homeautomation/device/DeviceWriteService.java b/src/main/java/de/ph87/homeautomation/device/DeviceWriteService.java index ff516a5..3fc47d6 100644 --- a/src/main/java/de/ph87/homeautomation/device/DeviceWriteService.java +++ b/src/main/java/de/ph87/homeautomation/device/DeviceWriteService.java @@ -24,17 +24,25 @@ public class DeviceWriteService { private final DeviceReadService deviceReadService; + public DeviceDto createDeviceSwitch(final Property stateProperty) { + return createDeviceSwitch(null, stateProperty); + } + public DeviceDto createDeviceSwitch(final String title, final Property stateProperty) { final DeviceSwitch deviceSwitch = new DeviceSwitch(); - deviceSwitch.setTitle(title); + deviceSwitch.setTitle(getTitle(title, stateProperty)); deviceSwitch.setStateProperty(stateProperty); deviceRepository.save(deviceSwitch); return deviceReadService.toDto(deviceSwitch); } + public DeviceDto createDeviceShutter(final Property positionProperty) { + return createDeviceShutter(null, positionProperty); + } + public DeviceDto createDeviceShutter(final String title, final Property positionProperty) { final DeviceShutter deviceShutter = new DeviceShutter(); - deviceShutter.setTitle(title); + deviceShutter.setTitle(getTitle(title, positionProperty)); deviceShutter.setPositionProperty(positionProperty); deviceRepository.save(deviceShutter); return deviceReadService.toDto(deviceShutter); @@ -71,13 +79,23 @@ public class DeviceWriteService { public DeviceDto create(final String type) { switch (type) { case "DeviceSwitch": - return createDeviceSwitch(generateUnusedTitle(), null); + return createDeviceSwitch(null, null); case "DeviceShutter": - return createDeviceShutter(generateUnusedTitle(), null); + return createDeviceShutter(null, null); } throw new RuntimeException("Not implemented type: " + type); } + private String getTitle(final String title, final Property property) { + if (title != null) { + return title; + } else if (property != null) { + return property.getTitle(); + } else { + return generateUnusedTitle(); + } + } + private String generateUnusedTitle() { int index = 0; String title = null; diff --git a/src/main/java/de/ph87/homeautomation/shared/Helpers.java b/src/main/java/de/ph87/homeautomation/shared/Helpers.java index f05c0b5..e83a145 100644 --- a/src/main/java/de/ph87/homeautomation/shared/Helpers.java +++ b/src/main/java/de/ph87/homeautomation/shared/Helpers.java @@ -7,6 +7,13 @@ import java.util.function.Supplier; public class Helpers { + public static T orElseGet(final T value, final T orElse) { + if (value == null) { + return orElse; + } + return value; + } + public static T orElseGet(final T value, final Supplier orElseGet) { if (value == null) { return orElseGet.get();