/** * 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.sagercaster.internal; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.openhab.binding.sagercaster.SagerCasterBindingConfig; import org.openhab.binding.sagercaster.SagerCasterBindingProvider; import org.openhab.core.items.Item; import org.openhab.core.library.items.NumberItem; import org.openhab.core.library.items.StringItem; import org.openhab.core.library.items.SwitchItem; import org.openhab.model.item.binding.AbstractGenericBindingProvider; import org.openhab.model.item.binding.BindingConfigParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * <p> * This class can parse information from the generic binding format and provides * SagerCaster binding information from it. * </p> * * <p> * The syntax of the binding configuration strings accepted is the following: * <p> * <p> * <code> * sagercaster="keyword" * </code> * <p> * <p> * Where keyword can be one of : * <ul> * <li><code>compass</code></li> * <li><code>windtrend</code></li> * <li><code>pressuretrend</code></li> * <li><code>forecast</code></li> * <li><code>velocity</code></li> * <li><code>windfrom</code></li> * <li><code>windto</code></li> * <li><code>windbearing</code></li> * <li><code>sealevelpressure</code></li> * <li><code>cloudlevel</code></li> * <li><code>raining</code></li> * <li><code>windspeed</code></li> * </ul> * * @author Gaƫl L'hopital * @since 1.7.0 */ public class SagerCasterGenericBindingProvider extends AbstractGenericBindingProvider implements SagerCasterBindingProvider { private static final Logger logger = LoggerFactory.getLogger(SagerCasterGenericBindingProvider.class); /** * {@inheritDoc} */ @Override public String getBindingType() { return "sagercaster"; } /** * @{inheritDoc */ @Override public void validateItemType(Item item, String bindingConfig) throws BindingConfigParseException { if (!(item instanceof NumberItem || item instanceof StringItem || item instanceof SwitchItem)) { throw new BindingConfigParseException( "item '" + item.getName() + "' is of type '" + item.getClass().getSimpleName() + "', only String- and NumberItems are allowed - please check your *.items configuration"); } } /** * {@inheritDoc} */ @Override public void processBindingConfiguration(String context, Item item, String bindingConfig) throws BindingConfigParseException { super.processBindingConfiguration(context, item, bindingConfig); SagerCasterBindingConfig config = parseBindingConfig(bindingConfig, item); logger.debug("Adding item {} with {}", item.getName(), config); addBindingConfig(item, config); } private SagerCasterBindingConfig parseBindingConfig(String bindingConfig, Item item) throws BindingConfigParseException { String command = StringUtils.trim(bindingConfig); CommandType commandType = CommandType.fromString(command); return new SagerCasterBindingConfig(commandType, item); } @Override public Iterable<String> getItemNamesBy(CommandType commandType) { Set<String> items = new HashSet<String>(); for (String key : bindingConfigs.keySet()) { SagerCasterBindingConfig config = (SagerCasterBindingConfig) bindingConfigs.get(key); if (config.commandType == commandType) { items.add(key); } } return items; } @Override public SagerCasterBindingConfig getConfig(String itemName) { SagerCasterBindingConfig config = (SagerCasterBindingConfig) bindingConfigs.get(itemName); return config; } }