[digitalstrom] fixes StringIndexOutOfBoundsException (#9194)

* [digitalstrom] catch issues when adding devices

Signed-off-by: Gaétan Collaud <gaetancollaud@gmail.com>

* Update bundles/org.openhab.binding.digitalstrom/src/main/java/org/openhab/binding/digitalstrom/internal/discovery/DiscoveryServiceManager.java

Signed-off-by: Gaétan Collaud <gaetancollaud@gmail.com>
This commit is contained in:
Gaétan Collaud 2020-12-05 01:06:59 +01:00 committed by GitHub
parent 7582117759
commit f9866b2c77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -40,6 +40,8 @@ import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.thing.type.ThingType; import org.openhab.core.thing.type.ThingType;
import org.osgi.framework.BundleContext; import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration; import org.osgi.framework.ServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* The {@link DiscoveryServiceManager} manages the different scene and device discovery services and informs them about * The {@link DiscoveryServiceManager} manages the different scene and device discovery services and informs them about
@ -51,6 +53,8 @@ import org.osgi.framework.ServiceRegistration;
public class DiscoveryServiceManager public class DiscoveryServiceManager
implements SceneStatusListener, DeviceStatusListener, TemperatureControlStatusListener { implements SceneStatusListener, DeviceStatusListener, TemperatureControlStatusListener {
private final Logger logger = LoggerFactory.getLogger(DiscoveryServiceManager.class);
private final Map<String, AbstractDiscoveryService> discoveryServices; private final Map<String, AbstractDiscoveryService> discoveryServices;
private final Map<String, ServiceRegistration<?>> discoveryServiceRegs = new HashMap<>(); private final Map<String, ServiceRegistration<?>> discoveryServiceRegs = new HashMap<>();
private final String bridgeUID; private final String bridgeUID;
@ -194,6 +198,7 @@ public class DiscoveryServiceManager
@Override @Override
public void onDeviceAdded(GeneralDeviceInformation device) { public void onDeviceAdded(GeneralDeviceInformation device) {
try {
if (device instanceof Device) { if (device instanceof Device) {
String id = ((Device) device).getHWinfo().substring(0, 2); String id = ((Device) device).getHWinfo().substring(0, 2);
if (((Device) device).isSensorDevice()) { if (((Device) device).isSensorDevice()) {
@ -206,9 +211,13 @@ public class DiscoveryServiceManager
if (device instanceof Circuit) { if (device instanceof Circuit) {
if (discoveryServices.get(DsDeviceThingTypeProvider.SupportedThingTypes.circuit.toString()) != null) { if (discoveryServices.get(DsDeviceThingTypeProvider.SupportedThingTypes.circuit.toString()) != null) {
((DeviceDiscoveryService) discoveryServices ((DeviceDiscoveryService) discoveryServices
.get(DsDeviceThingTypeProvider.SupportedThingTypes.circuit.toString())).onDeviceAdded(device); .get(DsDeviceThingTypeProvider.SupportedThingTypes.circuit.toString()))
.onDeviceAdded(device);
} }
} }
} catch (RuntimeException ex) {
logger.warn("Unable to add devices {}", device, ex);
}
} }
@Override @Override