]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/dbus/DbusInterfacePropertiesHandler.java
Add helper classes for exporting dbus properties
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusInterfacePropertiesHandler.java
diff --git a/src/main/java/org/asamk/signal/dbus/DbusInterfacePropertiesHandler.java b/src/main/java/org/asamk/signal/dbus/DbusInterfacePropertiesHandler.java
new file mode 100644 (file)
index 0000000..d3c2ca8
--- /dev/null
@@ -0,0 +1,46 @@
+package org.asamk.signal.dbus;
+
+import org.asamk.Signal;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+public class DbusInterfacePropertiesHandler {
+
+    private final String interfaceName;
+    private final List<DbusProperty<?>> properties;
+
+    public DbusInterfacePropertiesHandler(
+            final String interfaceName, final List<DbusProperty<?>> properties
+    ) {
+        this.interfaceName = interfaceName;
+        this.properties = properties;
+    }
+
+    public String getInterfaceName() {
+        return interfaceName;
+    }
+
+    @SuppressWarnings("unchecked")
+    private <T> DbusProperty<T> findProperty(String propertyName) {
+        final var property = properties.stream().filter(p -> p.getName().equals(propertyName)).findFirst();
+        if (property.isEmpty()) {
+            throw new Signal.Error.Failure("Property not found");
+        }
+        return (DbusProperty<T>) property.get();
+    }
+
+    <T> Consumer<T> getSetter(String propertyName) {
+        return this.<T>findProperty(propertyName).getSetter();
+    }
+
+    <T> Supplier<T> getGetter(String propertyName) {
+        return this.<T>findProperty(propertyName).getGetter();
+    }
+
+    Collection<DbusProperty<?>> getProperties() {
+        return properties;
+    }
+}