diff --git a/src/main/java/com/beowulfe/hap/accessories/Lightbulb.java b/src/main/java/com/beowulfe/hap/accessories/Lightbulb.java index 58f350618..e1ca0d323 100644 --- a/src/main/java/com/beowulfe/hap/accessories/Lightbulb.java +++ b/src/main/java/com/beowulfe/hap/accessories/Lightbulb.java @@ -1,9 +1,12 @@ package com.beowulfe.hap.accessories; import com.beowulfe.hap.*; +import com.beowulfe.hap.accessories.characteristics.Brightness; +import com.beowulfe.hap.accessories.characteristics.Color; import com.beowulfe.hap.impl.services.LightbulbService; import java.util.Collection; import java.util.Collections; +import java.util.Optional; import java.util.concurrent.CompletableFuture; /** @@ -43,4 +46,16 @@ default Collection getServices() { /** Unsubscribes from changes in the binary state of the light. */ void unsubscribeLightbulbPowerState(); + + /** returns the optional implementation of Brightness */ + default Optional getBrightnessCharacteristic() { + Optional result = Optional.empty(); + return result; + } + + /** returns the optional implementation of Color */ + default Optional getColorCharacteristics() { + Optional result = Optional.empty(); + return result; + } } diff --git a/src/main/java/com/beowulfe/hap/accessories/DimmableLightbulb.java b/src/main/java/com/beowulfe/hap/accessories/characteristics/Brightness.java similarity index 84% rename from src/main/java/com/beowulfe/hap/accessories/DimmableLightbulb.java rename to src/main/java/com/beowulfe/hap/accessories/characteristics/Brightness.java index e83b592e5..3cb280c68 100644 --- a/src/main/java/com/beowulfe/hap/accessories/DimmableLightbulb.java +++ b/src/main/java/com/beowulfe/hap/accessories/characteristics/Brightness.java @@ -1,15 +1,9 @@ -package com.beowulfe.hap.accessories; +package com.beowulfe.hap.accessories.characteristics; import com.beowulfe.hap.HomekitCharacteristicChangeCallback; import java.util.concurrent.CompletableFuture; -/** - * Extends {@link Lightbulb} with brightness values. - * - * @author Andy Lintner - */ -public interface DimmableLightbulb extends Lightbulb { - +public interface Brightness { /** * Retrieves the current brightness of the light * diff --git a/src/main/java/com/beowulfe/hap/accessories/ColorfulLightbulb.java b/src/main/java/com/beowulfe/hap/accessories/characteristics/Color.java similarity index 88% rename from src/main/java/com/beowulfe/hap/accessories/ColorfulLightbulb.java rename to src/main/java/com/beowulfe/hap/accessories/characteristics/Color.java index d218bece4..9bcf3bdce 100644 --- a/src/main/java/com/beowulfe/hap/accessories/ColorfulLightbulb.java +++ b/src/main/java/com/beowulfe/hap/accessories/characteristics/Color.java @@ -1,16 +1,15 @@ -package com.beowulfe.hap.accessories; +package com.beowulfe.hap.accessories.characteristics; import com.beowulfe.hap.HomekitCharacteristicChangeCallback; import java.util.concurrent.CompletableFuture; /** - * Extends {@link Lightbulb} with color settings. This will usually be implemented along with {@link - * DimmableLightbulb}, but not necessarily so. + * Extends a Lightbulb with color settings. This will usually be implemented along with {@link + * Brightness}, but not necessarily so. * * @author Andy Lintner */ -public interface ColorfulLightbulb extends Lightbulb { - +public interface Color { /** * Retrieves the current hue of the light. * diff --git a/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/BrightnessCharacteristic.java b/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/BrightnessCharacteristic.java index 3cd303332..da0bca52f 100644 --- a/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/BrightnessCharacteristic.java +++ b/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/BrightnessCharacteristic.java @@ -1,7 +1,7 @@ package com.beowulfe.hap.impl.characteristics.lightbulb; import com.beowulfe.hap.HomekitCharacteristicChangeCallback; -import com.beowulfe.hap.accessories.DimmableLightbulb; +import com.beowulfe.hap.accessories.characteristics.Brightness; import com.beowulfe.hap.characteristics.EventableCharacteristic; import com.beowulfe.hap.characteristics.IntegerCharacteristic; import java.util.concurrent.CompletableFuture; @@ -9,9 +9,9 @@ public class BrightnessCharacteristic extends IntegerCharacteristic implements EventableCharacteristic { - private final DimmableLightbulb lightbulb; + private final Brightness lightbulb; - public BrightnessCharacteristic(DimmableLightbulb lightbulb) { + public BrightnessCharacteristic(Brightness lightbulb) { super( "00000008-0000-1000-8000-0026BB765291", true, diff --git a/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/HueCharacteristic.java b/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/HueCharacteristic.java index 561a74b39..ed7c92e6a 100644 --- a/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/HueCharacteristic.java +++ b/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/HueCharacteristic.java @@ -1,16 +1,16 @@ package com.beowulfe.hap.impl.characteristics.lightbulb; import com.beowulfe.hap.HomekitCharacteristicChangeCallback; -import com.beowulfe.hap.accessories.ColorfulLightbulb; +import com.beowulfe.hap.accessories.characteristics.Color; import com.beowulfe.hap.characteristics.EventableCharacteristic; import com.beowulfe.hap.characteristics.FloatCharacteristic; import java.util.concurrent.CompletableFuture; public class HueCharacteristic extends FloatCharacteristic implements EventableCharacteristic { - private final ColorfulLightbulb lightbulb; + private final Color lightbulb; - public HueCharacteristic(ColorfulLightbulb lightbulb) { + public HueCharacteristic(Color lightbulb) { super( "00000013-0000-1000-8000-0026BB765291", true, diff --git a/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/SaturationCharacteristic.java b/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/SaturationCharacteristic.java index 29d39da3b..a927c40d4 100644 --- a/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/SaturationCharacteristic.java +++ b/src/main/java/com/beowulfe/hap/impl/characteristics/lightbulb/SaturationCharacteristic.java @@ -1,7 +1,7 @@ package com.beowulfe.hap.impl.characteristics.lightbulb; import com.beowulfe.hap.HomekitCharacteristicChangeCallback; -import com.beowulfe.hap.accessories.ColorfulLightbulb; +import com.beowulfe.hap.accessories.characteristics.Color; import com.beowulfe.hap.characteristics.EventableCharacteristic; import com.beowulfe.hap.characteristics.FloatCharacteristic; import java.util.concurrent.CompletableFuture; @@ -9,9 +9,9 @@ public class SaturationCharacteristic extends FloatCharacteristic implements EventableCharacteristic { - private final ColorfulLightbulb lightbulb; + private final Color lightbulb; - public SaturationCharacteristic(ColorfulLightbulb lightbulb) { + public SaturationCharacteristic(Color lightbulb) { super( "0000002F-0000-1000-8000-0026BB765291", true, diff --git a/src/main/java/com/beowulfe/hap/impl/services/LightbulbService.java b/src/main/java/com/beowulfe/hap/impl/services/LightbulbService.java index b8173d9d9..259a9be25 100644 --- a/src/main/java/com/beowulfe/hap/impl/services/LightbulbService.java +++ b/src/main/java/com/beowulfe/hap/impl/services/LightbulbService.java @@ -1,7 +1,5 @@ package com.beowulfe.hap.impl.services; -import com.beowulfe.hap.accessories.ColorfulLightbulb; -import com.beowulfe.hap.accessories.DimmableLightbulb; import com.beowulfe.hap.accessories.Lightbulb; import com.beowulfe.hap.impl.characteristics.common.PowerStateCharacteristic; import com.beowulfe.hap.impl.characteristics.lightbulb.BrightnessCharacteristic; @@ -23,13 +21,16 @@ public LightbulbService(Lightbulb lightbulb, String serviceName) { c -> lightbulb.subscribeLightbulbPowerState(c), () -> lightbulb.unsubscribeLightbulbPowerState())); - if (lightbulb instanceof DimmableLightbulb) { - addCharacteristic(new BrightnessCharacteristic((DimmableLightbulb) lightbulb)); - } + lightbulb + .getBrightnessCharacteristic() + .ifPresent(brightness -> addCharacteristic(new BrightnessCharacteristic(brightness))); - if (lightbulb instanceof ColorfulLightbulb) { - addCharacteristic(new HueCharacteristic((ColorfulLightbulb) lightbulb)); - addCharacteristic(new SaturationCharacteristic((ColorfulLightbulb) lightbulb)); - } + lightbulb + .getColorCharacteristics() + .ifPresent( + color -> { + addCharacteristic(new HueCharacteristic(color)); + addCharacteristic(new SaturationCharacteristic(color)); + }); } }