/** * Copyright (c) 2010-2016 by the respective copyright holders. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.openhab.binding.zibase.internal; import java.util.HashMap; import java.util.Vector; import org.apache.commons.lang.StringUtils; import org.openhab.binding.zibase.ZibaseBindingProvider; import org.openhab.core.items.Item; import org.openhab.model.item.binding.AbstractGenericBindingProvider; import org.openhab.model.item.binding.BindingConfigParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class is responsible for parsing the binding configuration. * All Items are then stored internally with their specific settings. * * @author Julien Tiphaine * @since 1.7.0 */ public class ZibaseGenericBindingProvider extends AbstractGenericBindingProvider implements ZibaseBindingProvider { /** * generic logger */ static final Logger logger = LoggerFactory.getLogger(ZibaseGenericBindingProvider.class); /** * Map that allows to get config by item as given by openHab */ static final HashMap<String, ZibaseBindingConfig> itemNameMap = new HashMap<String, ZibaseBindingConfig>(); /** * Map that allows to get config by unique ID */ static final HashMap<String, ZibaseBindingConfig> itemUniqueIdMap = new HashMap<String, ZibaseBindingConfig>(); /** * Map that allows to get items name by an RfId */ static final HashMap<String, Vector<String>> itemIdNameMap = new HashMap<String, Vector<String>>(); /** * {@inheritDoc} */ @Override public String getBindingType() { return "zibase"; } /** * @{inheritDoc} * @TODO: validate ITEM config */ @Override public void validateItemType(Item item, String bindingConfig) throws BindingConfigParseException { if (!(ZibaseBindingConfig.isConfigValid(bindingConfig))) { throw new BindingConfigParseException("Bad item configuration for '" + item.getName()); } } /** * {@inheritDoc} */ @Override public void processBindingConfiguration(String context, Item item, String bindingConfig) throws BindingConfigParseException { super.processBindingConfiguration(context, item, bindingConfig); logger.debug("read item : " + item); logger.debug("read config : " + bindingConfig); String[] itemConfig = StringUtils.split(bindingConfig, ZibaseBindingConfig.CONFIG_SEPARATOR); ZibaseBindingConfig config = ZibaseBindingConfig.factory(itemConfig); String id = config.getId(); itemNameMap.put(item.getName(), config); itemUniqueIdMap.put(item.getName() + "_" + id, config); if (itemIdNameMap.containsKey(id)) { if (!itemIdNameMap.get(id).contains(item.getName())) { itemIdNameMap.get(id).add(item.getName()); } } else { Vector<String> vector = new Vector<String>(); vector.add(item.getName()); itemIdNameMap.put(id, vector); } logger.info("Added " + item.getName() + " (id=" + id + ")"); addBindingConfig(item, config); } /** * get item config by its name. In case an item is assigned several zibase items RfId, using this method may lead to * unexpected result as it will return the lastest config associated to the itemName * * @param itemName * @return the item's config */ public ZibaseBindingConfig getItemConfig(String itemName) { logger.debug("retreive config for item : " + itemName); ZibaseBindingConfig config = itemNameMap.get(itemName); return config; } /** * get item config by a unique ID * * @param RfId * @return the item's config */ public ZibaseBindingConfig getItemConfigByUniqueId(String uniqueId) { logger.debug("retreive config for item : " + uniqueId); ZibaseBindingConfig config = itemUniqueIdMap.get(uniqueId); return config; } /** * get the list of item names that use the same RfId * * @param id * @return */ public Vector<String> getItemNamesById(String rfId) { return itemIdNameMap.get(rfId); } }