Java 17 features (H-M) (#15520)

- add missing @override
- Java style array syntax
- remove redundant modifiers
- always move String constants to left side in comparisons
- simplify lambda expressions and return statements
- use replace instead of replaceAll w/o regex
- instanceof matching and multiline strings
- remove null check before instanceof

Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
This commit is contained in:
Holger Friedrich
2023-09-08 14:36:59 +02:00
committed by GitHub
parent 3751fd0646
commit edaf17b345
519 changed files with 2703 additions and 2660 deletions

View File

@@ -82,11 +82,9 @@ public class HaasSohnpelletstoveHandler extends BaseThingHandler {
updateOvenData(postData); updateOvenData(postData);
} }
} else if (channelUID.getId().equals(CHANNELSPTEMP)) { } else if (channelUID.getId().equals(CHANNELSPTEMP)) {
if (command instanceof QuantityType<?>) { if (command instanceof QuantityType<?> quantityCommand) {
QuantityType<?> value = (QuantityType<?>) command;
Unit<Temperature> unit = SIUnits.CELSIUS; Unit<Temperature> unit = SIUnits.CELSIUS;
value = value.toUnit(unit); QuantityType<?> value = quantityCommand.toUnit(unit);
if (value != null) { if (value != null) {
double a = value.doubleValue(); double a = value.doubleValue();
String postdata = "{\"sp_temp\":" + a + "}"; String postdata = "{\"sp_temp\":" + a + "}";

View File

@@ -38,8 +38,7 @@ public class MD5Utils {
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
throw new IllegalArgumentException(e); throw new IllegalArgumentException(e);
} }
byte[] result = md.digest(input); return md.digest(input);
return result;
} }
private static String bytesToHex(byte[] bytes) { private static String bytesToHex(byte[] bytes) {

View File

@@ -15,7 +15,6 @@ package org.openhab.binding.harmonyhub.internal.handler;
import static org.openhab.binding.harmonyhub.internal.HarmonyHubBindingConstants.*; import static org.openhab.binding.harmonyhub.internal.HarmonyHubBindingConstants.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -65,7 +64,7 @@ public class HarmonyDeviceHandler extends BaseThingHandler {
private final Logger logger = LoggerFactory.getLogger(HarmonyDeviceHandler.class); private final Logger logger = LoggerFactory.getLogger(HarmonyDeviceHandler.class);
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Collections.singleton(HARMONY_DEVICE_THING_TYPE); public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(HARMONY_DEVICE_THING_TYPE);
private final HarmonyHubDynamicTypeProvider typeProvider; private final HarmonyHubDynamicTypeProvider typeProvider;

View File

@@ -126,9 +126,9 @@ public class HarmonyHubHandler extends BaseBridgeHandler implements HarmonyClien
switch (channel.getUID().getId()) { switch (channel.getUID().getId()) {
case CHANNEL_CURRENT_ACTIVITY: case CHANNEL_CURRENT_ACTIVITY:
if (command instanceof DecimalType) { if (command instanceof DecimalType decimalCommand) {
try { try {
client.startActivity(((DecimalType) command).intValue()); client.startActivity(decimalCommand.intValue());
} catch (Exception e) { } catch (Exception e) {
logger.warn("Could not start activity", e); logger.warn("Could not start activity", e);
} }

View File

@@ -174,11 +174,13 @@ public class HaywardBindingConstants {
// Hayward Command html // Hayward Command html
public static final String COMMAND_PARAMETERS = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request>"; public static final String COMMAND_PARAMETERS = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request>";
public static final String COMMAND_SCHEDULE = "<Parameter name=\"IsCountDownTimer\" dataType=\"bool\">false</Parameter>" public static final String COMMAND_SCHEDULE = """
+ "<Parameter name=\"StartTimeHours\" dataType=\"int\">0</Parameter>" <Parameter name="IsCountDownTimer" dataType="bool">false</Parameter>\
+ "<Parameter name=\"StartTimeMinutes\" dataType=\"int\">0</Parameter>" <Parameter name="StartTimeHours" dataType="int">0</Parameter>\
+ "<Parameter name=\"EndTimeHours\" dataType=\"int\">0</Parameter>" <Parameter name="StartTimeMinutes" dataType="int">0</Parameter>\
+ "<Parameter name=\"EndTimeMinutes\" dataType=\"int\">0</Parameter>" <Parameter name="EndTimeHours" dataType="int">0</Parameter>\
+ "<Parameter name=\"DaysActive\" dataType=\"int\">0</Parameter>" <Parameter name="EndTimeMinutes" dataType="int">0</Parameter>\
+ "<Parameter name=\"Recurring\" dataType=\"bool\">false</Parameter>"; <Parameter name="DaysActive" dataType="int">0</Parameter>\
<Parameter name="Recurring" dataType="bool">false</Parameter>\
""";
} }

View File

@@ -93,7 +93,7 @@ public abstract class HaywardThingHandler extends BaseThingHandler {
if (bridge != null) { if (bridge != null) {
HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler(); HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler();
if (bridgehandler != null) { if (bridgehandler != null) {
if (bridgehandler.account.units.equals("Standard")) { if ("Standard".equals(bridgehandler.account.units)) {
return new QuantityType<>(Integer.parseInt(value), ImperialUnits.FAHRENHEIT); return new QuantityType<>(Integer.parseInt(value), ImperialUnits.FAHRENHEIT);
} else { } else {
return new QuantityType<>(Integer.parseInt(value), SIUnits.CELSIUS); return new QuantityType<>(Integer.parseInt(value), SIUnits.CELSIUS);
@@ -112,10 +112,10 @@ public abstract class HaywardThingHandler extends BaseThingHandler {
return "0"; return "0";
} else if (command == OnOffType.ON) { } else if (command == OnOffType.ON) {
return "1"; return "1";
} else if (command instanceof DecimalType) { } else if (command instanceof DecimalType decimalCommand) {
return ((DecimalType) command).toString(); return decimalCommand.toString();
} else if (command instanceof QuantityType) { } else if (command instanceof QuantityType quantityCommand) {
return ((QuantityType<?>) command).format("%1.0f"); return quantityCommand.format("%1.0f");
} else { } else {
return command.toString(); return command.toString();
} }

View File

@@ -349,8 +349,8 @@ public class HaywardDiscoveryService extends AbstractDiscoveryService implements
@Override @Override
public void setThingHandler(@Nullable ThingHandler handler) { public void setThingHandler(@Nullable ThingHandler handler) {
if (handler instanceof HaywardBridgeHandler) { if (handler instanceof HaywardBridgeHandler bridgeHandler) {
this.discoveryBridgehandler = (HaywardBridgeHandler) handler; this.discoveryBridgehandler = bridgeHandler;
} }
} }

View File

@@ -83,10 +83,12 @@ public class HaywardBackyardHandler extends HaywardThingHandler {
HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler(); HaywardBridgeHandler bridgehandler = (HaywardBridgeHandler) bridge.getHandler();
if (bridgehandler != null) { if (bridgehandler != null) {
// *****Request Alarm List from Hayward server // *****Request Alarm List from Hayward server
String urlParameters = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request><Name>GetAlarmList</Name><Parameters>" String urlParameters = """
+ "<Parameter name=\"Token\" dataType=\"String\">" + bridgehandler.account.token <?xml version="1.0" encoding="utf-8"?><Request><Name>GetAlarmList</Name><Parameters>\
+ "</Parameter>" + "<Parameter name=\"MspSystemID\" dataType=\"int\">" <Parameter name="Token" dataType="String">\
+ bridgehandler.account.mspSystemID + "</Parameter>" """ + bridgehandler.account.token + "</Parameter>"
+ "<Parameter name=\"MspSystemID\" dataType=\"int\">" + bridgehandler.account.mspSystemID
+ "</Parameter>"
+ "<Parameter name=\"CultureInfoName\" dataType=\"String\">en-us</Parameter></Parameters></Request>"; + "<Parameter name=\"CultureInfoName\" dataType=\"String\">en-us</Parameter></Parameters></Request>";
try { try {

View File

@@ -15,9 +15,9 @@ package org.openhab.binding.haywardomnilogic.internal.handler;
import java.io.StringReader; import java.io.StringReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -82,7 +82,7 @@ public class HaywardBridgeHandler extends BaseBridgeHandler {
@Override @Override
public Collection<Class<? extends ThingHandlerService>> getServices() { public Collection<Class<? extends ThingHandlerService>> getServices() {
return Collections.singleton(HaywardDiscoveryService.class); return Set.of(HaywardDiscoveryService.class);
} }
public HaywardBridgeHandler(HaywardDynamicStateDescriptionProvider stateDescriptionProvider, Bridge bridge, public HaywardBridgeHandler(HaywardDynamicStateDescriptionProvider stateDescriptionProvider, Bridge bridge,
@@ -191,10 +191,12 @@ public class HaywardBridgeHandler extends BaseBridgeHandler {
String status; String status;
// *****Login to Hayward server // *****Login to Hayward server
String urlParameters = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request>" + "<Name>Login</Name><Parameters>" String urlParameters = """
+ "<Parameter name=\"UserName\" dataType=\"String\">" + config.username + "</Parameter>" <?xml version="1.0" encoding="utf-8"?><Request>\
+ "<Parameter name=\"Password\" dataType=\"String\">" + config.password + "</Parameter>" <Name>Login</Name><Parameters>\
+ "</Parameters></Request>"; <Parameter name="UserName" dataType="String">\
""" + config.username + "</Parameter>" + "<Parameter name=\"Password\" dataType=\"String\">"
+ config.password + "</Parameter>" + "</Parameters></Request>";
xmlResponse = httpXmlResponse(urlParameters); xmlResponse = httpXmlResponse(urlParameters);
@@ -219,9 +221,11 @@ public class HaywardBridgeHandler extends BaseBridgeHandler {
String xmlResponse; String xmlResponse;
// *****getApiDef from Hayward server // *****getApiDef from Hayward server
String urlParameters = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request><Name>GetAPIDef</Name><Parameters>" String urlParameters = """
+ "<Parameter name=\"Token\" dataType=\"String\">" + account.token + "</Parameter>" <?xml version="1.0" encoding="utf-8"?><Request><Name>GetAPIDef</Name><Parameters>\
+ "<Parameter name=\"MspSystemID\" dataType=\"int\">" + account.mspSystemID + "</Parameter>;" <Parameter name="Token" dataType="String">\
""" + account.token + "</Parameter>" + "<Parameter name=\"MspSystemID\" dataType=\"int\">"
+ account.mspSystemID + "</Parameter>;"
+ "<Parameter name=\"Version\" dataType=\"string\">0.4</Parameter >\r\n" + "<Parameter name=\"Version\" dataType=\"string\">0.4</Parameter >\r\n"
+ "<Parameter name=\"Language\" dataType=\"string\">en</Parameter >\r\n" + "</Parameters></Request>"; + "<Parameter name=\"Language\" dataType=\"string\">en</Parameter >\r\n" + "</Parameters></Request>";
@@ -239,9 +243,10 @@ public class HaywardBridgeHandler extends BaseBridgeHandler {
String status; String status;
// *****Get MSP // *****Get MSP
String urlParameters = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request><Name>GetSiteList</Name><Parameters>" String urlParameters = """
+ "<Parameter name=\"Token\" dataType=\"String\">" + account.token <?xml version="1.0" encoding="utf-8"?><Request><Name>GetSiteList</Name><Parameters>\
+ "</Parameter><Parameter name=\"UserID\" dataType=\"String\">" + account.userID <Parameter name="Token" dataType="String">\
""" + account.token + "</Parameter><Parameter name=\"UserID\" dataType=\"String\">" + account.userID
+ "</Parameter></Parameters></Request>"; + "</Parameter></Parameters></Request>";
xmlResponse = httpXmlResponse(urlParameters); xmlResponse = httpXmlResponse(urlParameters);
@@ -269,10 +274,11 @@ public class HaywardBridgeHandler extends BaseBridgeHandler {
public synchronized String getMspConfig() throws HaywardException, InterruptedException { public synchronized String getMspConfig() throws HaywardException, InterruptedException {
// *****getMspConfig from Hayward server // *****getMspConfig from Hayward server
String urlParameters = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request><Name>GetMspConfigFile</Name><Parameters>" String urlParameters = """
+ "<Parameter name=\"Token\" dataType=\"String\">" + account.token + "</Parameter>" <?xml version="1.0" encoding="utf-8"?><Request><Name>GetMspConfigFile</Name><Parameters>\
+ "<Parameter name=\"MspSystemID\" dataType=\"int\">" + account.mspSystemID <Parameter name="Token" dataType="String">\
+ "</Parameter><Parameter name=\"Version\" dataType=\"string\">0</Parameter>\r\n" """ + account.token + "</Parameter>" + "<Parameter name=\"MspSystemID\" dataType=\"int\">"
+ account.mspSystemID + "</Parameter><Parameter name=\"Version\" dataType=\"string\">0</Parameter>\r\n"
+ "</Parameters></Request>"; + "</Parameters></Request>";
String xmlResponse = httpXmlResponse(urlParameters); String xmlResponse = httpXmlResponse(urlParameters);
@@ -312,10 +318,11 @@ public class HaywardBridgeHandler extends BaseBridgeHandler {
public synchronized boolean getTelemetryData() throws HaywardException, InterruptedException { public synchronized boolean getTelemetryData() throws HaywardException, InterruptedException {
// *****getTelemetry from Hayward server // *****getTelemetry from Hayward server
String urlParameters = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Request><Name>GetTelemetryData</Name><Parameters>" String urlParameters = """
+ "<Parameter name=\"Token\" dataType=\"String\">" + account.token + "</Parameter>" <?xml version="1.0" encoding="utf-8"?><Request><Name>GetTelemetryData</Name><Parameters>\
+ "<Parameter name=\"MspSystemID\" dataType=\"int\">" + account.mspSystemID <Parameter name="Token" dataType="String">\
+ "</Parameter></Parameters></Request>"; """ + account.token + "</Parameter>" + "<Parameter name=\"MspSystemID\" dataType=\"int\">"
+ account.mspSystemID + "</Parameter></Parameters></Request>";
String xmlResponse = httpXmlResponse(urlParameters); String xmlResponse = httpXmlResponse(urlParameters);

View File

@@ -90,7 +90,7 @@ public class HaywardChlorinatorHandler extends HaywardThingHandler {
data = bridgehandler.evaluateXPath("//Chlorinator/@status", xmlResponse); data = bridgehandler.evaluateXPath("//Chlorinator/@status", xmlResponse);
updateData(HaywardBindingConstants.CHANNEL_CHLORINATOR_STATUS, data.get(i)); updateData(HaywardBindingConstants.CHANNEL_CHLORINATOR_STATUS, data.get(i));
if (data.get(i).equals("0")) { if ("0".equals(data.get(i))) {
updateData(HaywardBindingConstants.CHANNEL_CHLORINATOR_ENABLE, "0"); updateData(HaywardBindingConstants.CHANNEL_CHLORINATOR_ENABLE, "0");
// chlorState is used to set the chlorinator cfgState in the timedPercent command // chlorState is used to set the chlorinator cfgState in the timedPercent command
this.chlorState = "2"; this.chlorState = "2";

View File

@@ -60,7 +60,7 @@ public class HaywardColorLogicHandler extends HaywardThingHandler {
data = bridgehandler.evaluateXPath("//ColorLogic-Light/@lightState", xmlResponse); data = bridgehandler.evaluateXPath("//ColorLogic-Light/@lightState", xmlResponse);
updateData(HaywardBindingConstants.CHANNEL_COLORLOGIC_LIGHTSTATE, data.get(i)); updateData(HaywardBindingConstants.CHANNEL_COLORLOGIC_LIGHTSTATE, data.get(i));
if (data.get(i).equals("0")) { if ("0".equals(data.get(i))) {
updateData(HaywardBindingConstants.CHANNEL_COLORLOGIC_ENABLE, "0"); updateData(HaywardBindingConstants.CHANNEL_COLORLOGIC_ENABLE, "0");
} else { } else {
updateData(HaywardBindingConstants.CHANNEL_COLORLOGIC_ENABLE, "1"); updateData(HaywardBindingConstants.CHANNEL_COLORLOGIC_ENABLE, "1");

View File

@@ -154,7 +154,7 @@ public class HaywardFilterHandler extends HaywardThingHandler {
updateData(HaywardBindingConstants.CHANNEL_FILTER_SPEEDRPM, rpmSpeed.toString()); updateData(HaywardBindingConstants.CHANNEL_FILTER_SPEEDRPM, rpmSpeed.toString());
} }
if (data.get(i).equals("0")) { if ("0".equals(data.get(i))) {
updateData(HaywardBindingConstants.CHANNEL_FILTER_ENABLE, "0"); updateData(HaywardBindingConstants.CHANNEL_FILTER_ENABLE, "0");
} else { } else {
updateData(HaywardBindingConstants.CHANNEL_FILTER_ENABLE, "1"); updateData(HaywardBindingConstants.CHANNEL_FILTER_ENABLE, "1");

View File

@@ -58,7 +58,7 @@ public class HaywardHeaterHandler extends HaywardThingHandler {
// Enable // Enable
data = bridgehandler.evaluateXPath("//Heater/@enable", xmlResponse); data = bridgehandler.evaluateXPath("//Heater/@enable", xmlResponse);
if (data.get(i).equals("0")) { if ("0".equals(data.get(i))) {
updateData(HaywardBindingConstants.CHANNEL_HEATER_ENABLE, "0"); updateData(HaywardBindingConstants.CHANNEL_HEATER_ENABLE, "0");
} else { } else {
updateData(HaywardBindingConstants.CHANNEL_HEATER_ENABLE, "1"); updateData(HaywardBindingConstants.CHANNEL_HEATER_ENABLE, "1");

View File

@@ -150,7 +150,7 @@ public class HaywardPumpHandler extends HaywardThingHandler {
updateData(HaywardBindingConstants.CHANNEL_PUMP_SPEEDRPM, rpmSpeed.toString()); updateData(HaywardBindingConstants.CHANNEL_PUMP_SPEEDRPM, rpmSpeed.toString());
} }
if (data.get(i).equals("0")) { if ("0".equals(data.get(i))) {
updateData(HaywardBindingConstants.CHANNEL_PUMP_ENABLE, "0"); updateData(HaywardBindingConstants.CHANNEL_PUMP_ENABLE, "0");
} else { } else {
updateData(HaywardBindingConstants.CHANNEL_PUMP_ENABLE, "1"); updateData(HaywardBindingConstants.CHANNEL_PUMP_ENABLE, "1");

View File

@@ -95,9 +95,9 @@ public class HaywardVirtualHeaterHandler extends HaywardThingHandler {
updateData(HaywardBindingConstants.CHANNEL_VIRTUALHEATER_CURRENTSETPOINT, data.get(i)); updateData(HaywardBindingConstants.CHANNEL_VIRTUALHEATER_CURRENTSETPOINT, data.get(i));
data = bridgehandler.evaluateXPath("//VirtualHeater/@enable", xmlResponse); data = bridgehandler.evaluateXPath("//VirtualHeater/@enable", xmlResponse);
if (data.get(i).equals("yes")) { if ("yes".equals(data.get(i))) {
updateData(HaywardBindingConstants.CHANNEL_VIRTUALHEATER_ENABLE, "1"); updateData(HaywardBindingConstants.CHANNEL_VIRTUALHEATER_ENABLE, "1");
} else if (data.get(i).equals("no")) { } else if ("no".equals(data.get(i))) {
updateData(HaywardBindingConstants.CHANNEL_VIRTUALHEATER_ENABLE, "0"); updateData(HaywardBindingConstants.CHANNEL_VIRTUALHEATER_ENABLE, "0");
} }
} }

View File

@@ -14,7 +14,6 @@ package org.openhab.binding.hccrubbishcollection.internal;
import static org.openhab.binding.hccrubbishcollection.internal.HCCRubbishCollectionBindingConstants.*; import static org.openhab.binding.hccrubbishcollection.internal.HCCRubbishCollectionBindingConstants.*;
import java.util.Collections;
import java.util.Set; import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -41,7 +40,7 @@ import org.osgi.service.component.annotations.Reference;
public class HCCRubbishCollectionHandlerFactory extends BaseThingHandlerFactory { public class HCCRubbishCollectionHandlerFactory extends BaseThingHandlerFactory {
private final HttpClient httpClient; private final HttpClient httpClient;
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Collections.singleton(THING_TYPE_COLLECTION); private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_COLLECTION);
@Activate @Activate
public HCCRubbishCollectionHandlerFactory(final @Reference HttpClientFactory httpClientFactory) { public HCCRubbishCollectionHandlerFactory(final @Reference HttpClientFactory httpClientFactory) {

View File

@@ -143,7 +143,7 @@ public class Mhub4K431Handler extends BaseThingHandler {
String content = "{CMD="; String content = "{CMD=";
content = content + command.toString() + "B"; content = content + command.toString() + "B";
content = content + String.valueOf(outputPort) + "."; content = content + outputPort + ".";
InputStream stream = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)); InputStream stream = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));

View File

@@ -114,11 +114,11 @@ public class MultiroomPlusHandler extends BaseThingHandler {
String httpMethod = "GET"; String httpMethod = "GET";
String url = "http://" + host + "/switch.cgi?command=3&data0="; String url = "http://" + host + "/switch.cgi?command=3&data0=";
url = url + String.valueOf(outputPort) + "&data1="; url = url + outputPort + "&data1=";
url = url + command.toString() + "&checksum="; url = url + command.toString() + "&checksum=";
int checksum = 3 + outputPort + sourcePort; int checksum = 3 + outputPort + sourcePort;
url = url + String.valueOf(checksum); url = url + checksum;
try { try {
HttpUtil.executeUrl(httpMethod, url, null, null, null, timeout); HttpUtil.executeUrl(httpMethod, url, null, null, null, timeout);

View File

@@ -422,7 +422,7 @@ public class GatewayWebTargets implements Closeable, HostnameVerifier {
* @throws HubProcessingException if any error occurs. * @throws HubProcessingException if any error occurs.
*/ */
public void stopShade(int shadeId) throws HubProcessingException { public void stopShade(int shadeId) throws HubProcessingException {
invoke(HttpMethod.PUT, shadeStop, Query.of(IDS, Integer.valueOf(shadeId).toString()), null); invoke(HttpMethod.PUT, shadeStop, Query.of(IDS, Integer.toString(shadeId)), null);
} }
/** /**

View File

@@ -147,10 +147,8 @@ public class AutomationChannelBuilder extends BaseChannelBuilder {
String label = getScheduledEventName(referencedName, scheduledEvent); String label = getScheduledEventName(referencedName, scheduledEvent);
String description = translationProvider.getText("dynamic-channel.automation-enabled.description", String description = translationProvider.getText("dynamic-channel.automation-enabled.description",
referencedName); referencedName);
Channel channel = ChannelBuilder.create(channelUid, CoreItemFactory.SWITCH).withType(channelTypeUid) return ChannelBuilder.create(channelUid, CoreItemFactory.SWITCH).withType(channelTypeUid).withLabel(label)
.withLabel(label).withDescription(description).build(); .withDescription(description).build();
return channel;
} }
private @Nullable String getReferencedSceneOrSceneCollectionName(ScheduledEvent scheduledEvent) { private @Nullable String getReferencedSceneOrSceneCollectionName(ScheduledEvent scheduledEvent) {

View File

@@ -67,9 +67,9 @@ public class HDPowerViewCommandExtension extends AbstractConsoleCommandExtension
for (Thing thing : thingRegistry.getAll()) { for (Thing thing : thingRegistry.getAll()) {
ThingHandler thingHandler = thing.getHandler(); ThingHandler thingHandler = thing.getHandler();
if (thingHandler instanceof HDPowerViewHubHandler) { if (thingHandler instanceof HDPowerViewHubHandler hubHandler) {
console.println("Generation 1/2 API hub: " + thing.getLabel()); console.println("Generation 1/2 API hub: " + thing.getLabel());
HDPowerViewWebTargets webTargets = ((HDPowerViewHubHandler) thingHandler).getWebTargets(); HDPowerViewWebTargets webTargets = hubHandler.getWebTargets();
try { try {
List<ShadeData> shades = webTargets.getShades().shadeData; List<ShadeData> shades = webTargets.getShades().shadeData;
@@ -90,9 +90,9 @@ public class HDPowerViewCommandExtension extends AbstractConsoleCommandExtension
} catch (HubException e) { } catch (HubException e) {
console.println("Error retrieving ID's: " + e.getMessage()); console.println("Error retrieving ID's: " + e.getMessage());
} }
} else if (thingHandler instanceof GatewayBridgeHandler) { } else if (thingHandler instanceof GatewayBridgeHandler gatewayHandler) {
console.println("Generation 3 API gateway: " + thing.getLabel()); console.println("Generation 3 API gateway: " + thing.getLabel());
GatewayWebTargets webTargets = ((GatewayBridgeHandler) thingHandler).getWebTargets(); GatewayWebTargets webTargets = gatewayHandler.getWebTargets();
try { try {
List<Shade> shades = webTargets.getShades(); List<Shade> shades = webTargets.getShades();

View File

@@ -418,9 +418,9 @@ public class ShadeCapabilitiesDatabase {
* @param propertyValue * @param propertyValue
*/ */
public void logPropertyMismatch(String propertyKey, int type, int capabilities, boolean propertyValue) { public void logPropertyMismatch(String propertyKey, int type, int capabilities, boolean propertyValue) {
logger.warn( logger.warn("""
"The '{}:{}' property actually reported by shade 'type:{}' is different " The '{}:{}' property actually reported by shade 'type:{}' is different \
+ "than expected from its 'capabilities:{}' in the database!{}", than expected from its 'capabilities:{}' in the database!{}\
propertyKey, propertyValue, type, capabilities, REQUEST_DEVELOPERS_TO_UPDATE); """, propertyKey, propertyValue, type, capabilities, REQUEST_DEVELOPERS_TO_UPDATE);
} }
} }

View File

@@ -12,8 +12,8 @@
*/ */
package org.openhab.binding.hdpowerview.internal.discovery; package org.openhab.binding.hdpowerview.internal.discovery;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -55,7 +55,7 @@ public class HDPowerViewDeviceDiscoveryService extends AbstractDiscoveryService
private final ShadeCapabilitiesDatabase db = new ShadeCapabilitiesDatabase(); private final ShadeCapabilitiesDatabase db = new ShadeCapabilitiesDatabase();
public HDPowerViewDeviceDiscoveryService(HDPowerViewHubHandler hub) { public HDPowerViewDeviceDiscoveryService(HDPowerViewHubHandler hub) {
super(Collections.singleton(HDPowerViewBindingConstants.THING_TYPE_SHADE), 60, true); super(Set.of(HDPowerViewBindingConstants.THING_TYPE_SHADE), 60, true);
this.hub = hub; this.hub = hub;
this.scanner = createScanner(); this.scanner = createScanner();
} }

View File

@@ -14,7 +14,6 @@ package org.openhab.binding.hdpowerview.internal.discovery;
import static org.openhab.binding.hdpowerview.internal.HDPowerViewBindingConstants.*; import static org.openhab.binding.hdpowerview.internal.HDPowerViewBindingConstants.*;
import java.util.Collections;
import java.util.Set; import java.util.Set;
import javax.jmdns.ServiceInfo; import javax.jmdns.ServiceInfo;
@@ -46,7 +45,7 @@ public class HDPowerViewHubDiscoveryParticipant implements MDNSDiscoveryParticip
@Override @Override
public Set<ThingTypeUID> getSupportedThingTypeUIDs() { public Set<ThingTypeUID> getSupportedThingTypeUIDs() {
return Collections.singleton(THING_TYPE_HUB); return Set.of(THING_TYPE_HUB);
} }
@Override @Override

View File

@@ -15,7 +15,7 @@ package org.openhab.binding.hdpowerview.internal.discovery;
import static org.openhab.binding.hdpowerview.internal.HDPowerViewBindingConstants.*; import static org.openhab.binding.hdpowerview.internal.HDPowerViewBindingConstants.*;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.Collections; import java.util.Set;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -48,7 +48,7 @@ public class HDPowerViewHubDiscoveryService extends AbstractDiscoveryService {
private @Nullable ScheduledFuture<?> backgroundFuture; private @Nullable ScheduledFuture<?> backgroundFuture;
public HDPowerViewHubDiscoveryService() { public HDPowerViewHubDiscoveryService() {
super(Collections.singleton(THING_TYPE_HUB), 60, true); super(Set.of(THING_TYPE_HUB), 60, true);
scanner = createScanner(); scanner = createScanner();
} }

View File

@@ -12,7 +12,7 @@
*/ */
package org.openhab.binding.hdpowerview.internal.discovery; package org.openhab.binding.hdpowerview.internal.discovery;
import java.util.Collections; import java.util.Set;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -44,7 +44,7 @@ public class ShadeDiscoveryService extends AbstractDiscoveryService {
private @Nullable ScheduledFuture<?> backgroundFuture; private @Nullable ScheduledFuture<?> backgroundFuture;
public ShadeDiscoveryService(GatewayBridgeHandler hub) { public ShadeDiscoveryService(GatewayBridgeHandler hub) {
super(Collections.singleton(HDPowerViewBindingConstants.THING_TYPE_SHADE3), 60, true); super(Set.of(HDPowerViewBindingConstants.THING_TYPE_SHADE3), 60, true);
this.hub = hub; this.hub = hub;
this.scanner = createScanner(); this.scanner = createScanner();
} }

View File

@@ -85,8 +85,8 @@ public class ShadePosition {
if (shadeCapabilities.supportsPrimary() && shadeCapabilities.supportsSecondary()) { if (shadeCapabilities.supportsPrimary() && shadeCapabilities.supportsSecondary()) {
// on dual rail shades constrain percent to not move the lower rail above the upper // on dual rail shades constrain percent to not move the lower rail above the upper
State secondary = getState(shadeCapabilities, SECONDARY_POSITION); State secondary = getState(shadeCapabilities, SECONDARY_POSITION);
if (secondary instanceof PercentType) { if (secondary instanceof PercentType percentCommand) {
int secPercent = ((PercentType) secondary).intValue(); int secPercent = percentCommand.intValue();
if (percent < secPercent) { if (percent < secPercent) {
percent = secPercent; percent = secPercent;
} }
@@ -221,8 +221,8 @@ public class ShadePosition {
if (shadeCapabilities.supportsPrimary() && shadeCapabilities.supportsSecondary()) { if (shadeCapabilities.supportsPrimary() && shadeCapabilities.supportsSecondary()) {
// on dual rail shades constrain percent to not move the upper rail below the lower // on dual rail shades constrain percent to not move the upper rail below the lower
State primary = getState(shadeCapabilities, PRIMARY_POSITION); State primary = getState(shadeCapabilities, PRIMARY_POSITION);
if (primary instanceof PercentType) { if (primary instanceof PercentType percentCommand) {
int primaryPercent = ((PercentType) primary).intValue(); int primaryPercent = percentCommand.intValue();
if (percent > primaryPercent) { if (percent > primaryPercent) {
percent = primaryPercent; percent = primaryPercent;
} }

View File

@@ -20,5 +20,5 @@ package org.openhab.binding.hdpowerview.internal.dto.gen3;
public enum PowerType { public enum PowerType {
BATTERY, BATTERY,
HARDWIRED, HARDWIRED,
RECHARGEABLE; RECHARGEABLE
} }

View File

@@ -88,8 +88,8 @@ public class GatewayBridgeHandler extends BaseBridgeHandler {
@Override @Override
public void childHandlerInitialized(ThingHandler childHandler, Thing childThing) { public void childHandlerInitialized(ThingHandler childHandler, Thing childThing) {
if (childHandler instanceof ShadeThingHandler) { if (childHandler instanceof ShadeThingHandler shadeThingHandler) {
refreshShade(((ShadeThingHandler) childHandler).getShadeId()); refreshShade(shadeThingHandler.getShadeId());
} }
} }

View File

@@ -601,8 +601,8 @@ public class HDPowerViewHubHandler extends BaseBridgeHandler {
continue; continue;
} }
ThingHandler handler = thing.getHandler(); ThingHandler handler = thing.getHandler();
if (handler instanceof HDPowerViewShadeHandler) { if (handler instanceof HDPowerViewShadeHandler shadeHandler) {
((HDPowerViewShadeHandler) handler).requestRefreshShadePosition(); shadeHandler.requestRefreshShadePosition();
} else { } else {
int shadeId = item.getValue(); int shadeId = item.getValue();
logger.debug("Shade '{}' handler not initialized", shadeId); logger.debug("Shade '{}' handler not initialized", shadeId);
@@ -620,8 +620,8 @@ public class HDPowerViewHubHandler extends BaseBridgeHandler {
continue; continue;
} }
ThingHandler handler = thing.getHandler(); ThingHandler handler = thing.getHandler();
if (handler instanceof HDPowerViewShadeHandler) { if (handler instanceof HDPowerViewShadeHandler shadeHandler) {
((HDPowerViewShadeHandler) handler).requestRefreshShadeBatteryLevel(); shadeHandler.requestRefreshShadeBatteryLevel();
} else { } else {
int shadeId = item.getValue(); int shadeId = item.getValue();
logger.debug("Shade '{}' handler not initialized", shadeId); logger.debug("Shade '{}' handler not initialized", shadeId);

View File

@@ -193,8 +193,8 @@ public class HDPowerViewShadeHandler extends AbstractHubbedThingHandler {
HubShadeTimeoutException { HubShadeTimeoutException {
switch (channelId) { switch (channelId) {
case CHANNEL_SHADE_POSITION: case CHANNEL_SHADE_POSITION:
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
moveShade(PRIMARY_POSITION, ((PercentType) command).intValue(), webTargets, shadeId); moveShade(PRIMARY_POSITION, percentCommand.intValue(), webTargets, shadeId);
} else if (command instanceof UpDownType) { } else if (command instanceof UpDownType) {
moveShade(PRIMARY_POSITION, UpDownType.UP == command ? 0 : 100, webTargets, shadeId); moveShade(PRIMARY_POSITION, UpDownType.UP == command ? 0 : 100, webTargets, shadeId);
} else if (command instanceof StopMoveType) { } else if (command instanceof StopMoveType) {
@@ -207,16 +207,16 @@ public class HDPowerViewShadeHandler extends AbstractHubbedThingHandler {
break; break;
case CHANNEL_SHADE_VANE: case CHANNEL_SHADE_VANE:
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
moveShade(VANE_TILT_POSITION, ((PercentType) command).intValue(), webTargets, shadeId); moveShade(VANE_TILT_POSITION, percentCommand.intValue(), webTargets, shadeId);
} else if (command instanceof OnOffType) { } else if (command instanceof OnOffType) {
moveShade(VANE_TILT_POSITION, OnOffType.ON == command ? 100 : 0, webTargets, shadeId); moveShade(VANE_TILT_POSITION, OnOffType.ON == command ? 100 : 0, webTargets, shadeId);
} }
break; break;
case CHANNEL_SHADE_SECONDARY_POSITION: case CHANNEL_SHADE_SECONDARY_POSITION:
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
moveShade(SECONDARY_POSITION, ((PercentType) command).intValue(), webTargets, shadeId); moveShade(SECONDARY_POSITION, percentCommand.intValue(), webTargets, shadeId);
} else if (command instanceof UpDownType) { } else if (command instanceof UpDownType) {
moveShade(SECONDARY_POSITION, UpDownType.UP == command ? 0 : 100, webTargets, shadeId); moveShade(SECONDARY_POSITION, UpDownType.UP == command ? 0 : 100, webTargets, shadeId);
} else if (command instanceof StopMoveType) { } else if (command instanceof StopMoveType) {
@@ -229,11 +229,11 @@ public class HDPowerViewShadeHandler extends AbstractHubbedThingHandler {
break; break;
case CHANNEL_SHADE_COMMAND: case CHANNEL_SHADE_COMMAND:
if (command instanceof StringType) { if (command instanceof StringType stringCommand) {
if (COMMAND_IDENTIFY.equals(((StringType) command).toString())) { if (COMMAND_IDENTIFY.equals(stringCommand.toString())) {
logger.debug("Identify shade {}", shadeId); logger.debug("Identify shade {}", shadeId);
identifyShade(webTargets, shadeId); identifyShade(webTargets, shadeId);
} else if (COMMAND_CALIBRATE.equals(((StringType) command).toString())) { } else if (COMMAND_CALIBRATE.equals(stringCommand.toString())) {
logger.debug("Calibrate shade {}", shadeId); logger.debug("Calibrate shade {}", shadeId);
calibrateShade(webTargets, shadeId); calibrateShade(webTargets, shadeId);
} }

View File

@@ -116,8 +116,8 @@ public class ShadeThingHandler extends BaseThingHandler {
try { try {
switch (channelUID.getId()) { switch (channelUID.getId()) {
case CHANNEL_SHADE_POSITION: case CHANNEL_SHADE_POSITION:
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
position.setPosition(PRIMARY_POSITION, ((PercentType) command)); position.setPosition(PRIMARY_POSITION, percentCommand);
webTargets.moveShade(shadeId, new Shade().setShadePosition(position)); webTargets.moveShade(shadeId, new Shade().setShadePosition(position));
break; break;
} else if (command instanceof UpDownType) { } else if (command instanceof UpDownType) {
@@ -134,8 +134,8 @@ public class ShadeThingHandler extends BaseThingHandler {
throw new IllegalArgumentException(INVALID_COMMAND); throw new IllegalArgumentException(INVALID_COMMAND);
case CHANNEL_SHADE_SECONDARY_POSITION: case CHANNEL_SHADE_SECONDARY_POSITION:
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
position.setPosition(SECONDARY_POSITION, ((PercentType) command)); position.setPosition(SECONDARY_POSITION, percentCommand);
webTargets.moveShade(shadeId, new Shade().setShadePosition(position)); webTargets.moveShade(shadeId, new Shade().setShadePosition(position));
break; break;
} else if (command instanceof UpDownType) { } else if (command instanceof UpDownType) {
@@ -153,8 +153,8 @@ public class ShadeThingHandler extends BaseThingHandler {
throw new IllegalArgumentException(INVALID_COMMAND); throw new IllegalArgumentException(INVALID_COMMAND);
case CHANNEL_SHADE_VANE: case CHANNEL_SHADE_VANE:
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
position.setPosition(VANE_TILT_POSITION, ((PercentType) command)); position.setPosition(VANE_TILT_POSITION, percentCommand);
webTargets.moveShade(shadeId, new Shade().setShadePosition(position)); webTargets.moveShade(shadeId, new Shade().setShadePosition(position));
break; break;
} else if (command instanceof UpDownType) { } else if (command instanceof UpDownType) {
@@ -166,7 +166,8 @@ public class ShadeThingHandler extends BaseThingHandler {
throw new IllegalArgumentException(INVALID_COMMAND); throw new IllegalArgumentException(INVALID_COMMAND);
case CHANNEL_SHADE_COMMAND: case CHANNEL_SHADE_COMMAND:
if ((command instanceof StringType) && COMMAND_IDENTIFY.equals(((StringType) command).toString())) { if ((command instanceof StringType stringCommand)
&& COMMAND_IDENTIFY.equals(stringCommand.toString())) {
webTargets.jogShade(shadeId); webTargets.jogShade(shadeId);
break; break;
} }

View File

@@ -24,6 +24,7 @@ import org.openhab.core.i18n.LocaleProvider;
*/ */
@NonNullByDefault @NonNullByDefault
public class MockedLocaleProvider implements LocaleProvider { public class MockedLocaleProvider implements LocaleProvider {
@Override
public Locale getLocale() { public Locale getLocale() {
return Locale.ENGLISH; return Locale.ENGLISH;
} }

View File

@@ -209,15 +209,15 @@ public class HeliosHandler221 extends BaseThingHandler {
if (logger.isTraceEnabled()) { if (logger.isTraceEnabled()) {
logger.trace("initialize() Request : {}", systemTarget.resolveTemplate("ip", ipAddress) logger.trace("initialize() Request : {}", systemTarget.resolveTemplate("ip", ipAddress)
.resolveTemplate("cmd", INFO).getUri().toASCIIString()); .resolveTemplate("cmd", INFO).getUri().toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("initialize() Response: {}", jsonObject.get("result")); logger.trace("initialize() Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("initialize() Response: {}", jsonObject.get("error")); logger.trace("initialize() Response: {}", jsonObject.get("error"));
} }
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
RESTError error = gson.fromJson(jsonObject.get("error").toString(), RESTError.class); RESTError error = gson.fromJson(jsonObject.get("error").toString(), RESTError.class);
logger.debug( logger.debug(
"An error occurred while communicating with the Helios IP Vario '{}': code '{}', param '{}' : '{}'", "An error occurred while communicating with the Helios IP Vario '{}': code '{}', param '{}' : '{}'",
@@ -228,7 +228,7 @@ public class HeliosHandler221 extends BaseThingHandler {
return; return;
} }
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
if (logJob == null || logJob.isCancelled()) { if (logJob == null || logJob.isCancelled()) {
logJob = scheduler.scheduleWithFixedDelay(logRunnable, 0, 1, TimeUnit.SECONDS); logJob = scheduler.scheduleWithFixedDelay(logRunnable, 0, 1, TimeUnit.SECONDS);
} }
@@ -316,15 +316,15 @@ public class HeliosHandler221 extends BaseThingHandler {
logTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", SUBSCRIBE) logTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", SUBSCRIBE)
.queryParam("include", "new").queryParam("duration", HELIOS_DURATION).getUri() .queryParam("include", "new").queryParam("duration", HELIOS_DURATION).getUri()
.toASCIIString()); .toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("subscribe() Response: {}", jsonObject.get("result")); logger.trace("subscribe() Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("subscribe() Response: {}", jsonObject.get("error")); logger.trace("subscribe() Response: {}", jsonObject.get("error"));
} }
} }
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
RESTSubscribeResponse subscribeResponse = gson.fromJson(jsonObject.get("result").toString(), RESTSubscribeResponse subscribeResponse = gson.fromJson(jsonObject.get("result").toString(),
RESTSubscribeResponse.class); RESTSubscribeResponse.class);
logger.debug("The subscription id to pull logs from the Helios IP Vario '{}' is '{}'", logger.debug("The subscription id to pull logs from the Helios IP Vario '{}' is '{}'",
@@ -377,15 +377,15 @@ public class HeliosHandler221 extends BaseThingHandler {
logger.trace("unsubscribe() Request : {}", logger.trace("unsubscribe() Request : {}",
logTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", UNSUBSCRIBE) logTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", UNSUBSCRIBE)
.queryParam("id", logSubscriptionID).getUri().toASCIIString()); .queryParam("id", logSubscriptionID).getUri().toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("unsubscribe() Response: {}", jsonObject.get("result")); logger.trace("unsubscribe() Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("unsubscribe() Response: {}", jsonObject.get("error")); logger.trace("unsubscribe() Response: {}", jsonObject.get("error"));
} }
} }
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.debug("Successfully unsubscribed from the log entries of the Helios IP Vario '{}'", logger.debug("Successfully unsubscribed from the log entries of the Helios IP Vario '{}'",
getThing().getUID().toString()); getThing().getUID().toString());
} else { } else {
@@ -439,15 +439,15 @@ public class HeliosHandler221 extends BaseThingHandler {
logTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", PULL) logTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", PULL)
.queryParam("id", logSubscriptionID).queryParam("timeout", HELIOS_PULL_DURATION) .queryParam("id", logSubscriptionID).queryParam("timeout", HELIOS_PULL_DURATION)
.getUri().toASCIIString()); .getUri().toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("pullLog() Response: {}", jsonObject.get("result")); logger.trace("pullLog() Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("pullLog() Response: {}", jsonObject.get("error")); logger.trace("pullLog() Response: {}", jsonObject.get("error"));
} }
} }
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("Successfully pulled log entries from the Helios IP Vario '{}'", logger.trace("Successfully pulled log entries from the Helios IP Vario '{}'",
getThing().getUID().toString()); getThing().getUID().toString());
JsonObject js = (JsonObject) jsonObject.get("result"); JsonObject js = (JsonObject) jsonObject.get("result");
@@ -499,15 +499,15 @@ public class HeliosHandler221 extends BaseThingHandler {
if (logger.isTraceEnabled()) { if (logger.isTraceEnabled()) {
logger.trace("getSwitches() Request : {}", switchTarget.resolveTemplate("ip", ipAddress) logger.trace("getSwitches() Request : {}", switchTarget.resolveTemplate("ip", ipAddress)
.resolveTemplate("cmd", CAPABILITIES).getUri().toASCIIString()); .resolveTemplate("cmd", CAPABILITIES).getUri().toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("getSwitches() Response: {}", jsonObject.get("result")); logger.trace("getSwitches() Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("getSwitches() Response: {}", jsonObject.get("error")); logger.trace("getSwitches() Response: {}", jsonObject.get("error"));
} }
} }
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.debug("Successfully requested switch capabilities from the Helios IP Vario '{}'", logger.debug("Successfully requested switch capabilities from the Helios IP Vario '{}'",
getThing().getUID().toString()); getThing().getUID().toString());
String result = jsonObject.get("result").toString(); String result = jsonObject.get("result").toString();
@@ -566,15 +566,15 @@ public class HeliosHandler221 extends BaseThingHandler {
logger.trace("triggerSwitch() Request : {}", logger.trace("triggerSwitch() Request : {}",
switchTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", CONTROL) switchTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", CONTROL)
.queryParam("switch", id).queryParam("action", "trigger").getUri().toASCIIString()); .queryParam("switch", id).queryParam("action", "trigger").getUri().toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("triggerSwitch() Response: {}", jsonObject.get("result")); logger.trace("triggerSwitch() Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("triggerSwitch() Response: {}", jsonObject.get("error")); logger.trace("triggerSwitch() Response: {}", jsonObject.get("error"));
} }
} }
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.debug("Successfully triggered a switch on the Helios IP Vario '{}'", logger.debug("Successfully triggered a switch on the Helios IP Vario '{}'",
getThing().getUID().toString()); getThing().getUID().toString());
} else { } else {
@@ -622,15 +622,15 @@ public class HeliosHandler221 extends BaseThingHandler {
switchTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", CONTROL) switchTarget.resolveTemplate("ip", ipAddress).resolveTemplate("cmd", CONTROL)
.queryParam("switch", id).queryParam("action", flag ? "on" : "off").getUri() .queryParam("switch", id).queryParam("action", flag ? "on" : "off").getUri()
.toASCIIString()); .toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("enableSwitch() Response: {}", jsonObject.get("result")); logger.trace("enableSwitch() Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("enableSwitch() Response: {}", jsonObject.get("error")); logger.trace("enableSwitch() Response: {}", jsonObject.get("error"));
} }
} }
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.debug("Successfully dis/enabled a switch on the Helios IP Vario '{}'", logger.debug("Successfully dis/enabled a switch on the Helios IP Vario '{}'",
getThing().getUID().toString()); getThing().getUID().toString());
} else { } else {
@@ -675,15 +675,15 @@ public class HeliosHandler221 extends BaseThingHandler {
if (logger.isTraceEnabled()) { if (logger.isTraceEnabled()) {
logger.trace("getPorts() Request : {}", portTarget.resolveTemplate("ip", ipAddress) logger.trace("getPorts() Request : {}", portTarget.resolveTemplate("ip", ipAddress)
.resolveTemplate("cmd", CAPABILITIES).getUri().toASCIIString()); .resolveTemplate("cmd", CAPABILITIES).getUri().toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("getPorts() Response: {}", jsonObject.get("result")); logger.trace("getPorts() Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("getPorts() Response: {}", jsonObject.get("error")); logger.trace("getPorts() Response: {}", jsonObject.get("error"));
} }
} }
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.debug("Successfully requested port capabilities from the Helios IP Vario '{}'", logger.debug("Successfully requested port capabilities from the Helios IP Vario '{}'",
getThing().getUID().toString()); getThing().getUID().toString());
JsonObject js = (JsonObject) jsonObject.get("result"); JsonObject js = (JsonObject) jsonObject.get("result");
@@ -743,10 +743,10 @@ public class HeliosHandler221 extends BaseThingHandler {
if (logger.isTraceEnabled()) { if (logger.isTraceEnabled()) {
logger.trace("configureRunnable Request : {}", systemTarget.resolveTemplate("ip", ipAddress) logger.trace("configureRunnable Request : {}", systemTarget.resolveTemplate("ip", ipAddress)
.resolveTemplate("cmd", INFO).getUri().toASCIIString()); .resolveTemplate("cmd", INFO).getUri().toASCIIString());
if (jsonObject.get("success").toString().equals("true")) { if ("true".equals(jsonObject.get("success").toString())) {
logger.trace("configureRunnable Response: {}", jsonObject.get("result")); logger.trace("configureRunnable Response: {}", jsonObject.get("result"));
} }
if (jsonObject.get("success").toString().equals("false")) { if ("false".equals(jsonObject.get("success").toString())) {
logger.trace("configureRunnable Response: {}", jsonObject.get("error")); logger.trace("configureRunnable Response: {}", jsonObject.get("error"));
} }
} }
@@ -767,7 +767,7 @@ public class HeliosHandler221 extends BaseThingHandler {
if (switches != null) { if (switches != null) {
for (RESTSwitch aSwitch : switches) { for (RESTSwitch aSwitch : switches) {
if (aSwitch.enabled.equals("true")) { if ("true".equals(aSwitch.enabled)) {
logger.debug("Adding a channel to the Helios IP Vario '{}' for the switch with id '{}'", logger.debug("Adding a channel to the Helios IP Vario '{}' for the switch with id '{}'",
getThing().getUID().toString(), aSwitch.id); getThing().getUID().toString(), aSwitch.id);
ThingBuilder thingBuilder = editThing(); ThingBuilder thingBuilder = editThing();
@@ -852,9 +852,9 @@ public class HeliosHandler221 extends BaseThingHandler {
break; break;
} }
case AUDIOLOOPTEST: { case AUDIOLOOPTEST: {
if (event.params.get("result").getAsString().equals("passed")) { if ("passed".equals(event.params.get("result").getAsString())) {
updateState(AUDIO_LOOP_TEST, OnOffType.ON); updateState(AUDIO_LOOP_TEST, OnOffType.ON);
} else if (event.params.get("result").getAsString().equals("failed")) { } else if ("failed".equals(event.params.get("result").getAsString())) {
updateState(AUDIO_LOOP_TEST, OnOffType.OFF); updateState(AUDIO_LOOP_TEST, OnOffType.OFF);
} else { } else {
updateState(AUDIO_LOOP_TEST, UnDefType.UNDEF); updateState(AUDIO_LOOP_TEST, UnDefType.UNDEF);
@@ -864,9 +864,9 @@ public class HeliosHandler221 extends BaseThingHandler {
break; break;
} }
case MOTIONDETECTED: { case MOTIONDETECTED: {
if (event.params.get("state").getAsString().equals("in")) { if ("in".equals(event.params.get("state").getAsString())) {
updateState(MOTION, OnOffType.ON); updateState(MOTION, OnOffType.ON);
} else if (event.params.get("state").getAsString().equals("out")) { } else if ("out".equals(event.params.get("state").getAsString())) {
updateState(MOTION, OnOffType.OFF); updateState(MOTION, OnOffType.OFF);
} else { } else {
updateState(MOTION, UnDefType.UNDEF); updateState(MOTION, UnDefType.UNDEF);
@@ -876,9 +876,9 @@ public class HeliosHandler221 extends BaseThingHandler {
break; break;
} }
case NOISEDETECTED: { case NOISEDETECTED: {
if (event.params.get("state").getAsString().equals("in")) { if ("in".equals(event.params.get("state").getAsString())) {
updateState(NOISE, OnOffType.ON); updateState(NOISE, OnOffType.ON);
} else if (event.params.get("state").getAsString().equals("out")) { } else if ("out".equals(event.params.get("state").getAsString())) {
updateState(NOISE, OnOffType.OFF); updateState(NOISE, OnOffType.OFF);
} else { } else {
updateState(NOISE, UnDefType.UNDEF); updateState(NOISE, UnDefType.UNDEF);
@@ -902,9 +902,9 @@ public class HeliosHandler221 extends BaseThingHandler {
case CODEENTERED: { case CODEENTERED: {
triggerChannel(CODE, event.params.get("code").getAsString()); triggerChannel(CODE, event.params.get("code").getAsString());
if (event.params.get("valid").getAsString().equals("true")) { if ("true".equals(event.params.get("valid").getAsString())) {
updateState(CODE_VALID, OnOffType.ON); updateState(CODE_VALID, OnOffType.ON);
} else if (event.params.get("valid").getAsString().equals("false")) { } else if ("false".equals(event.params.get("valid").getAsString())) {
updateState(CODE_VALID, OnOffType.OFF); updateState(CODE_VALID, OnOffType.OFF);
} else { } else {
updateState(CODE_VALID, UnDefType.UNDEF); updateState(CODE_VALID, UnDefType.UNDEF);
@@ -916,9 +916,9 @@ public class HeliosHandler221 extends BaseThingHandler {
case CARDENTERED: { case CARDENTERED: {
triggerChannel(CARD, event.params.get("uid").getAsString()); triggerChannel(CARD, event.params.get("uid").getAsString());
if (event.params.get("valid").getAsString().equals("true")) { if ("true".equals(event.params.get("valid").getAsString())) {
updateState(CARD_VALID, OnOffType.ON); updateState(CARD_VALID, OnOffType.ON);
} else if (event.params.get("valid").getAsString().equals("false")) { } else if ("false".equals(event.params.get("valid").getAsString())) {
updateState(CARD_VALID, OnOffType.OFF); updateState(CARD_VALID, OnOffType.OFF);
} else { } else {
updateState(CARD_VALID, UnDefType.UNDEF); updateState(CARD_VALID, UnDefType.UNDEF);
@@ -931,9 +931,9 @@ public class HeliosHandler221 extends BaseThingHandler {
ChannelUID inputChannel = new ChannelUID(getThing().getUID(), ChannelUID inputChannel = new ChannelUID(getThing().getUID(),
"io" + event.params.get("port").getAsString()); "io" + event.params.get("port").getAsString());
if (event.params.get("state").getAsString().equals("true")) { if ("true".equals(event.params.get("state").getAsString())) {
updateState(inputChannel, OnOffType.ON); updateState(inputChannel, OnOffType.ON);
} else if (event.params.get("state").getAsString().equals("false")) { } else if ("false".equals(event.params.get("state").getAsString())) {
updateState(inputChannel, OnOffType.OFF); updateState(inputChannel, OnOffType.OFF);
} else { } else {
updateState(inputChannel, UnDefType.UNDEF); updateState(inputChannel, UnDefType.UNDEF);
@@ -944,9 +944,9 @@ public class HeliosHandler221 extends BaseThingHandler {
ChannelUID inputChannel = new ChannelUID(getThing().getUID(), ChannelUID inputChannel = new ChannelUID(getThing().getUID(),
"io" + event.params.get("port").getAsString()); "io" + event.params.get("port").getAsString());
if (event.params.get("state").getAsString().equals("true")) { if ("true".equals(event.params.get("state").getAsString())) {
updateState(inputChannel, OnOffType.ON); updateState(inputChannel, OnOffType.ON);
} else if (event.params.get("state").getAsString().equals("false")) { } else if ("false".equals(event.params.get("state").getAsString())) {
updateState(inputChannel, OnOffType.OFF); updateState(inputChannel, OnOffType.OFF);
} else { } else {
updateState(inputChannel, UnDefType.UNDEF); updateState(inputChannel, UnDefType.UNDEF);
@@ -967,9 +967,9 @@ public class HeliosHandler221 extends BaseThingHandler {
break; break;
} }
case SWITCHSTATECHANGED: { case SWITCHSTATECHANGED: {
if (event.params.get("state").getAsString().equals("true")) { if ("true".equals(event.params.get("state").getAsString())) {
updateState(SWITCH_STATE, OnOffType.ON); updateState(SWITCH_STATE, OnOffType.ON);
} else if (event.params.get("state").getAsString().equals("false")) { } else if ("false".equals(event.params.get("state").getAsString())) {
updateState(SWITCH_STATE, OnOffType.OFF); updateState(SWITCH_STATE, OnOffType.OFF);
} else { } else {
updateState(SWITCH_STATE, UnDefType.UNDEF); updateState(SWITCH_STATE, UnDefType.UNDEF);

View File

@@ -14,7 +14,6 @@ package org.openhab.binding.heliosventilation.internal;
import static org.openhab.binding.heliosventilation.internal.HeliosVentilationBindingConstants.THING_TYPE_HELIOS_VENTILATION; import static org.openhab.binding.heliosventilation.internal.HeliosVentilationBindingConstants.THING_TYPE_HELIOS_VENTILATION;
import java.util.Collections;
import java.util.Set; import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -39,8 +38,7 @@ import org.osgi.service.component.annotations.Reference;
@Component(configurationPid = "binding.heliosventilation", service = ThingHandlerFactory.class) @Component(configurationPid = "binding.heliosventilation", service = ThingHandlerFactory.class)
public class HeliosVentilationHandlerFactory extends BaseThingHandlerFactory { public class HeliosVentilationHandlerFactory extends BaseThingHandlerFactory {
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Collections private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_HELIOS_VENTILATION);
.singleton(THING_TYPE_HELIOS_VENTILATION);
private final SerialPortManager serialPortManager; private final SerialPortManager serialPortManager;

View File

@@ -43,8 +43,8 @@ public class HeosActions implements ThingActions {
@Override @Override
public void setThingHandler(@Nullable ThingHandler handler) { public void setThingHandler(@Nullable ThingHandler handler) {
if (handler instanceof HeosBridgeHandler) { if (handler instanceof HeosBridgeHandler bridgeHandler) {
this.handler = (HeosBridgeHandler) handler; this.handler = bridgeHandler;
} }
} }

View File

@@ -14,7 +14,6 @@ package org.openhab.binding.heos.internal.discovery;
import static org.openhab.binding.heos.internal.HeosBindingConstants.*; import static org.openhab.binding.heos.internal.HeosBindingConstants.*;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -48,7 +47,7 @@ public class HeosDiscoveryParticipant implements UpnpDiscoveryParticipant {
@Override @Override
public Set<ThingTypeUID> getSupportedThingTypeUIDs() { public Set<ThingTypeUID> getSupportedThingTypeUIDs() {
return Collections.singleton(THING_TYPE_BRIDGE); return Set.of(THING_TYPE_BRIDGE);
} }
@Override @Override

View File

@@ -19,7 +19,6 @@ import static org.openhab.core.thing.ThingStatus.ONLINE;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -220,9 +219,8 @@ public class HeosBridgeHandler extends BaseBridgeHandler implements HeosEventLis
try { try {
@Nullable @Nullable
ThingHandler handler = thing.getHandler(); ThingHandler handler = thing.getHandler();
if (handler instanceof HeosThingBaseHandler) { if (handler instanceof HeosThingBaseHandler heosHandler) {
Set<String> target = handler instanceof HeosPlayerHandler ? players : groups; Set<String> target = handler instanceof HeosPlayerHandler ? players : groups;
HeosThingBaseHandler heosHandler = (HeosThingBaseHandler) handler;
String id = heosHandler.getId(); String id = heosHandler.getId();
if (target.contains(id)) { if (target.contains(id)) {
@@ -303,12 +301,12 @@ public class HeosBridgeHandler extends BaseBridgeHandler implements HeosEventLis
} else if (childHandler instanceof HeosPlayerHandler) { } else if (childHandler instanceof HeosPlayerHandler) {
String channelIdentifier = "P" + childThing.getUID().getId(); String channelIdentifier = "P" + childThing.getUID().getId();
updateThingChannels(channelManager.removeSingleChannel(channelIdentifier)); updateThingChannels(channelManager.removeSingleChannel(channelIdentifier));
} else if (childHandler instanceof HeosGroupHandler) { } else if (childHandler instanceof HeosGroupHandler groupHandler) {
String channelIdentifier = "G" + childThing.getUID().getId(); String channelIdentifier = "G" + childThing.getUID().getId();
updateThingChannels(channelManager.removeSingleChannel(channelIdentifier)); updateThingChannels(channelManager.removeSingleChannel(channelIdentifier));
// removes the handler from the groupMemberMap that handler is no longer called // removes the handler from the groupMemberMap that handler is no longer called
// if group is getting online // if group is getting online
removeGroupHandlerInformation((HeosGroupHandler) childHandler); removeGroupHandlerInformation(groupHandler);
} }
} }
@@ -361,13 +359,13 @@ public class HeosBridgeHandler extends BaseBridgeHandler implements HeosEventLis
String pid = ""; String pid = "";
@Nullable @Nullable
ThingHandler handler = childThing.getHandler(); ThingHandler handler = childThing.getHandler();
if (handler instanceof HeosPlayerHandler) { if (handler instanceof HeosPlayerHandler playerHandler) {
channelIdentifier = "P" + childThing.getUID().getId(); channelIdentifier = "P" + childThing.getUID().getId();
pid = ((HeosPlayerHandler) handler).getId(); pid = playerHandler.getId();
} else if (handler instanceof HeosGroupHandler) { } else if (handler instanceof HeosGroupHandler groupHandler) {
channelIdentifier = "G" + childThing.getUID().getId(); channelIdentifier = "G" + childThing.getUID().getId();
if (groupId == null) { if (groupId == null) {
pid = ((HeosGroupHandler) handler).getId(); pid = groupHandler.getId();
} else { } else {
pid = groupId; pid = groupId;
} }
@@ -520,7 +518,7 @@ public class HeosBridgeHandler extends BaseBridgeHandler implements HeosEventLis
@Override @Override
public Collection<Class<? extends ThingHandlerService>> getServices() { public Collection<Class<? extends ThingHandlerService>> getServices() {
return Collections.singletonList(HeosActions.class); return List.of(HeosActions.class);
} }
public void registerMediaEventListener(HeosMediaEventListener heosMediaEventListener) { public void registerMediaEventListener(HeosMediaEventListener heosMediaEventListener) {

View File

@@ -387,16 +387,16 @@ public abstract class HeosThingBaseHandler extends BaseThingHandler implements H
case GET_NOW_PLAYING_MEDIA: case GET_NOW_PLAYING_MEDIA:
@Nullable @Nullable
T mediaPayload = responseObject.payload; T mediaPayload = responseObject.payload;
if (mediaPayload instanceof Media) { if (mediaPayload instanceof Media media) {
handleThingMediaUpdate((Media) mediaPayload); handleThingMediaUpdate(media);
} }
break; break;
case GET_PLAYER_INFO: case GET_PLAYER_INFO:
@Nullable @Nullable
T playerPayload = responseObject.payload; T playerPayload = responseObject.payload;
if (playerPayload instanceof Player) { if (playerPayload instanceof Player player) {
handlePlayerInfo((Player) playerPayload); handlePlayerInfo(player);
} }
break; break;
} }

View File

@@ -166,8 +166,8 @@ public class Telnet {
throw new ReadException(e); throw new ReadException(e);
} catch (ExecutionException e) { } catch (ExecutionException e) {
Throwable cause = e.getCause(); Throwable cause = e.getCause();
if (cause instanceof IOException) { if (cause instanceof IOException exception) {
throw (IOException) cause; throw exception;
} else { } else {
throw new ReadException(cause); throw new ReadException(cause);
} }

View File

@@ -138,9 +138,11 @@ public class HeosJsonParserResponseTest {
@Test @Test
public void get_players() { public void get_players() {
HeosResponseObject<Player[]> response = subject.parseResponse( HeosResponseObject<Player[]> response = subject.parseResponse(
"{\"heos\": {\"command\": \"player/get_players\", \"result\": \"success\", \"message\": \"\"}, \"payload\": [" """
+ "{\"name\": \"Kantoor HEOS 3\", \"pid\": -831584083, \"model\": \"HEOS 3\", \"version\": \"1.520.200\", \"ip\": \"192.168.1.230\", \"network\": \"wired\", \"lineout\": 0, \"serial\": \"ACNG9180110887\"}, " {"heos": {"command": "player/get_players", "result": "success", "message": ""}, "payload": [\
+ "{\"name\": \"HEOS Bar\", \"pid\": 1958912779, \"model\": \"HEOS Bar\", \"version\": \"1.520.200\", \"ip\": \"192.168.1.195\", \"network\": \"wired\", \"lineout\": 0, \"serial\": \"ADAG9180917029\"}]}", {"name": "Kantoor HEOS 3", "pid": -831584083, "model": "HEOS 3", "version": "1.520.200", "ip": "192.168.1.230", "network": "wired", "lineout": 0, "serial": "ACNG9180110887"}, \
{"name": "HEOS Bar", "pid": 1958912779, "model": "HEOS Bar", "version": "1.520.200", "ip": "192.168.1.195", "network": "wired", "lineout": 0, "serial": "ADAG9180917029"}]}\
""",
Player[].class); Player[].class);
assertEquals(HeosCommandGroup.PLAYER, response.heosCommand.commandGroup); assertEquals(HeosCommandGroup.PLAYER, response.heosCommand.commandGroup);
@@ -194,8 +196,10 @@ public class HeosJsonParserResponseTest {
@Test @Test
public void get_now_playing_media() { public void get_now_playing_media() {
HeosResponseObject<Media> response = subject.parseResponse( HeosResponseObject<Media> response = subject.parseResponse(
"{\"heos\": {\"command\": \"player/get_now_playing_media\", \"result\": \"success\", \"message\": \"pid=1958912779\"}, \"payload\": " """
+ "{\"type\": \"song\", \"song\": \"Solo (feat. Demi Lovato)\", \"album\": \"What Is Love? (Deluxe)\", \"artist\": \"Clean Bandit\", \"image_url\": \"http://192.168.1.230:8015//m-browsableMediaUri/getImageFromTag/mnt/326C72A3E307501E47DE2B0F47D90EB8/Clean%20Bandit/What%20Is%20Love_%20(Deluxe)/03%20Solo%20(feat.%20Demi%20Lovato).m4a\", \"album_id\": \"\", \"mid\": \"http://192.168.1.230:8015/m-1c176905-f6c7-d168-dc35-86b4735c5976/Clean+Bandit/What+Is+Love_+(Deluxe)/03+Solo+(feat.+Demi+Lovato).m4a\", \"qid\": 1, \"sid\": 1024}, \"options\": []}\n", {"heos": {"command": "player/get_now_playing_media", "result": "success", "message": "pid=1958912779"}, "payload": \
{"type": "song", "song": "Solo (feat. Demi Lovato)", "album": "What Is Love? (Deluxe)", "artist": "Clean Bandit", "image_url": "http://192.168.1.230:8015//m-browsableMediaUri/getImageFromTag/mnt/326C72A3E307501E47DE2B0F47D90EB8/Clean%20Bandit/What%20Is%20Love_%20(Deluxe)/03%20Solo%20(feat.%20Demi%20Lovato).m4a", "album_id": "", "mid": "http://192.168.1.230:8015/m-1c176905-f6c7-d168-dc35-86b4735c5976/Clean+Bandit/What+Is+Love_+(Deluxe)/03+Solo+(feat.+Demi+Lovato).m4a", "qid": 1, "sid": 1024}, "options": []}
""",
Media.class); Media.class);
assertEquals(HeosCommandGroup.PLAYER, response.heosCommand.commandGroup); assertEquals(HeosCommandGroup.PLAYER, response.heosCommand.commandGroup);
@@ -222,13 +226,15 @@ public class HeosJsonParserResponseTest {
@Test @Test
public void browse_playlist() { public void browse_playlist() {
HeosResponseObject<BrowseResult[]> response = subject.parseResponse( HeosResponseObject<BrowseResult[]> response = subject.parseResponse(
"{\"heos\": {\"command\": \"browse/browse\", \"result\": \"success\", \"message\": \"sid=1025&returned=6&count=6\"}, \"payload\": [" """
+ "{\"container\": \"yes\", \"type\": \"playlist\", \"cid\": \"132562\", \"playable\": \"yes\", \"name\": \"Maaike Ouboter - En hoe het dan ook weer dag wordt\", \"image_url\": \"\"}, " {"heos": {"command": "browse/browse", "result": "success", "message": "sid=1025&returned=6&count=6"}, "payload": [\
+ "{\"container\": \"yes\", \"type\": \"playlist\", \"cid\": \"132563\", \"playable\": \"yes\", \"name\": \"Maaike Ouboter - Vanaf nu is het van jou\", \"image_url\": \"\"}, " {"container": "yes", "type": "playlist", "cid": "132562", "playable": "yes", "name": "Maaike Ouboter - En hoe het dan ook weer dag wordt", "image_url": ""}, \
+ "{\"container\": \"yes\", \"type\": \"playlist\", \"cid\": \"162887\", \"playable\": \"yes\", \"name\": \"Easy listening\", \"image_url\": \"\"}, " {"container": "yes", "type": "playlist", "cid": "132563", "playable": "yes", "name": "Maaike Ouboter - Vanaf nu is het van jou", "image_url": ""}, \
+ "{\"container\": \"yes\", \"type\": \"playlist\", \"cid\": \"174461\", \"playable\": \"yes\", \"name\": \"Nieuwe muziek 5-2019\", \"image_url\": \"\"}, " {"container": "yes", "type": "playlist", "cid": "162887", "playable": "yes", "name": "Easy listening", "image_url": ""}, \
+ "{\"container\": \"yes\", \"type\": \"playlist\", \"cid\": \"194000\", \"playable\": \"yes\", \"name\": \"Nieuwe muziek 2019-05\", \"image_url\": \"\"}, " {"container": "yes", "type": "playlist", "cid": "174461", "playable": "yes", "name": "Nieuwe muziek 5-2019", "image_url": ""}, \
+ "{\"container\": \"yes\", \"type\": \"playlist\", \"cid\": \"194001\", \"playable\": \"yes\", \"name\": \"Clean Bandit\", \"image_url\": \"\"}]}", {"container": "yes", "type": "playlist", "cid": "194000", "playable": "yes", "name": "Nieuwe muziek 2019-05", "image_url": ""}, \
{"container": "yes", "type": "playlist", "cid": "194001", "playable": "yes", "name": "Clean Bandit", "image_url": ""}]}\
""",
BrowseResult[].class); BrowseResult[].class);
assertEquals(HeosCommandGroup.BROWSE, response.heosCommand.commandGroup); assertEquals(HeosCommandGroup.BROWSE, response.heosCommand.commandGroup);
@@ -252,11 +258,13 @@ public class HeosJsonParserResponseTest {
@Test @Test
public void browse_favorites() { public void browse_favorites() {
HeosResponseObject<BrowseResult[]> response = subject.parseResponse( HeosResponseObject<BrowseResult[]> response = subject.parseResponse(
"{\"heos\": {\"command\": \"browse/browse\", \"result\": \"success\", \"message\": \"sid=1028&returned=3&count=3\"}, \"payload\": [" """
+ "{\"container\": \"no\", \"mid\": \"s6707\", \"type\": \"station\", \"playable\": \"yes\", \"name\": \"NPO 3FM 96.8 (Top 40 %26 Pop Music)\", \"image_url\": \"http://cdn-profiles.tunein.com/s6707/images/logoq.png?t=636268\"}, " {"heos": {"command": "browse/browse", "result": "success", "message": "sid=1028&returned=3&count=3"}, "payload": [\
+ "{\"container\": \"no\", \"mid\": \"s2967\", \"type\": \"station\", \"playable\": \"yes\", \"name\": \"Classic FM Nederland (Classical Music)\", \"image_url\": \"http://cdn-radiotime-logos.tunein.com/s2967q.png\"}, " {"container": "no", "mid": "s6707", "type": "station", "playable": "yes", "name": "NPO 3FM 96.8 (Top 40 %26 Pop Music)", "image_url": "http://cdn-profiles.tunein.com/s6707/images/logoq.png?t=636268"}, \
+ "{\"container\": \"no\", \"mid\": \"s1993\", \"type\": \"station\", \"playable\": \"yes\", \"name\": \"BNR Nieuwsradio\", \"image_url\": \"http://cdn-radiotime-logos.tunein.com/s1993q.png\"}], " {"container": "no", "mid": "s2967", "type": "station", "playable": "yes", "name": "Classic FM Nederland (Classical Music)", "image_url": "http://cdn-radiotime-logos.tunein.com/s2967q.png"}, \
+ "\"options\": [{\"browse\": [{\"id\": 20, \"name\": \"Remove from HEOS Favorites\"}]}]}", {"container": "no", "mid": "s1993", "type": "station", "playable": "yes", "name": "BNR Nieuwsradio", "image_url": "http://cdn-radiotime-logos.tunein.com/s1993q.png"}], \
"options": [{"browse": [{"id": 20, "name": "Remove from HEOS Favorites"}]}]}\
""",
BrowseResult[].class); BrowseResult[].class);
assertEquals(HeosCommandGroup.BROWSE, response.heosCommand.commandGroup); assertEquals(HeosCommandGroup.BROWSE, response.heosCommand.commandGroup);
@@ -282,9 +290,11 @@ public class HeosJsonParserResponseTest {
@Test @Test
public void get_groups() { public void get_groups() {
HeosResponseObject<Group[]> response = subject.parseResponse( HeosResponseObject<Group[]> response = subject.parseResponse(
"{\"heos\": {\"command\": \"group/get_groups\", \"result\": \"success\", \"message\": \"\"}, \"payload\": [ " """
+ "{\"name\": \"Group 1\", \"gid\": \"214243242\", \"players\": [ {\"name\": \"HEOS 1\", \"pid\": \"2142443242\", \"role\": \"leader\"}, {\"name\": \"HEOS 3\", \"pid\": \"32432423432\", \"role\": \"member\"}, {\"name\": \"HEOS 5\", \"pid\": \"342423564\", \"role\": \"member\"}]}, " {"heos": {"command": "group/get_groups", "result": "success", "message": ""}, "payload": [ \
+ "{\"name\": \"Group 2\", \"gid\": \"2142432342\", \"players\": [ {\"name\": \"HEOS 3\", \"pid\": \"32432423432\", \"role\": \"member\"}, {\"name\": \"HEOS 5\", \"pid\": \"342423564\", \"role\": \"member\"}]}]}", {"name": "Group 1", "gid": "214243242", "players": [ {"name": "HEOS 1", "pid": "2142443242", "role": "leader"}, {"name": "HEOS 3", "pid": "32432423432", "role": "member"}, {"name": "HEOS 5", "pid": "342423564", "role": "member"}]}, \
{"name": "Group 2", "gid": "2142432342", "players": [ {"name": "HEOS 3", "pid": "32432423432", "role": "member"}, {"name": "HEOS 5", "pid": "342423564", "role": "member"}]}]}\
""",
Group[].class); Group[].class);
assertEquals(HeosCommandGroup.GROUP, response.heosCommand.commandGroup); assertEquals(HeosCommandGroup.GROUP, response.heosCommand.commandGroup);

View File

@@ -74,8 +74,8 @@ public class CurtainHandler extends BaseThingHandler {
(command == UpDownType.UP) ? ControlAddress.OPEN : ControlAddress.CLOSE); (command == UpDownType.UP) ? ControlAddress.OPEN : ControlAddress.CLOSE);
} else if (command instanceof StopMoveType) { } else if (command instanceof StopMoveType) {
pkt = buildPacket(Function.CONTROL, ControlAddress.STOP); pkt = buildPacket(Function.CONTROL, ControlAddress.STOP);
} else if (command instanceof DecimalType) { } else if (command instanceof DecimalType decimalCommand) {
pkt = buildPacket(Function.CONTROL, ControlAddress.PERCENT, ((DecimalType) command).byteValue()); pkt = buildPacket(Function.CONTROL, ControlAddress.PERCENT, decimalCommand.byteValue());
} }
break; break;
case CHANNEL_REVERSE: case CHANNEL_REVERSE:

View File

@@ -12,7 +12,6 @@
*/ */
package org.openhab.binding.homeconnect.internal.client; package org.openhab.binding.homeconnect.internal.client;
import static java.util.Collections.singletonList;
import static org.openhab.binding.homeconnect.internal.HomeConnectBindingConstants.*; import static org.openhab.binding.homeconnect.internal.HomeConnectBindingConstants.*;
import static org.openhab.binding.homeconnect.internal.client.HttpHelper.*; import static org.openhab.binding.homeconnect.internal.client.HttpHelper.*;
@@ -880,7 +879,7 @@ public class HomeConnectApiClient {
private void checkResponseCode(int desiredCode, Request request, ContentResponse response, @Nullable String haId, private void checkResponseCode(int desiredCode, Request request, ContentResponse response, @Nullable String haId,
@Nullable String requestPayload) @Nullable String requestPayload)
throws CommunicationException, AuthorizationException, ApplianceOfflineException { throws CommunicationException, AuthorizationException, ApplianceOfflineException {
checkResponseCode(singletonList(desiredCode), request, response, haId, requestPayload); checkResponseCode(List.of(desiredCode), request, response, haId, requestPayload);
} }
private void checkResponseCode(List<Integer> desiredCodes, Request request, ContentResponse response, private void checkResponseCode(List<Integer> desiredCodes, Request request, ContentResponse response,

View File

@@ -60,8 +60,8 @@ public class HomeConnectDiscoveryService extends AbstractDiscoveryService
@Override @Override
public void setThingHandler(ThingHandler handler) { public void setThingHandler(ThingHandler handler) {
if (handler instanceof HomeConnectBridgeHandler) { if (handler instanceof HomeConnectBridgeHandler homeConnectBridgeHandler) {
this.bridgeHandler = (HomeConnectBridgeHandler) handler; this.bridgeHandler = homeConnectBridgeHandler;
} }
} }

View File

@@ -453,8 +453,8 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i
Bridge bridge = getBridge(); Bridge bridge = getBridge();
if (bridge != null) { if (bridge != null) {
BridgeHandler bridgeHandler = bridge.getHandler(); BridgeHandler bridgeHandler = bridge.getHandler();
if (bridgeHandler instanceof HomeConnectBridgeHandler) { if (bridgeHandler instanceof HomeConnectBridgeHandler homeConnectBridgeHandler) {
return Optional.of((HomeConnectBridgeHandler) bridgeHandler); return Optional.of(homeConnectBridgeHandler);
} }
} }
return Optional.empty(); return Optional.empty();
@@ -537,7 +537,7 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i
* @param channelUID channel UID * @param channelUID channel UID
*/ */
protected void updateChannel(ChannelUID channelUID) { protected void updateChannel(ChannelUID channelUID) {
if (!getApiClient().isPresent()) { if (getApiClient().isEmpty()) {
logger.error("Cannot update channel. No instance of api client found! thing={}, haId={}", getThingLabel(), logger.error("Cannot update channel. No instance of api client found! thing={}, haId={}", getThingLabel(),
getThingHaId()); getThingHaId());
return; return;
@@ -1206,23 +1206,23 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i
protected void handleTemperatureCommand(final ChannelUID channelUID, final Command command, protected void handleTemperatureCommand(final ChannelUID channelUID, final Command command,
final HomeConnectApiClient apiClient) final HomeConnectApiClient apiClient)
throws CommunicationException, AuthorizationException, ApplianceOfflineException { throws CommunicationException, AuthorizationException, ApplianceOfflineException {
if (command instanceof QuantityType) { if (command instanceof QuantityType quantityCommand) {
QuantityType<?> quantity = (QuantityType<?>) command;
String value; String value;
String unit; String unit;
try { try {
if (quantity.getUnit().equals(SIUnits.CELSIUS) || quantity.getUnit().equals(ImperialUnits.FAHRENHEIT)) { if (quantityCommand.getUnit().equals(SIUnits.CELSIUS)
unit = quantity.getUnit().toString(); || quantityCommand.getUnit().equals(ImperialUnits.FAHRENHEIT)) {
value = String.valueOf(quantity.intValue()); unit = quantityCommand.getUnit().toString();
value = String.valueOf(quantityCommand.intValue());
} else { } else {
logger.debug("Converting target temperature from {}{} to °C value. thing={}, haId={}", logger.debug("Converting target temperature from {}{} to °C value. thing={}, haId={}",
quantity.intValue(), quantity.getUnit().toString(), getThingLabel(), getThingHaId()); quantityCommand.intValue(), quantityCommand.getUnit().toString(), getThingLabel(),
getThingHaId());
unit = "°C"; unit = "°C";
var celsius = quantity.toUnit(SIUnits.CELSIUS); var celsius = quantityCommand.toUnit(SIUnits.CELSIUS);
if (celsius == null) { if (celsius == null) {
logger.warn("Converting temperature to celsius failed! quantity={}", quantity); logger.warn("Converting temperature to celsius failed! quantity={}", quantityCommand);
value = null; value = null;
} else { } else {
value = String.valueOf(celsius.intValue()); value = String.valueOf(celsius.intValue());
@@ -1272,10 +1272,10 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i
} else { } else {
newBrightness = currentBrightness - BRIGHTNESS_DIM_STEP; newBrightness = currentBrightness - BRIGHTNESS_DIM_STEP;
} }
} else if (command instanceof PercentType) { } else if (command instanceof PercentType percentCommand) {
newBrightness = (int) Math.floor(((PercentType) command).doubleValue()); newBrightness = (int) Math.floor(percentCommand.doubleValue());
} else if (command instanceof DecimalType) { } else if (command instanceof DecimalType decimalCommand) {
newBrightness = ((DecimalType) command).intValue(); newBrightness = decimalCommand.intValue();
} }
// check in in range // check in in range
@@ -1308,8 +1308,8 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i
apiClient.setAmbientLightColorState(getThingHaId(), STATE_AMBIENT_LIGHT_COLOR_CUSTOM_COLOR); apiClient.setAmbientLightColorState(getThingHaId(), STATE_AMBIENT_LIGHT_COLOR_CUSTOM_COLOR);
} }
if (command instanceof HSBType) { if (command instanceof HSBType hsbCommand) {
apiClient.setAmbientLightCustomColorState(getThingHaId(), mapColor((HSBType) command)); apiClient.setAmbientLightCustomColorState(getThingHaId(), mapColor(hsbCommand));
} else if (command instanceof StringType) { } else if (command instanceof StringType) {
apiClient.setAmbientLightCustomColorState(getThingHaId(), command.toFullString()); apiClient.setAmbientLightCustomColorState(getThingHaId(), command.toFullString());
} }
@@ -1546,9 +1546,9 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i
.filter(option -> OPTION_DRYER_DRYING_TARGET.equals(option.getKey())).findFirst(); .filter(option -> OPTION_DRYER_DRYING_TARGET.equals(option.getKey())).findFirst();
// Save options in cache only if we got options for all expected channels // Save options in cache only if we got options for all expected channels
if (cacheToSet && (!channelSpinSpeed.isPresent() || optionsSpinSpeed.isPresent()) if (cacheToSet && (channelSpinSpeed.isEmpty() || optionsSpinSpeed.isPresent())
&& (!channelTemperature.isPresent() || optionsTemperature.isPresent()) && (channelTemperature.isEmpty() || optionsTemperature.isPresent())
&& (!channelDryingTarget.isPresent() || optionsDryingTarget.isPresent())) { && (channelDryingTarget.isEmpty() || optionsDryingTarget.isPresent())) {
logger.debug("Saving options in cache for program '{}'.", programKey); logger.debug("Saving options in cache for program '{}'.", programKey);
availableProgramOptionsCache.put(programKey, availableProgramOptions); availableProgramOptionsCache.put(programKey, availableProgramOptions);
} }
@@ -1673,7 +1673,7 @@ public abstract class AbstractHomeConnectThingHandler extends BaseThingHandler i
private boolean addUnsupportedProgramInCache(String programKey) { private boolean addUnsupportedProgramInCache(String programKey) {
Optional<AvailableProgram> prog = programsCache.stream().filter(program -> programKey.equals(program.getKey())) Optional<AvailableProgram> prog = programsCache.stream().filter(program -> programKey.equals(program.getKey()))
.findFirst(); .findFirst();
if (!prog.isPresent()) { if (prog.isEmpty()) {
programsCache.add(new AvailableProgram(programKey, false)); programsCache.add(new AvailableProgram(programKey, false));
logger.debug("{} added in programs cache as an unsupported program", programKey); logger.debug("{} added in programs cache as an unsupported program", programKey);
return true; return true;

View File

@@ -19,10 +19,10 @@ import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -232,7 +232,7 @@ public class HomeConnectBridgeHandler extends BaseBridgeHandler {
@Override @Override
public Collection<Class<? extends ThingHandlerService>> getServices() { public Collection<Class<? extends ThingHandlerService>> getServices() {
return Collections.singleton(HomeConnectDiscoveryService.class); return Set.of(HomeConnectDiscoveryService.class);
} }
/** /**

View File

@@ -49,15 +49,35 @@ import org.slf4j.LoggerFactory;
@NonNullByDefault @NonNullByDefault
public class HomeConnectHoodHandler extends AbstractHomeConnectThingHandler { public class HomeConnectHoodHandler extends AbstractHomeConnectThingHandler {
private static final String START_VENTING_INTENSIVE_STAGE_PAYLOAD_TEMPLATE = "\n" + "{\n" + " \"data\": {\n" private static final String START_VENTING_INTENSIVE_STAGE_PAYLOAD_TEMPLATE = """
+ " \"key\": \"Cooking.Common.Program.Hood.Venting\",\n" + " \"options\": [\n"
+ " {\n" + " \"key\": \"Cooking.Common.Option.Hood.IntensiveLevel\",\n"
+ " \"value\": \"%s\"\n" + " }\n" + " ]\n" + " }\n" + "}";
private static final String START_VENTING_STAGE_PAYLOAD_TEMPLATE = "\n" + "{\n" + " \"data\": {\n" {
+ " \"key\": \"Cooking.Common.Program.Hood.Venting\",\n" + " \"options\": [\n" "data": {
+ " {\n" + " \"key\": \"Cooking.Common.Option.Hood.VentingLevel\",\n" "key": "Cooking.Common.Program.Hood.Venting",
+ " \"value\": \"%s\"\n" + " }\n" + " ]\n" + " }\n" + "}"; "options": [
{
"key": "Cooking.Common.Option.Hood.IntensiveLevel",
"value": "%s"
}
]
}
}\
""";
private static final String START_VENTING_STAGE_PAYLOAD_TEMPLATE = """
{
"data": {
"key": "Cooking.Common.Program.Hood.Venting",
"options": [
{
"key": "Cooking.Common.Option.Hood.VentingLevel",
"value": "%s"
}
]
}
}\
""";
private final Logger logger = LoggerFactory.getLogger(HomeConnectHoodHandler.class); private final Logger logger = LoggerFactory.getLogger(HomeConnectHoodHandler.class);

View File

@@ -394,12 +394,12 @@ public class HomematicConfig {
@Override @Override
public String toString() { public String toString() {
return String.format( return String.format("""
"%s[gatewayAddress=%s,callbackHost=%s,xmlCallbackPort=%d,binCallbackPort=%d," %s[gatewayAddress=%s,callbackHost=%s,xmlCallbackPort=%d,binCallbackPort=%d,\
+ "gatewayType=%s,rfPort=%d,wiredPort=%d,hmIpPort=%d,cuxdPort=%d,groupPort=%d,timeout=%d," gatewayType=%s,rfPort=%d,wiredPort=%d,hmIpPort=%d,cuxdPort=%d,groupPort=%d,timeout=%d,\
+ "discoveryTimeToLive=%d,installModeDuration=%d,socketMaxAlive=%d]", discoveryTimeToLive=%d,installModeDuration=%d,socketMaxAlive=%d]\
getClass().getSimpleName(), gatewayAddress, callbackHost, xmlCallbackPort, binCallbackPort, gatewayType, """, getClass().getSimpleName(), gatewayAddress, callbackHost, xmlCallbackPort, binCallbackPort,
getRfPort(), getWiredPort(), getHmIpPort(), getCuxdPort(), getGroupPort(), timeout, discoveryTimeToLive, gatewayType, getRfPort(), getWiredPort(), getHmIpPort(), getCuxdPort(), getGroupPort(), timeout,
installModeDuration, socketMaxAlive); discoveryTimeToLive, installModeDuration, socketMaxAlive);
} }
} }

View File

@@ -84,8 +84,7 @@ public class XmlRpcClient extends RpcClient<String> {
} catch (IOException ex) { } catch (IOException ex) {
reason = ex; reason = ex;
// no retries for "init" request or if connection is refused // no retries for "init" request or if connection is refused
if ("init".equals(request.getMethodName()) if ("init".equals(request.getMethodName()) || ex.getCause() instanceof ExecutionException) {
|| ex.getCause() != null && ex.getCause() instanceof ExecutionException) {
break; break;
} }
logger.debug("XmlRpcMessage failed({}), sending message again {}/{}", ex.getMessage(), rpcRetryCounter, logger.debug("XmlRpcMessage failed({}), sending message again {}/{}", ex.getMessage(), rpcRetryCounter,

View File

@@ -47,7 +47,7 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
} }
private Object[] messageData; private Object[] messageData;
private byte binRpcData[]; private byte[] binRpcData;
private int offset; private int offset;
private String methodName; private String methodName;
@@ -74,7 +74,7 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
*/ */
public BinRpcMessage(InputStream is, boolean methodHeader, Charset encoding) throws IOException { public BinRpcMessage(InputStream is, boolean methodHeader, Charset encoding) throws IOException {
this.encoding = encoding; this.encoding = encoding;
byte sig[] = new byte[8]; byte[] sig = new byte[8];
int length = is.read(sig, 0, 4); int length = is.read(sig, 0, 4);
if (length != 4) { if (length != 4) {
throw new EOFException("Only " + length + " bytes received reading signature"); throw new EOFException("Only " + length + " bytes received reading signature");
@@ -85,7 +85,7 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
throw new EOFException("Only " + length + " bytes received reading message length"); throw new EOFException("Only " + length + " bytes received reading message length");
} }
int datasize = (new BigInteger(Arrays.copyOfRange(sig, 4, 8))).intValue(); int datasize = (new BigInteger(Arrays.copyOfRange(sig, 4, 8))).intValue();
byte payload[] = new byte[datasize]; byte[] payload = new byte[datasize];
int offset = 0; int offset = 0;
int currentLength; int currentLength;
@@ -201,14 +201,14 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
// read rpc values // read rpc values
private int readInt() { private int readInt() {
byte bi[] = new byte[4]; byte[] bi = new byte[4];
System.arraycopy(binRpcData, offset, bi, 0, 4); System.arraycopy(binRpcData, offset, bi, 0, 4);
offset += 4; offset += 4;
return (new BigInteger(bi)).intValue(); return (new BigInteger(bi)).intValue();
} }
private long readInt64() { private long readInt64() {
byte bi[] = new byte[8]; byte[] bi = new byte[8];
System.arraycopy(binRpcData, offset, bi, 0, 8); System.arraycopy(binRpcData, offset, bi, 0, 8);
offset += 8; offset += 8;
return (new BigInteger(bi)).longValue(); return (new BigInteger(bi)).longValue();
@@ -274,7 +274,7 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
private void addByte(byte b) { private void addByte(byte b) {
if (offset == binRpcData.length) { if (offset == binRpcData.length) {
byte newdata[] = new byte[binRpcData.length * 2]; byte[] newdata = new byte[binRpcData.length * 2];
System.arraycopy(binRpcData, 0, newdata, 0, binRpcData.length); System.arraycopy(binRpcData, 0, newdata, 0, binRpcData.length);
binRpcData = newdata; binRpcData = newdata;
} }
@@ -311,7 +311,7 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
} }
private void addString(String string) { private void addString(String string) {
byte sd[] = string.getBytes(encoding); byte[] sd = string.getBytes(encoding);
for (byte ch : sd) { for (byte ch : sd) {
addByte(ch); addByte(ch);
} }
@@ -351,13 +351,11 @@ public class BinRpcMessage implements RpcRequest<byte[]>, RpcResponse {
} else if (object.getClass() == Date.class) { } else if (object.getClass() == Date.class) {
addInt(5); addInt(5);
addInt((int) ((Date) object).getTime() / 1000); addInt((int) ((Date) object).getTime() / 1000);
} else if (object instanceof List<?>) { } else if (object instanceof List<?> list) {
Collection<?> list = (Collection<?>) object;
addInt(0x100); addInt(0x100);
addInt(list.size()); addInt(list.size());
addList(list); addList(list);
} else if (object instanceof Map<?, ?>) { } else if (object instanceof Map<?, ?> map) {
Map<?, ?> map = (Map<?, ?>) object;
addInt(0x101); addInt(0x101);
addInt(map.size()); addInt(map.size());
for (Map.Entry<?, ?> entry : map.entrySet()) { for (Map.Entry<?, ?> entry : map.entrySet()) {

View File

@@ -42,10 +42,10 @@ public class RpcUtils {
sb.append("[\n"); sb.append("[\n");
} }
for (Object o : c) { for (Object o : c) {
if (o instanceof Map) { if (o instanceof Map map) {
dumpMap((Map<?, ?>) o, sb, indent + 1); dumpMap(map, sb, indent + 1);
} else if (o instanceof Object[]) { } else if (o instanceof Object[] objects) {
dumpCollection((Object[]) o, sb, indent + 1); dumpCollection(objects, sb, indent + 1);
} else { } else {
for (int in = 0; in < indent; in++) { for (int in = 0; in < indent; in++) {
sb.append('\t'); sb.append('\t');
@@ -76,12 +76,12 @@ public class RpcUtils {
} }
sb.append(me.getKey()); sb.append(me.getKey());
sb.append('='); sb.append('=');
if (o instanceof Map<?, ?>) { if (o instanceof Map<?, ?> map) {
sb.append("\n"); sb.append("\n");
dumpMap((Map<?, ?>) o, sb, indent + 1); dumpMap(map, sb, indent + 1);
} else if (o instanceof Object[]) { } else if (o instanceof Object[] objects) {
sb.append("\n"); sb.append("\n");
dumpCollection((Object[]) o, sb, indent + 1); dumpCollection(objects, sb, indent + 1);
} else { } else {
sb.append(o); sb.append(o);
sb.append('\n'); sb.append('\n');

View File

@@ -136,16 +136,16 @@ public class XmlRpcRequest implements RpcRequest<String> {
tag("boolean", ((Boolean) value).booleanValue() ? "1" : "0"); tag("boolean", ((Boolean) value).booleanValue() ? "1" : "0");
} else if (clazz == Date.class) { } else if (clazz == Date.class) {
tag("dateTime.iso8601", xmlRpcDateFormat.format(((Date) value))); tag("dateTime.iso8601", xmlRpcDateFormat.format(((Date) value)));
} else if (value instanceof Calendar) { } else if (value instanceof Calendar calendar) {
generateValue(((Calendar) value).getTime()); generateValue(calendar.getTime());
} else if (value instanceof byte[]) { } else if (value instanceof byte[] bytes) {
tag("base64", Base64.getEncoder().encodeToString((byte[]) value)); tag("base64", Base64.getEncoder().encodeToString(bytes));
} else if (clazz.isArray() || value instanceof List) { } else if (clazz.isArray() || value instanceof List) {
sb.append("<array><data>"); sb.append("<array><data>");
Object[] array = null; Object[] array = null;
if (value instanceof List) { if (value instanceof List list) {
array = ((List<?>) value).toArray(); array = list.toArray();
} else { } else {
array = (Object[]) value; array = (Object[]) value;
} }

View File

@@ -97,10 +97,10 @@ public class XmlRpcResponse implements RpcResponse {
public void startElement(String uri, String localName, String qName, Attributes attributes) public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException { throws SAXException {
String tag = qName.toLowerCase(); String tag = qName.toLowerCase();
if (tag.equals("array") || tag.equals("struct")) { if ("array".equals(tag) || "struct".equals(tag)) {
currentDataObject.addLast(new ArrayList<>()); currentDataObject.addLast(new ArrayList<>());
} }
isValueTag = tag.equals("value"); isValueTag = "value".equals(tag);
tagValue = new StringBuilder(); tagValue = new StringBuilder();
} }

View File

@@ -105,8 +105,7 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
* Converts the object to a string array. * Converts the object to a string array.
*/ */
protected String[] toOptionList(Object optionList) { protected String[] toOptionList(Object optionList) {
if (optionList != null && optionList instanceof Object[]) { if (optionList != null && optionList instanceof Object[] vl) {
Object[] vl = (Object[]) optionList;
String[] stringArray = new String[vl.length]; String[] stringArray = new String[vl.length];
for (int i = 0; i < vl.length; i++) { for (int i = 0; i < vl.length; i++) {
stringArray[i] = vl[i].toString(); stringArray[i] = vl[i].toString();
@@ -232,9 +231,9 @@ public abstract class CommonRpcParser<M, R> implements RpcParser<M, R> {
if (value == null || value.isBlank()) { if (value == null || value.isBlank()) {
return null; return null;
} }
if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("on")) { if ("true".equalsIgnoreCase(value) || "on".equalsIgnoreCase(value)) {
return (Boolean.TRUE); return (Boolean.TRUE);
} else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("off")) { } else if ("false".equalsIgnoreCase(value) || "off".equalsIgnoreCase(value)) {
return (Boolean.FALSE); return (Boolean.FALSE);
} else if (value.matches("(-|\\+)?[0-9]+")) { } else if (value.matches("(-|\\+)?[0-9]+")) {
return (Integer.valueOf(value)); return (Integer.valueOf(value));

View File

@@ -58,7 +58,7 @@ public class GetParamsetParser extends CommonRpcParser<Object[], Void> {
// suppress warning for this datapoint due wrong CCU metadata // suppress warning for this datapoint due wrong CCU metadata
String deviceType = channel.getDevice().getType(); String deviceType = channel.getDevice().getType();
boolean isHmSenMdirNextTrans = dpInfo.getName().equals("NEXT_TRANSMISSION") boolean isHmSenMdirNextTrans = "NEXT_TRANSMISSION".equals(dpInfo.getName())
&& (deviceType.startsWith("HM-Sen-MDIR-O") || deviceType.startsWith("HM-Sen-MDIR-WM55") && (deviceType.startsWith("HM-Sen-MDIR-O") || deviceType.startsWith("HM-Sen-MDIR-WM55")
|| deviceType.startsWith("HM-Sec-MDIR-2")); || deviceType.startsWith("HM-Sec-MDIR-2"));
if (!isHmSenMdirNextTrans) { if (!isHmSenMdirNextTrans) {

View File

@@ -28,9 +28,9 @@ import org.openhab.core.common.ThreadPoolManager;
* @author Gerhard Riegler - Initial contribution * @author Gerhard Riegler - Initial contribution
*/ */
public class BinRpcNetworkService implements Runnable { public class BinRpcNetworkService implements Runnable {
private static final byte BIN_EMPTY_STRING[] = { 'B', 'i', 'n', 1, 0, 0, 0, 8, 0, 0, 0, 3, 0, 0, 0, 0 }; private static final byte[] BIN_EMPTY_STRING = { 'B', 'i', 'n', 1, 0, 0, 0, 8, 0, 0, 0, 3, 0, 0, 0, 0 };
private static final byte BIN_EMPTY_ARRAY[] = { 'B', 'i', 'n', 1, 0, 0, 0, 8, 0, 0, 1, 0, 0, 0, 0, 0 }; private static final byte[] BIN_EMPTY_ARRAY = { 'B', 'i', 'n', 1, 0, 0, 0, 8, 0, 0, 1, 0, 0, 0, 0, 0 };
private static final byte BIN_EMPTY_EVENT_LIST[] = { 'B', 'i', 'n', 1, 0, 0, 0, 21, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, private static final byte[] BIN_EMPTY_EVENT_LIST = { 'B', 'i', 'n', 1, 0, 0, 0, 21, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,
3, 0, 0, 0, 5, 'e', 'v', 'e', 'n', 't' }; 3, 0, 0, 0, 5, 'e', 'v', 'e', 'n', 't' };
private static final String RPC_POOL_NAME = "homematicRpc"; private static final String RPC_POOL_NAME = "homematicRpc";

View File

@@ -43,7 +43,7 @@ public class DeleteDeviceModeVirtualDatapointHandler extends AbstractVirtualData
@Override @Override
public void initialize(HmDevice device) { public void initialize(HmDevice device) {
if (!device.isGatewayExtras() && !(device.getHmInterface() == HmInterface.CUXD)) { if (!device.isGatewayExtras() && device.getHmInterface() != HmInterface.CUXD) {
HmDatapoint dp = addDatapoint(device, 0, getName(), HmValueType.ENUM, 0, false); HmDatapoint dp = addDatapoint(device, 0, getName(), HmValueType.ENUM, 0, false);
dp.setOptions(new String[] { MODE_LOCKED, MODE_RESET, MODE_FORCE, MODE_DEFER }); dp.setOptions(new String[] { MODE_LOCKED, MODE_RESET, MODE_FORCE, MODE_DEFER });
dp.setMinValue(0); dp.setMinValue(0);

View File

@@ -44,7 +44,7 @@ public class DeleteDeviceVirtualDatapointHandler extends AbstractVirtualDatapoin
@Override @Override
public void initialize(HmDevice device) { public void initialize(HmDevice device) {
if (!device.isGatewayExtras() && !(device.getHmInterface() == HmInterface.CUXD)) { if (!device.isGatewayExtras() && device.getHmInterface() != HmInterface.CUXD) {
addDatapoint(device, 0, getName(), HmValueType.BOOL, Boolean.FALSE, false); addDatapoint(device, 0, getName(), HmValueType.BOOL, Boolean.FALSE, false);
} }
} }

View File

@@ -40,8 +40,7 @@ public class DisplayOptionsVirtualDatapointHandler extends AbstractVirtualDatapo
@Override @Override
public void initialize(HmDevice device) { public void initialize(HmDevice device) {
if (device.getType().startsWith(DEVICE_TYPE_19_REMOTE_CONTROL) if (device.getType().startsWith(DEVICE_TYPE_19_REMOTE_CONTROL) && device.getHmInterface() != HmInterface.CUXD) {
&& !(device.getHmInterface() == HmInterface.CUXD)) {
addDatapoint(device, 18, getName(), HmValueType.STRING, null, false); addDatapoint(device, 18, getName(), HmValueType.STRING, null, false);
} }
} }

View File

@@ -62,8 +62,8 @@ public class OnTimeAutomaticVirtualDatapointHandler extends AbstractVirtualDatap
@Override @Override
public boolean canHandleCommand(HmDatapoint dp, Object value) { public boolean canHandleCommand(HmDatapoint dp, Object value) {
boolean isLevel = DATAPOINT_NAME_LEVEL.equals(dp.getName()) && value != null && value instanceof Number boolean isLevel = DATAPOINT_NAME_LEVEL.equals(dp.getName()) && value != null
&& ((Number) value).doubleValue() > 0.0; && value instanceof Number numberCommand && numberCommand.doubleValue() > 0.0;
boolean isState = DATAPOINT_NAME_STATE.equals(dp.getName()) && MiscUtils.isTrueValue(value); boolean isState = DATAPOINT_NAME_STATE.equals(dp.getName()) && MiscUtils.isTrueValue(value);
return ((isLevel || isState) && getVirtualDatapointValue(dp.getChannel()) > 0.0) return ((isLevel || isState) && getVirtualDatapointValue(dp.getChannel()) > 0.0)

View File

@@ -19,7 +19,7 @@ import java.net.DatagramPacket;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.MulticastSocket; import java.net.MulticastSocket;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
import java.util.Collections; import java.util.Set;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import org.openhab.binding.homematic.internal.discovery.eq3udp.Eq3UdpRequest; import org.openhab.binding.homematic.internal.discovery.eq3udp.Eq3UdpRequest;
@@ -50,7 +50,7 @@ public class CcuDiscoveryService extends AbstractDiscoveryService {
private NetworkAddressService networkAddressService; private NetworkAddressService networkAddressService;
public CcuDiscoveryService() { public CcuDiscoveryService() {
super(Collections.singleton(THING_TYPE_BRIDGE), 5, true); super(Set.of(THING_TYPE_BRIDGE), 5, true);
} }
@Override @Override

View File

@@ -14,7 +14,6 @@ package org.openhab.binding.homematic.internal.discovery;
import static org.openhab.binding.homematic.internal.HomematicBindingConstants.THING_TYPE_BRIDGE; import static org.openhab.binding.homematic.internal.HomematicBindingConstants.THING_TYPE_BRIDGE;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -41,7 +40,7 @@ public class HomegearDiscoveryParticipant implements UpnpDiscoveryParticipant {
@Override @Override
public Set<ThingTypeUID> getSupportedThingTypeUIDs() { public Set<ThingTypeUID> getSupportedThingTypeUIDs() {
return Collections.singleton(THING_TYPE_BRIDGE); return Set.of(THING_TYPE_BRIDGE);
} }
@Override @Override

View File

@@ -14,7 +14,7 @@ package org.openhab.binding.homematic.internal.discovery;
import static org.openhab.binding.homematic.internal.HomematicBindingConstants.BINDING_ID; import static org.openhab.binding.homematic.internal.HomematicBindingConstants.BINDING_ID;
import java.util.Collections; import java.util.Set;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future; import java.util.concurrent.Future;
@@ -54,13 +54,13 @@ public class HomematicDeviceDiscoveryService extends AbstractDiscoveryService
private volatile Object installModeSync = new Object(); private volatile Object installModeSync = new Object();
public HomematicDeviceDiscoveryService() { public HomematicDeviceDiscoveryService() {
super(Collections.singleton(new ThingTypeUID(BINDING_ID, "-")), DISCOVER_TIMEOUT_SECONDS, false); super(Set.of(new ThingTypeUID(BINDING_ID, "-")), DISCOVER_TIMEOUT_SECONDS, false);
} }
@Override @Override
public void setThingHandler(@Nullable ThingHandler handler) { public void setThingHandler(@Nullable ThingHandler handler) {
if (handler instanceof HomematicBridgeHandler) { if (handler instanceof HomematicBridgeHandler homematicBridgeHandler) {
this.bridgeHandler = (HomematicBridgeHandler) handler; this.bridgeHandler = homematicBridgeHandler;
this.bridgeHandler.setDiscoveryService(this); this.bridgeHandler.setDiscoveryService(this);
} }
} }

View File

@@ -17,8 +17,8 @@ import static org.openhab.core.thing.Thing.*;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -229,7 +229,7 @@ public class HomematicBridgeHandler extends BaseBridgeHandler implements Homemat
@Override @Override
public Collection<Class<? extends ThingHandlerService>> getServices() { public Collection<Class<? extends ThingHandlerService>> getServices() {
return Collections.singleton(HomematicDeviceDiscoveryService.class); return Set.of(HomematicDeviceDiscoveryService.class);
} }
@Override @Override

View File

@@ -594,15 +594,14 @@ public class HomematicThingHandler extends BaseThingHandler {
if (dp != null) { if (dp != null) {
try { try {
if (newValue != null) { if (newValue != null) {
if (newValue instanceof BigDecimal) { if (newValue instanceof BigDecimal decimal) {
final BigDecimal decimal = (BigDecimal) newValue;
if (dp.isIntegerType()) { if (dp.isIntegerType()) {
newValue = decimal.intValue(); newValue = decimal.intValue();
} else if (dp.isFloatType()) { } else if (dp.isFloatType()) {
newValue = decimal.doubleValue(); newValue = decimal.doubleValue();
} }
} else if (newValue instanceof String && dp.isEnumType()) { } else if (newValue instanceof String string && dp.isEnumType()) {
newValue = dp.getOptionIndex((String) newValue); newValue = dp.getOptionIndex(string);
} }
if (!Objects.equals(dp.getValue(), newValue)) { if (!Objects.equals(dp.getValue(), newValue)) {
sendDatapoint(dp, new HmDatapointConfig(), newValue); sendDatapoint(dp, new HmDatapointConfig(), newValue);

View File

@@ -426,9 +426,10 @@ public class HmDatapoint implements Cloneable {
@Override @Override
public String toString() { public String toString() {
return String.format("%s[name=%s,value=%s,defaultValue=%s,type=%s,minValue=%s,maxValue=%s,options=%s," return String.format("""
+ "readOnly=%b,readable=%b,unit=%s,description=%s,info=%s,paramsetType=%s,virtual=%b,trigger=%b]", %s[name=%s,value=%s,defaultValue=%s,type=%s,minValue=%s,maxValue=%s,options=%s,\
getClass().getSimpleName(), name, value, defaultValue, type, minValue, maxValue, readOnly=%b,readable=%b,unit=%s,description=%s,info=%s,paramsetType=%s,virtual=%b,trigger=%b]\
""", getClass().getSimpleName(), name, value, defaultValue, type, minValue, maxValue,
(options == null ? null : String.join(";", options)), readOnly, readable, unit, description, info, (options == null ? null : String.join(";", options)), readOnly, readable, unit, description, info,
paramsetType, virtual, trigger); paramsetType, virtual, trigger);
} }

View File

@@ -96,7 +96,7 @@ public class HmDatapointInfo {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj == null || !(obj instanceof HmDatapointInfo)) { if (!(obj instanceof HmDatapointInfo)) {
return false; return false;
} }
HmDatapointInfo comp = (HmDatapointInfo) obj; HmDatapointInfo comp = (HmDatapointInfo) obj;

View File

@@ -213,7 +213,7 @@ public class HmDevice {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj == null || !(obj instanceof HmDevice)) { if (!(obj instanceof HmDevice)) {
return false; return false;
} }
HmDevice comp = (HmDevice) obj; HmDevice comp = (HmDevice) obj;

View File

@@ -189,11 +189,11 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
for (String deviceType : firmwaresByType.keySet()) { for (String deviceType : firmwaresByType.keySet()) {
Set<String> firmwares = firmwaresByType.get(deviceType); Set<String> firmwares = firmwaresByType.get(deviceType);
if (firmwares.size() > 1) { if (firmwares.size() > 1) {
logger.info( logger.info("""
"Multiple firmware versions for device type '{}' found ({}). " Multiple firmware versions for device type '{}' found ({}). \
+ "Make sure, all devices of the same type have the same firmware version, " Make sure, all devices of the same type have the same firmware version, \
+ "otherwise you MAY have channel and/or datapoint errors in the logfile", otherwise you MAY have channel and/or datapoint errors in the logfile\
deviceType, String.join(", ", firmwares)); """, deviceType, String.join(", ", firmwares));
} }
} }
} }
@@ -387,7 +387,7 @@ public class HomematicTypeGeneratorImpl implements HomematicTypeGenerator {
*/ */
public static boolean isIgnoredDatapoint(HmDatapoint dp) { public static boolean isIgnoredDatapoint(HmDatapoint dp) {
for (String testValue : IGNORE_DATAPOINT_NAMES) { for (String testValue : IGNORE_DATAPOINT_NAMES) {
if (dp.getName().indexOf(testValue) > -1) { if (dp.getName().contains(testValue)) {
return true; return true;
} }
} }

View File

@@ -299,8 +299,11 @@ public class P1Payload {
@Override @Override
public String toString() { public String toString() {
return String.format("P1 [version: %d model: %s ssid: %s signal: %d" return String.format(
+ " imp1: %f imp2: %f exp1: %f exp2: %f active: %f active1: %f active2: %f active3: %f gas: %f timestamp: %.0f]", """
P1 [version: %d model: %s ssid: %s signal: %d\
imp1: %f imp2: %f exp1: %f exp2: %f active: %f active1: %f active2: %f active3: %f gas: %f timestamp: %.0f]\
""",
smrVersion, meterModel, wifiSsid, wifiStrength, totalEnergyImportT1Kwh, totalEnergyImportT2Kwh, smrVersion, meterModel, wifiSsid, wifiStrength, totalEnergyImportT1Kwh, totalEnergyImportT2Kwh,
totalEnergyExportT1Kwh, totalEnergyExportT2Kwh, activePowerW, activePowerL1W, activePowerL2W, totalEnergyExportT1Kwh, totalEnergyExportT2Kwh, activePowerW, activePowerL1W, activePowerL2W,
activePowerL3W, totalGasM3, gasTimestamp); activePowerL3W, totalGasM3, gasTimestamp);

View File

@@ -39,9 +39,7 @@ public class HPFeatures {
boolean localScannerStatus = false; boolean localScannerStatus = false;
for (Node n = root.getFirstChild(); n != null; n = n.getNextSibling()) { for (Node n = root.getFirstChild(); n != null; n = n.getNextSibling()) {
if (n instanceof Element) { if (n instanceof Element feature) {
Element feature = (Element) n;
NodeList resourceType = feature.getElementsByTagName("dd:ResourceType"); NodeList resourceType = feature.getElementsByTagName("dd:ResourceType");
if (resourceType.getLength() > 0) { if (resourceType.getLength() > 0) {

View File

@@ -279,8 +279,7 @@ public class HPUsage {
int value = 0; int value = 0;
for (Node n = parentNode.getFirstChild(); n != null; n = n.getNextSibling()) { for (Node n = parentNode.getFirstChild(); n != null; n = n.getNextSibling()) {
if (n instanceof Element) { if (n instanceof Element nodeItem) {
Element nodeItem = (Element) n;
if (nodeItem.getElementsByTagName(collateTagName).item(0).getTextContent() if (nodeItem.getElementsByTagName(collateTagName).item(0).getTextContent()
.equalsIgnoreCase(collateTagNameValue)) { .equalsIgnoreCase(collateTagNameValue)) {
int nodeValue = Integer int nodeValue = Integer

View File

@@ -45,11 +45,9 @@ public class Util {
String contentString = contentProvider == null ? "null" String contentString = contentProvider == null ? "null"
: StreamSupport.stream(contentProvider.spliterator(), false) : StreamSupport.stream(contentProvider.spliterator(), false)
.map(b -> StandardCharsets.UTF_8.decode(b).toString()).collect(Collectors.joining(", ")); .map(b -> StandardCharsets.UTF_8.decode(b).toString()).collect(Collectors.joining(", "));
String logString = "Method = {" + request.getMethod() + "}, Headers = {" return "Method = {" + request.getMethod() + "}, Headers = {"
+ request.getHeaders().stream().map(HttpField::toString).collect(Collectors.joining(", ")) + request.getHeaders().stream().map(HttpField::toString).collect(Collectors.joining(", "))
+ "}, Content = {" + contentString + "}"; + "}, Content = {" + contentString + "}";
return logString;
} }
/** /**

View File

@@ -60,13 +60,11 @@ public class ColorItemConverter extends AbstractTransformingItemConverter {
return string; return string;
} }
if (command instanceof HSBType) { if (command instanceof HSBType newState) {
HSBType newState = (HSBType) command;
state = newState; state = newState;
return hsbToString(newState); return hsbToString(newState);
} else if (command instanceof PercentType && state instanceof HSBType) { } else if (command instanceof PercentType percentCommand && state instanceof HSBType hsb) {
HSBType newState = new HSBType(((HSBType) state).getBrightness(), ((HSBType) state).getSaturation(), HSBType newState = new HSBType(hsb.getBrightness(), hsb.getSaturation(), percentCommand);
(PercentType) command);
state = newState; state = newState;
return hsbToString(newState); return hsbToString(newState);
} }
@@ -78,32 +76,29 @@ public class ColorItemConverter extends AbstractTransformingItemConverter {
public State toState(String string) { public State toState(String string) {
State newState = UnDefType.UNDEF; State newState = UnDefType.UNDEF;
if (string.equals(channelConfig.onValue)) { if (string.equals(channelConfig.onValue)) {
if (state instanceof HSBType) { if (state instanceof HSBType hsb) {
newState = new HSBType(((HSBType) state).getHue(), ((HSBType) state).getSaturation(), newState = new HSBType(hsb.getHue(), hsb.getSaturation(), PercentType.HUNDRED);
PercentType.HUNDRED);
} else { } else {
newState = HSBType.WHITE; newState = HSBType.WHITE;
} }
} else if (string.equals(channelConfig.offValue)) { } else if (string.equals(channelConfig.offValue)) {
if (state instanceof HSBType) { if (state instanceof HSBType hsb) {
newState = new HSBType(((HSBType) state).getHue(), ((HSBType) state).getSaturation(), PercentType.ZERO); newState = new HSBType(hsb.getHue(), hsb.getSaturation(), PercentType.ZERO);
} else { } else {
newState = HSBType.BLACK; newState = HSBType.BLACK;
} }
} else if (string.equals(channelConfig.increaseValue) && state instanceof HSBType) { } else if (string.equals(channelConfig.increaseValue) && state instanceof HSBType hsb) {
BigDecimal newBrightness = ((HSBType) state).getBrightness().toBigDecimal().add(channelConfig.step); BigDecimal newBrightness = hsb.getBrightness().toBigDecimal().add(channelConfig.step);
if (HUNDRED.compareTo(newBrightness) < 0) { if (HUNDRED.compareTo(newBrightness) < 0) {
newBrightness = HUNDRED; newBrightness = HUNDRED;
} }
newState = new HSBType(((HSBType) state).getHue(), ((HSBType) state).getSaturation(), newState = new HSBType(hsb.getHue(), hsb.getSaturation(), new PercentType(newBrightness));
new PercentType(newBrightness)); } else if (string.equals(channelConfig.decreaseValue) && state instanceof HSBType hsb) {
} else if (string.equals(channelConfig.decreaseValue) && state instanceof HSBType) { BigDecimal newBrightness = hsb.getBrightness().toBigDecimal().subtract(channelConfig.step);
BigDecimal newBrightness = ((HSBType) state).getBrightness().toBigDecimal().subtract(channelConfig.step);
if (BigDecimal.ZERO.compareTo(newBrightness) > 0) { if (BigDecimal.ZERO.compareTo(newBrightness) > 0) {
newBrightness = BigDecimal.ZERO; newBrightness = BigDecimal.ZERO;
} }
newState = new HSBType(((HSBType) state).getHue(), ((HSBType) state).getSaturation(), newState = new HSBType(hsb.getHue(), hsb.getSaturation(), new PercentType(newBrightness));
new PercentType(newBrightness));
} else { } else {
Matcher matcher = TRIPLE_MATCHER.matcher(string); Matcher matcher = TRIPLE_MATCHER.matcher(string);
if (matcher.matches()) { if (matcher.matches()) {

View File

@@ -55,8 +55,8 @@ public class DimmerItemConverter extends AbstractTransformingItemConverter {
return string; return string;
} }
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
return ((PercentType) command).toString(); return percentCommand.toString();
} }
throw new IllegalArgumentException("Command type '" + command.toString() + "' not supported"); throw new IllegalArgumentException("Command type '" + command.toString() + "' not supported");
@@ -70,14 +70,14 @@ public class DimmerItemConverter extends AbstractTransformingItemConverter {
newState = PercentType.HUNDRED; newState = PercentType.HUNDRED;
} else if (string.equals(channelConfig.offValue)) { } else if (string.equals(channelConfig.offValue)) {
newState = PercentType.ZERO; newState = PercentType.ZERO;
} else if (string.equals(channelConfig.increaseValue) && state instanceof PercentType) { } else if (string.equals(channelConfig.increaseValue) && state instanceof PercentType brightnessState) {
BigDecimal newBrightness = ((PercentType) state).toBigDecimal().add(channelConfig.step); BigDecimal newBrightness = brightnessState.toBigDecimal().add(channelConfig.step);
if (HUNDRED.compareTo(newBrightness) < 0) { if (HUNDRED.compareTo(newBrightness) < 0) {
newBrightness = HUNDRED; newBrightness = HUNDRED;
} }
newState = new PercentType(newBrightness); newState = new PercentType(newBrightness);
} else if (string.equals(channelConfig.decreaseValue) && state instanceof PercentType) { } else if (string.equals(channelConfig.decreaseValue) && state instanceof PercentType brightnessState) {
BigDecimal newBrightness = ((PercentType) state).toBigDecimal().subtract(channelConfig.step); BigDecimal newBrightness = brightnessState.toBigDecimal().subtract(channelConfig.step);
if (BigDecimal.ZERO.compareTo(newBrightness) > 0) { if (BigDecimal.ZERO.compareTo(newBrightness) > 0) {
newBrightness = BigDecimal.ZERO; newBrightness = BigDecimal.ZERO;
} }

View File

@@ -40,6 +40,7 @@ public class GenericItemConverter extends AbstractTransformingItemConverter {
this.toState = toState; this.toState = toState;
} }
@Override
protected State toState(String value) { protected State toState(String value) {
try { try {
return toState.apply(value); return toState.apply(value);
@@ -53,6 +54,7 @@ public class GenericItemConverter extends AbstractTransformingItemConverter {
return null; return null;
} }
@Override
protected String toString(Command command) { protected String toString(Command command) {
return command.toString(); return command.toString();
} }

View File

@@ -51,7 +51,7 @@ public class RollershutterItemConverter extends AbstractTransformingItemConverte
return string; return string;
} }
if (command instanceof PercentType) { if (command instanceof PercentType brightnessState) {
final String downValue = channelConfig.downValue; final String downValue = channelConfig.downValue;
final String upValue = channelConfig.upValue; final String upValue = channelConfig.upValue;
if (command.equals(PercentType.HUNDRED) && downValue != null) { if (command.equals(PercentType.HUNDRED) && downValue != null) {
@@ -59,7 +59,7 @@ public class RollershutterItemConverter extends AbstractTransformingItemConverte
} else if (command.equals(PercentType.ZERO) && upValue != null) { } else if (command.equals(PercentType.ZERO) && upValue != null) {
return upValue; return upValue;
} else { } else {
return ((PercentType) command).toString(); return brightnessState.toString();
} }
} }

View File

@@ -83,9 +83,8 @@ public class HttpResponseListener extends BufferingResponseListener {
} }
private String responseToLogString(Response response) { private String responseToLogString(Response response) {
String logString = "Code = {" + response.getStatus() + "}, Headers = {" return "Code = {" + response.getStatus() + "}, Headers = {"
+ response.getHeaders().stream().map(HttpField::toString).collect(Collectors.joining(", ")) + response.getHeaders().stream().map(HttpField::toString).collect(Collectors.joining(", "))
+ "}, Content = {" + getContentAsString() + "}"; + "}, Content = {" + getContentAsString() + "}";
return logString;
} }
} }

View File

@@ -264,8 +264,8 @@ public class HydrawiseGraphQLClient {
private void sendGraphQLMutation(String content) private void sendGraphQLMutation(String content)
throws HydrawiseConnectionException, HydrawiseAuthenticationException, HydrawiseCommandException { throws HydrawiseConnectionException, HydrawiseAuthenticationException, HydrawiseCommandException {
Mutation mutation = new Mutation(content); Mutation mutation = new Mutation(content);
logger.debug("Sending Mutation {}", gson.toJson(mutation).toString()); logger.debug("Sending Mutation {}", gson.toJson(mutation));
String response = sendGraphQLRequest(gson.toJson(mutation).toString()); String response = sendGraphQLRequest(gson.toJson(mutation));
logger.debug("Mutation response {}", response); logger.debug("Mutation response {}", response);
try { try {
MutationResponse mResponse = gson.fromJson(response, MutationResponse.class); MutationResponse mResponse = gson.fromJson(response, MutationResponse.class);
@@ -273,7 +273,7 @@ public class HydrawiseGraphQLClient {
throw new HydrawiseCommandException("Malformed response: " + response); throw new HydrawiseCommandException("Malformed response: " + response);
} }
Optional<MutationResponseStatus> status = mResponse.data.values().stream().findFirst(); Optional<MutationResponseStatus> status = mResponse.data.values().stream().findFirst();
if (!status.isPresent()) { if (status.isEmpty()) {
throw new HydrawiseCommandException("Unknown response: " + response); throw new HydrawiseCommandException("Unknown response: " + response);
} }
if (status.get().status != StatusCode.OK) { if (status.get().status != StatusCode.OK) {

View File

@@ -27,6 +27,6 @@ public class MutationResponse {
public enum StatusCode { public enum StatusCode {
OK, OK,
WARNING, WARNING,
ERROR; ERROR
} }
} }

View File

@@ -99,8 +99,7 @@ public class HydrawiseLocalApiClient {
public LocalScheduleResponse getLocalSchedule() public LocalScheduleResponse getLocalSchedule()
throws HydrawiseConnectionException, HydrawiseAuthenticationException { throws HydrawiseConnectionException, HydrawiseAuthenticationException {
String json = doGet(localGetURL); String json = doGet(localGetURL);
LocalScheduleResponse response = gson.fromJson(json, LocalScheduleResponse.class); return gson.fromJson(json, LocalScheduleResponse.class);
return response;
} }
/** /**
@@ -191,7 +190,7 @@ public class HydrawiseLocalApiClient {
throws HydrawiseConnectionException, HydrawiseAuthenticationException, HydrawiseCommandException { throws HydrawiseConnectionException, HydrawiseAuthenticationException, HydrawiseCommandException {
String json = doGet(url); String json = doGet(url);
SetZoneResponse response = gson.fromJson(json, SetZoneResponse.class); SetZoneResponse response = gson.fromJson(json, SetZoneResponse.class);
if (response.messageType.equals("error")) { if ("error".equals(response.messageType)) {
throw new HydrawiseCommandException(response.message); throw new HydrawiseCommandException(response.message);
} }
return response.message; return response.message;

View File

@@ -12,9 +12,9 @@
*/ */
package org.openhab.binding.hydrawise.internal.discovery; package org.openhab.binding.hydrawise.internal.discovery;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jdt.annotation.Nullable;
@@ -46,7 +46,7 @@ public class HydrawiseCloudControllerDiscoveryService extends AbstractDiscoveryS
HydrawiseAccountHandler handler; HydrawiseAccountHandler handler;
public HydrawiseCloudControllerDiscoveryService() { public HydrawiseCloudControllerDiscoveryService() {
super(Collections.singleton(HydrawiseBindingConstants.THING_TYPE_CONTROLLER), TIMEOUT, true); super(Set.of(HydrawiseBindingConstants.THING_TYPE_CONTROLLER), TIMEOUT, true);
} }
@Override @Override
@@ -103,8 +103,7 @@ public class HydrawiseCloudControllerDiscoveryService extends AbstractDiscoveryS
String.valueOf(id)); String.valueOf(id));
thingDiscovered(DiscoveryResultBuilder.create(thingUID).withLabel(label).withBridge(bridgeUID) thingDiscovered(DiscoveryResultBuilder.create(thingUID).withLabel(label).withBridge(bridgeUID)
.withProperty(HydrawiseBindingConstants.CONFIG_CONTROLLER_ID, id) .withProperty(HydrawiseBindingConstants.CONFIG_CONTROLLER_ID, id)
.withRepresentationProperty(String.valueOf(HydrawiseBindingConstants.CONFIG_CONTROLLER_ID)) .withRepresentationProperty(HydrawiseBindingConstants.CONFIG_CONTROLLER_ID).build());
.build());
} }
} }
} }

View File

@@ -17,6 +17,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -122,7 +123,7 @@ public class HydrawiseAccountHandler extends BaseBridgeHandler implements Access
@Override @Override
public Collection<Class<? extends ThingHandlerService>> getServices() { public Collection<Class<? extends ThingHandlerService>> getServices() {
return Collections.singleton(HydrawiseCloudControllerDiscoveryService.class); return Set.of(HydrawiseCloudControllerDiscoveryService.class);
} }
public void addControllerListeners(HydrawiseControllerListener listener) { public void addControllerListeners(HydrawiseControllerListener listener) {
@@ -209,7 +210,7 @@ public class HydrawiseAccountHandler extends BaseBridgeHandler implements Access
if (response == null) { if (response == null) {
throw new HydrawiseConnectionException("Malformed response"); throw new HydrawiseConnectionException("Malformed response");
} }
if (response.errors != null && response.errors.size() > 0) { if (response.errors != null && !response.errors.isEmpty()) {
throw new HydrawiseConnectionException(response.errors.stream().map(error -> error.message).reduce("", throw new HydrawiseConnectionException(response.errors.stream().map(error -> error.message).reduce("",
(messages, message) -> messages + message + ". ")); (messages, message) -> messages + message + ". "));
} }

View File

@@ -215,7 +215,7 @@ public class HydrawiseLocalHandler extends BaseThingHandler {
} }
updateGroupState(CHANNEL_GROUP_ALLZONES, CHANNEL_ZONE_RUN, updateGroupState(CHANNEL_GROUP_ALLZONES, CHANNEL_ZONE_RUN,
status.running.size() > 0 ? OnOffType.ON : OnOffType.OFF); !status.running.isEmpty() ? OnOffType.ON : OnOffType.OFF);
}); });
} }

View File

@@ -13,7 +13,6 @@
package org.openhab.binding.hyperion.internal; package org.openhab.binding.hyperion.internal;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -39,7 +38,7 @@ public class HyperionDiscoveryParticipant implements MDNSDiscoveryParticipant {
@Override @Override
public Set<ThingTypeUID> getSupportedThingTypeUIDs() { public Set<ThingTypeUID> getSupportedThingTypeUIDs() {
return Collections.singleton(HyperionBindingConstants.THING_TYPE_SERVER_NG); return Set.of(HyperionBindingConstants.THING_TYPE_SERVER_NG);
} }
@Override @Override

View File

@@ -68,8 +68,6 @@ public class JsonTcpConnection {
outToServer.writeBytes(json + System.lineSeparator()); outToServer.writeBytes(json + System.lineSeparator());
outToServer.flush(); outToServer.flush();
response = inFromServer.readLine(); response = inFromServer.readLine();
} catch (IOException e) {
throw e;
} }
logger.debug("Received: {}", response); logger.debug("Received: {}", response);
return response; return response;

View File

@@ -255,10 +255,9 @@ public class HyperionHandler extends BaseThingHandler {
} }
private void handleBrightness(Command command) throws IOException, CommandUnsuccessfulException { private void handleBrightness(Command command) throws IOException, CommandUnsuccessfulException {
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
PercentType percent = (PercentType) command;
Transform transform = new Transform(); Transform transform = new Transform();
transform.setLuminanceGain(percent.doubleValue() / 100); transform.setLuminanceGain(percentCommand.doubleValue() / 100);
TransformCommand transformCommand = new TransformCommand(transform); TransformCommand transformCommand = new TransformCommand(transform);
sendCommand(transformCommand); sendCommand(transformCommand);
} else { } else {
@@ -267,9 +266,8 @@ public class HyperionHandler extends BaseThingHandler {
} }
private void handleColor(Command command) throws IOException, CommandUnsuccessfulException { private void handleColor(Command command) throws IOException, CommandUnsuccessfulException {
if (command instanceof HSBType) { if (command instanceof HSBType hsbCommand) {
HSBType color = (HSBType) command; Color c = new Color(hsbCommand.getRGB());
Color c = new Color(color.getRGB());
int r = c.getRed(); int r = c.getRed();
int g = c.getGreen(); int g = c.getGreen();
int b = c.getBlue(); int b = c.getBlue();

View File

@@ -176,7 +176,6 @@ public class HyperionNgHandler extends BaseThingHandler {
// update Hyperion, older API compatibility // update Hyperion, older API compatibility
Hyperion hyperion = info.getHyperion(); Hyperion hyperion = info.getHyperion();
if (hyperion != null) { if (hyperion != null) {
updateHyperion(hyperion); updateHyperion(hyperion);
} }
@@ -422,9 +421,8 @@ public class HyperionNgHandler extends BaseThingHandler {
} }
private void handleBrightness(Command command) throws IOException, CommandUnsuccessfulException { private void handleBrightness(Command command) throws IOException, CommandUnsuccessfulException {
if (command instanceof PercentType) { if (command instanceof PercentType percentCommand) {
PercentType percent = (PercentType) command; int brightnessValue = percentCommand.intValue();
int brightnessValue = percent.intValue();
Adjustment adjustment = new Adjustment(); Adjustment adjustment = new Adjustment();
adjustment.setBrightness(brightnessValue); adjustment.setBrightness(brightnessValue);
@@ -437,9 +435,8 @@ public class HyperionNgHandler extends BaseThingHandler {
} }
private void handleColor(Command command) throws IOException, CommandUnsuccessfulException { private void handleColor(Command command) throws IOException, CommandUnsuccessfulException {
if (command instanceof HSBType) { if (command instanceof HSBType hsbCommand) {
HSBType color = (HSBType) command; Color c = new Color(hsbCommand.getRGB());
Color c = new Color(color.getRGB());
int r = c.getRed(); int r = c.getRed();
int g = c.getGreen(); int g = c.getGreen();
int b = c.getBlue(); int b = c.getBlue();

View File

@@ -45,7 +45,7 @@ public class Iammeter3080THandler extends IammeterBaseHandler {
JsonObject iammeterData = iammeterDataElement.getAsJsonObject(); JsonObject iammeterData = iammeterDataElement.getAsJsonObject();
String keyWord = "Datas"; String keyWord = "Datas";
if (iammeterData.has("Datas") && iammeterData.has("SN")) { if (iammeterData.has("Datas") && iammeterData.has("SN")) {
String groups[] = { "powerPhaseA", "powerPhaseB", "powerPhaseC" }; String[] groups = { "powerPhaseA", "powerPhaseB", "powerPhaseC" };
for (int row = 0; row < groups.length; row++) { for (int row = 0; row < groups.length; row++) {
String gpName = groups[row]; String gpName = groups[row];
List<Channel> chnList = getThing().getChannelsOfGroup(gpName); List<Channel> chnList = getThing().getChannelsOfGroup(gpName);

View File

@@ -200,13 +200,12 @@ public class IAqualinkHandler extends BaseThingHandler {
: "on".equals(command.toString()) ? "1" : command.toString(); : "on".equals(command.toString()) ? "1" : command.toString();
client.lightCommand(serialNumber, sessionId, auxId, cmd, client.lightCommand(serialNumber, sessionId, auxId, cmd,
AuxiliaryType.fromChannelTypeUID(getChannelTypeUID(channelUID)).getSubType()); AuxiliaryType.fromChannelTypeUID(getChannelTypeUID(channelUID)).getSubType());
} else if (command instanceof OnOffType) { } else if (command instanceof OnOffType onOffCommand) {
// these are toggle commands and require we have the current state to turn on/off // these are toggle commands and require we have the current state to turn on/off
Auxiliary[] auxs = client.getAux(serialNumber, sessionId); Auxiliary[] auxs = client.getAux(serialNumber, sessionId);
Optional<Auxiliary> optional = Arrays.stream(auxs).filter(o -> o.getName().equals(channelName)) Optional<Auxiliary> optional = Arrays.stream(auxs).filter(o -> o.getName().equals(channelName))
.findFirst(); .findFirst();
if (optional.isPresent()) { if (optional.isPresent()) {
OnOffType onOffCommand = (OnOffType) command;
State currentState = toState(channelName, "Switch", optional.get().getState()); State currentState = toState(channelName, "Switch", optional.get().getState());
if (!currentState.equals(onOffCommand)) { if (!currentState.equals(onOffCommand)) {
client.auxSetCommand(serialNumber, sessionId, channelName); client.auxSetCommand(serialNumber, sessionId, channelName);
@@ -226,8 +225,7 @@ public class IAqualinkHandler extends BaseThingHandler {
client.setPoolTemp(serialNumber, sessionId, value.floatValue()); client.setPoolTemp(serialNumber, sessionId, value.floatValue());
} }
} }
} else if (command instanceof OnOffType) { } else if (command instanceof OnOffType onOffCommand) {
OnOffType onOffCommand = (OnOffType) command;
// these are toggle commands and require we have the current state to turn on/off // these are toggle commands and require we have the current state to turn on/off
if (channelName.startsWith("onetouch_")) { if (channelName.startsWith("onetouch_")) {
OneTouch[] ota = client.getOneTouch(serialNumber, sessionId); OneTouch[] ota = client.getOneTouch(serialNumber, sessionId);

View File

@@ -14,7 +14,6 @@ package org.openhab.binding.icalendar.internal;
import static org.openhab.binding.icalendar.internal.ICalendarBindingConstants.*; import static org.openhab.binding.icalendar.internal.ICalendarBindingConstants.*;
import java.util.Collections;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -52,8 +51,8 @@ import org.slf4j.LoggerFactory;
public class ICalendarHandlerFactory extends BaseThingHandlerFactory { public class ICalendarHandlerFactory extends BaseThingHandlerFactory {
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Stream private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Stream
.of(Collections.singleton(THING_TYPE_CALENDAR), Collections.singleton(THING_TYPE_FILTERED_EVENTS)) .of(Set.of(THING_TYPE_CALENDAR), Set.of(THING_TYPE_FILTERED_EVENTS)).flatMap(Set::stream)
.flatMap(Set::stream).collect(Collectors.toSet()); .collect(Collectors.toSet());
private final Logger logger = LoggerFactory.getLogger(ICalendarHandlerFactory.class); private final Logger logger = LoggerFactory.getLogger(ICalendarHandlerFactory.class);
private final HttpClient sharedHttpClient; private final HttpClient sharedHttpClient;
@@ -81,8 +80,8 @@ public class ICalendarHandlerFactory extends BaseThingHandlerFactory {
return null; return null;
} }
if (thingTypeUID.equals(THING_TYPE_CALENDAR)) { if (thingTypeUID.equals(THING_TYPE_CALENDAR)) {
if (thing instanceof Bridge) { if (thing instanceof Bridge bridge) {
return new ICalendarHandler((Bridge) thing, sharedHttpClient, eventPublisher, tzProvider); return new ICalendarHandler(bridge, sharedHttpClient, eventPublisher, tzProvider);
} else { } else {
logger.warn( logger.warn(
"The API of iCalendar has changed. You have to recreate the calendar according to the docs."); "The API of iCalendar has changed. You have to recreate the calendar according to the docs.");

View File

@@ -232,9 +232,10 @@ public class EventFilterHandler extends BaseThingHandler implements CalendarUpda
thingBuilder.withoutChannel(toDelete.getUID()); thingBuilder.withoutChannel(toDelete.getUID());
}); });
resultChannels.stream().filter((ResultChannelSet current) -> { resultChannels
return (getThing().getChannelsOfGroup(current.resultGroup.toString()).size() == 0); .stream().filter((ResultChannelSet current) -> (getThing()
}).forEach((ResultChannelSet current) -> { .getChannelsOfGroup(current.resultGroup.toString()).isEmpty()))
.forEach((ResultChannelSet current) -> {
for (ChannelBuilder builder : handlerCallback.createChannelBuilders(current.resultGroup, for (ChannelBuilder builder : handlerCallback.createChannelBuilders(current.resultGroup,
GROUP_TYPE_UID)) { GROUP_TYPE_UID)) {
Channel currentChannel = builder.build(); Channel currentChannel = builder.build();

View File

@@ -451,10 +451,10 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat
* @param childHandler the handler to be updated * @param childHandler the handler to be updated
*/ */
private void updateChild(@Nullable ThingHandler childHandler) { private void updateChild(@Nullable ThingHandler childHandler) {
if (childHandler instanceof CalendarUpdateListener) { if (childHandler instanceof CalendarUpdateListener updateListener) {
logger.trace("Notifying {} about fresh calendar.", childHandler.getThing().getUID()); logger.trace("Notifying {} about fresh calendar.", childHandler.getThing().getUID());
try { try {
((CalendarUpdateListener) childHandler).onCalendarUpdated(); updateListener.onCalendarUpdated();
} catch (Exception e) { } catch (Exception e) {
logger.trace("The update of a child handler failed. Ignoring.", e); logger.trace("The update of a child handler failed. Ignoring.", e);
} }

View File

@@ -21,12 +21,12 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
*/ */
@NonNullByDefault @NonNullByDefault
public class EventTextFilter { public class EventTextFilter {
public static enum Type { public enum Type {
TEXT, TEXT,
REGEX REGEX
} }
public static enum Field { public enum Field {
SUMMARY, SUMMARY,
DESCRIPTION, DESCRIPTION,
COMMENT, COMMENT,

View File

@@ -89,8 +89,8 @@ public class ICloudHandlerFactory extends BaseThingHandlerFactory {
@Override @Override
protected void removeHandler(ThingHandler thingHandler) { protected void removeHandler(ThingHandler thingHandler) {
if (thingHandler instanceof ICloudAccountBridgeHandler) { if (thingHandler instanceof ICloudAccountBridgeHandler iCloudAccountBridgeHandler) {
unregisterDeviceDiscoveryService((ICloudAccountBridgeHandler) thingHandler); unregisterDeviceDiscoveryService(iCloudAccountBridgeHandler);
} }
} }

View File

@@ -112,16 +112,13 @@ public class ICloudAccountBridgeHandler extends BaseBridgeHandler {
authState = AuthState.INITIAL; authState = AuthState.INITIAL;
} }
this.iCloudDeviceInformationCache = new ExpiringCache<>(CACHE_EXPIRY, () -> { this.iCloudDeviceInformationCache = new ExpiringCache<>(CACHE_EXPIRY,
return callApiWithRetryAndExceptionHandling(() -> { () -> callApiWithRetryAndExceptionHandling(() ->
// callApiWithRetryAndExceptionHanlding ensures that iCloudService is not null when the following is // callApiWithRetryAndExceptionHanlding ensures that iCloudService is not null when the following is
// called. Cannot use method local iCloudService instance here, because instance may be replaced with a // called. Cannot use method local iCloudService instance here, because instance may be replaced with a
// new // new
// one during retry. // one during retry.
return iCloudService.getDevices().refreshClient(); iCloudService.getDevices().refreshClient()));
});
});
updateStatus(ThingStatus.UNKNOWN); updateStatus(ThingStatus.UNKNOWN);

View File

@@ -160,8 +160,8 @@ public class ICloudDeviceHandler extends BaseThingHandler implements ICloudDevic
Bridge bridge = getBridge(); Bridge bridge = getBridge();
if (bridge != null) { if (bridge != null) {
ThingHandler bridgeHandler = bridge.getHandler(); ThingHandler bridgeHandler = bridge.getHandler();
if (bridgeHandler instanceof ICloudAccountBridgeHandler) { if (bridgeHandler instanceof ICloudAccountBridgeHandler iCloudAccountBridgeHandler) {
((ICloudAccountBridgeHandler) bridgeHandler).unregisterListener(this); iCloudAccountBridgeHandler.unregisterListener(this);
} }
} }
super.dispose(); super.dispose();

View File

@@ -74,8 +74,8 @@ public class TestICloud {
@BeforeEach @BeforeEach
public void setUp() { public void setUp() {
final Logger logger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); final Logger logger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
if (logger instanceof ch.qos.logback.classic.Logger) { if (logger instanceof ch.qos.logback.classic.Logger qLogger) {
((ch.qos.logback.classic.Logger) logger).setLevel(ch.qos.logback.classic.Level.DEBUG); qLogger.setLevel(ch.qos.logback.classic.Level.DEBUG);
} }
} }
@@ -122,7 +122,6 @@ public class TestICloud {
@Test @Test
@EnabledIfSystemProperty(named = "icloud.test.email", matches = ".*", disabledReason = "Only for manual execution.") @EnabledIfSystemProperty(named = "icloud.test.email", matches = ".*", disabledReason = "Only for manual execution.")
public void testDiscovery() { public void testDiscovery() {
String icloudDeviceRespond = """ String icloudDeviceRespond = """
{ {
"userInfo": { "userInfo": {

View File

@@ -411,8 +411,8 @@ public class IhcHandler extends BaseThingHandler implements IhcEventListener {
} }
private List<IhcEnumValue> getEnumValues(WSResourceValue value) { private List<IhcEnumValue> getEnumValues(WSResourceValue value) {
if (value instanceof WSEnumValue) { if (value instanceof WSEnumValue enumValue) {
return enumDictionary.getEnumValues(((WSEnumValue) value).definitionTypeID); return enumDictionary.getEnumValues(enumValue.definitionTypeID);
} }
return null; return null;
} }
@@ -764,8 +764,8 @@ public class IhcHandler extends BaseThingHandler implements IhcEventListener {
} }
private void checkPotentialButtonPresses(WSResourceValue value) { private void checkPotentialButtonPresses(WSResourceValue value) {
if (value instanceof WSBooleanValue) { if (value instanceof WSBooleanValue booleanValue) {
if (((WSBooleanValue) value).value) { if (booleanValue.value) {
// potential button press // potential button press
lastUpdate.put(value.resourceID, LocalDateTime.now()); lastUpdate.put(value.resourceID, LocalDateTime.now());
updateTriggers(value.resourceID, Duration.ZERO); updateTriggers(value.resourceID, Duration.ZERO);

View File

@@ -96,8 +96,8 @@ public class PushButtonToCommandProfile implements TriggerProfile {
long retval; long retval;
Object paramValue = context.getConfiguration().get(param); Object paramValue = context.getConfiguration().get(param);
logger.debug("Configuring profile with {} parameter '{}'", param, paramValue); logger.debug("Configuring profile with {} parameter '{}'", param, paramValue);
if (paramValue instanceof BigDecimal) { if (paramValue instanceof BigDecimal decimalParam) {
retval = ((BigDecimal) paramValue).longValue(); retval = decimalParam.longValue();
} else { } else {
logger.debug("Parameter '{}' is not of type BigDecimal, using default value '{}'", param, defValue); logger.debug("Parameter '{}' is not of type BigDecimal, using default value '{}'", param, defValue);
retval = defValue; retval = defValue;

Some files were not shown because too many files have changed in this diff Show More