diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNDataUtil.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNDataUtil.java index 4df90556a..2b341157e 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNDataUtil.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNDataUtil.java @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import javax.measure.Unit; import javax.measure.quantity.Temperature; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.binding.nest.internal.wwn.WWNUtils; import org.openhab.core.library.unit.ImperialUnits; import org.openhab.core.library.unit.SIUnits; @@ -32,6 +33,7 @@ import org.openhab.core.library.unit.SIUnits; * * @author Wouter Born - Initial contribution */ +@NonNullByDefault public final class WWNDataUtil { public static final String COMPLETE_DATA_FILE_NAME = "top-level-streaming-data.json"; diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNGsonParsingTest.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNGsonParsingTest.java index b026ca83a..5d34b1308 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNGsonParsingTest.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/dto/WWNGsonParsingTest.java @@ -19,6 +19,7 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.Test; import org.openhab.core.library.unit.SIUnits; import org.slf4j.Logger; @@ -30,6 +31,7 @@ import org.slf4j.LoggerFactory; * @author David Bennett - Initial contribution * @author Wouter Born - Increase test coverage */ +@NonNullByDefault public class WWNGsonParsingTest { private final Logger logger = LoggerFactory.getLogger(WWNGsonParsingTest.class); diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNAccountHandlerTest.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNAccountHandlerTest.java index 829e5d999..44590a02f 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNAccountHandlerTest.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNAccountHandlerTest.java @@ -19,6 +19,7 @@ import static org.mockito.Mockito.*; import javax.ws.rs.client.ClientBuilder; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -41,16 +42,16 @@ import org.osgi.service.jaxrs.client.SseEventSourceFactory; * @author David Bennett - Initial contribution */ @ExtendWith(MockitoExtension.class) +@NonNullByDefault public class WWNAccountHandlerTest { - private ThingHandler handler; + private @NonNullByDefault({}) ThingHandler handler; - private @Mock Bridge bridge; - private @Mock ThingHandlerCallback callback; - private @Mock ClientBuilder clientBuilder; - private @Mock Configuration configuration; - private @Mock SseEventSourceFactory eventSourceFactory; - private @Mock WWNRedirectUrlSupplier redirectUrlSupplier; + private @Mock @NonNullByDefault({}) Bridge bridge; + private @Mock @NonNullByDefault({}) ThingHandlerCallback callback; + private @Mock @NonNullByDefault({}) ClientBuilder clientBuilder; + private @Mock @NonNullByDefault({}) Configuration configuration; + private @Mock @NonNullByDefault({}) SseEventSourceFactory eventSourceFactory; @BeforeEach public void beforeEach() { @@ -58,7 +59,6 @@ public class WWNAccountHandlerTest { handler.setCallback(callback); } - @SuppressWarnings("null") @Test public void initializeShouldCallTheCallback() { when(bridge.getConfiguration()).thenReturn(configuration); diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNCameraHandlerTest.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNCameraHandlerTest.java index ffc061c01..d7f9ef2c1 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNCameraHandlerTest.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNCameraHandlerTest.java @@ -19,9 +19,9 @@ import static org.openhab.binding.nest.internal.wwn.dto.WWNDataUtil.*; import static org.openhab.core.library.types.OnOffType.*; import java.io.IOException; -import java.util.HashMap; import java.util.Map; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.Test; import org.openhab.binding.nest.internal.wwn.config.WWNDeviceConfiguration; import org.openhab.core.config.core.Configuration; @@ -38,6 +38,7 @@ import org.openhab.core.thing.binding.builder.ThingBuilder; * * @author Wouter Born - Initial contribution */ +@NonNullByDefault public class WWNCameraHandlerTest extends WWNThingHandlerOSGiTest { private static final ThingUID CAMERA_UID = new ThingUID(THING_TYPE_CAMERA, "camera1"); @@ -49,8 +50,7 @@ public class WWNCameraHandlerTest extends WWNThingHandlerOSGiTest { @Override protected Thing buildThing(Bridge bridge) { - Map properties = new HashMap<>(); - properties.put(WWNDeviceConfiguration.DEVICE_ID, CAMERA1_DEVICE_ID); + Map properties = Map.of(WWNDeviceConfiguration.DEVICE_ID, CAMERA1_DEVICE_ID); return ThingBuilder.create(THING_TYPE_CAMERA, CAMERA_UID).withLabel("Test Camera").withBridge(bridge.getUID()) .withChannels(buildChannels(THING_TYPE_CAMERA, CAMERA_UID)) diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNSmokeDetectorHandlerTest.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNSmokeDetectorHandlerTest.java index 96f396df8..eefafabe3 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNSmokeDetectorHandlerTest.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNSmokeDetectorHandlerTest.java @@ -19,9 +19,9 @@ import static org.openhab.binding.nest.internal.wwn.dto.WWNDataUtil.*; import static org.openhab.core.library.types.OnOffType.OFF; import java.io.IOException; -import java.util.HashMap; import java.util.Map; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.Test; import org.openhab.binding.nest.internal.wwn.config.WWNDeviceConfiguration; import org.openhab.core.config.core.Configuration; @@ -38,6 +38,7 @@ import org.openhab.core.thing.binding.builder.ThingBuilder; * * @author Wouter Born - Initial contribution */ +@NonNullByDefault public class WWNSmokeDetectorHandlerTest extends WWNThingHandlerOSGiTest { private static final ThingUID SMOKE_DETECTOR_UID = new ThingUID(THING_TYPE_SMOKE_DETECTOR, "smoke1"); @@ -49,8 +50,7 @@ public class WWNSmokeDetectorHandlerTest extends WWNThingHandlerOSGiTest { @Override protected Thing buildThing(Bridge bridge) { - Map properties = new HashMap<>(); - properties.put(WWNDeviceConfiguration.DEVICE_ID, SMOKE1_DEVICE_ID); + Map properties = Map.of(WWNDeviceConfiguration.DEVICE_ID, SMOKE1_DEVICE_ID); return ThingBuilder.create(THING_TYPE_SMOKE_DETECTOR, SMOKE_DETECTOR_UID).withLabel("Test Smoke Detector") .withBridge(bridge.getUID()).withChannels(buildChannels(THING_TYPE_SMOKE_DETECTOR, SMOKE_DETECTOR_UID)) diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNStructureHandlerTest.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNStructureHandlerTest.java index b14c63bc6..770c24e69 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNStructureHandlerTest.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNStructureHandlerTest.java @@ -19,9 +19,9 @@ import static org.openhab.binding.nest.internal.wwn.dto.WWNDataUtil.*; import static org.openhab.core.library.types.OnOffType.OFF; import java.io.IOException; -import java.util.HashMap; import java.util.Map; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.Test; import org.openhab.binding.nest.internal.wwn.config.WWNStructureConfiguration; import org.openhab.core.config.core.Configuration; @@ -38,6 +38,7 @@ import org.openhab.core.thing.binding.builder.ThingBuilder; * * @author Wouter Born - Initial contribution */ +@NonNullByDefault public class WWNStructureHandlerTest extends WWNThingHandlerOSGiTest { private static final ThingUID STRUCTURE_UID = new ThingUID(THING_TYPE_STRUCTURE, "structure1"); @@ -49,8 +50,7 @@ public class WWNStructureHandlerTest extends WWNThingHandlerOSGiTest { @Override protected Thing buildThing(Bridge bridge) { - Map properties = new HashMap<>(); - properties.put(WWNStructureConfiguration.STRUCTURE_ID, STRUCTURE1_STRUCTURE_ID); + Map properties = Map.of(WWNStructureConfiguration.STRUCTURE_ID, STRUCTURE1_STRUCTURE_ID); return ThingBuilder.create(THING_TYPE_STRUCTURE, STRUCTURE_UID).withLabel("Test Structure") .withBridge(bridge.getUID()).withChannels(buildChannels(THING_TYPE_STRUCTURE, STRUCTURE_UID)) diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThermostatHandlerTest.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThermostatHandlerTest.java index c384d63ab..c07df1bb8 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThermostatHandlerTest.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThermostatHandlerTest.java @@ -21,9 +21,9 @@ import static org.openhab.core.library.unit.ImperialUnits.FAHRENHEIT; import static org.openhab.core.library.unit.SIUnits.CELSIUS; import java.io.IOException; -import java.util.HashMap; import java.util.Map; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.junit.jupiter.api.Test; import org.openhab.binding.nest.internal.wwn.config.WWNDeviceConfiguration; import org.openhab.core.config.core.Configuration; @@ -42,6 +42,7 @@ import org.openhab.core.thing.binding.builder.ThingBuilder; * * @author Wouter Born - Initial contribution */ +@NonNullByDefault public class WWNThermostatHandlerTest extends WWNThingHandlerOSGiTest { private static final ThingUID THERMOSTAT_UID = new ThingUID(THING_TYPE_THERMOSTAT, "thermostat1"); @@ -53,8 +54,7 @@ public class WWNThermostatHandlerTest extends WWNThingHandlerOSGiTest { @Override protected Thing buildThing(Bridge bridge) { - Map properties = new HashMap<>(); - properties.put(WWNDeviceConfiguration.DEVICE_ID, THERMOSTAT1_DEVICE_ID); + Map properties = Map.of(WWNDeviceConfiguration.DEVICE_ID, THERMOSTAT1_DEVICE_ID); return ThingBuilder.create(THING_TYPE_THERMOSTAT, THERMOSTAT_UID).withLabel("Test Thermostat") .withBridge(bridge.getUID()).withChannels(buildChannels(THING_TYPE_THERMOSTAT, THERMOSTAT_UID)) diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThingHandlerOSGiTest.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThingHandlerOSGiTest.java index 98578166e..39c6042c3 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThingHandlerOSGiTest.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/handler/WWNThingHandlerOSGiTest.java @@ -12,10 +12,12 @@ */ package org.openhab.binding.nest.internal.wwn.handler; +import static java.util.Map.entry; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNot.not; +import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.*; import static org.openhab.binding.nest.internal.wwn.rest.WWNStreamingRestClient.PUT; @@ -23,17 +25,19 @@ import java.io.IOException; import java.time.Instant; import java.time.format.DateTimeParseException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.TimeZone; import java.util.function.Function; import javax.ws.rs.client.ClientBuilder; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.servlet.ServletHolder; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -90,6 +94,7 @@ import org.slf4j.LoggerFactory; * * @author Wouter Born - Initial contribution */ +@NonNullByDefault public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest { private static final String SERVER_HOST = "127.0.0.1"; @@ -99,26 +104,26 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest { private final Logger logger = LoggerFactory.getLogger(WWNThingHandlerOSGiTest.class); - private static WWNTestServer server; + private static @Nullable WWNTestServer server; private static WWNTestApiServlet servlet = new WWNTestApiServlet(); - private ChannelTypeRegistry channelTypeRegistry; - private ChannelGroupTypeRegistry channelGroupTypeRegistry; - private ItemFactory itemFactory; - private ItemRegistry itemRegistry; - private EventPublisher eventPublisher; - private ManagedThingProvider managedThingProvider; - private ThingTypeRegistry thingTypeRegistry; - private ManagedItemChannelLinkProvider managedItemChannelLinkProvider; - private VolatileStorageService volatileStorageService = new VolatileStorageService(); + private @NonNullByDefault({}) ChannelTypeRegistry channelTypeRegistry; + private @NonNullByDefault({}) ChannelGroupTypeRegistry channelGroupTypeRegistry; + private @NonNullByDefault({}) ItemFactory itemFactory; + private @NonNullByDefault({}) ItemRegistry itemRegistry; + private @NonNullByDefault({}) EventPublisher eventPublisher; + private @NonNullByDefault({}) ManagedThingProvider managedThingProvider; + private @NonNullByDefault({}) ThingTypeRegistry thingTypeRegistry; + private @NonNullByDefault({}) ManagedItemChannelLinkProvider managedItemChannelLinkProvider; + private @NonNullByDefault({}) VolatileStorageService volatileStorageService = new VolatileStorageService(); - protected Bridge bridge; - protected WWNTestAccountHandler bridgeHandler; - protected Thing thing; - protected WWNBaseHandler thingHandler; + protected @NonNullByDefault({}) Bridge bridge; + protected @NonNullByDefault({}) WWNTestAccountHandler bridgeHandler; + protected @NonNullByDefault({}) Thing thing; + protected @NonNullByDefault({}) WWNBaseHandler thingHandler; private Class> thingClass; - private WWNTestHandlerFactory nestTestHandlerFactory; + private @NonNullByDefault({}) WWNTestHandlerFactory nestTestHandlerFactory; private @NonNullByDefault({}) ClientBuilder clientBuilder; private @NonNullByDefault({}) SseEventSourceFactory eventSourceFactory; @@ -133,39 +138,34 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest { server.startServer(); } + @AfterAll + public static void tearDownClass() throws Exception { + WWNTestServer testServer = server; + if (testServer != null) { + testServer.stopServer(); + } + } + @BeforeEach public void setUp() throws ItemNotFoundException { registerService(volatileStorageService); - managedThingProvider = getService(ThingProvider.class, ManagedThingProvider.class); - assertThat("Could not get ManagedThingProvider", managedThingProvider, is(notNullValue())); - - thingTypeRegistry = getService(ThingTypeRegistry.class); - assertThat("Could not get ThingTypeRegistry", thingTypeRegistry, is(notNullValue())); - - channelTypeRegistry = getService(ChannelTypeRegistry.class); - assertThat("Could not get ChannelTypeRegistry", channelTypeRegistry, is(notNullValue())); - - channelGroupTypeRegistry = getService(ChannelGroupTypeRegistry.class); - assertThat("Could not get ChannelGroupTypeRegistry", channelGroupTypeRegistry, is(notNullValue())); - - eventPublisher = getService(EventPublisher.class); - assertThat("Could not get EventPublisher", eventPublisher, is(notNullValue())); - - itemFactory = getService(ItemFactory.class); - assertThat("Could not get ItemFactory", itemFactory, is(notNullValue())); - - itemRegistry = getService(ItemRegistry.class); - assertThat("Could not get ItemRegistry", itemRegistry, is(notNullValue())); - - managedItemChannelLinkProvider = getService(ManagedItemChannelLinkProvider.class); - assertThat("Could not get ManagedItemChannelLinkProvider", managedItemChannelLinkProvider, is(notNullValue())); - - clientBuilder = getService(ClientBuilder.class); - assertThat("Could not get ClientBuilder", clientBuilder, is(notNullValue())); - - eventSourceFactory = getService(SseEventSourceFactory.class); - assertThat("Could not get SseEventSourceFactory", eventSourceFactory, is(notNullValue())); + managedThingProvider = Objects.requireNonNull(getService(ThingProvider.class, ManagedThingProvider.class), + "Could not get ManagedThingProvider"); + thingTypeRegistry = Objects.requireNonNull(getService(ThingTypeRegistry.class), + "Could not get ThingTypeRegistry"); + channelTypeRegistry = Objects.requireNonNull(getService(ChannelTypeRegistry.class), + "Could not get ChannelTypeRegistry"); + channelGroupTypeRegistry = Objects.requireNonNull(getService(ChannelGroupTypeRegistry.class), + "Could not get ChannelGroupTypeRegistry"); + eventPublisher = Objects.requireNonNull(getService(EventPublisher.class), "Could not get EventPublisher"); + itemFactory = Objects.requireNonNull(getService(ItemFactory.class), "Could not get ItemFactory"); + itemRegistry = Objects.requireNonNull(getService(ItemRegistry.class), "Could not get ItemRegistry"); + managedItemChannelLinkProvider = Objects.requireNonNull(getService(ManagedItemChannelLinkProvider.class), + "Could not get ManagedItemChannelLinkProvider"); + clientBuilder = Objects.requireNonNull(getService(ClientBuilder.class), "Could not get ClientBuilder"); + eventSourceFactory = Objects.requireNonNull(getService(SseEventSourceFactory.class), + "Could not get SseEventSourceFactory"); ComponentContext componentContext = mock(ComponentContext.class); when(componentContext.getBundleContext()).thenReturn(bundleContext); @@ -180,8 +180,9 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest { .thenReturn(mock(ThingType.class)); registerService(thingTypeProvider); - nestTestHandlerFactory = getService(ThingHandlerFactory.class, WWNTestHandlerFactory.class); - assertThat("Could not get NestTestHandlerFactory", nestTestHandlerFactory, is(notNullValue())); + nestTestHandlerFactory = Objects.requireNonNull( + getService(ThingHandlerFactory.class, WWNTestHandlerFactory.class), + "Could not get NestTestHandlerFactory"); bridge = buildBridge(); thing = buildThing(bridge); @@ -209,12 +210,12 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest { } protected Bridge buildBridge() { - Map properties = new HashMap<>(); - properties.put(WWNAccountConfiguration.ACCESS_TOKEN, - "c.eQ5QBBPiFOTNzPHbmZPcE9yPZ7GayzLusifgQR2DQRFNyUS9ESvlhJF0D7vG8Y0TFV39zX1vIOsWrv8RKCMrFepNUb9FqHEboa4MtWLUsGb4tD9oBh0jrV4HooJUmz5sVA5KZR0dkxyLYyPc"); - properties.put(WWNAccountConfiguration.PINCODE, "64P2XRYT"); - properties.put(WWNAccountConfiguration.PRODUCT_ID, "8fdf9885-ca07-4252-1aa3-f3d5ca9589e0"); - properties.put(WWNAccountConfiguration.PRODUCT_SECRET, "QITLR3iyUlWaj9dbvCxsCKp4f"); + Map properties = Map.ofEntries( // + entry(WWNAccountConfiguration.ACCESS_TOKEN, + "c.eQ5QBBPiFOTNzPHbmZPcE9yPZ7GayzLusifgQR2DQRFNyUS9ESvlhJF0D7vG8Y0TFV39zX1vIOsWrv8RKCMrFepNUb9FqHEboa4MtWLUsGb4tD9oBh0jrV4HooJUmz5sVA5KZR0dkxyLYyPc"), + entry(WWNAccountConfiguration.PINCODE, "64P2XRYT"), + entry(WWNAccountConfiguration.PRODUCT_ID, "8fdf9885-ca07-4252-1aa3-f3d5ca9589e0"), + entry(WWNAccountConfiguration.PRODUCT_SECRET, "QITLR3iyUlWaj9dbvCxsCKp4f")); return BridgeBuilder.create(WWNTestAccountHandler.THING_TYPE_TEST_BRIDGE, "test_account") .withLabel("Test Account").withConfiguration(new Configuration(properties)).build(); @@ -227,16 +228,14 @@ public abstract class WWNThingHandlerOSGiTest extends JavaOSGiTest { ThingType thingType = thingTypeRegistry.getThingType(thingTypeUID); - List channels = new ArrayList<>(); - channels.addAll(buildChannels(thingUID, thingType.getChannelDefinitions(), (id) -> id)); - + List channels = new ArrayList<>(buildChannels(thingUID, thingType.getChannelDefinitions(), id -> id)); for (ChannelGroupDefinition channelGroupDefinition : thingType.getChannelGroupDefinitions()) { ChannelGroupType channelGroupType = channelGroupTypeRegistry .getChannelGroupType(channelGroupDefinition.getTypeUID()); String groupId = channelGroupDefinition.getId(); if (channelGroupType != null) { channels.addAll( - buildChannels(thingUID, channelGroupType.getChannelDefinitions(), (id) -> groupId + "#" + id)); + buildChannels(thingUID, channelGroupType.getChannelDefinitions(), id -> groupId + "#" + id)); } } diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestAccountHandler.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestAccountHandler.java index dc2168ae7..a3fecd66d 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestAccountHandler.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestAccountHandler.java @@ -19,6 +19,7 @@ import java.util.Set; import javax.ws.rs.client.ClientBuilder; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.binding.nest.internal.wwn.exceptions.InvalidWWNAccessTokenException; import org.openhab.binding.nest.internal.wwn.handler.WWNAccountHandler; import org.openhab.binding.nest.internal.wwn.handler.WWNRedirectUrlSupplier; @@ -32,6 +33,7 @@ import org.osgi.service.jaxrs.client.SseEventSourceFactory; * * @author Wouter Born - Initial contribution */ +@NonNullByDefault public class WWNTestAccountHandler extends WWNAccountHandler { class NestTestRedirectUrlSupplier extends WWNRedirectUrlSupplier { diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestApiServlet.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestApiServlet.java index e8ddd453f..cad3e3b7d 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestApiServlet.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestApiServlet.java @@ -31,6 +31,8 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,6 +45,7 @@ import com.google.gson.reflect.TypeToken; * * @author Wouter Born - Initial contribution */ +@NonNullByDefault public class WWNTestApiServlet extends HttpServlet { private static final long serialVersionUID = -5414910055159062745L; @@ -54,9 +57,9 @@ public class WWNTestApiServlet extends HttpServlet { private final Logger logger = LoggerFactory.getLogger(WWNTestApiServlet.class); - private class SseEvent { + private static class SseEvent { private String name; - private String data; + private @Nullable String data; public SseEvent(String name) { this.name = name; @@ -67,17 +70,13 @@ public class WWNTestApiServlet extends HttpServlet { this.data = data; } - public String getData() { + public @Nullable String getData() { return data; } public String getName() { return name; } - - public boolean hasData() { - return data != null && !data.isEmpty(); - } } private final Map> nestIdPropertiesMap = new ConcurrentHashMap<>(); @@ -91,7 +90,7 @@ public class WWNTestApiServlet extends HttpServlet { public void closeConnections() { Set threads = listenerQueues.keySet(); listenerQueues.clear(); - threads.forEach(thread -> thread.interrupt()); + threads.forEach(Thread::interrupt); } public void reset() { @@ -118,8 +117,9 @@ public class WWNTestApiServlet extends HttpServlet { writer.write(event.getName()); writer.write(NEW_LINE); - if (event.hasData()) { - for (String dataLine : event.getData().split(NEW_LINE)) { + String eventData = event.getData(); + if (eventData != null) { + for (String dataLine : eventData.split(NEW_LINE)) { writer.write("data: "); writer.write(dataLine); writer.write(NEW_LINE); @@ -195,7 +195,10 @@ public class WWNTestApiServlet extends HttpServlet { response.setStatus(HttpServletResponse.SC_OK); } - private String getNestIdFromURI(String uri) { + private @Nullable String getNestIdFromURI(@Nullable String uri) { + if (uri == null) { + return null; + } for (String updatePath : UPDATE_PATHS) { if (uri.startsWith(updatePath)) { return uri.replaceAll(updatePath, ""); @@ -213,7 +216,7 @@ public class WWNTestApiServlet extends HttpServlet { return properties; } - public String getNestIdPropertyState(String nestId, String propertyName) { + public @Nullable String getNestIdPropertyState(String nestId, String propertyName) { Map properties = nestIdPropertiesMap.get(nestId); return properties == null ? null : properties.get(propertyName); } diff --git a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestServer.java b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestServer.java index 1e7bf9f04..814b8f60b 100644 --- a/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestServer.java +++ b/itests/org.openhab.binding.nest.tests/src/main/java/org/openhab/binding/nest/internal/wwn/test/WWNTestServer.java @@ -12,12 +12,12 @@ */ package org.openhab.binding.nest.internal.wwn.test; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.servlet.ServletHandler; import org.eclipse.jetty.servlet.ServletHolder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Embedded jetty server used in the tests. @@ -27,10 +27,9 @@ import org.slf4j.LoggerFactory; * @author Velin Yordanov - Initial contribution * @author Wouter Born - Increase test coverage */ +@NonNullByDefault public class WWNTestServer { - private final Logger logger = LoggerFactory.getLogger(WWNTestServer.class); - - private Server server; + private @Nullable Server server; private String host; private int port; private int timeout; @@ -43,46 +42,32 @@ public class WWNTestServer { this.servletHolder = servletHolder; } - public void startServer() { - Thread thread = new Thread(new Runnable() { - @Override - @SuppressWarnings("resource") - public void run() { - server = new Server(); - ServletHandler handler = new ServletHandler(); - handler.addServletWithMapping(servletHolder, "/*"); - server.setHandler(handler); + public void startServer() throws Exception { + Server server = new Server(); - // HTTP connector - ServerConnector http = new ServerConnector(server); - http.setHost(host); - http.setPort(port); - http.setIdleTimeout(timeout); + ServletHandler handler = new ServletHandler(); + handler.addServletWithMapping(servletHolder, "/*"); + server.setHandler(handler); - server.addConnector(http); + // HTTP connector + ServerConnector http = new ServerConnector(server); + http.setHost(host); + http.setPort(port); + http.setIdleTimeout(timeout); + server.addConnector(http); - try { - server.start(); - server.join(); - } catch (InterruptedException ex) { - logger.error("Server got interrupted", ex); - return; - } catch (Exception e) { - logger.error("Error in starting the server", e); - return; - } - } - }); + server.start(); - thread.start(); + this.server = server; } - public void stopServer() { - try { - server.stop(); - } catch (Exception e) { - logger.error("Error in stopping the server", e); + public void stopServer() throws Exception { + Server server = this.server; + if (server == null) { return; } + + server.stop(); + this.server = null; } }