/** * 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.caldav_command.internal; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.openhab.binding.caldav_command.CalDavBindingProvider; 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. * * caldav="itemName:Livingroom_Temperature_Set type:VALUE" * caldav="itemName:Livingroom_Temperature_Set type:DATE" * caldav="itemName:Livingroom_Temperature_Set type:DISABLE" * * @author Robert Delbrück * @since 1.8.0 */ public class CalDavBindingProviderImpl extends AbstractGenericBindingProvider implements CalDavBindingProvider { private static final Logger logger = LoggerFactory.getLogger(CalDavBindingProviderImpl.class); private static final String REGEX_ITEM_NAME = "itemName:([^ ]+)"; private static final String REGEX_TYPE = "type:([^ ]+)"; /** * {@inheritDoc} */ @Override public String getBindingType() { return "caldavCommand"; } /** * @{inheritDoc} */ @Override public void validateItemType(Item item, String bindingConfig) throws BindingConfigParseException { // nothing to validate, all item types are allowed } /** * {@inheritDoc} */ @Override public void processBindingConfiguration(String context, Item item, String bindingConfig) throws BindingConfigParseException { super.processBindingConfiguration(context, item, bindingConfig); if (bindingConfig == null) { logger.debug("binding-configuration is currently not set for item: {}", item.getName()); } String itemName = null; Matcher mItemName = Pattern.compile(REGEX_ITEM_NAME).matcher(bindingConfig); if (mItemName.find()) { itemName = mItemName.group(1); } String typeString = null; Matcher mType = Pattern.compile(REGEX_TYPE).matcher(bindingConfig); if (mType.find()) { typeString = mType.group(1); } CalDavType type = null; try { type = CalDavType.valueOf(typeString); } catch (IllegalArgumentException e) { throw new BindingConfigParseException("cannot read required parameter 'type' for item: " + item.getName()); } logger.debug("adding item: {}", item.getName()); this.addBindingConfig(item, new CalDavNextEventConfig(item.getName(), itemName, type)); } @Override public CalDavNextEventConfig getConfig(String item) { return (CalDavNextEventConfig) this.bindingConfigs.get(item); } @Override public List<CalDavNextEventConfig> getConfigForListenerItem(String item) { List<CalDavNextEventConfig> list = new ArrayList<CalDavNextEventConfig>(); for (BindingConfig bindingConfig : this.bindingConfigs.values()) { if (!(bindingConfig instanceof CalDavNextEventConfig)) { continue; } CalDavNextEventConfig config = (CalDavNextEventConfig) bindingConfig; if (config.getItemNameToListenTo().equals(item)) { list.add(config); } } return list; } }