Skip to content

Commit

Permalink
Fixes openhab#11054: NoSuchElementException when no functional groups…
Browse files Browse the repository at this point in the history
… set (openhab#11434)

Signed-off-by: Rouven Schürch <r.schuerch@gmx.ch>
Signed-off-by: Dave J Schoepel <dave@theschoepels.com>
  • Loading branch information
ardanedh authored and dschoepel committed Nov 9, 2021
1 parent 5bc723a commit 153ae36
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
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;
Expand Down Expand Up @@ -457,9 +458,11 @@ public synchronized void onDeviceAdded(GeneralDeviceInformation device) {
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));
}
Expand Down Expand Up @@ -713,8 +716,11 @@ private void checkOutputChannel() {
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()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
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;
Expand Down Expand Up @@ -405,7 +406,8 @@ public boolean isBlind() {

@Override
public synchronized ApplicationGroup getFunctionalColorGroup() {
return groupList.stream().findFirst().get();
Optional<ApplicationGroup> applicationGroup = groupList.stream().findFirst();
return applicationGroup.isPresent() ? applicationGroup.get() : null;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,18 @@

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;
Expand Down Expand Up @@ -150,6 +153,24 @@ void isBlindPositionConMixedChannels() {
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);

Expand Down

0 comments on commit 153ae36

Please sign in to comment.