Search in sources :

Example 1 with BindingConfigReader

use of org.eclipse.smarthome.model.item.BindingConfigReader in project smarthome by eclipse.

the class GenericItemProvider method internalDispatchBindings.

private void internalDispatchBindings(BindingConfigReader reader, String modelName, Item item, EList<ModelBinding> bindings) {
    for (ModelBinding binding : bindings) {
        String bindingType = binding.getType();
        String config = binding.getConfiguration();
        Configuration configuration = new Configuration();
        binding.getProperties().forEach(p -> configuration.put(p.getKey(), p.getValue()));
        BindingConfigReader localReader = reader;
        if (reader == null) {
            logger.trace("Given binding config reader is null > query cache to find appropriate reader!");
            localReader = bindingConfigReaders.get(bindingType);
        } else {
            if (!localReader.getBindingType().equals(binding.getType())) {
                logger.trace("The Readers' binding type '{}' and the Bindings' type '{}' doesn't match > continue processing next binding.", localReader.getBindingType(), binding.getType());
                continue;
            } else {
                logger.debug("Start processing binding configuration of Item '{}' with '{}' reader.", item, localReader.getClass().getSimpleName());
            }
        }
        if (localReader != null) {
            try {
                localReader.validateItemType(item.getType(), config);
                localReader.processBindingConfiguration(modelName, item.getType(), item.getName(), config, configuration);
            } catch (BindingConfigParseException e) {
                logger.error("Binding configuration of type '{}' of item '{}' could not be parsed correctly.", bindingType, item.getName(), e);
            } catch (Exception e) {
                // Catch badly behaving binding exceptions and continue processing
                logger.error("Binding configuration of type '{}' of item '{}' could not be parsed correctly.", bindingType, item.getName(), e);
            }
        } else {
            logger.trace("Couldn't find config reader for binding type '{}' > " + "parsing binding configuration of Item '{}' aborted!", bindingType, item);
        }
    }
}
Also used : ModelBinding(org.eclipse.smarthome.model.items.ModelBinding) Configuration(org.eclipse.smarthome.config.core.Configuration) BindingConfigReader(org.eclipse.smarthome.model.item.BindingConfigReader) BindingConfigParseException(org.eclipse.smarthome.model.item.BindingConfigParseException) BindingConfigParseException(org.eclipse.smarthome.model.item.BindingConfigParseException)

Aggregations

Configuration (org.eclipse.smarthome.config.core.Configuration)1 BindingConfigParseException (org.eclipse.smarthome.model.item.BindingConfigParseException)1 BindingConfigReader (org.eclipse.smarthome.model.item.BindingConfigReader)1 ModelBinding (org.eclipse.smarthome.model.items.ModelBinding)1