2 * Copyright (c) 2010-2022 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 CustomCollection} 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 Optional<Boolean> getPreHeatState() {
39 return this.getFunctionalityThermostat().flatMap(ActuatorFunctionality::getPreHeatState)
40 .map(Boolean::parseBoolean);
43 public Optional<ActuatorFunctionality> getFunctionalityThermostat() {
44 return Optional.ofNullable(this.get(THERMOSTAT_FUNCTIONALITY));
47 public Optional<ActuatorFunctionality> getFunctionalityOffsetTemperature() {
48 return Optional.ofNullable(this.get(OFFSETTEMPERATURE_FUNCTIONALITY));
51 public Optional<ActuatorFunctionality> getFunctionalityRelay() {
52 return Optional.ofNullable(this.get(RELAY_FUNCTIONALITY));
56 public void merge(Map<String, ActuatorFunctionality> actuatorFunctionalities) {
57 if (actuatorFunctionalities != null) {
58 for (ActuatorFunctionality actuatorFunctionality : actuatorFunctionalities.values()) {
59 String type = actuatorFunctionality.getType();
60 ActuatorFunctionality originalActuatorFunctionality = this.get(type);
62 Boolean originalIsOlder = false;
63 if (originalActuatorFunctionality != null) {
64 originalIsOlder = originalActuatorFunctionality.isOlderThan(actuatorFunctionality);
67 if (originalActuatorFunctionality == null || originalIsOlder) {
68 this.put(type, actuatorFunctionality);