]> git.basschouten.com Git - openhab-addons.git/blob
fdb0fe61f3c74bdaa8f7b8e640c3e51d540099b1
[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.mielecloud.internal.webservice.language;
14
15 import java.util.Optional;
16
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
19
20 /**
21  * {@link LanguageProvider} combining two {@link LanguageProvider}s, a prioritized and a fallback provider.
22  *
23  * @author Björn Lange - Initial contribution
24  */
25 @NonNullByDefault
26 public class CombiningLanguageProvider implements LanguageProvider {
27     private @Nullable LanguageProvider prioritizedLanguageProvider;
28     private @Nullable LanguageProvider fallbackLanguageProvider;
29
30     /**
31      * Creates a new instance.
32      *
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.
38      */
39     public CombiningLanguageProvider(@Nullable LanguageProvider prioritizedLanguageProvider,
40             @Nullable LanguageProvider fallbackLanguageProvider) {
41         this.prioritizedLanguageProvider = prioritizedLanguageProvider;
42         this.fallbackLanguageProvider = fallbackLanguageProvider;
43     }
44
45     public void setPrioritizedLanguageProvider(LanguageProvider prioritizedLanguageProvider) {
46         this.prioritizedLanguageProvider = prioritizedLanguageProvider;
47     }
48
49     public void unsetPrioritizedLanguageProvider() {
50         this.prioritizedLanguageProvider = null;
51     }
52
53     public void setFallbackLanguageProvider(LanguageProvider fallbackLanguageProvider) {
54         this.fallbackLanguageProvider = fallbackLanguageProvider;
55     }
56
57     public void unsetFallbackLanguageProvider() {
58         this.fallbackLanguageProvider = null;
59     }
60
61     @Override
62     public Optional<String> getLanguage() {
63         Optional<String> prioritizedLanguage = Optional.ofNullable(prioritizedLanguageProvider)
64                 .flatMap(LanguageProvider::getLanguage);
65         if (prioritizedLanguage.isPresent()) {
66             return prioritizedLanguage;
67         } else {
68             return Optional.ofNullable(fallbackLanguageProvider).flatMap(LanguageProvider::getLanguage);
69         }
70     }
71 }