From ec4cd274f6a9eab14d71ccad71457af0cbed1541 Mon Sep 17 00:00:00 2001 From: Cody Cutrer Date: Fri, 30 Dec 2022 10:26:17 -0700 Subject: [PATCH 1/2] allow library users to get the value of characteristics themselves so they can also generically get the value, regardless of how they decided to fulfill it, without having to also keep track themselves --- .../impl/base/BaseCharacteristic.java | 2 +- .../impl/base/BooleanCharacteristic.java | 2 +- .../impl/base/EnumCharacteristic.java | 13 ++++++++++++- .../impl/base/FloatCharacteristic.java | 2 +- .../impl/base/IntegerCharacteristic.java | 2 +- .../impl/base/StaticStringCharacteristic.java | 2 +- .../impl/base/StringCharacteristic.java | 2 +- 7 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java index 1d2d55c5b..9e57de098 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java @@ -190,7 +190,7 @@ public void unsubscribe() { * * @return a future that will complete with the current value. */ - protected abstract CompletableFuture getValue(); + public abstract CompletableFuture getValue(); /** * Supplies a default value for the characteristic to send to connected clients when the real diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/BooleanCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/BooleanCharacteristic.java index 3e07936a8..5e7f16ad7 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/BooleanCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/BooleanCharacteristic.java @@ -60,7 +60,7 @@ protected Boolean convert(JsonValue jsonValue) { } @Override - protected CompletableFuture getValue() { + public CompletableFuture getValue() { return getter.isPresent() ? getter.map(booleanGetter -> booleanGetter.get()).get() : null; } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java index df3287de5..881ef91e2 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java @@ -84,8 +84,19 @@ protected Integer convert(JsonValue jsonValue) { } } + /** + * @return the current value of this characteristic, or null if it has no value or can't be + * fetched + */ + public CompletableFuture getEnumValue() { + if (!getter.isPresent()) { + return null; + } + return getter.get().get(); + } + @Override - protected CompletableFuture getValue() { + public CompletableFuture getValue() { if (!getter.isPresent()) { return null; } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/FloatCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/FloatCharacteristic.java index a8a98dc27..e38d310c7 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/FloatCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/FloatCharacteristic.java @@ -94,7 +94,7 @@ protected Double convert(JsonValue jsonValue) { * the constructor. */ @Override - protected final CompletableFuture getValue() { + public final CompletableFuture getValue() { if (!getter.isPresent()) { return null; } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java index 22a6dce83..0c05fb4f7 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java @@ -71,7 +71,7 @@ protected CompletableFuture makeBuilder(int iid) { } @Override - protected CompletableFuture getValue() { + public CompletableFuture getValue() { return getter.map(integerGetter -> integerGetter.get()).orElse(null); } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/StaticStringCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/StaticStringCharacteristic.java index 576df7e0e..fc5961d4d 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/StaticStringCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/StaticStringCharacteristic.java @@ -59,7 +59,7 @@ public void setValue(String value) throws Exception { /** {@inheritDoc} */ @Override - protected CompletableFuture getValue() { + public CompletableFuture getValue() { return getter.map(stringGetter -> stringGetter.get()).orElse(null); } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/StringCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/StringCharacteristic.java index 65cf45a71..53196efb9 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/StringCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/StringCharacteristic.java @@ -68,7 +68,7 @@ public void setValue(String value) throws Exception { /** {@inheritDoc} */ @Override - protected CompletableFuture getValue() { + public CompletableFuture getValue() { return getter.map(stringGetter -> stringGetter.get()).orElse(null); } From b40277150fb21378a92138aa24c915c0200d1285 Mon Sep 17 00:00:00 2001 From: Cody Cutrer Date: Fri, 30 Dec 2022 11:46:04 -0700 Subject: [PATCH 2/2] allow setting values directly via characteristics --- .../impl/base/BaseCharacteristic.java | 2 +- .../impl/base/BooleanCharacteristic.java | 2 +- .../impl/base/EnumCharacteristic.java | 12 ++++++++++-- .../impl/base/FloatCharacteristic.java | 2 +- .../impl/base/IntegerCharacteristic.java | 2 +- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java index 9e57de098..38d1d8e6d 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java @@ -183,7 +183,7 @@ public void unsubscribe() { * @param value the new value to set. * @throws Exception if the value cannot be set. */ - protected abstract void setValue(T value) throws Exception; + public abstract void setValue(T value) throws Exception; /** * Retrieves the current value of the characteristic. diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/BooleanCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/BooleanCharacteristic.java index 5e7f16ad7..4b484eb85 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/BooleanCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/BooleanCharacteristic.java @@ -65,7 +65,7 @@ public CompletableFuture getValue() { } @Override - protected void setValue(Boolean value) throws Exception { + public void setValue(Boolean value) throws Exception { if (setter.isPresent()) setter.get().accept(value); } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java index 881ef91e2..65e82747f 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/EnumCharacteristic.java @@ -103,8 +103,16 @@ public CompletableFuture getValue() { return getter.get().get().thenApply(T::getCode); } + public void setValue(T value) throws Exception { + if (!setter.isPresent()) { + return; + } + + setter.get().accept(value); + } + @Override - protected void setValue(Integer value) throws Exception { + public void setValue(Integer value) throws Exception { if (!setter.isPresent()) { return; } @@ -113,7 +121,7 @@ protected void setValue(Integer value) throws Exception { if (validValues != null && value != null) { for (T valid : validValues) { if (valid.getCode() == value) { - setter.get().accept(valid); + setValue(valid); return; } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/FloatCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/FloatCharacteristic.java index e38d310c7..f504322a0 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/FloatCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/FloatCharacteristic.java @@ -129,7 +129,7 @@ public final CompletableFuture getValue() { } @Override - protected void setValue(Double value) throws Exception { + public void setValue(Double value) throws Exception { if (setter.isPresent()) setter.get().accept(value); } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java index 0c05fb4f7..6d1b7df6d 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/IntegerCharacteristic.java @@ -76,7 +76,7 @@ public CompletableFuture getValue() { } @Override - protected void setValue(Integer value) throws Exception { + public void setValue(Integer value) throws Exception { if (setter.isPresent()) setter.get().accept(value); }