[OmniLink] Minor restructuring of binding code (#10280)

* Minor restructuring of binding code

Signed-off-by: Ethan Dye <mrtops03@gmail.com>

* Ensure that SystemType is present before switch

Signed-off-by: Ethan Dye <mrtops03@gmail.com>

* Log on invalid System Type

Signed-off-by: Ethan Dye <mrtops03@gmail.com>
This commit is contained in:
Ethan Dye 2021-03-16 13:51:25 -06:00 committed by GitHub
parent 63450a32c3
commit df4a22ba9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 44 additions and 38 deletions

View File

@ -13,6 +13,7 @@
package org.openhab.binding.omnilink.internal; package org.openhab.binding.omnilink.internal;
import java.util.Arrays; import java.util.Arrays;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
@ -34,8 +35,7 @@ public enum SystemType {
this.modelNumbers = Set.of(modelNumbers); this.modelNumbers = Set.of(modelNumbers);
} }
public static SystemType getType(int modelNumber) { public static Optional<SystemType> getType(int modelNumber) {
return Arrays.stream(values()).filter(s -> s.modelNumbers.contains(modelNumber)).findFirst() return Arrays.stream(values()).filter(s -> s.modelNumbers.contains(modelNumber)).findFirst();
.orElseThrow(IllegalArgumentException::new);
} }
} }

View File

@ -10,7 +10,7 @@
* *
* SPDX-License-Identifier: EPL-2.0 * SPDX-License-Identifier: EPL-2.0
*/ */
package org.openhab.binding.omnilink.internal.handler; package org.openhab.binding.omnilink.internal;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;

View File

@ -17,7 +17,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.binding.omnilink.internal.handler.BridgeOfflineException; import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.binding.omnilink.internal.handler.OmnilinkBridgeHandler; import org.openhab.binding.omnilink.internal.handler.OmnilinkBridgeHandler;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

View File

