/** * 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.tacmi.internal; import org.openhab.binding.tacmi.TACmiBindingProvider; import org.openhab.core.binding.BindingConfig; 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. * * * * <p> * Valid bindings for digital ports are: * <ul> * <li><code>{ tacmi="<can_node>#d#<port>" }</code></li> * <ul> * <li><code>{ tacmi="50#d#1" }</code></li> * </ul> * </li> * </ul> * <p> * Valid bindings for analog ports are: * <ul> * <li> * <code>{ tacmi="<can_node>#d#<port>#Measuretype" }</code></li> * <ul> * <li> * <code>{ tacmi="50#a#1#Temperature" }</code></li> * </ul> * </li> * </ul> * * @author Timo Wendt * @author Wolfgang Klimt * @since 1.8.0 */ public class TACmiGenericBindingProvider extends AbstractGenericBindingProvider implements TACmiBindingProvider { private static Logger logger = LoggerFactory.getLogger(TACmiGenericBindingProvider.class); /** * {@inheritDoc} */ @Override public String getBindingType() { return "tacmi"; } /** * @{inheritDoc */ @Override public void validateItemType(Item item, String bindingConfig) throws BindingConfigParseException { } /** * {@inheritDoc} */ @Override public void processBindingConfiguration(String context, Item item, String bindingConfig) throws BindingConfigParseException { super.processBindingConfiguration(context, item, bindingConfig); TACmiBindingConfig config; logger.debug("Processing binding configuration: '{}'", bindingConfig); final String[] configParts = bindingConfig.split("#"); switch (configParts.length) { case 3: config = new TACmiBindingConfig(Integer.parseInt(configParts[0]), configParts[1], Integer.parseInt(configParts[2]), null, bindingConfig); break; case 4: config = new TACmiBindingConfig(Integer.parseInt(configParts[0]), configParts[1], Integer.parseInt(configParts[2]), TACmiMeasureType.fromString(configParts[3]), bindingConfig); break; default: throw new BindingConfigParseException( "A TACmi binding configuration must consist of three or four parts - please verify your *.items file"); } logger.debug("Adding Binding configuration: {}", config); addBindingConfig(item, config); } /** * This is a helper class holding binding specific configuration details * * @author Timo Wendt * @since 1.7.0 */ class TACmiBindingConfig implements BindingConfig { int canNode; String portType; int portNumber; TACmiMeasureType measureType; String configurationString; public TACmiBindingConfig(int canNode, String portType, int portNumber, TACmiMeasureType measureType, String configurationString) { this.canNode = canNode; this.portType = portType; this.portNumber = portNumber; if (measureType == null) { this.measureType = TACmiMeasureType.NONE; } else { this.measureType = measureType; } this.configurationString = configurationString; } @Override public String toString() { return "TACmiBindingConfig [canNode=" + this.canNode + ", portType=" + this.portType + ", portNumber=" + this.portNumber + ", measure=" + this.measureType.getTypeValue() + "]"; } } /** * {@inheritDoc} */ @Override public String getConfigurationString(String itemName) { final TACmiBindingConfig config = (TACmiBindingConfig) this.bindingConfigs.get(itemName); return config != null ? config.configurationString : null; } /** * {@inheritDoc} */ @Override public int getCanNode(String itemName) { final TACmiBindingConfig config = (TACmiBindingConfig) this.bindingConfigs.get(itemName); return config != null ? config.canNode : 0; } /** * {@inheritDoc} */ @Override public String getPortType(String itemName) { final TACmiBindingConfig config = (TACmiBindingConfig) this.bindingConfigs.get(itemName); return config != null ? config.portType : null; } /** * {@inheritDoc} */ @Override public int getPortNumber(String itemName) { final TACmiBindingConfig config = (TACmiBindingConfig) this.bindingConfigs.get(itemName); return config != null ? config.portNumber : 0; } /** * {@inheritDoc} */ @Override public TACmiMeasureType getMeasureType(String itemName) { final TACmiBindingConfig config = (TACmiBindingConfig) this.bindingConfigs.get(itemName); return config != null ? config.measureType : null; } }