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.mielecloud.internal.webservice.language;
15 import java.util.Optional;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
21 * {@link LanguageProvider} combining two {@link LanguageProvider}s, a prioritized and a fallback provider.
23 * @author Björn Lange - Initial contribution
26 public class CombiningLanguageProvider implements LanguageProvider {
27 private @Nullable LanguageProvider prioritizedLanguageProvider;
28 private @Nullable LanguageProvider fallbackLanguageProvider;
31 * Creates a new instance.
33 * @param prioritizedLanguageProvider Primary {@link LanguageProvider} to use. May be {@code null}, in that case the
34 * {@code fallbackLanguageProvider} will be used.
35 * @param fallbackLanguageProvider {@link LanguageProvider} to fall back to if the
36 * {@code prioritizedLanguageProvider} is {@code null} or provides no language. May be
37 * {@code null}, in case the fallback is used and returns no language then no language will be returned.
39 public CombiningLanguageProvider(@Nullable LanguageProvider prioritizedLanguageProvider,
40 @Nullable LanguageProvider fallbackLanguageProvider) {
41 this.prioritizedLanguageProvider = prioritizedLanguageProvider;
42 this.fallbackLanguageProvider = fallbackLanguageProvider;
45 public void setPrioritizedLanguageProvider(LanguageProvider prioritizedLanguageProvider) {
46 this.prioritizedLanguageProvider = prioritizedLanguageProvider;
49 public void unsetPrioritizedLanguageProvider() {
50 this.prioritizedLanguageProvider = null;
53 public void setFallbackLanguageProvider(LanguageProvider fallbackLanguageProvider) {
54 this.fallbackLanguageProvider = fallbackLanguageProvider;
57 public void unsetFallbackLanguageProvider() {
58 this.fallbackLanguageProvider = null;
62 public Optional<String> getLanguage() {
63 Optional<String> prioritizedLanguage = Optional.ofNullable(prioritizedLanguageProvider)
64 .flatMap(LanguageProvider::getLanguage);
65 if (prioritizedLanguage.isPresent()) {
66 return prioritizedLanguage;
68 return Optional.ofNullable(fallbackLanguageProvider).flatMap(LanguageProvider::getLanguage);