package org.openhab.binding.plugwise.internal; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Caches all {@link PlugwiseDevice} instances and allows for querying them by mac, name and device class. * * @author Wouter Born * @since 1.9.0 */ public class PlugwiseDeviceCache { private Map<String, PlugwiseDevice> macDeviceMapping = new ConcurrentHashMap<String, PlugwiseDevice>(); private Map<String, PlugwiseDevice> nameDeviceMapping = new ConcurrentHashMap<String, PlugwiseDevice>(); public void add(PlugwiseDevice device) { macDeviceMapping.put(device.getMAC(), device); nameDeviceMapping.put(device.getName(), device); } public void clear() { macDeviceMapping.clear(); nameDeviceMapping.clear(); } public PlugwiseDevice get(String id) { PlugwiseDevice device = getByMAC(id); if (device == null) { return getByName(id); } else { return device; } } public PlugwiseDevice getByMAC(String mac) { return macDeviceMapping.get(mac); } public PlugwiseDevice getByName(String name) { return nameDeviceMapping.get(name); } @SuppressWarnings("unchecked") public <T> List<T> getByClass(Class<T> deviceClass) { List<T> result = new ArrayList<T>(); for (PlugwiseDevice device : macDeviceMapping.values()) { if (deviceClass.isAssignableFrom(device.getClass())) { result.add((T) device); } } return result; } }