/**
* 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.gc100ir.internal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.openhab.binding.gc100ir.GC100IRBindingProvider;
import org.openhab.core.binding.BindingConfig;
import org.openhab.core.items.Item;
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;
/**
* This class is responsible for parsing the binding configuration.
*
* @author Parikshit Thakur & Team
* @since 1.9.0
*/
public class GC100IRGenericBindingProvider extends AbstractGenericBindingProvider implements GC100IRBindingProvider {
private static final Pattern CONFIG_PATTERN = Pattern.compile("\\[(.*)\\|(.*)\\|(.*)\\|(.*)\\]");
public String getBindingType() {
return "gc100ir";
}
/**
* {@inheritDoc}
*/
@Override
public void validateItemType(Item item, String bindingConfig) throws BindingConfigParseException {
if (!(item instanceof StringItem) && !(item instanceof SwitchItem)) {
throw new BindingConfigParseException("item '" + item.getName() + "' is of type '"
+ item.getClass().getSimpleName() + "', but only String or Switch items are allowed.");
}
}
/**
*
* {@inheritDoc}
*/
@Override
public void processBindingConfiguration(String context, Item item, String bindingConfig)
throws BindingConfigParseException {
super.processBindingConfiguration(context, item, bindingConfig);
GC100BindingConfig config = parseBindingConfig(item, bindingConfig);
addBindingConfig(item, config);
}
/**
* Parses the binding configuration and returns GC100BindingConfig instance.
*
* @param item
* @param bindingConfig
* @return GC100BindingConfig instance
* @throws BindingConfigParseException
*/
private GC100BindingConfig parseBindingConfig(Item item, String bindingConfig) throws BindingConfigParseException {
Matcher matcher = CONFIG_PATTERN.matcher(bindingConfig);
if (!matcher.matches())
throw new BindingConfigParseException("Config for item '" + item.getName() + "' could not be parsed.");
String gc100Instance = matcher.group(1);
String module = matcher.group(2);
String connector = matcher.group(3);
String code = matcher.group(4);
return new GC100BindingConfig(gc100Instance, Integer.parseInt(module), Integer.parseInt(connector), code);
}
/**
* {@inheritDoc}
*/
@Override
public String getGC100InstanceName(String itemname) {
GC100BindingConfig bindingConfig = (GC100BindingConfig) bindingConfigs.get(itemname);
return bindingConfig.getGC100Instance();
}
/**
* {@inheritDoc}
*/
@Override
public int getGC100Module(String itemname) {
GC100BindingConfig bindingConfig = (GC100BindingConfig) bindingConfigs.get(itemname);
return bindingConfig.getModule();
}
/**
* {@inheritDoc}
*/
@Override
public int getGC100Connector(String itemname) {
GC100BindingConfig bindingConfig = (GC100BindingConfig) bindingConfigs.get(itemname);
return bindingConfig.getConnector();
}
/**
* {@inheritDoc}
*/
@Override
public String getCode(String itemname) {
GC100BindingConfig bindingConfig = (GC100BindingConfig) bindingConfigs.get(itemname);
return bindingConfig.getCode();
}
/**
* Stores binding configuration.
*
* @author Prashant Goswami
*
*/
class GC100BindingConfig implements BindingConfig {
private String gc100Instance;
private int module;
private int connector;
private String code;
public GC100BindingConfig(String gc100Instance, int module, int connector, String code) {
this.gc100Instance = gc100Instance;
this.module = module;
this.connector = connector;
this.code = code;
}
public String getGC100Instance() {
return gc100Instance;
}
public int getModule() {
return module;
}
public int getConnector() {
return connector;
}
public String getCode() {
return code;
}
}
}