2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.plugwiseha.internal.api.model.dto;
16 import java.util.Optional;
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.
24 * @author B. van Wetten - Initial contribution
27 public class ActuatorFunctionalities extends PlugwiseHACollection<ActuatorFunctionality> {
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";
33 public Optional<Boolean> getRelayLockState() {
34 return this.getFunctionalityRelay().flatMap(ActuatorFunctionality::getRelayLockState)
35 .map(Boolean::parseBoolean);
38 public String getRegulationControl() {
39 ActuatorFunctionality functionality = this.getFunctionalityThermostat().orElse(null);
40 if (functionality != null) {
41 return functionality.getRegulationControl();
46 public Optional<Boolean> getCoolingAllowed() {
47 return this.getFunctionalityThermostat().flatMap(ActuatorFunctionality::getCoolingAllowed)
48 .map(Boolean::parseBoolean);
51 public Optional<Boolean> getPreHeatState() {
52 return this.getFunctionalityThermostat().flatMap(ActuatorFunctionality::getPreHeatState)
53 .map(Boolean::parseBoolean);
56 public Optional<ActuatorFunctionality> getFunctionalityThermostat() {
57 return Optional.ofNullable(this.get(THERMOSTAT_FUNCTIONALITY));
60 public Optional<ActuatorFunctionality> getFunctionalityOffsetTemperature() {
61 return Optional.ofNullable(this.get(OFFSETTEMPERATURE_FUNCTIONALITY));
64 public Optional<ActuatorFunctionality> getFunctionalityRelay() {
65 return Optional.ofNullable(this.get(RELAY_FUNCTIONALITY));
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);
75 Boolean originalIsOlder = false;
76 if (originalActuatorFunctionality != null) {
77 originalIsOlder = originalActuatorFunctionality.isOlderThan(actuatorFunctionality);
80 if (originalActuatorFunctionality == null || originalIsOlder) {
81 this.put(type, actuatorFunctionality);