mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 15:11:59 +01:00
Adjustments for nullness annotated TypeParser (#10068)
Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
This commit is contained in:
parent
8a2ac82b07
commit
1210fec9f9
@ -267,13 +267,15 @@ public class HomieThingHandlerTests {
|
||||
// Assign old value
|
||||
Value value = property.getChannelState().getCache();
|
||||
Command command = TypeParser.parseCommand(value.getSupportedCommandTypes(), "OLDVALUE");
|
||||
property.getChannelState().getCache().update(command);
|
||||
// Try to update with new value
|
||||
updateValue = new StringType("SOMETHINGNEW");
|
||||
thingHandler.handleCommand(property.channelUID, updateValue);
|
||||
// Expect old value and no MQTT publish
|
||||
assertThat(property.getChannelState().getCache().getChannelState().toString(), is("OLDVALUE"));
|
||||
verify(connection, times(1)).publish(any(), any(), anyInt(), anyBoolean());
|
||||
if (command != null) {
|
||||
property.getChannelState().getCache().update(command);
|
||||
// Try to update with new value
|
||||
updateValue = new StringType("SOMETHINGNEW");
|
||||
thingHandler.handleCommand(property.channelUID, updateValue);
|
||||
// Expect old value and no MQTT publish
|
||||
assertThat(property.getChannelState().getCache().getChannelState().toString(), is("OLDVALUE"));
|
||||
verify(connection, times(1)).publish(any(), any(), anyInt(), anyBoolean());
|
||||
}
|
||||
}
|
||||
|
||||
public Object createSubscriberAnswer(InvocationOnMock invocation) {
|
||||
|
@ -22,6 +22,8 @@ import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.binding.oceanic.internal.NetworkOceanicBindingConfiguration;
|
||||
import org.openhab.binding.oceanic.internal.Throttler;
|
||||
import org.openhab.core.thing.Thing;
|
||||
@ -36,6 +38,7 @@ import org.slf4j.LoggerFactory;
|
||||
*
|
||||
* @author Karel Goderis - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public class NetworkOceanicThingHandler extends OceanicThingHandler {
|
||||
|
||||
private static final int REQUEST_TIMEOUT = 3000;
|
||||
@ -43,10 +46,10 @@ public class NetworkOceanicThingHandler extends OceanicThingHandler {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(NetworkOceanicThingHandler.class);
|
||||
|
||||
private Socket socket;
|
||||
private InputStream inputStream;
|
||||
private OutputStream outputStream;
|
||||
protected ScheduledFuture<?> reconnectJob;
|
||||
private @Nullable Socket socket;
|
||||
private @Nullable InputStream inputStream;
|
||||
private @Nullable OutputStream outputStream;
|
||||
protected @Nullable ScheduledFuture<?> reconnectJob;
|
||||
|
||||
public NetworkOceanicThingHandler(Thing thing) {
|
||||
super(thing);
|
||||
@ -99,7 +102,7 @@ public class NetworkOceanicThingHandler extends OceanicThingHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String requestResponse(String commandAsString) {
|
||||
protected @Nullable String requestResponse(String commandAsString) {
|
||||
synchronized (this) {
|
||||
if (getThing().getStatus() == ThingStatus.ONLINE) {
|
||||
NetworkOceanicBindingConfiguration config = getConfigAs(NetworkOceanicBindingConfiguration.class);
|
||||
|
@ -13,13 +13,13 @@
|
||||
package org.openhab.binding.oceanic.internal.handler;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNull;
|
||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.openhab.binding.oceanic.internal.OceanicBindingConstants.OceanicChannelSelector;
|
||||
import org.openhab.core.thing.Channel;
|
||||
import org.openhab.core.thing.ChannelUID;
|
||||
@ -30,7 +30,6 @@ import org.openhab.core.thing.binding.BaseThingHandler;
|
||||
import org.openhab.core.types.Command;
|
||||
import org.openhab.core.types.RefreshType;
|
||||
import org.openhab.core.types.State;
|
||||
import org.openhab.core.types.Type;
|
||||
import org.openhab.core.types.TypeParser;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -41,6 +40,7 @@ import org.slf4j.LoggerFactory;
|
||||
*
|
||||
* @author Karel Goderis - Initial contribution
|
||||
*/
|
||||
@NonNullByDefault
|
||||
public abstract class OceanicThingHandler extends BaseThingHandler {
|
||||
|
||||
public static final String INTERVAL = "interval";
|
||||
@ -48,10 +48,10 @@ public abstract class OceanicThingHandler extends BaseThingHandler {
|
||||
private final Logger logger = LoggerFactory.getLogger(OceanicThingHandler.class);
|
||||
|
||||
protected int bufferSize;
|
||||
protected ScheduledFuture<?> pollingJob;
|
||||
protected @Nullable ScheduledFuture<?> pollingJob;
|
||||
protected static String lastLineReceived = "";
|
||||
|
||||
public OceanicThingHandler(@NonNull Thing thing) {
|
||||
public OceanicThingHandler(Thing thing) {
|
||||
super(thing);
|
||||
}
|
||||
|
||||
@ -78,7 +78,9 @@ public abstract class OceanicThingHandler extends BaseThingHandler {
|
||||
updateProperties(properties);
|
||||
} else {
|
||||
State value = createStateForType(selector, response);
|
||||
updateState(theChannelUID, value);
|
||||
if (value != null) {
|
||||
updateState(theChannelUID, value);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.warn("Received an empty answer for '{}'", selector.name());
|
||||
@ -138,7 +140,7 @@ public abstract class OceanicThingHandler extends BaseThingHandler {
|
||||
break;
|
||||
}
|
||||
String response = requestResponse(commandAsString);
|
||||
if (response.equals("ERR")) {
|
||||
if ("ERR".equals(response)) {
|
||||
logger.error("An error occurred while setting '{}' to {}", selector.toString(),
|
||||
commandAsString);
|
||||
}
|
||||
@ -155,15 +157,10 @@ public abstract class OceanicThingHandler extends BaseThingHandler {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private State createStateForType(OceanicChannelSelector selector, String value) {
|
||||
Class<? extends Type> typeClass = selector.getTypeClass();
|
||||
List<Class<? extends State>> stateTypeList = new ArrayList<>();
|
||||
|
||||
stateTypeList.add((Class<? extends State>) typeClass);
|
||||
State state = TypeParser.parseState(stateTypeList, selector.convertValue(value));
|
||||
|
||||
return state;
|
||||
private @Nullable State createStateForType(OceanicChannelSelector selector, String value) {
|
||||
return TypeParser.parseState(List.of((Class<? extends State>) selector.getTypeClass()),
|
||||
selector.convertValue(value));
|
||||
}
|
||||
|
||||
protected abstract String requestResponse(String commandAsString);
|
||||
protected abstract @Nullable String requestResponse(String commandAsString);
|
||||
}
|
||||
|
@ -16,7 +16,6 @@ import java.math.BigDecimal;
|
||||
import java.text.MessageFormat;
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -204,7 +203,9 @@ public class SmartMeterHandler extends BaseThingHandler {
|
||||
if (!channel.getProperties().containsKey(SmartMeterBindingConstants.CHANNEL_PROPERTY_OBIS)) {
|
||||
addObisPropertyToChannel(obis, channel);
|
||||
}
|
||||
updateState(channel.getUID(), state);
|
||||
if (state != null) {
|
||||
updateState(channel.getUID(), state);
|
||||
}
|
||||
|
||||
updateStatus(ThingStatus.ONLINE, ThingStatusDetail.NONE);
|
||||
} else {
|
||||
@ -256,7 +257,9 @@ public class SmartMeterHandler extends BaseThingHandler {
|
||||
MeterValue<?> value = this.smlDevice.getMeterValue(obis);
|
||||
if (value != null) {
|
||||
State state = getStateForObisValue(value, channel);
|
||||
updateState(channel.getUID(), state);
|
||||
if (state != null) {
|
||||
updateState(channel.getUID(), state);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -264,13 +267,14 @@ public class SmartMeterHandler extends BaseThingHandler {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <Q extends Quantity<Q>> State getStateForObisValue(MeterValue<?> value, @Nullable Channel channel) {
|
||||
private @Nullable <Q extends Quantity<Q>> State getStateForObisValue(MeterValue<?> value,
|
||||
@Nullable Channel channel) {
|
||||
Unit<?> unit = value.getUnit();
|
||||
String valueString = value.getValue();
|
||||
if (unit != null) {
|
||||
valueString += " " + value.getUnit();
|
||||
}
|
||||
State state = TypeParser.parseState(Arrays.asList(QuantityType.class, StringType.class), valueString);
|
||||
State state = TypeParser.parseState(List.of(QuantityType.class, StringType.class), valueString);
|
||||
if (channel != null && state instanceof QuantityType) {
|
||||
state = applyConformity(channel, (QuantityType<Q>) state);
|
||||
Number conversionRatio = (Number) channel.getConfiguration()
|
||||
|
Loading…
Reference in New Issue
Block a user