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
.Optional
;
11 import java
.util
.stream
.Collectors
;
13 public abstract class DbusProperties
implements Properties
{
15 private final List
<DbusInterfacePropertiesHandler
> handlers
= new ArrayList
<>();
17 protected void addPropertiesHandler(DbusInterfacePropertiesHandler handler
) {
18 this.handlers
.add(handler
);
21 DbusInterfacePropertiesHandler
getHandler(String interfaceName
) {
22 final var handler
= getHandlerOptional(interfaceName
);
23 if (handler
.isEmpty()) {
24 throw new Signal
.Error
.Failure("Property not found");
29 private Optional
<DbusInterfacePropertiesHandler
> getHandlerOptional(final String interfaceName
) {
30 return handlers
.stream().filter(h
-> h
.getInterfaceName().equals(interfaceName
)).findFirst();
34 @SuppressWarnings("unchecked")
35 public <A
> A
Get(final String interface_name
, final String property_name
) {
36 final var handler
= getHandler(interface_name
);
37 final var getter
= handler
.getGetter(property_name
);
39 throw new Signal
.Error
.Failure("Property not found");
41 return (A
) getter
.get();
45 public <A
> void Set(final String interface_name
, final String property_name
, final A value
) {
46 final var handler
= getHandler(interface_name
);
47 final var setter
= handler
.getSetter(property_name
);
49 throw new Signal
.Error
.Failure("Property not found");
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 ? variant
: new Variant
<>(o
);