]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/dbus/DbusProperties.java
Add missing unexport groups call
[signal-cli] / src / main / java / org / asamk / signal / dbus / DbusProperties.java
1 package org.asamk.signal.dbus;
2
3 import org.asamk.Signal;
4 import org.freedesktop.dbus.interfaces.Properties;
5 import org.freedesktop.dbus.types.Variant;
6
7 import java.util.ArrayList;
8 import java.util.List;
9 import java.util.Map;
10 import java.util.stream.Collectors;
11
12 public abstract class DbusProperties implements Properties {
13
14 private final List<DbusInterfacePropertiesHandler> handlers = new ArrayList<>();
15
16 protected void addPropertiesHandler(DbusInterfacePropertiesHandler handler) {
17 this.handlers.add(handler);
18 }
19
20 DbusInterfacePropertiesHandler getHandler(String interfaceName) {
21 final var handler = getHandlerOptional(interfaceName);
22 if (handler.isEmpty()) {
23 throw new Signal.Error.Failure("Property not found");
24 }
25 return handler.get();
26 }
27
28 private java.util.Optional<DbusInterfacePropertiesHandler> getHandlerOptional(final String interfaceName) {
29 return handlers.stream().filter(h -> h.getInterfaceName().equals(interfaceName)).findFirst();
30 }
31
32 @Override
33 @SuppressWarnings("unchecked")
34 public <A> A Get(final String interface_name, final String property_name) {
35 final var handler = getHandler(interface_name);
36 final var getter = handler.getGetter(property_name);
37 if (getter == null) {
38 throw new Signal.Error.Failure("Property not found");
39 }
40 return (A) getter.get();
41 }
42
43 @Override
44 public <A> void Set(final String interface_name, final String property_name, final A value) {
45 final var handler = getHandler(interface_name);
46 final var setter = handler.getSetter(property_name);
47 if (setter == null) {
48 throw new Signal.Error.Failure("Property not found");
49 }
50 setter.accept(value);
51 }
52
53 @Override
54 @SuppressWarnings("unchecked")
55 public Map<String, Variant<?>> GetAll(final String interface_name) {
56 final var handler = getHandlerOptional(interface_name);
57 if (handler.isEmpty()) {
58 return Map.of();
59 }
60
61 return handler.get()
62 .getProperties()
63 .stream()
64 .filter(p -> p.getGetter() != null)
65 .collect(Collectors.toMap(DbusProperty::getName, p -> {
66 final Object o = p.getGetter().get();
67 return o instanceof Variant ? (Variant<Object>) o : new Variant<>(o);
68 }));
69 }
70 }