]> git.basschouten.com Git - openhab-addons.git/blob
fe48db190c7fd2ad85d2cc46524f6ba3a7c19ac8
[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.netatmo.internal.handler.capability;
14
15 import java.util.Optional;
16 import java.util.concurrent.ConcurrentHashMap;
17
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20
21 /**
22  * {@link CapabilityMap} is a specialized Map designed to store capabilities
23  *
24  * @author GaĆ«l L'hopital - Initial contribution
25  *
26  */
27 @NonNullByDefault
28 public class CapabilityMap extends ConcurrentHashMap<Class<?>, Capability> {
29     private static final long serialVersionUID = -3043492242108419801L;
30
31     public void put(Capability capability) {
32         Class<?> clazz = capability.getClass();
33         if (super.get(clazz) == null) {
34             super.put(clazz, capability);
35             capability.initialize();
36         }
37     }
38
39     public <T extends Capability> Optional<T> get(Class<T> clazz) {
40         @SuppressWarnings("unchecked")
41         T cap = (T) super.get(clazz);
42         return Optional.ofNullable(cap);
43     }
44
45     public <T extends Capability> void remove(Class<?> clazz) {
46         @Nullable
47         Capability cap = super.remove(clazz);
48         if (cap != null) {
49             cap.dispose();
50         }
51     }
52 }