@ -21,11 +21,12 @@ import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.SystemType; import org.openhab.binding.omnilink.internal.SystemType;
import org.openhab.binding.omnilink.internal.handler.BridgeOfflineException; import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.binding.omnilink.internal.handler.OmnilinkBridgeHandler; import org.openhab.binding.omnilink.internal.handler.OmnilinkBridgeHandler;
import org.openhab.core.config.discovery.AbstractDiscoveryService; import org.openhab.core.config.discovery.AbstractDiscoveryService;
import org.openhab.core.config.discovery.DiscoveryResult; import org.openhab.core.config.discovery.DiscoveryResult;
@ -62,7 +63,7 @@ public class OmnilinkDiscoveryService extends AbstractDiscoveryService
private final Logger logger = LoggerFactory.getLogger(OmnilinkDiscoveryService.class); private final Logger logger = LoggerFactory.getLogger(OmnilinkDiscoveryService.class);
private static final int DISCOVER_TIMEOUT_SECONDS = 30; private static final int DISCOVER_TIMEOUT_SECONDS = 30;
private @Nullable OmnilinkBridgeHandler bridgeHandler; private @Nullable OmnilinkBridgeHandler bridgeHandler;
private @Nullable SystemType systemType; private Optional<SystemType> systemType = Optional.empty();
private @Nullable List<AreaProperties> areas; private @Nullable List<AreaProperties> areas;
/** /**
@ -389,7 +390,6 @@ public class OmnilinkDiscoveryService extends AbstractDiscoveryService
int thingNumber = areaProperties.getNumber(); int thingNumber = areaProperties.getNumber();
String thingName = areaProperties.getName(); String thingName = areaProperties.getName();
String thingID = Integer.toString(thingNumber); String thingID = Integer.toString(thingNumber);
ThingUID thingUID = null;
/* /*
* It seems that for simple OmniLink Controller configurations there * It seems that for simple OmniLink Controller configurations there
@ -405,27 +405,24 @@ public class OmnilinkDiscoveryService extends AbstractDiscoveryService
Map<String, Object> properties = Map.of(THING_PROPERTIES_NAME, thingName); Map<String, Object> properties = Map.of(THING_PROPERTIES_NAME, thingName);
final SystemType systemType = this.systemType; final String name = thingName;
if (systemType != null) { systemType.ifPresentOrElse(t -> {
switch (systemType) { ThingUID thingUID = null;
switch (t) {
case LUMINA: case LUMINA:
thingUID = new ThingUID(THING_TYPE_LUMINA_AREA, bridgeUID, thingID); thingUID = new ThingUID(THING_TYPE_LUMINA_AREA, bridgeUID, thingID);
break; break;
case OMNI:
thingUID = new ThingUID(THING_TYPE_OMNI_AREA, bridgeUID, thingID);
break;
default: default:
throw new IllegalStateException("Unknown System Type"); thingUID = new ThingUID(THING_TYPE_OMNI_AREA, bridgeUID, thingID);
} }
}
if (thingUID != null) {
DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(thingUID).withProperties(properties) DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(thingUID).withProperties(properties)
.withProperty(THING_PROPERTIES_NUMBER, thingID) .withProperty(THING_PROPERTIES_NUMBER, thingID)
.withRepresentationProperty(THING_PROPERTIES_NUMBER).withBridge(bridgeUID) .withRepresentationProperty(THING_PROPERTIES_NUMBER).withBridge(bridgeUID).withLabel(name)
.withLabel(thingName).build(); .build();
thingDiscovered(discoveryResult); thingDiscovered(discoveryResult);
} }, () -> {
logger.warn("Unknown System Type");
});
areas.add(areaProperties); areas.add(areaProperties);
} }

View File

@ -10,7 +10,7 @@
* *
* SPDX-License-Identifier: EPL-2.0 * SPDX-License-Identifier: EPL-2.0
*/ */
package org.openhab.binding.omnilink.internal.handler; package org.openhab.binding.omnilink.internal.exceptions;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
@ -21,9 +21,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
* @author Craig Hamilton - Initial contribution * @author Craig Hamilton - Initial contribution
*/ */
@NonNullByDefault @NonNullByDefault
@SuppressWarnings("serial")
public class BridgeOfflineException extends Exception { public class BridgeOfflineException extends Exception {
private static final long serialVersionUID = -9081729691518514097L;
public BridgeOfflineException(Exception e) { public BridgeOfflineException(Exception e) {
super(e); super(e);
} }

View File

@ -22,6 +22,7 @@ import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.binding.omnilink.internal.AreaAlarm; import org.openhab.binding.omnilink.internal.AreaAlarm;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.StringType; import org.openhab.core.library.types.StringType;

View File

@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.thing.Bridge; import org.openhab.core.thing.Bridge;
import org.openhab.core.thing.Thing; import org.openhab.core.thing.Thing;
import org.openhab.core.thing.binding.BaseThingHandler; import org.openhab.core.thing.binding.BaseThingHandler;

View File

@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.StringType; import org.openhab.core.library.types.StringType;
import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.ChannelUID;

View File

@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.AudioPlayer; import org.openhab.binding.omnilink.internal.AudioPlayer;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.NextPreviousType; import org.openhab.core.library.types.NextPreviousType;
import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.OnOffType;

View File

@ -22,8 +22,10 @@ import javax.measure.quantity.Dimensionless;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.TemperatureFormat;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.QuantityType;
import org.openhab.core.library.unit.Units; import org.openhab.core.library.unit.Units;
import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.ChannelUID;

View File

@ -21,6 +21,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.OnOffType;
import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing; import org.openhab.core.thing.Thing;

View File

@ -28,8 +28,10 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.AudioPlayer; import org.openhab.binding.omnilink.internal.AudioPlayer;
import org.openhab.binding.omnilink.internal.SystemType; import org.openhab.binding.omnilink.internal.SystemType;
import org.openhab.binding.omnilink.internal.TemperatureFormat;
import org.openhab.binding.omnilink.internal.config.OmnilinkBridgeConfig; import org.openhab.binding.omnilink.internal.config.OmnilinkBridgeConfig;
import org.openhab.binding.omnilink.internal.discovery.OmnilinkDiscoveryService; import org.openhab.binding.omnilink.internal.discovery.OmnilinkDiscoveryService;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.DateTimeType; import org.openhab.core.library.types.DateTimeType;
import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.StringType; import org.openhab.core.library.types.StringType;
@ -93,7 +95,7 @@ public class OmnilinkBridgeHandler extends BaseBridgeHandler implements Notifica
private @Nullable ScheduledFuture<?> eventPollingJob; private @Nullable ScheduledFuture<?> eventPollingJob;
private final int autoReconnectPeriod = 60; private final int autoReconnectPeriod = 60;
private Optional<AudioPlayer> audioPlayer = Optional.empty(); private Optional<AudioPlayer> audioPlayer = Optional.empty();
private @Nullable SystemType systemType = null; private Optional<SystemType> systemType = Optional.empty();
private final Gson gson = new Gson(); private final Gson gson = new Gson();
private int eventLogNumber = 0; private int eventLogNumber = 0;
@ -306,28 +308,23 @@ public class OmnilinkBridgeHandler extends BaseBridgeHandler implements Notifica
theThing.map(Thing::getHandler) theThing.map(Thing::getHandler)
.ifPresent(theHandler -> ((ZoneHandler) theHandler).handleStatus(zoneStatus)); .ifPresent(theHandler -> ((ZoneHandler) theHandler).handleStatus(zoneStatus));
} else if (status instanceof ExtendedAreaStatus) { } else if (status instanceof ExtendedAreaStatus) {
final SystemType systemType = this.systemType;
ExtendedAreaStatus areaStatus = (ExtendedAreaStatus) status; ExtendedAreaStatus areaStatus = (ExtendedAreaStatus) status;
int areaNumber = areaStatus.getNumber(); int areaNumber = areaStatus.getNumber();
if (systemType != null) { logger.debug("Received status update for Area: {}, status: {}", areaNumber, areaStatus);
logger.debug("Received status update for Area: {}, status: {}", areaNumber, areaStatus); systemType.ifPresent(t -> {
Optional<Thing> theThing; Optional<Thing> theThing = Optional.empty();
switch (systemType) { switch (t) {
case OMNI:
theThing = getChildThing(THING_TYPE_OMNI_AREA, areaNumber);
break;
case LUMINA: case LUMINA:
theThing = getChildThing(THING_TYPE_LUMINA_AREA, areaNumber); theThing = getChildThing(THING_TYPE_LUMINA_AREA, areaNumber);
break; break;
default: case OMNI:
theThing = Optional.empty(); theThing = getChildThing(THING_TYPE_OMNI_AREA, areaNumber);
break;
} }
theThing.map(Thing::getHandler) theThing.map(Thing::getHandler)
.ifPresent(theHandler -> ((AbstractAreaHandler) theHandler).handleStatus(areaStatus)); .ifPresent(theHandler -> ((AbstractAreaHandler) theHandler).handleStatus(areaStatus));
} else { });
logger.debug("Received null System Type!");
}
} else if (status instanceof ExtendedAccessControlReaderLockStatus) { } else if (status instanceof ExtendedAccessControlReaderLockStatus) {
ExtendedAccessControlReaderLockStatus lockStatus = (ExtendedAccessControlReaderLockStatus) status; ExtendedAccessControlReaderLockStatus lockStatus = (ExtendedAccessControlReaderLockStatus) status;
int lockNumber = lockStatus.getNumber(); int lockNumber = lockStatus.getNumber();

View File

@ -22,8 +22,10 @@ import javax.measure.quantity.Temperature;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.TemperatureFormat;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.QuantityType;
import org.openhab.core.library.unit.ImperialUnits; import org.openhab.core.library.unit.ImperialUnits;
import org.openhab.core.library.unit.SIUnits; import org.openhab.core.library.unit.SIUnits;

View File

@ -24,8 +24,10 @@ import javax.measure.quantity.Temperature;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.TemperatureFormat;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OpenClosedType; import org.openhab.core.library.types.OpenClosedType;
import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.QuantityType;

View File

@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.PercentType; import org.openhab.core.library.types.PercentType;

View File

@ -23,6 +23,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest;
import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests;
import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException;
import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OpenClosedType; import org.openhab.core.library.types.OpenClosedType;
import org.openhab.core.library.types.StringType; import org.openhab.core.library.types.StringType;