Fixes #11054: NoSuchElementException when no functional groups set (#11434)

Signed-off-by: Rouven Schürch <r.schuerch@gmx.ch>
pull/11449/head
Rouven Schürch 2021-10-25 12:01:10 +02:00 committed by GitHub
parent b725325a47
commit fbdecad174
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 6 deletions

View File

@ -32,6 +32,7 @@ import org.openhab.binding.digitalstrom.internal.lib.structure.devices.Device;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.GeneralDeviceInformation;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceSceneSpec;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.DeviceStateUpdate;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ChangeableDeviceConfigEnum;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.DeviceBinarayInputEnum;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
@ -457,9 +458,11 @@ public class DeviceHandler extends BaseThingHandler implements DeviceStatusListe
checkOutputChannel();
} else if (this.device.isBlind()) {
// load channel for set the angle of jalousie devices
String channelTypeID = DsChannelTypeProvider.getOutputChannelTypeID(
((Device) device).getFunctionalColorGroup().getColor(), ((Device) device).getOutputMode(),
((Device) device).getOutputChannels());
ApplicationGroup.Color color = ((Device) device).getFunctionalColorGroup() != null
? ((Device) device).getFunctionalColorGroup().getColor()
: null;
String channelTypeID = DsChannelTypeProvider.getOutputChannelTypeID(color,
((Device) device).getOutputMode(), ((Device) device).getOutputChannels());
loadOutputChannel(new ChannelTypeUID(BINDING_ID, channelTypeID),
DsChannelTypeProvider.getItemType(channelTypeID));
}
@ -713,8 +716,11 @@ public class DeviceHandler extends BaseThingHandler implements DeviceStatusListe
if (!device.isDeviceWithOutput()) {
loadOutputChannel(null, null);
}
String channelTypeID = DsChannelTypeProvider.getOutputChannelTypeID(device.getFunctionalColorGroup().getColor(),
device.getOutputMode(), device.getOutputChannels());
ApplicationGroup.Color color = device.getFunctionalColorGroup() != null
? device.getFunctionalColorGroup().getColor()
: null;
String channelTypeID = DsChannelTypeProvider.getOutputChannelTypeID(color, device.getOutputMode(),
device.getOutputChannels());
logger.debug("load channel: typeID={}, itemType={}",
DsChannelTypeProvider.getOutputChannelTypeID(device.getFunctionalColorGroup().getColor(),
device.getOutputMode(), device.getOutputChannels()),

View File

@ -20,6 +20,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import org.openhab.binding.digitalstrom.internal.DigitalSTROMBindingConstants;
@ -405,7 +406,8 @@ public class DeviceImpl extends AbstractGeneralDeviceInformations implements Dev
@Override
public synchronized ApplicationGroup getFunctionalColorGroup() {
return groupList.stream().findFirst().get();
Optional<ApplicationGroup> applicationGroup = groupList.stream().findFirst();
return applicationGroup.isPresent() ? applicationGroup.get() : null;
}
@Override

View File

@ -14,15 +14,18 @@ package org.openhab.binding.digitalstrom.internal.lib.structure.devices.impl;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.*;
import static org.junit.jupiter.api.Assertions.assertNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.ApplicationGroup;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputChannelEnum;
import org.openhab.binding.digitalstrom.internal.lib.structure.devices.deviceparameters.constants.OutputModeEnum;
import org.openhab.binding.digitalstrom.internal.lib.util.JsonModel;
@ -150,6 +153,24 @@ class DeviceImplTest {
assertThat(deviceImpl.isBlind(), is(true));
}
@Test
@DisplayName("No functional color group set, expect a null value returned")
void noFunctionalColorGroupSet() {
DeviceImpl deviceImpl = new DeviceImpl(new JsonObject());
ApplicationGroup functionalColorGroup = deviceImpl.getFunctionalColorGroup();
assertNull(functionalColorGroup);
}
@Test
@DisplayName("Multiple functional color groups set, expect the first group returned which had previously been added")
void multipleFunctionalColorGroupSet() {
DeviceImpl deviceImpl = new DeviceImpl(new JsonObject());
deviceImpl.addGroup(ApplicationGroup.JOKER.getId());
deviceImpl.addGroup(ApplicationGroup.ACCESS.getId());
assertThat(deviceImpl.getFunctionalColorGroup(), is(ApplicationGroup.JOKER));
}
private static JsonObject createJsonObject(OutputModeEnum outputMode, List<OutputChannel> channels) {
JsonModel model = new JsonModel(outputMode.getMode(), channels);