1 package org
.asamk
.signal
.dbus
;
3 import org
.asamk
.Signal
;
4 import org
.freedesktop
.dbus
.interfaces
.Properties
;
5 import org
.freedesktop
.dbus
.types
.Variant
;
7 import java
.util
.ArrayList
;
10 import java
.util
.stream
.Collectors
;
12 public abstract class DbusProperties
implements Properties
{
14 private final List
<DbusInterfacePropertiesHandler
> handlers
= new ArrayList
<>();
16 protected void addPropertiesHandler(DbusInterfacePropertiesHandler handler
) {
17 this.handlers
.add(handler
);
20 DbusInterfacePropertiesHandler
getHandler(String interfaceName
) {
21 final var handler
= getHandlerOptional(interfaceName
);
22 if (handler
.isEmpty()) {
23 throw new Signal
.Error
.Failure("Property not found");
28 private java
.util
.Optional
<DbusInterfacePropertiesHandler
> getHandlerOptional(final String interfaceName
) {
29 return handlers
.stream().filter(h
-> h
.getInterfaceName().equals(interfaceName
)).findFirst();
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
);
38 throw new Signal
.Error
.Failure("Property not found");
40 return (A
) getter
.get();
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
);
48 throw new Signal
.Error
.Failure("Property not found");
54 @SuppressWarnings("unchecked")
55 public Map
<String
, Variant
<?
>> GetAll(final String interface_name
) {
56 final var handler
= getHandlerOptional(interface_name
);
57 if (handler
.isEmpty()) {
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
);