]> git.basschouten.com Git - openhab-addons.git/blob
a10a2333b7c80cc2bd2718c17bd9f93430cde384
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.plugwiseha.internal.api.model.dto;
14
15 import java.util.Map;
16 import java.util.Optional;
17
18 /**
19  * The {@link ActuatorFunctionalities} class is an object model class that
20  * mirrors the XML structure provided by the Plugwise Home Automation controller
21  * for the collection of actuator functionalities. (e.g. 'offset', 'relay', et
22  * cetera). It extends the {@link PlugwiseHACollection} class.
23  * 
24  * @author B. van Wetten - Initial contribution
25  */
26
27 public class ActuatorFunctionalities extends PlugwiseHACollection<ActuatorFunctionality> {
28
29     private static final String THERMOSTAT_FUNCTIONALITY = "thermostat";
30     private static final String OFFSETTEMPERATURE_FUNCTIONALITY = "temperature_offset";
31     private static final String RELAY_FUNCTIONALITY = "relay";
32
33     public Optional<Boolean> getRelayLockState() {
34         return this.getFunctionalityRelay().flatMap(ActuatorFunctionality::getRelayLockState)
35                 .map(Boolean::parseBoolean);
36     }
37
38     public String getRegulationControl() {
39         ActuatorFunctionality functionality = this.getFunctionalityThermostat().orElse(null);
40         if (functionality != null) {
41             return functionality.getRegulationControl();
42         }
43         return null;
44     }
45
46     public Optional<Boolean> getCoolingAllowed() {
47         return this.getFunctionalityThermostat().flatMap(ActuatorFunctionality::getCoolingAllowed)
48                 .map(Boolean::parseBoolean);
49     }
50
51     public Optional<Boolean> getPreHeatState() {
52         return this.getFunctionalityThermostat().flatMap(ActuatorFunctionality::getPreHeatState)
53                 .map(Boolean::parseBoolean);
54     }
55
56     public Optional<ActuatorFunctionality> getFunctionalityThermostat() {
57         return Optional.ofNullable(this.get(THERMOSTAT_FUNCTIONALITY));
58     }
59
60     public Optional<ActuatorFunctionality> getFunctionalityOffsetTemperature() {
61         return Optional.ofNullable(this.get(OFFSETTEMPERATURE_FUNCTIONALITY));
62     }
63
64     public Optional<ActuatorFunctionality> getFunctionalityRelay() {
65         return Optional.ofNullable(this.get(RELAY_FUNCTIONALITY));
66     }
67
68     @Override
69     public void merge(Map<String, ActuatorFunctionality> actuatorFunctionalities) {
70         if (actuatorFunctionalities != null) {
71             for (ActuatorFunctionality actuatorFunctionality : actuatorFunctionalities.values()) {
72                 String type = actuatorFunctionality.getType();
73                 ActuatorFunctionality originalActuatorFunctionality = this.get(type);
74
75                 Boolean originalIsOlder = false;
76                 if (originalActuatorFunctionality != null) {
77                     originalIsOlder = originalActuatorFunctionality.isOlderThan(actuatorFunctionality);
78                 }
79
80                 if (originalActuatorFunctionality == null || originalIsOlder) {
81                     this.put(type, actuatorFunctionality);
82                 }
83             }
84         }
85     }
86 }