use of org.eclipse.smarthome.model.items.ModelBinding 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);
}
}
}
Aggregations