diff --git a/io.openems.backend.b2brest/src/io/openems/backend/b2brest/RestHandler.java b/io.openems.backend.b2brest/src/io/openems/backend/b2brest/RestHandler.java index 337da975af9..f5ee2505ae6 100644 --- a/io.openems.backend.b2brest/src/io/openems/backend/b2brest/RestHandler.java +++ b/io.openems.backend.b2brest/src/io/openems/backend/b2brest/RestHandler.java @@ -197,11 +197,9 @@ private void handleJsonRpc(User user, Request baseRequest, HttpServletRequest ht } // parse JSON-RPC Request var message = JsonrpcMessage.from(json); - if (!(message instanceof JsonrpcRequest)) { + if (!(message instanceof JsonrpcRequest request)) { throw new OpenemsException("Only JSON-RPC Request is supported here."); } - var request = (JsonrpcRequest) message; - // handle the request CompletableFuture responseFuture = this.parent.jsonRpcRequestHandler .handleRequest(this.parent.getName(), user, request); diff --git a/io.openems.backend.common/src/io/openems/backend/common/metadata/Metadata.java b/io.openems.backend.common/src/io/openems/backend/common/metadata/Metadata.java index 79696ccbde7..eeee757a2de 100644 --- a/io.openems.backend.common/src/io/openems/backend/common/metadata/Metadata.java +++ b/io.openems.backend.common/src/io/openems/backend/common/metadata/Metadata.java @@ -194,8 +194,8 @@ public static String activeStateChannelsToString( var states = new HashMap>(); for (Entry entry : activeStateChannels.entrySet()) { var detail = entry.getValue().getDetail(); - if (detail instanceof ChannelDetailState) { - var level = ((ChannelDetailState) detail).getLevel(); + if (detail instanceof ChannelDetailState cds) { + var level = cds.getLevel(); var channelsByComponent = states.get(level); if (channelsByComponent == null) { channelsByComponent = HashMultimap.create(); diff --git a/io.openems.backend.core/src/io/openems/backend/core/jsonrpcrequesthandler/CoreJsonRpcRequestHandlerImpl.java b/io.openems.backend.core/src/io/openems/backend/core/jsonrpcrequesthandler/CoreJsonRpcRequestHandlerImpl.java index 275e0af47c8..30e5b4ddeb9 100644 --- a/io.openems.backend.core/src/io/openems/backend/core/jsonrpcrequesthandler/CoreJsonRpcRequestHandlerImpl.java +++ b/io.openems.backend.core/src/io/openems/backend/core/jsonrpcrequesthandler/CoreJsonRpcRequestHandlerImpl.java @@ -98,26 +98,21 @@ private void updateConfig(Config config) { @Override public CompletableFuture handleRequest(String context, User user, JsonrpcRequest request) throws OpenemsNamedException { - switch (request.getMethod()) { - - case EdgeRpcRequest.METHOD: - return this.edgeRpcRequestHandler.handleRequest(user, request.getId(), EdgeRpcRequest.from(request)); - - case GetEdgesStatusRequest.METHOD: - return this.handleGetEdgesStatusRequest(user, request.getId(), GetEdgesStatusRequest.from(request)); - - case GetEdgesChannelsValuesRequest.METHOD: - return this.handleGetEdgesChannelsValuesRequest(user, request.getId(), + return switch (request.getMethod()) { + case EdgeRpcRequest.METHOD // + -> this.edgeRpcRequestHandler.handleRequest(user, request.getId(), EdgeRpcRequest.from(request)); + case GetEdgesStatusRequest.METHOD // + -> this.handleGetEdgesStatusRequest(user, request.getId(), GetEdgesStatusRequest.from(request)); + case GetEdgesChannelsValuesRequest.METHOD // + -> this.handleGetEdgesChannelsValuesRequest(user, request.getId(), GetEdgesChannelsValuesRequest.from(request)); - - case SetGridConnScheduleRequest.METHOD: - return this.handleSetGridConnScheduleRequest(user, request.getId(), - SetGridConnScheduleRequest.from(request)); - - default: + case SetGridConnScheduleRequest.METHOD // + -> this.handleSetGridConnScheduleRequest(user, request.getId(), SetGridConnScheduleRequest.from(request)); + default -> { this.logWarn(context, "Unhandled Request: " + request); throw OpenemsError.JSONRPC_UNHANDLED_METHOD.exception(request.getMethod()); } + }; } /** diff --git a/io.openems.backend.edgewebsocket/src/io/openems/backend/edgewebsocket/OnNotification.java b/io.openems.backend.edgewebsocket/src/io/openems/backend/edgewebsocket/OnNotification.java index 2ccb8cc68a9..d4250287c9e 100644 --- a/io.openems.backend.edgewebsocket/src/io/openems/backend/edgewebsocket/OnNotification.java +++ b/io.openems.backend.edgewebsocket/src/io/openems/backend/edgewebsocket/OnNotification.java @@ -1,5 +1,7 @@ package io.openems.backend.edgewebsocket; +import static io.openems.common.utils.FunctionUtils.doNothing; + import java.util.Map.Entry; import java.util.concurrent.TimeUnit; @@ -118,14 +120,17 @@ private void handleDataNotification(AbstractDataNotification message, WsData wsD var edgeId = wsData.assertEdgeId(message); try { - // TODO java 21 switch case with type - if (message instanceof TimestampedDataNotification timestampNotification) { + switch (message) { + case TimestampedDataNotification timestampNotification -> { wsData.edgeCache.updateCurrentData(timestampNotification); this.parent.timedataManager.write(edgeId, timestampNotification); - } else if (message instanceof AggregatedDataNotification aggregatedNotification) { + } + case AggregatedDataNotification aggregatedNotification -> { wsData.edgeCache.updateAggregatedData(aggregatedNotification); this.parent.timedataManager.write(edgeId, aggregatedNotification); } + case ResendDataNotification resendNotification -> doNothing(); // handled in handleResendDataNotification() + } } catch (IllegalArgumentException e) { e.printStackTrace(); } diff --git a/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/MetadataOdoo.java b/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/MetadataOdoo.java index c4e0d1c1549..6c16b5f2315 100644 --- a/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/MetadataOdoo.java +++ b/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/MetadataOdoo.java @@ -320,40 +320,36 @@ public void handleEvent(Event event) { var reader = new EventReader(event); switch (event.getTopic()) { - case Edge.Events.ON_SET_ONLINE: { + case Edge.Events.ON_SET_ONLINE -> { var edgeId = reader.getString(Edge.Events.OnSetOnline.EDGE_ID); var isOnline = reader.getBoolean(Edge.Events.OnSetOnline.IS_ONLINE); this.getEdge(edgeId).ifPresent(edge -> { - if (edge instanceof MyEdge) { + if (edge instanceof MyEdge myEdge) { // Set OpenEMS Is Connected in Odoo/Postgres - this.postgresHandler.getPeriodicWriteWorker().onSetOnline((MyEdge) edge, isOnline); + this.postgresHandler.getPeriodicWriteWorker().onSetOnline(myEdge, isOnline); } }); } - break; - case Edge.Events.ON_SET_CONFIG: - this.onSetConfigEvent(reader); - break; + case Edge.Events.ON_SET_CONFIG // + -> this.onSetConfigEvent(reader); - case Edge.Events.ON_SET_VERSION: { + case Edge.Events.ON_SET_VERSION -> { var edge = (MyEdge) reader.getProperty(Edge.Events.OnSetVersion.EDGE); var version = (SemanticVersion) reader.getProperty(Edge.Events.OnSetVersion.VERSION); // Set Version in Odoo this.odooHandler.writeEdge(edge, new FieldValue<>(Field.EdgeDevice.OPENEMS_VERSION, version.toString())); } - break; - case Edge.Events.ON_SET_LASTMESSAGE: { + case Edge.Events.ON_SET_LASTMESSAGE -> { var edge = (MyEdge) reader.getProperty(Edge.Events.OnSetLastmessage.EDGE); // Set LastMessage timestamp in Odoo/Postgres this.postgresHandler.getPeriodicWriteWorker().onLastMessage(edge); } - break; - case Edge.Events.ON_SET_SUM_STATE: { + case Edge.Events.ON_SET_SUM_STATE -> { var edgeId = reader.getString(Edge.Events.OnSetSumState.EDGE_ID); var sumState = (Level) reader.getProperty(Edge.Events.OnSetSumState.SUM_STATE); @@ -361,9 +357,8 @@ public void handleEvent(Event event) { // Set Sum-State in Odoo/Postgres this.postgresHandler.getPeriodicWriteWorker().onSetSumState(edge, sumState); } - break; - case Edge.Events.ON_SET_PRODUCTTYPE: { + case Edge.Events.ON_SET_PRODUCTTYPE -> { var edge = (MyEdge) reader.getProperty(Edge.Events.OnSetProducttype.EDGE); var producttype = reader.getString(Edge.Events.OnSetProducttype.PRODUCTTYPE); // Set Producttype in Odoo/Postgres @@ -376,8 +371,6 @@ public void handleEvent(Event event) { } }); } - break; - } } @@ -568,10 +561,11 @@ public List getSumStateAlertingSettings(String edgeId) @Override public void setUserAlertingSettings(User user, String edgeId, List settings) throws OpenemsException { - if (user instanceof MyUser odooUser) { - this.odooHandler.setUserAlertingSettings(odooUser, edgeId, settings); - } else { - throw new OpenemsException("User information is from foreign source!!"); + switch (user) { + case MyUser odooUser // + -> this.odooHandler.setUserAlertingSettings(odooUser, edgeId, settings); + default // + -> throw new OpenemsException("User information is from foreign source!!"); } } diff --git a/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/FieldValue.java b/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/FieldValue.java index 3a6b88d5a41..00011462ead 100644 --- a/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/FieldValue.java +++ b/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/FieldValue.java @@ -1,9 +1,10 @@ package io.openems.backend.metadata.odoo.odoo; +import static io.openems.common.utils.StringUtils.toShortString; + import com.google.gson.JsonElement; import io.openems.backend.metadata.odoo.Field; -import io.openems.common.utils.StringUtils; public class FieldValue { private final Field field; @@ -24,14 +25,14 @@ public T getValue() { @Override public String toString() { - String string; - if (this.value instanceof JsonElement) { - string = StringUtils.toShortString((JsonElement) this.value, 100); - } else if (this.value instanceof String) { - string = StringUtils.toShortString((String) this.value, 100); - } else { - string = this.value.toString(); - } + var string = switch (this.value) { + case JsonElement je // + -> toShortString(je, 100); + case String s // + -> toShortString(s, 100); + default // + -> this.value.toString(); + }; string = string.replace("\n", ""); return this.field.id() + ":" + string; } diff --git a/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooHandler.java b/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooHandler.java index b79cab0cace..1e5e1476595 100644 --- a/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooHandler.java +++ b/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooHandler.java @@ -925,8 +925,8 @@ public Optional getSerialNumberForEdge(Edge edge) { Field.EdgeDevice.STOCK_PRODUCTION_LOT_ID); var serialNumber = serialNumberField.get(Field.EdgeDevice.STOCK_PRODUCTION_LOT_ID.id()); - if (serialNumber instanceof Object[] && ((Object[]) serialNumber).length > 1) { - return getAsOptional(((Object[]) serialNumber)[1], String.class); + if (serialNumber instanceof Object[] sns && sns.length > 1) { + return getAsOptional(sns[1], String.class); } return Optional.empty(); } catch (OpenemsException ex) { diff --git a/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooUtils.java b/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooUtils.java index fd92b4cb783..844be68bfe1 100644 --- a/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooUtils.java +++ b/io.openems.backend.metadata.odoo/src/io/openems/backend/metadata/odoo/odoo/OdooUtils.java @@ -536,10 +536,10 @@ protected static Optional getAsOptional(Object object, Cla * @return the odoo reference id or empty {@link Optional} */ protected static Optional getOdooReferenceId(Object object) { - if (object instanceof Object[] odooReference) { - if (odooReference.length > 0 && odooReference[0] instanceof Integer) { - return Optional.of((Integer) odooReference[0]); - } + if (object instanceof Object[] odooReference // + && odooReference.length > 0 // + && odooReference[0] instanceof Integer i) { + return Optional.of(i); } return Optional.empty(); diff --git a/io.openems.common/src/io/openems/common/jsonrpc/base/AbstractJsonrpcRequest.java b/io.openems.common/src/io/openems/common/jsonrpc/base/AbstractJsonrpcRequest.java index 1a7e81baa04..6a1975fd9e4 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/base/AbstractJsonrpcRequest.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/base/AbstractJsonrpcRequest.java @@ -11,7 +11,7 @@ * @see JSON-RPC * specification */ -public abstract class AbstractJsonrpcRequest extends JsonrpcMessage { +public abstract sealed class AbstractJsonrpcRequest extends JsonrpcMessage permits JsonrpcRequest, JsonrpcNotification { private final String method; diff --git a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcMessage.java b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcMessage.java index 2b4ad440394..2267ec1ccc1 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcMessage.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcMessage.java @@ -20,7 +20,7 @@ * @see JSON-RPC * specification */ -public abstract class JsonrpcMessage { +public abstract sealed class JsonrpcMessage permits AbstractJsonrpcRequest, JsonrpcResponse { public static final String JSONRPC_VERSION = "2.0"; diff --git a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcNotification.java b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcNotification.java index 85256cbaf39..5600650a8f4 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcNotification.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcNotification.java @@ -14,7 +14,7 @@ * @see JSON-RPC * specification */ -public abstract class JsonrpcNotification extends AbstractJsonrpcRequest { +public abstract non-sealed class JsonrpcNotification extends AbstractJsonrpcRequest { public JsonrpcNotification(String method) { super(method); diff --git a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcRequest.java b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcRequest.java index 5f48be201e6..3d0c5940381 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcRequest.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcRequest.java @@ -23,7 +23,7 @@ * @see JSON-RPC * specification */ -public abstract class JsonrpcRequest extends AbstractJsonrpcRequest { +public abstract non-sealed class JsonrpcRequest extends AbstractJsonrpcRequest { public static final int DEFAULT_TIMEOUT_SECONDS = 60; public static final int NO_TIMEOUT = -1; diff --git a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcResponse.java b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcResponse.java index 87bf060e807..acddc648aa7 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcResponse.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcResponse.java @@ -23,7 +23,7 @@ * @see JSON-RPC * specification */ -public abstract class JsonrpcResponse extends JsonrpcMessage { +public abstract non-sealed class JsonrpcResponse extends JsonrpcMessage { /** * Parses a JSON String to a {@link JsonrpcResponse}. diff --git a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcResponseSuccess.java b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcResponseSuccess.java index ba731e061cc..f4167e7c44e 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcResponseSuccess.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/base/JsonrpcResponseSuccess.java @@ -32,11 +32,10 @@ public abstract class JsonrpcResponseSuccess extends JsonrpcResponse { * @throws OpenemsNamedException if it was not a Success Response */ public static JsonrpcResponseSuccess from(JsonObject j) throws OpenemsNamedException { - var response = JsonrpcResponse.from(j); - if (!(response instanceof JsonrpcResponseSuccess)) { - throw OpenemsError.GENERIC.exception("Expected a JSON-RPC Success Response"); - } - return (JsonrpcResponseSuccess) response; + return switch (JsonrpcResponse.from(j)) { + case JsonrpcResponseSuccess r -> r; + default -> throw OpenemsError.GENERIC.exception("Expected a JSON-RPC Success Response"); + }; } public JsonrpcResponseSuccess(UUID id) { diff --git a/io.openems.common/src/io/openems/common/jsonrpc/notification/AbstractDataNotification.java b/io.openems.common/src/io/openems/common/jsonrpc/notification/AbstractDataNotification.java index 506ed5037e6..4047811809c 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/notification/AbstractDataNotification.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/notification/AbstractDataNotification.java @@ -26,8 +26,8 @@ * } * */ -// TODO change to sealed class -public abstract class AbstractDataNotification extends JsonrpcNotification { +public abstract sealed class AbstractDataNotification extends JsonrpcNotification + permits TimestampedDataNotification, AggregatedDataNotification, ResendDataNotification { private final TreeBasedTable data; diff --git a/io.openems.common/src/io/openems/common/jsonrpc/notification/AggregatedDataNotification.java b/io.openems.common/src/io/openems/common/jsonrpc/notification/AggregatedDataNotification.java index a31f44d65b5..366d8a03c81 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/notification/AggregatedDataNotification.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/notification/AggregatedDataNotification.java @@ -22,7 +22,7 @@ * } * */ -public class AggregatedDataNotification extends AbstractDataNotification { +public final class AggregatedDataNotification extends AbstractDataNotification { public static final String METHOD = "aggregatedData"; diff --git a/io.openems.common/src/io/openems/common/jsonrpc/notification/ResendDataNotification.java b/io.openems.common/src/io/openems/common/jsonrpc/notification/ResendDataNotification.java index 43c9dc0b851..67236d6e650 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/notification/ResendDataNotification.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/notification/ResendDataNotification.java @@ -21,7 +21,7 @@ * } * */ -public class ResendDataNotification extends AbstractDataNotification { +public final class ResendDataNotification extends AbstractDataNotification { public static final String METHOD = "resendData"; diff --git a/io.openems.common/src/io/openems/common/jsonrpc/notification/TimestampedDataNotification.java b/io.openems.common/src/io/openems/common/jsonrpc/notification/TimestampedDataNotification.java index be703c6cf15..af097e773a9 100644 --- a/io.openems.common/src/io/openems/common/jsonrpc/notification/TimestampedDataNotification.java +++ b/io.openems.common/src/io/openems/common/jsonrpc/notification/TimestampedDataNotification.java @@ -22,7 +22,7 @@ * } * */ -public class TimestampedDataNotification extends AbstractDataNotification { +public final class TimestampedDataNotification extends AbstractDataNotification { public static final String METHOD = "timestampedData"; diff --git a/io.openems.common/src/io/openems/common/session/Role.java b/io.openems.common/src/io/openems/common/session/Role.java index 6c60d6e8a12..9c561fc03e8 100644 --- a/io.openems.common/src/io/openems/common/session/Role.java +++ b/io.openems.common/src/io/openems/common/session/Role.java @@ -45,17 +45,13 @@ public int getLevel() { * @return the Role */ public static Role getRole(String name) { - switch (name.toLowerCase()) { - case "admin": - return ADMIN; - case "installer": - return INSTALLER; - case "owner": - return OWNER; - case "guest": - default: - return GUEST; - } + return switch (name.toLowerCase()) { + case "admin" -> ADMIN; + case "installer" -> INSTALLER; + case "owner" -> OWNER; + case "guest" -> GUEST; + default -> GUEST; + }; } /** diff --git a/io.openems.common/src/io/openems/common/timedata/Resolution.java b/io.openems.common/src/io/openems/common/timedata/Resolution.java index 8afcc764ba1..69dee3b500a 100644 --- a/io.openems.common/src/io/openems/common/timedata/Resolution.java +++ b/io.openems.common/src/io/openems/common/timedata/Resolution.java @@ -38,15 +38,12 @@ public ChronoUnit getUnit() { * @return Date without offset */ public ZonedDateTime revertInfluxDbOffset(ZonedDateTime date) { - switch (this.unit) { - case DAYS: - case MONTHS: - return date.minus(this.value, this.unit); - case MINUTES: - case HOURS: - default: - return date; - } + return switch (this.unit) { + case DAYS, MONTHS // + -> date.minus(this.value, this.unit); + default // MINUTES, HOURS, etc. + -> date; + }; } /** diff --git a/io.openems.common/src/io/openems/common/types/EdgeConfig.java b/io.openems.common/src/io/openems/common/types/EdgeConfig.java index 8014e47cae5..9b0682e3a44 100644 --- a/io.openems.common/src/io/openems/common/types/EdgeConfig.java +++ b/io.openems.common/src/io/openems/common/types/EdgeConfig.java @@ -696,37 +696,20 @@ public static Property from(AttributeDefinition ad) { description = ""; } - final OpenemsType type; - switch (ad.getType()) { - case AttributeDefinition.LONG: - type = OpenemsType.LONG; - break; - case AttributeDefinition.INTEGER: - type = OpenemsType.INTEGER; - break; - case AttributeDefinition.SHORT: - case AttributeDefinition.BYTE: - type = OpenemsType.SHORT; - break; - case AttributeDefinition.DOUBLE: - type = OpenemsType.DOUBLE; - break; - case AttributeDefinition.FLOAT: - type = OpenemsType.FLOAT; - break; - case AttributeDefinition.BOOLEAN: - type = OpenemsType.BOOLEAN; - break; - case AttributeDefinition.STRING: - case AttributeDefinition.CHARACTER: - case AttributeDefinition.PASSWORD: - type = OpenemsType.STRING; - break; - default: + final OpenemsType type = switch (ad.getType()) { + case AttributeDefinition.LONG -> OpenemsType.LONG; + case AttributeDefinition.INTEGER -> OpenemsType.INTEGER; + case AttributeDefinition.SHORT, AttributeDefinition.BYTE -> OpenemsType.SHORT; + case AttributeDefinition.DOUBLE -> OpenemsType.DOUBLE; + case AttributeDefinition.FLOAT -> OpenemsType.FLOAT; + case AttributeDefinition.BOOLEAN -> OpenemsType.BOOLEAN; + case AttributeDefinition.STRING, AttributeDefinition.CHARACTER, AttributeDefinition.PASSWORD -> + OpenemsType.STRING; + default -> { EdgeConfig.LOG.warn("AttributeDefinition type [" + ad.getType() + "] is unknown!"); - type = OpenemsType.STRING; + yield OpenemsType.STRING; } - + }; var defaultValues = ad.getDefaultValue(); JsonElement defaultValue; if (defaultValues == null) { @@ -769,15 +752,13 @@ public static Property from(AttributeDefinition ad) { var id = ad.getID(); var name = ad.getName(); - final boolean isRequired; - switch (id) { - case "alias": - // Set alias as not-required. If no alias is given it falls back to id. - isRequired = false; - break; - default: - isRequired = ad.getCardinality() == 0; - } + var isRequired = switch (id) { + case "alias" -> // + // Set alias as not-required. If no alias is given it falls back to id + false; + default // + -> ad.getCardinality() == 0; + }; return new Property(id, name, description, type, isRequired, isPassword, defaultValue, schema); } diff --git a/io.openems.common/src/io/openems/common/types/EdgeConfigDiff.java b/io.openems.common/src/io/openems/common/types/EdgeConfigDiff.java index a4b8615b629..6ce49572427 100644 --- a/io.openems.common/src/io/openems/common/types/EdgeConfigDiff.java +++ b/io.openems.common/src/io/openems/common/types/EdgeConfigDiff.java @@ -1,5 +1,7 @@ package io.openems.common.types; +import static io.openems.common.utils.StringUtils.toShortString; + import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -18,7 +20,6 @@ import io.openems.common.types.EdgeConfig.Component; import io.openems.common.types.EdgeConfigDiff.ComponentDiff.Change; import io.openems.common.types.EdgeConfigDiff.ComponentDiff.OldNewProperty; -import io.openems.common.utils.StringUtils; public class EdgeConfigDiff { @@ -325,30 +326,27 @@ public String getAsText() { final var component = componentEntry.getValue(); var change = component.properties.entrySet().stream() // .filter(e -> { - switch (e.getKey()) { - case "_lastChangeAt": - case "_lastChangeBy": - case "org.ops4j.pax.logging.appender.name": - // ignore - return false; - default: - return true; - } + return switch (e.getKey()) { + case // + "_lastChangeAt", // + "_lastChangeBy", // + "org.ops4j.pax.logging.appender.name" // + -> false; // ignore + default // + -> true; + }; }) // .map(e -> { - String oldValue = StringUtils.toShortString(e.getValue().getOld(), 20); - String newValue = StringUtils.toShortString(e.getValue().getNew(), 20); - - switch (component.change) { - case CREATED: - return e.getKey() + "=" + newValue; - case UPDATED: - return e.getKey() + "=" + newValue + " [was:" + oldValue + "]"; - case DELETED: - return e.getKey() + " [was:" + oldValue + "]"; - } - assert true; - return ""; // can never happen + var oldValue = toShortString(e.getValue().getOld(), 20); + var newValue = toShortString(e.getValue().getNew(), 20); + return switch (component.change) { + case CREATED // + -> e.getKey() + "=" + newValue; + case UPDATED // + -> e.getKey() + "=" + newValue + " [was:" + oldValue + "]"; + case DELETED // + -> e.getKey() + " [was:" + oldValue + "]"; + }; }) // .collect(Collectors.joining(", ")); if (change.isEmpty()) { diff --git a/io.openems.common/src/io/openems/common/utils/ObjectUtils.java b/io.openems.common/src/io/openems/common/utils/ObjectUtils.java index 55b76a66366..4a751a514c3 100644 --- a/io.openems.common/src/io/openems/common/utils/ObjectUtils.java +++ b/io.openems.common/src/io/openems/common/utils/ObjectUtils.java @@ -12,11 +12,10 @@ public class ObjectUtils { * @return a {@link String} or null */ public static String getAsString(Object object) { - if (object instanceof String) { - return (String) object; - } - - return null; + return switch (object) { + case String s -> s; + case null, default -> null; + }; } /** @@ -37,11 +36,10 @@ public static Optional getAsOptionalString(Object object) { * @return a {@link Integer} or null */ public static Integer getAsInteger(Object object) { - if (object instanceof Integer) { - return (Integer) object; - } - - return null; + return switch (object) { + case Integer i -> i; + case null, default -> null; + }; } /** @@ -52,11 +50,9 @@ public static Integer getAsInteger(Object object) { * @return a {@link Object} array or empty array */ public static Object[] getAsObjectArrray(Object object) { - if (object instanceof Object[]) { - return (Object[]) object; - } - - return new Object[] {}; + return switch (object) { + case Object[] os -> os; + case null, default -> null; + }; } - } diff --git a/io.openems.common/src/io/openems/common/websocket/AbstractWebsocketServer.java b/io.openems.common/src/io/openems/common/websocket/AbstractWebsocketServer.java index 64a90b1bda4..6b872b19fa6 100644 --- a/io.openems.common/src/io/openems/common/websocket/AbstractWebsocketServer.java +++ b/io.openems.common/src/io/openems/common/websocket/AbstractWebsocketServer.java @@ -162,10 +162,11 @@ public Map debugMetrics() { @Override protected OnInternalError getOnInternalError() { return (t, wsDataString) -> { - if (t instanceof BindException) { - this.logError(this.log, "Unable to Bind to port [" + this.port + "]"); - } else { - this.logError(this.log, new StringBuilder() // + switch (t) { + case BindException be // + -> this.logError(this.log, "Unable to Bind to port [" + this.port + "]"); + default // + -> this.logError(this.log, new StringBuilder() // .append("OnInternalError for ").append(wsDataString).append(". ") // .append(t.getClass()).append(": ") // .append(t.getMessage()).toString()); diff --git a/io.openems.common/src/io/openems/common/websocket/MyDraft6455.java b/io.openems.common/src/io/openems/common/websocket/MyDraft6455.java index 4c4968114c6..9759e53cb25 100644 --- a/io.openems.common/src/io/openems/common/websocket/MyDraft6455.java +++ b/io.openems.common/src/io/openems/common/websocket/MyDraft6455.java @@ -698,16 +698,16 @@ private boolean isFrameSizeValid(int maxpacketsize, int realpacketsize) { * @return byte that represents which RSV bit is set. */ private byte getRsvByte(int rsv) { - switch (rsv) { - case 1: // 0100 0000 - return 0x40; - case 2: // 0010 0000 - return 0x20; - case 3: // 0001 0000 - return 0x10; - default: - return 0; - } + return switch (rsv) { + case 1 // + -> 0x40; // 0100 0000 + case 2 // + -> 0x20; // 0010 0000 + case 3 // + -> 0x10; // 0001 0000 + default // + -> 0; + }; } /** @@ -864,41 +864,26 @@ private byte[] toByteArray(long val, int bytecount) { } private byte fromOpcode(Opcode opcode) { - if (opcode == Opcode.CONTINUOUS) { - return 0; - } else if (opcode == Opcode.TEXT) { - return 1; - } else if (opcode == Opcode.BINARY) { - return 2; - } else if (opcode == Opcode.CLOSING) { - return 8; - } else if (opcode == Opcode.PING) { - return 9; - } else if (opcode == Opcode.PONG) { - return 10; - } - throw new IllegalArgumentException("Don't know how to handle " + opcode.toString()); + return switch (opcode) { + case Opcode.CONTINUOUS -> 0; + case Opcode.TEXT -> 1; + case Opcode.BINARY -> 2; + case Opcode.CLOSING -> 8; + case Opcode.PING -> 9; + case Opcode.PONG -> 10; + }; } private Opcode toOpcode(byte opcode) throws InvalidFrameException { - switch (opcode) { - case 0: - return Opcode.CONTINUOUS; - case 1: - return Opcode.TEXT; - case 2: - return Opcode.BINARY; - // 3-7 are not yet defined - case 8: - return Opcode.CLOSING; - case 9: - return Opcode.PING; - case 10: - return Opcode.PONG; - // 11-15 are not yet defined - default: - throw new InvalidFrameException("Unknown opcode " + (short) opcode); - } + return switch (opcode) { + case 0 -> Opcode.CONTINUOUS; + case 1 -> Opcode.TEXT; + case 2 -> Opcode.BINARY; + case 8 -> Opcode.CLOSING; + case 9 -> Opcode.PING; + case 10 -> Opcode.PONG; + default -> throw new InvalidFrameException("Unknown opcode " + (short) opcode); + }; } @Override @@ -1059,8 +1044,7 @@ private void processFrameIsNotFin(Framedata frame) throws InvalidDataException { private void processFrameClosing(WebSocketImpl webSocketImpl, Framedata frame) { int code = CloseFrame.NOCODE; String reason = ""; - if (frame instanceof CloseFrame) { - CloseFrame cf = (CloseFrame) frame; + if (frame instanceof CloseFrame cf) { code = cf.getCloseCode(); reason = cf.getMessage(); } diff --git a/io.openems.common/src/io/openems/common/websocket/OnMessageHandler.java b/io.openems.common/src/io/openems/common/websocket/OnMessageHandler.java index 9efe41ba425..400237e914a 100644 --- a/io.openems.common/src/io/openems/common/websocket/OnMessageHandler.java +++ b/io.openems.common/src/io/openems/common/websocket/OnMessageHandler.java @@ -56,16 +56,13 @@ public OnMessageHandler(// @Override public final void run() { try { - var message = JsonrpcMessage.from(this.message); - - if (message instanceof JsonrpcRequest request) { - this.handleJsonrpcRequest(this.ws, request); - - } else if (message instanceof JsonrpcResponse response) { - this.handleJsonrpcResponse(this.ws, response); - - } else if (message instanceof JsonrpcNotification notification) { - this.handleJsonrpcNotification(this.ws, notification); + switch (JsonrpcMessage.from(this.message)) { + case JsonrpcRequest request // + -> this.handleJsonrpcRequest(this.ws, request); + case JsonrpcResponse response // + -> this.handleJsonrpcResponse(this.ws, response); + case JsonrpcNotification notification // + -> this.handleJsonrpcNotification(this.ws, notification); } } catch (OpenemsNamedException e) { @@ -142,11 +139,12 @@ private void handleJsonrpcRequestException(WebSocket ws, JsonrpcRequest request, this.logWarn.accept(this.log, log.toString()); // Get JSON-RPC Response Error - if (t instanceof OpenemsNamedException one) { - this.sendMessage.test(ws, new JsonrpcResponseError(request.getId(), one)); - } else { - this.sendMessage.test(ws, new JsonrpcResponseError(request.getId(), t.getMessage())); - } + this.sendMessage.test(ws, switch (t) { + case OpenemsNamedException one // + -> new JsonrpcResponseError(request.getId(), one); + default // + -> new JsonrpcResponseError(request.getId(), t.getMessage()); + }); } /** diff --git a/io.openems.common/src/io/openems/common/websocket/WsData.java b/io.openems.common/src/io/openems/common/websocket/WsData.java index 852b4290125..9c3c02809b3 100644 --- a/io.openems.common/src/io/openems/common/websocket/WsData.java +++ b/io.openems.common/src/io/openems/common/websocket/WsData.java @@ -119,21 +119,18 @@ public void handleJsonrpcResponse(JsonrpcResponse response) throws OpenemsNamedE throw OpenemsError.JSONRPC_RESPONSE_WITHOUT_REQUEST.exception(response.toJsonObject()); } // this was a response on a request - if (response instanceof JsonrpcResponseSuccess) { + switch (response) { + case JsonrpcResponseSuccess success -> // Success Response -> complete future - future.complete((JsonrpcResponseSuccess) response); - - } else if (response instanceof JsonrpcResponseError) { + future.complete(success); + case JsonrpcResponseError error -> // Named OpenEMS-Error Response -> cancel future - var error = (JsonrpcResponseError) response; - var exception = new OpenemsNamedException(error.getOpenemsError(), error.getParamsAsObjectArray()); - future.completeExceptionally(exception); - - } else { + future.completeExceptionally( + new OpenemsNamedException(error.getOpenemsError(), error.getParamsAsObjectArray())); + default -> // Undefined Error Response -> cancel future - var exception = new OpenemsNamedException(OpenemsError.GENERIC, - "Response is neither JsonrpcResponseSuccess nor JsonrpcResponseError: " + response.toString()); - future.completeExceptionally(exception); + future.completeExceptionally(new OpenemsNamedException(OpenemsError.GENERIC, + "Response is neither JsonrpcResponseSuccess nor JsonrpcResponseError: " + response.toString())); } } diff --git a/io.openems.common/test/io/openems/common/utils/ObjectUtilsTest.java b/io.openems.common/test/io/openems/common/utils/ObjectUtilsTest.java new file mode 100644 index 00000000000..a2f6744ca76 --- /dev/null +++ b/io.openems.common/test/io/openems/common/utils/ObjectUtilsTest.java @@ -0,0 +1,42 @@ +package io.openems.common.utils; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import java.util.Optional; + +import org.junit.Test; + +public class ObjectUtilsTest { + + @Test + public void testGetAsString() { + assertNull(ObjectUtils.getAsString(null)); + assertNull(ObjectUtils.getAsString(new Object())); + assertEquals("string", ObjectUtils.getAsString("string")); + } + + @Test + public void testGetAsOptionalString() { + assertEquals(Optional.empty(), ObjectUtils.getAsOptionalString(null)); + assertEquals(Optional.empty(), ObjectUtils.getAsOptionalString(new Object())); + assertEquals(Optional.of("string"), ObjectUtils.getAsOptionalString("string")); + } + + @Test + public void testGetAsInteger() { + assertNull(ObjectUtils.getAsInteger(null)); + assertNull(ObjectUtils.getAsInteger(new Object())); + assertEquals((Integer) 1337, ObjectUtils.getAsInteger(1337)); + } + + @Test + public void testGetAsObjectArrray() { + assertNull(ObjectUtils.getAsObjectArrray(null)); + assertNull(ObjectUtils.getAsObjectArrray(new Object())); + final var array = new Object[] {}; + assertArrayEquals(array, ObjectUtils.getAsObjectArrray(array)); + } + +} diff --git a/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/currenthandler/AbstractMaxCurrentHandler.java b/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/currenthandler/AbstractMaxCurrentHandler.java index e5406842d18..6e5793685df 100644 --- a/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/currenthandler/AbstractMaxCurrentHandler.java +++ b/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/currenthandler/AbstractMaxCurrentHandler.java @@ -422,19 +422,16 @@ protected Double getForceCurrent(Integer minCellVoltage, Integer maxCellVoltage) } // Evaluate force charge/discharge current from current state - switch (state) { - case UNDEFINED: - case WAIT_FOR_FORCE_MODE: - return null; - case FORCE_MODE: + return switch (state) { + case UNDEFINED, WAIT_FOR_FORCE_MODE // + -> null; + case FORCE_MODE -> // TODO Plan is making the value adaptive, i.e. start with 1 A; if voltage still // decreases, then slowly increase force charge current. - return -2.; - case BLOCK_MODE: - return 0.; - } - // will never happen - return null; + -2.; + case BLOCK_MODE // + -> 0.; + }; } /** diff --git a/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/force/AbstractForceChargeDischarge.java b/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/force/AbstractForceChargeDischarge.java index 9c9c4282b86..f7100c6b41d 100644 --- a/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/force/AbstractForceChargeDischarge.java +++ b/io.openems.edge.battery.api/src/io/openems/edge/battery/protection/force/AbstractForceChargeDischarge.java @@ -74,51 +74,43 @@ public AbstractForceChargeDischarge() { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new StateHandler<>() { - @Override - protected State runAndGetNextState(Context context) throws OpenemsNamedException { - return AbstractForceChargeDischarge.this.handleUndefinedState(context.minCellVoltage, - context.maxCellVoltage); - } - }; - - case WAIT_FOR_FORCE_MODE: - return new StateHandler<>() { - private Instant enteredAt = Instant.MAX; - - @Override - protected void onEntry(Context context) throws OpenemsNamedException { - this.enteredAt = context.now(); - } - - @Override - protected State runAndGetNextState(Context context) throws OpenemsNamedException { - return AbstractForceChargeDischarge.this.handleWaitForForceModeState(context.minCellVoltage, - context.maxCellVoltage, Duration.between(this.enteredAt, context.now())); - } - }; - - case FORCE_MODE: - return new StateHandler<>() { - @Override - protected State runAndGetNextState(Context context) throws OpenemsNamedException { - return AbstractForceChargeDischarge.this.handleForceModeState(context.minCellVoltage, - context.maxCellVoltage); - } - }; - - case BLOCK_MODE: - return new StateHandler<>() { - @Override - protected State runAndGetNextState(Context context) throws OpenemsNamedException { - return AbstractForceChargeDischarge.this.handleBlockModeState(context.minCellVoltage, - context.maxCellVoltage); - } - }; - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new StateHandler<>() { + @Override + protected State runAndGetNextState(Context context) throws OpenemsNamedException { + return AbstractForceChargeDischarge.this.handleUndefinedState(context.minCellVoltage, + context.maxCellVoltage); + } + }; + case WAIT_FOR_FORCE_MODE -> new StateHandler<>() { + private Instant enteredAt = Instant.MAX; + + @Override + protected void onEntry(Context context) throws OpenemsNamedException { + this.enteredAt = context.now(); + } + + @Override + protected State runAndGetNextState(Context context) throws OpenemsNamedException { + return AbstractForceChargeDischarge.this.handleWaitForForceModeState(context.minCellVoltage, + context.maxCellVoltage, Duration.between(this.enteredAt, context.now())); + } + }; + case FORCE_MODE -> new StateHandler<>() { + @Override + protected State runAndGetNextState(Context context) throws OpenemsNamedException { + return AbstractForceChargeDischarge.this.handleForceModeState(context.minCellVoltage, + context.maxCellVoltage); + } + }; + case BLOCK_MODE -> new StateHandler<>() { + @Override + protected State runAndGetNextState(Context context) throws OpenemsNamedException { + return AbstractForceChargeDischarge.this.handleBlockModeState(context.minCellVoltage, + context.maxCellVoltage); + } + }; + }; } protected abstract State handleUndefinedState(int minCellVoltage, int maxCellVoltage); diff --git a/io.openems.edge.battery.bmw/src/io/openems/edge/battery/bmw/statemachine/StateMachine.java b/io.openems.edge.battery.bmw/src/io/openems/edge/battery/bmw/statemachine/StateMachine.java index d0e027ebc25..648baf28665 100644 --- a/io.openems.edge.battery.bmw/src/io/openems/edge/battery/bmw/statemachine/StateMachine.java +++ b/io.openems.edge.battery.bmw/src/io/openems/edge/battery/bmw/statemachine/StateMachine.java @@ -51,20 +51,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case GO_RUNNING: - return new GoRunningHandler(); - case RUNNING: - return new RunningHandler(); - case GO_STOPPED: - return new GoStoppedHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case GO_RUNNING -> new GoRunningHandler(); + case RUNNING -> new RunningHandler(); + case GO_STOPPED -> new GoStoppedHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } \ No newline at end of file diff --git a/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/BydBatteryBoxCommercialC130Impl.java b/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/BydBatteryBoxCommercialC130Impl.java index b838288b319..865326e9ce6 100644 --- a/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/BydBatteryBoxCommercialC130Impl.java +++ b/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/BydBatteryBoxCommercialC130Impl.java @@ -928,22 +928,11 @@ public void setStartStop(StartStop value) { @Override public StartStop getStartStopTarget() { - switch (this.config.startStop()) { - case AUTO: - // read StartStop-Channel - return this.startStopTarget.get(); - - case START: - // force START - return StartStop.START; - - case STOP: - // force STOP - return StartStop.STOP; - } - - assert false; - return StartStop.UNDEFINED; // can never happen + return switch (this.config.startStop()) { + case AUTO -> this.startStopTarget.get(); // read StartStop-Channel + case START -> StartStop.START; // force START + case STOP -> StartStop.STOP; // force STOP + }; } /* diff --git a/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/statemachine/StateMachine.java b/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/statemachine/StateMachine.java index 929bf195f56..d2b1bf5ab5b 100644 --- a/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/statemachine/StateMachine.java +++ b/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/statemachine/StateMachine.java @@ -51,20 +51,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case GO_RUNNING: - return new GoRunningHandler(); - case RUNNING: - return new RunningHandler(); - case GO_STOPPED: - return new GoStoppedHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case GO_RUNNING -> new GoRunningHandler(); + case RUNNING -> new RunningHandler(); + case GO_STOPPED -> new GoStoppedHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } diff --git a/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/statemachine/UndefinedHandler.java b/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/statemachine/UndefinedHandler.java index a6524f535d2..83150414f11 100644 --- a/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/statemachine/UndefinedHandler.java +++ b/io.openems.edge.battery.bydcommercial/src/io/openems/edge/battery/bydcommercial/statemachine/UndefinedHandler.java @@ -9,28 +9,20 @@ public class UndefinedHandler extends StateHandler { public State runAndGetNextState(Context context) { var battery = context.getParent(); - switch (battery.getStartStopTarget()) { - case UNDEFINED: - // Stuck in UNDEFINED State - return State.UNDEFINED; - - case START: - // force START - if (battery.hasFaults()) { - // Has Faults -> error handling - return State.ERROR; - } else { - // No Faults -> start - return State.GO_RUNNING; - } - - case STOP: - // force STOP - return State.GO_STOPPED; - } - - assert false; - return State.UNDEFINED; // can never happen + return switch (battery.getStartStopTarget()) { + case UNDEFINED // Stuck in UNDEFINED State + -> State.UNDEFINED; + + case START // force START + -> battery.hasFaults() // + // Has Faults -> error handling + ? State.ERROR + // No Faults -> start + : State.GO_RUNNING; + + case STOP // force STOP + -> State.GO_STOPPED; + }; } } diff --git a/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/BatteryFeneconCommercialImpl.java b/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/BatteryFeneconCommercialImpl.java index 869077dbe64..16aa7e05552 100644 --- a/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/BatteryFeneconCommercialImpl.java +++ b/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/BatteryFeneconCommercialImpl.java @@ -1303,21 +1303,10 @@ public void setStartStop(StartStop value) { @Override public StartStop getStartStopTarget() { - switch (this.config.startStop()) { - case AUTO: - // read StartStop-Channel - return this.startStopTarget.get(); - - case START: - // force START - return StartStop.START; - - case STOP: - // force STOP - return StartStop.STOP; - } - - assert false; - return StartStop.UNDEFINED; // can never happen + return switch (this.config.startStop()) { + case AUTO -> this.startStopTarget.get(); // read StartStop-Channel + case START -> StartStop.START; // force START + case STOP -> StartStop.STOP; // force STOP + }; } } diff --git a/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/IgnoreZeroConverter.java b/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/IgnoreZeroConverter.java index b1ae6528904..5467953f365 100644 --- a/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/IgnoreZeroConverter.java +++ b/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/IgnoreZeroConverter.java @@ -36,10 +36,10 @@ private IgnoreZeroConverter(BatteryFeneconCommercialImpl parent) { return null; } // If the battery is not started and the value is not zero -> return the value, - if (value instanceof Integer && (Integer) value != 0) { + if (value instanceof Integer i && i != 0) { return value; } - if (value instanceof Long && (Long) value != 0L) { + if (value instanceof Long l && l != 0L) { return value; } // Is battery status not available or battery not started? diff --git a/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/statemachine/StateMachine.java b/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/statemachine/StateMachine.java index 010ee574776..f6775bb8bcc 100644 --- a/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/statemachine/StateMachine.java +++ b/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/statemachine/StateMachine.java @@ -54,20 +54,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case GO_RUNNING: - return new GoRunningHandler(); - case RUNNING: - return new RunningHandler(); - case GO_STOPPED: - return new GoStoppedHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case GO_RUNNING -> new GoRunningHandler(); + case RUNNING -> new RunningHandler(); + case GO_STOPPED -> new GoStoppedHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } \ No newline at end of file diff --git a/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/statemachine/UndefinedHandler.java b/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/statemachine/UndefinedHandler.java index 1c08a0b67f2..085b9f5f30f 100644 --- a/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/statemachine/UndefinedHandler.java +++ b/io.openems.edge.battery.fenecon.commercial/src/io/openems/edge/battery/fenecon/commercial/statemachine/UndefinedHandler.java @@ -8,28 +8,20 @@ public class UndefinedHandler extends StateHandler { @Override public State runAndGetNextState(Context context) { var battery = context.getParent(); - switch (battery.getStartStopTarget()) { - case UNDEFINED: - // Stuck in UNDEFINED State - return State.UNDEFINED; + return switch (battery.getStartStopTarget()) { + case UNDEFINED // Stuck in UNDEFINED State + -> State.UNDEFINED; - case START: - // force START - if (battery.hasFaults()) { - // Has Faults -> error handling - return State.ERROR; - } else { - // No Faults -> start - return State.GO_RUNNING; - } + case START // force START + -> battery.hasFaults() // + // Has Faults -> error handling + ? State.ERROR + // No Faults -> start + : State.GO_RUNNING; - case STOP: - // force STOP - return State.GO_STOPPED; - } - - assert false; - return State.UNDEFINED; // can never happen + case STOP // force STOP + -> State.GO_STOPPED; + }; } } diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/BatterySoltaroClusterVersionCImpl.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/BatterySoltaroClusterVersionCImpl.java index 6b493c42f7a..324d01e6b0c 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/BatterySoltaroClusterVersionCImpl.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/BatterySoltaroClusterVersionCImpl.java @@ -1057,22 +1057,10 @@ public void setStartStop(StartStop value) { @Override public StartStop getStartStopTarget() { - switch (this.config.startStop()) { - case AUTO: - // read StartStop-Channel - return this.startStopTarget.get(); - - case START: - // force START - return StartStop.START; - - case STOP: - // force STOP - return StartStop.STOP; - } - - assert false; - return StartStop.UNDEFINED; // can never happen + return switch (this.config.startStop()) { + case AUTO -> this.startStopTarget.get(); // read StartStop-Channel + case START -> StartStop.START; // force START + case STOP -> StartStop.STOP; // force STOP + }; } - } diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/statemachine/StateMachine.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/statemachine/StateMachine.java index 8320231a603..9713db3a9f8 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/statemachine/StateMachine.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/statemachine/StateMachine.java @@ -51,20 +51,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case GO_RUNNING: - return new GoRunningHandler(); - case RUNNING: - return new RunningHandler(); - case GO_STOPPED: - return new GoStoppedHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case GO_RUNNING -> new GoRunningHandler(); + case RUNNING -> new RunningHandler(); + case GO_STOPPED -> new GoStoppedHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } \ No newline at end of file diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/statemachine/UndefinedHandler.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/statemachine/UndefinedHandler.java index 510731f605b..bd8f3168f3a 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/statemachine/UndefinedHandler.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/cluster/versionc/statemachine/UndefinedHandler.java @@ -9,28 +9,20 @@ public class UndefinedHandler extends StateHandler { public State runAndGetNextState(Context context) { var battery = context.getParent(); - switch (battery.getStartStopTarget()) { - case UNDEFINED: - // Stuck in UNDEFINED State - return State.UNDEFINED; - - case START: - // force START - if (battery.hasFaults()) { - // Has Faults -> error handling - return State.ERROR; - } else { - // No Faults -> start - return State.GO_RUNNING; - } - - case STOP: - // force STOP - return State.GO_STOPPED; - } - - assert false; - return State.UNDEFINED; // can never happen + return switch (battery.getStartStopTarget()) { + case UNDEFINED // Stuck in UNDEFINED State + -> State.UNDEFINED; + + case START // force START + -> battery.hasFaults() // + // Has Faults -> error handling + ? State.ERROR + // No Faults -> start + : State.GO_RUNNING; + + case STOP // force STOP + -> State.GO_STOPPED; + }; } } diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/BatterySoltaroSingleRackVersionBImpl.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/BatterySoltaroSingleRackVersionBImpl.java index a87a7fe5106..1af9cb7d0da 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/BatterySoltaroSingleRackVersionBImpl.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/BatterySoltaroSingleRackVersionBImpl.java @@ -208,22 +208,11 @@ public void setStartStop(StartStop value) { @Override public StartStop getStartStopTarget() { - switch (this.config.startStop()) { - case AUTO: - // read StartStop-Channel - return this.startStopTarget.get(); - - case START: - // force START - return StartStop.START; - - case STOP: - // force STOP - return StartStop.STOP; - } - - assert false; - return StartStop.UNDEFINED; // can never happen + return switch (this.config.startStop()) { + case AUTO -> this.startStopTarget.get(); // read StartStop-Channel + case START -> StartStop.START; // force START + case STOP -> StartStop.STOP; // force STOP + }; } @Override diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/statemachine/StateMachine.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/statemachine/StateMachine.java index f1c2da278c7..e32f1901040 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/statemachine/StateMachine.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/statemachine/StateMachine.java @@ -52,20 +52,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case GO_RUNNING: - return new GoRunningHandler(); - case RUNNING: - return new RunningHandler(); - case GO_STOPPED: - return new GoStoppedHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case GO_RUNNING -> new GoRunningHandler(); + case RUNNING -> new RunningHandler(); + case GO_STOPPED -> new GoStoppedHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } \ No newline at end of file diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/statemachine/UndefinedHandler.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/statemachine/UndefinedHandler.java index 9ffd3d28954..52ef94b620c 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/statemachine/UndefinedHandler.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionb/statemachine/UndefinedHandler.java @@ -10,28 +10,20 @@ public class UndefinedHandler extends StateHandler { protected State runAndGetNextState(Context context) throws OpenemsNamedException { var battery = context.getParent(); - switch (battery.getStartStopTarget()) { - case UNDEFINED: - // Stuck in UNDEFINED State - return State.UNDEFINED; - - case START: - // force START - if (battery.hasFaults()) { - // Has Faults -> error handling - return State.ERROR; - } else { - // No Faults -> start - return State.GO_RUNNING; - } - - case STOP: - // force STOP - return State.GO_STOPPED; - } - - assert false; - return State.UNDEFINED; // can never happen + return switch (battery.getStartStopTarget()) { + case UNDEFINED // Stuck in UNDEFINED State + -> State.UNDEFINED; + + case START // force START + -> battery.hasFaults() // + // Has Faults -> error handling + ? State.ERROR + // No Faults -> start + : State.GO_RUNNING; + + case STOP // force STOP + -> State.GO_STOPPED; + }; } } diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/BatterySoltaroSingleRackVersionCImpl.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/BatterySoltaroSingleRackVersionCImpl.java index 988a530da27..c2e7f9b00ae 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/BatterySoltaroSingleRackVersionCImpl.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/BatterySoltaroSingleRackVersionCImpl.java @@ -749,22 +749,10 @@ public void setStartStop(StartStop value) { @Override public StartStop getStartStopTarget() { - switch (this.config.startStop()) { - case AUTO: - // read StartStop-Channel - return this.startStopTarget.get(); - - case START: - // force START - return StartStop.START; - - case STOP: - // force STOP - return StartStop.STOP; - } - - assert false; - return StartStop.UNDEFINED; // can never happen + return switch (this.config.startStop()) { + case AUTO -> this.startStopTarget.get(); // read StartStop-Channel + case START -> StartStop.START; // force START + case STOP -> StartStop.STOP; // force STOP + }; } - } diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/statemachine/StateMachine.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/statemachine/StateMachine.java index 914c58eda06..c1c5d96c425 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/statemachine/StateMachine.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/statemachine/StateMachine.java @@ -51,20 +51,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case GO_RUNNING: - return new GoRunningHandler(); - case RUNNING: - return new RunningHandler(); - case GO_STOPPED: - return new GoStoppedHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case GO_RUNNING -> new GoRunningHandler(); + case RUNNING -> new RunningHandler(); + case GO_STOPPED -> new GoStoppedHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } \ No newline at end of file diff --git a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/statemachine/UndefinedHandler.java b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/statemachine/UndefinedHandler.java index 2f2bd1687b3..855a1e13e10 100644 --- a/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/statemachine/UndefinedHandler.java +++ b/io.openems.edge.battery.soltaro/src/io/openems/edge/battery/soltaro/single/versionc/statemachine/UndefinedHandler.java @@ -8,28 +8,20 @@ public class UndefinedHandler extends StateHandler { @Override public State runAndGetNextState(Context context) { var battery = context.getParent(); - switch (battery.getStartStopTarget()) { - case UNDEFINED: - // Stuck in UNDEFINED State - return State.UNDEFINED; + return switch (battery.getStartStopTarget()) { + case UNDEFINED // Stuck in UNDEFINED State + -> State.UNDEFINED; - case START: - // force START - if (battery.hasFaults()) { - // Has Faults -> error handling - return State.ERROR; - } else { - // No Faults -> start - return State.GO_RUNNING; - } + case START// force START + -> battery.hasFaults() // + // Has Faults -> error handling + ? State.ERROR + // No Faults -> start + : State.GO_RUNNING; - case STOP: - // force STOP - return State.GO_STOPPED; - } - - assert false; - return State.UNDEFINED; // can never happen + case STOP // force STOP + -> State.GO_STOPPED; + }; } } diff --git a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/BatteryInverterRefuStore88kImpl.java b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/BatteryInverterRefuStore88kImpl.java index a63d14f76fd..3a66adce7a3 100644 --- a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/BatteryInverterRefuStore88kImpl.java +++ b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/BatteryInverterRefuStore88kImpl.java @@ -490,22 +490,11 @@ public void setStartStop(StartStop value) { @Override public StartStop getStartStopTarget() { - switch (this.config.startStop()) { - case AUTO: - // read StartStop-Channel - return this.startStopTarget.get(); - - case START: - // force START - return StartStop.START; - - case STOP: - // force STOP - return StartStop.STOP; - } - - assert false; - return StartStop.UNDEFINED; // can never happen + return switch (this.config.startStop()) { + case AUTO -> this.startStopTarget.get(); // read StartStop-Channel + case START -> StartStop.START; // force START + case STOP -> StartStop.STOP; // force STOP + }; } /** diff --git a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/GoRunningHandler.java b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/GoRunningHandler.java index 4e28a0ab7fe..c76b73e045f 100644 --- a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/GoRunningHandler.java +++ b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/GoRunningHandler.java @@ -22,31 +22,22 @@ public State runAndGetNextState(Context context) throws OpenemsNamedException { return State.UNDEFINED; } - switch (inverter.getOperatingState()) { - - case STARTING: - return State.GO_RUNNING; - case MPPT: - case STARTED: - case THROTTLED: + return switch (inverter.getOperatingState()) { + case STARTING // + -> State.GO_RUNNING; + case MPPT, STARTED, THROTTLED -> // // if inverter is throttled, full power is not available, but the device // is still working - return State.RUNNING; - case STANDBY: + State.RUNNING; + case STANDBY -> { inverter.exitStandbyMode(); - return State.GO_RUNNING; - // if inverter is throttled, full power is not available, but the device - // is still working - case FAULT: - return State.ERROR; - case OFF: - case SLEEPING: - case SHUTTING_DOWN: - - case UNDEFINED: - return State.UNDEFINED; + yield State.GO_RUNNING; } - return State.UNDEFINED; + case FAULT // + -> State.ERROR; + case OFF, SLEEPING, SHUTTING_DOWN, UNDEFINED // + -> State.UNDEFINED; + }; } } diff --git a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/GoStoppedHandler.java b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/GoStoppedHandler.java index c40457bc2f2..b8f7d44c34e 100644 --- a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/GoStoppedHandler.java +++ b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/GoStoppedHandler.java @@ -10,23 +10,15 @@ public class GoStoppedHandler extends StateHandler { public State runAndGetNextState(Context context) throws OpenemsNamedException { var inverter = context.getParent(); - switch (inverter.getOperatingState()) { - case STARTING: - case MPPT: - case THROTTLED: - case STARTED: + return switch (inverter.getOperatingState()) { + case STARTING, MPPT, THROTTLED, STARTED -> { inverter.stopInverter(); - return State.GO_STOPPED; - case FAULT: - case STANDBY: - return State.STOPPED; - case SHUTTING_DOWN: - case OFF: - case SLEEPING: - case UNDEFINED: - return State.UNDEFINED; + yield State.GO_STOPPED; } - - return State.UNDEFINED; + case FAULT, STANDBY // + -> State.STOPPED; + case SHUTTING_DOWN, OFF, SLEEPING, UNDEFINED // + -> State.UNDEFINED; + }; } } diff --git a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/RunningHandler.java b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/RunningHandler.java index 13e6ace900f..89a47b7315a 100644 --- a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/RunningHandler.java +++ b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/RunningHandler.java @@ -26,28 +26,19 @@ public State runAndGetNextState(Context context) throws OpenemsNamedException { return State.UNDEFINED; } - switch (inverter.getOperatingState()) { - - case STARTED: - case THROTTLED: - case MPPT: + return switch (inverter.getOperatingState()) { + case STARTED, THROTTLED, MPPT -> { // Mark as started inverter._setStartStop(StartStop.START); // Apply Active and Reactive Power Set-Points this.applyPower(context); - return State.RUNNING; - case FAULT: - return State.ERROR; - case OFF: - case SLEEPING: - case STARTING: - case SHUTTING_DOWN: - case STANDBY: - case UNDEFINED: - return State.UNDEFINED; + yield State.RUNNING; } - - return State.UNDEFINED; + case FAULT // + -> State.ERROR; + case OFF, SLEEPING, STARTING, SHUTTING_DOWN, STANDBY, UNDEFINED // + -> State.UNDEFINED; + }; } /** diff --git a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/StateMachine.java b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/StateMachine.java index 17e940975a2..04c64c3e00a 100644 --- a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/StateMachine.java +++ b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/StateMachine.java @@ -51,20 +51,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case GO_RUNNING: - return new GoRunningHandler(); - case RUNNING: - return new RunningHandler(); - case GO_STOPPED: - return new GoStoppedHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case GO_RUNNING -> new GoRunningHandler(); + case RUNNING -> new RunningHandler(); + case GO_STOPPED -> new GoStoppedHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } \ No newline at end of file diff --git a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/UndefinedHandler.java b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/UndefinedHandler.java index 7a0c4b26780..d38ff233e04 100644 --- a/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/UndefinedHandler.java +++ b/io.openems.edge.batteryinverter.refu88k/src/io/openems/edge/batteryinverter/refu88k/statemachine/UndefinedHandler.java @@ -8,29 +8,19 @@ public class UndefinedHandler extends StateHandler { @Override public State runAndGetNextState(Context context) { var inverter = context.getParent(); - - switch (inverter.getStartStopTarget()) { - case UNDEFINED: - // Stuck in UNDEFINED State - return State.UNDEFINED; - - case START: - // force START - if (inverter.hasFaults()) { - // Has Faults -> error handling - return State.ERROR; - } else { - // No Faults -> start - return State.GO_RUNNING; - } - - case STOP: - // force STOP - return State.GO_STOPPED; - } - - assert false; - return State.UNDEFINED; // can never happen + return switch (inverter.getStartStopTarget()) { + case UNDEFINED // Stuck in UNDEFINED State + -> State.UNDEFINED; + + case START // force START + -> inverter.hasFaults() // + // Has Faults -> error handling + ? State.ERROR + // No Faults -> start + : State.GO_RUNNING; + + case STOP // force STOP + -> State.GO_STOPPED; + }; } - } diff --git a/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/BatteryInverterSinexcelImpl.java b/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/BatteryInverterSinexcelImpl.java index 5a65149220b..cfface51a1b 100644 --- a/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/BatteryInverterSinexcelImpl.java +++ b/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/BatteryInverterSinexcelImpl.java @@ -333,22 +333,11 @@ public void setStartStop(StartStop value) { * @return {@link StartStop} */ public StartStop getStartStopTarget() { - switch (this.config.startStop()) { - case AUTO: - // read StartStop-Channel - return this.startStopTarget.get(); - - case START: - // force START - return StartStop.START; - - case STOP: - // force STOP - return StartStop.STOP; - } - - assert false; - return StartStop.UNDEFINED; // can never happen + return switch (this.config.startStop()) { + case AUTO -> this.startStopTarget.get(); // read StartStop-Channel + case START -> StartStop.START; // force START + case STOP -> StartStop.STOP; // force STOP + }; } protected final AtomicReference targetGridMode = new AtomicReference<>(TargetGridMode.GO_ON_GRID); diff --git a/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/statemachine/StateMachine.java b/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/statemachine/StateMachine.java index 372a69a8287..723d3285112 100644 --- a/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/statemachine/StateMachine.java +++ b/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/statemachine/StateMachine.java @@ -51,20 +51,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case GO_RUNNING: - return new GoRunningHandler(); - case RUNNING: - return new RunningHandler(); - case GO_STOPPED: - return new GoStoppedHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case GO_RUNNING -> new GoRunningHandler(); + case RUNNING -> new RunningHandler(); + case GO_STOPPED -> new GoStoppedHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } diff --git a/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/statemachine/UndefinedHandler.java b/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/statemachine/UndefinedHandler.java index cb2346bc3fe..409482e87ab 100644 --- a/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/statemachine/UndefinedHandler.java +++ b/io.openems.edge.batteryinverter.sinexcel/src/io/openems/edge/batteryinverter/sinexcel/statemachine/UndefinedHandler.java @@ -9,28 +9,20 @@ public class UndefinedHandler extends StateHandler { @Override public State runAndGetNextState(Context context) throws OpenemsNamedException { final var inverter = context.getParent(); - switch (inverter.getStartStopTarget()) { - case UNDEFINED: - // Stuck in UNDEFINED State - return State.UNDEFINED; + return switch (inverter.getStartStopTarget()) { + case UNDEFINED // Stuck in UNDEFINED State + -> State.UNDEFINED; - case START: - // force START - if (inverter.hasFaults()) { - // Has Faults -> error handling - return State.ERROR; - } else { - // No Faults -> start - return State.GO_RUNNING; - } + case START // force START + -> inverter.hasFaults() // + // Has Faults -> error handling + ? State.ERROR + // No Faults -> start + : State.GO_RUNNING; - case STOP: - // force STOP - return State.GO_STOPPED; - } - - assert false; - return State.UNDEFINED; // can never happen + case STOP// force STOP + -> State.GO_STOPPED; + }; } } diff --git a/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/BridgeHttpImpl.java b/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/BridgeHttpImpl.java index 4cf1838b0a2..c12bcb9afd3 100644 --- a/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/BridgeHttpImpl.java +++ b/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/BridgeHttpImpl.java @@ -1,5 +1,7 @@ package io.openems.edge.bridge.http; +import static io.openems.common.utils.FunctionUtils.doNothing; + import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -197,11 +199,14 @@ public TimeEndpoint subscribeTime(TimeEndpoint endpoint) { this.timeEndpoints.add(endpointCountdown); final var delay = endpoint.delayTimeProvider().onFirstRunDelay(); - // TODO change in java 21 to switch case - if (delay instanceof Delay.DurationDelay durationDelay) { + switch (delay) { + case Delay.InfiniteDelay infiniteDelay // + -> doNothing(); + case Delay.DurationDelay durationDelay -> { final var future = this.pool.schedule(this.createTask(endpointCountdown), durationDelay); endpointCountdown.setShutdownCurrentTask(() -> future.cancel(false)); } + } return endpoint; } @@ -308,14 +313,14 @@ private Runnable createTask(TimeEndpointCountdown endpointCountdown) { nextDelay = endpointCountdown.getTimeEndpoint().delayTimeProvider().onSuccessRunDelay(result); } - // TODO change in java 21 to switch case - if (nextDelay instanceof Delay.InfiniteDelay) { - // do not queue again - return; - } else if (nextDelay instanceof Delay.DurationDelay durationDelay) { + switch (nextDelay) { + case Delay.InfiniteDelay infiniteDelay // + -> doNothing(); + case Delay.DurationDelay durationDelay -> { final var future = this.pool.schedule(this.createTask(endpointCountdown), durationDelay); endpointCountdown.setShutdownCurrentTask(() -> future.cancel(false)); } + } } catch (Exception e) { if (this.pool.isShutdown()) { diff --git a/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/NetworkEndpointFetcher.java b/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/NetworkEndpointFetcher.java index 9add30c9497..4d19f500373 100644 --- a/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/NetworkEndpointFetcher.java +++ b/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/NetworkEndpointFetcher.java @@ -16,10 +16,10 @@ import io.openems.common.types.DebugMode; import io.openems.common.types.HttpStatus; import io.openems.edge.bridge.http.api.BridgeHttp.Endpoint; -import io.openems.edge.bridge.http.dummy.DummyEndpointFetcher; import io.openems.edge.bridge.http.api.EndpointFetcher; import io.openems.edge.bridge.http.api.HttpError; import io.openems.edge.bridge.http.api.HttpResponse; +import io.openems.edge.bridge.http.dummy.DummyEndpointFetcher; @Component public class NetworkEndpointFetcher implements EndpointFetcher { diff --git a/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/time/DelayTimeProvider.java b/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/time/DelayTimeProvider.java index de58aae32b2..37878167b12 100644 --- a/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/time/DelayTimeProvider.java +++ b/io.openems.edge.bridge.http/src/io/openems/edge/bridge/http/time/DelayTimeProvider.java @@ -62,10 +62,12 @@ public Duration getDuration() { @Override public Delay plus(Delay delay) { - if (delay instanceof DurationDelay durationDelay) { - return new DurationDelay(this.duration.plus(durationDelay.getDuration())); - } - return delay.plus(this); + return switch (delay) { + case DurationDelay durationDelay // + -> new DurationDelay(this.duration.plus(durationDelay.getDuration())); + case InfiniteDelay infiniteDelay // + -> delay.plus(this); + }; } @Override diff --git a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/AbstractOpenemsModbusComponent.java b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/AbstractOpenemsModbusComponent.java index 80c29c5f234..2162ecc794c 100644 --- a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/AbstractOpenemsModbusComponent.java +++ b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/AbstractOpenemsModbusComponent.java @@ -354,7 +354,8 @@ public ELEMENT build() { // dynamically get the Converter; this allows the converter to be changed var converter = this.channelMaps.get(channel); var convertedValue = converter.channelToElement(value); - if (this.element instanceof ModbusRegisterElement registerElement) { + switch (this.element) { + case ModbusRegisterElement registerElement -> { try { registerElement.setNextWriteValueFromObject(convertedValue); } catch (IllegalArgumentException e) { @@ -369,8 +370,9 @@ public ELEMENT build() { e.printStackTrace(); } } + } - } else if (this.element instanceof CoilElement coilElement) { + case CoilElement coilElement -> { try { coilElement.setNextWriteValue(TypeUtils.getAsType(OpenemsType.BOOLEAN, convertedValue)); } catch (IllegalArgumentException e) { @@ -378,9 +380,10 @@ public ELEMENT build() { "Unable to write to ModbusCoilElement " // + "[" + this.element.startAddress + "]: " + e.getMessage()); } + } - } else { - AbstractOpenemsModbusComponent.this.logWarn(AbstractOpenemsModbusComponent.this.log, + default // + -> AbstractOpenemsModbusComponent.this.logWarn(AbstractOpenemsModbusComponent.this.log, "Unable to write to Element " // + "[" + this.element.startAddress + "]: it is not a ModbusElement"); } diff --git a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/ElementToChannelConverter.java b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/ElementToChannelConverter.java index 87a9c0eb0bb..17de9f9ea32 100644 --- a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/ElementToChannelConverter.java +++ b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/ElementToChannelConverter.java @@ -441,47 +441,41 @@ private static Object apply(// Function floatFactor, // Function doubleFactor // ) { - if (value == null) { - return null; - } - if (value instanceof Boolean) { - return (boolean) value; - } - if (value instanceof Short s) { + return switch (value) { + case null -> null; + case Boolean b -> b; + case Short s -> { long result = shortFactor.apply(s); if (result >= Short.MIN_VALUE && result <= Short.MAX_VALUE) { - return Short.valueOf((short) result); - } - if (result > Integer.MIN_VALUE && result < Integer.MAX_VALUE) { - return Integer.valueOf((int) result); - } else { - return Long.valueOf(result); + yield Short.valueOf((short) result); + } else if (result > Integer.MIN_VALUE && result < Integer.MAX_VALUE) { + yield Integer.valueOf((int) result); } + yield Long.valueOf(result); } - if (value instanceof Integer i) { + case Integer i -> { long result = integerFactor.apply(i); if (result >= Integer.MIN_VALUE && result <= Integer.MAX_VALUE) { - return Integer.valueOf((int) result); + yield Integer.valueOf((int) result); } - return Long.valueOf(result); - } - if (value instanceof Long l) { - return longFactor.apply(l); + yield Long.valueOf(result); } - if (value instanceof Float f) { + case Long l // + -> longFactor.apply(l); + case Float f -> { double result = floatFactor.apply(f); if (result >= Float.MIN_VALUE && result <= Float.MAX_VALUE) { - return Float.valueOf((float) result); + yield Float.valueOf((float) result); } - return Double.valueOf(result); + yield Double.valueOf(result); } - if (value instanceof Double d) { - return doubleFactor.apply(d); - } - if (value instanceof String) { - return value; - } - throw new IllegalArgumentException( - "Type [" + value.getClass().getName() + "] not supported by OFFSET converter"); + case Double d // + -> doubleFactor.apply(d); + case String s // + -> s; + default // + -> throw new IllegalArgumentException( + "Type [" + value.getClass().getName() + "] not supported by OFFSET converter"); + }; } } diff --git a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/ElementToChannelScaleFactorConverter.java b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/ElementToChannelScaleFactorConverter.java index cf558a53d99..3cce387c0e0 100644 --- a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/ElementToChannelScaleFactorConverter.java +++ b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/ElementToChannelScaleFactorConverter.java @@ -64,48 +64,43 @@ public ElementToChannelScaleFactorConverter(int scaleFactor) { private static Object apply(Object value, int scaleFactor) { var factor = Math.pow(10, scaleFactor * -1); - if (value == null) { - return null; - } - if (value instanceof Boolean) { - return (boolean) value; - } - if (value instanceof Short) { - var result = (Short) value * factor; + return switch (value) { + case null -> null; + case Boolean b -> b; + case Short s -> { + var result = s * factor; if (result >= Short.MIN_VALUE && result <= Short.MAX_VALUE) { - return Short.valueOf((short) result); - } - if (result > Integer.MIN_VALUE && result < Integer.MAX_VALUE) { - return Integer.valueOf((int) result); - } else { - return Double.valueOf(Math.round(result)); + yield Short.valueOf((short) result); + } else if (result > Integer.MIN_VALUE && result < Integer.MAX_VALUE) { + yield Integer.valueOf((int) result); } + yield Double.valueOf(Math.round(result)); } - if (value instanceof Integer) { - var result = (Integer) value * factor; + case Integer i -> { + var result = i * factor; if (result >= Integer.MIN_VALUE && result <= Integer.MAX_VALUE) { - return Integer.valueOf((int) result); + yield Integer.valueOf((int) result); } - return Double.valueOf(Math.round(result)); + yield Double.valueOf(Math.round(result)); } - if (value instanceof Long) { - var result = (Long) value * factor; - return Math.round(result); + case Long l -> { + var result = l * factor; + yield Math.round(result); } - if (value instanceof Float) { - var result = (Float) value * factor; + case Float f -> { + var result = f * factor; if (result >= Float.MIN_VALUE && result <= Float.MAX_VALUE) { - return Float.valueOf((float) result); + yield Float.valueOf((float) result); } - return Double.valueOf(result); - } - if (value instanceof Double) { - return Double.valueOf((Double) value * factor); - } - if (value instanceof String) { - return value; + yield Double.valueOf(result); } - throw new IllegalArgumentException( - "Type [" + value.getClass().getName() + "] not supported by SCALE_FACTOR converter"); + case Double d // + -> Double.valueOf(d * factor); + case String s // + -> s; + default // + -> throw new IllegalArgumentException( + "Type [" + value.getClass().getName() + "] not supported by SCALE_FACTOR converter"); + }; } } diff --git a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/task/AbstractTask.java b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/task/AbstractTask.java index 35c419f539e..0393ace47e1 100644 --- a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/task/AbstractTask.java +++ b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/task/AbstractTask.java @@ -1,5 +1,7 @@ package io.openems.edge.bridge.modbus.api.task; +import static io.openems.common.utils.FunctionUtils.doNothing; + import java.util.Arrays; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; @@ -309,8 +311,8 @@ protected final String toLogMessage(LogVerbosity logVerbosity, int startAddress, .append(";ref=").append(startAddress).append("/0x").append(Integer.toHexString(startAddress)) // .append(";length=").append(length); // switch (logVerbosity) { - case NONE, DEBUG_LOG, READS_AND_WRITES, READS_AND_WRITES_DURATION, READS_AND_WRITES_DURATION_TRACE_EVENTS -> { - } + case NONE, DEBUG_LOG, READS_AND_WRITES, READS_AND_WRITES_DURATION, READS_AND_WRITES_DURATION_TRACE_EVENTS // + -> doNothing(); case READS_AND_WRITES_VERBOSE -> { if (request != null) { var hexString = this.payloadToString(request); diff --git a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/task/FC16WriteRegistersTask.java b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/task/FC16WriteRegistersTask.java index 7767f54674b..726a4dccb32 100644 --- a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/task/FC16WriteRegistersTask.java +++ b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/task/FC16WriteRegistersTask.java @@ -85,7 +85,8 @@ protected static List mergeWriteRegisters(ModbusElement[] Consumer logWarn) { final var writes = new ArrayList(); for (var element : elements) { - if (element instanceof ModbusRegisterElement e) { + switch (element) { + case ModbusRegisterElement e -> { var registers = e.getNextWriteValueAndReset(); if (registers != null) { // found value registers -> add to 'writes' @@ -107,7 +108,8 @@ protected static List mergeWriteRegisters(ModbusElement[] } write.add(registers); } - } else { + } + default -> // logWarn.accept( "Unable to execute Write for ModbusElement [" + element + "]: No ModbusRegisterElement!"); } diff --git a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/worker/ModbusWorker.java b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/worker/ModbusWorker.java index 2558852fc4d..d9ad7008a9c 100644 --- a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/worker/ModbusWorker.java +++ b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/worker/ModbusWorker.java @@ -1,5 +1,7 @@ package io.openems.edge.bridge.modbus.api.worker; +import static io.openems.common.utils.FunctionUtils.doNothing; + import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -74,21 +76,19 @@ protected void forever() throws InterruptedException { // execute the task var result = this.execute.apply(task); - // NOTE: with Java 21 LTS this can be refactored to a pattern matching switch - // statement - if (result instanceof ExecuteState.Ok) { + switch (result) { + case ExecuteState.Ok es -> // no exception & at least one sub-task executed this.markComponentAsDefective(task.getParent(), false); - - } else if (result instanceof ExecuteState.NoOp) { + case ExecuteState.NoOp es -> // did not execute anything - - } else if (result instanceof ExecuteState.Error) { + doNothing(); + case ExecuteState.Error es -> { this.markComponentAsDefective(task.getParent(), true); - // invalidate elements of this task this.invalidate.accept(task.getElements()); } + } } /** diff --git a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/sunspec/AbstractOpenemsSunSpecComponent.java b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/sunspec/AbstractOpenemsSunSpecComponent.java index 42e57c330b4..b64f0a62f48 100644 --- a/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/sunspec/AbstractOpenemsSunSpecComponent.java +++ b/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/sunspec/AbstractOpenemsSunSpecComponent.java @@ -346,25 +346,26 @@ protected void addBlock(int startAddress, SunSpecModel model, Priority priority) */ protected List addModbusElementAndChannels(int startAddress, SunSpecModel model, SunSpecPoint ssp) { final var p = ssp.get(); - // TODO migrate to Java 21 Switch Pattern Matching - if (p instanceof BitFieldPoint bfp) { + return switch (p) { + case BitFieldPoint bfp -> { // Channels are added and mapped internally var alternativeBitPoints = this.getBitPoints(bfp); - return bfp.generateModbusElements(this, channelId -> this.addChannel(channelId), startAddress, + yield bfp.generateModbusElements(this, channelId -> this.addChannel(channelId), startAddress, alternativeBitPoints); } - if (p instanceof ModbusElementPoint mep) { + case ModbusElementPoint mep -> { final var element = mep.generateModbusElement(startAddress); if (p instanceof ChannelIdPoint cp) { var channelId = cp.channelId; this.addChannel(channelId); this.m(channelId, element, this.generateElementToChannelConverter(model, p)); } - return List.of(element); + yield List.of(element); } - return List.of(); + case ChannelIdPoint cip -> List.of(); + }; } /** @@ -429,11 +430,10 @@ protected ElementToChannelConverter generateElementToChannelConverter(SunSpecMod /* Channel -> Element */ value -> value); // Generate Scale-Factor converter (possibly null) - ElementToChannelConverter scaleFactorConverter = null; - - if (point instanceof ScaledValuePoint svp) { + var scaleFactorConverter = switch (point) { + case ScaledValuePoint svp -> { final var scaleFactorName = toUpperUnderscore(svp.scaleFactor); - scaleFactorConverter = Stream.of(model.points()) // + yield Stream.of(model.points()) // .filter(p -> p.name().equals(scaleFactorName)) // .map(SunSpecPoint::get) // .filter(ScaleFactorPoint.class::isInstance) // @@ -454,6 +454,8 @@ protected ElementToChannelConverter generateElementToChannelConverter(SunSpecMod } }); // } + default -> null; + }; if (scaleFactorConverter != null) { return ElementToChannelConverter.chain(valueIsDefinedConverter, scaleFactorConverter); @@ -470,17 +472,16 @@ protected ElementToChannelConverter generateElementToChannelConverter(SunSpecMod * @return the optional {@link Channel} */ protected > Optional getSunSpecChannel(SunSpecPoint ssp) { - var point = ssp.get(); - if (point instanceof ChannelIdPoint cp) { + return switch (ssp.get()) { + case ChannelIdPoint cp -> { try { - return Optional.ofNullable(this.channel(cp.channelId)); + yield Optional.ofNullable(this.channel(cp.channelId)); } catch (IllegalArgumentException e) { - // Ignore + yield Optional.empty(); } - } else { - // Ignore } - return Optional.empty(); + default -> Optional.empty(); + }; } /** diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/adapter/USerialAdapter.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/adapter/USerialAdapter.java index fae5e1ee211..c6692349189 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/adapter/USerialAdapter.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/adapter/USerialAdapter.java @@ -2154,24 +2154,13 @@ private void setStreamingSpeed(int operation) throws OneWireIOException { } // convert this baud to 'u' baud - char ubaud; - - switch (baud) { - - case 115200: - ubaud = UAdapterState.BAUD_115200; - break; - case 57600: - ubaud = UAdapterState.BAUD_57600; - break; - case 19200: - ubaud = UAdapterState.BAUD_19200; - break; - case 9600: - default: - ubaud = UAdapterState.BAUD_9600; - break; - } + var ubaud = switch (baud) { + case 115200 -> UAdapterState.BAUD_115200; + case 57600 -> UAdapterState.BAUD_57600; + case 19200 -> UAdapterState.BAUD_19200; + case 9600 -> UAdapterState.BAUD_9600; + default -> UAdapterState.BAUD_9600; + }; // see if this is a new baud if (ubaud == this.uState.ubaud) { diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/monitor/NetworkDeviceMonitor.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/monitor/NetworkDeviceMonitor.java index 4af1f56ad36..5d17d6ca8e9 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/monitor/NetworkDeviceMonitor.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/monitor/NetworkDeviceMonitor.java @@ -207,8 +207,7 @@ public void search(Vector arrivals, Vector departures) throws OneWir var owc = getDeviceContainer(this.adapter, longAddress); // check to see if it's a switch and if we are supposed // to automatically search down branches - if (this.branchAutoSearching && owc instanceof SwitchContainer) { - var sc = (SwitchContainer) owc; + if (this.branchAutoSearching && owc instanceof SwitchContainer sc) { var state = sc.readDevice(); for (var j = 0; j < sc.getNumberChannels(state); j++) { var tmp = new OWPath(this.adapter, path); diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/sha/SHADebit.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/sha/SHADebit.java index e3b7a03f8a5..e48fd109f1b 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/sha/SHADebit.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/sha/SHADebit.java @@ -705,16 +705,12 @@ private final boolean writeTransactionData(SHAiButtonUser user, int transID, int */ @Override public synchronized int getParameter(int type) { - switch (type) { - case DEBIT_AMOUNT: - return this.debitAmount; - case INITIAL_AMOUNT: - return this.initialAmount; - case USER_BALANCE: - return this.userBalance; - default: - throw new IllegalArgumentException("Invalid parameter type"); - } + return switch (type) { + case DEBIT_AMOUNT -> this.debitAmount; + case INITIAL_AMOUNT -> this.initialAmount; + case USER_BALANCE -> this.userBalance; + default -> throw new IllegalArgumentException("Invalid parameter type"); + }; } /** diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/sha/SHADebitUnsigned.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/sha/SHADebitUnsigned.java index b44cbe76c64..ea4b9caaf70 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/sha/SHADebitUnsigned.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/sha/SHADebitUnsigned.java @@ -887,16 +887,12 @@ private final boolean writeTransactionData(SHAiButtonUser user, int transID, int */ @Override public synchronized int getParameter(int type) { - switch (type) { - case DEBIT_AMOUNT: - return this.debitAmount; - case INITIAL_AMOUNT: - return this.initialAmount; - case USER_BALANCE: - return this.userBalance; - default: - return -1; - } + return switch (type) { + case DEBIT_AMOUNT -> this.debitAmount; + case INITIAL_AMOUNT -> this.initialAmount; + case USER_BALANCE -> this.userBalance; + default -> -1; + }; } /** diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/tag/TaggedDevice.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/tag/TaggedDevice.java index 9f6e3edb440..b1a99065b69 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/tag/TaggedDevice.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/application/tag/TaggedDevice.java @@ -266,8 +266,7 @@ public boolean equals(Object o) { return true; } - if (o instanceof TaggedDevice) { - var td = (TaggedDevice) o; + if (o instanceof TaggedDevice td) { return td.DeviceContainer.equals(this.DeviceContainer) && td.DeviceType.equals(this.DeviceType) && td.min.equals(this.min) && td.max.equals(this.max) && td.init.equals(this.init) && td.clusterName.equals(this.clusterName) && td.label.equals(this.label); diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer.java index 863d4153458..dbac249cea2 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer.java @@ -559,8 +559,7 @@ public boolean equals(Object obj) { return true; } - if (obj instanceof OneWireContainer) { - var owc = (OneWireContainer) obj; + if (obj instanceof OneWireContainer owc) { // don't claim that all subclasses of a specific container are // equivalent to the parent container if (owc.getClass() == this.getClass()) { diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer12.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer12.java index 75572fe9fde..e281df1fc1a 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer12.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer12.java @@ -1139,18 +1139,15 @@ public byte[] channelAccess(byte[] inbuffer, boolean toggleRW, boolean readIniti inlength = inlength << 1; // = inlength * 2 } - switch (CRCMode) { + inlength = switch (CRCMode) { default: case CRC_EVERY_BYTE: // we need to allow for 2 CRC bytes for every byte of the length - inlength = inlength * 3; // length + 2*length - break; + yield inlength * 3; // length + 2*length case CRC_EVERY_8_BYTES: // we need to allow for 2 CRC bytes for every 8 bytes of length - inlength = inlength + (inlength >> 3 << 1); // (length DIV 8) * 2 - break; + yield inlength + (inlength >> 3 << 1); // (length DIV 8) * 2 case CRC_EVERY_32_BYTES: // we need to allow for 2 CRC bytes for every 32 bytes of length - inlength = inlength + (inlength >> 5 << 1); // (length DIV 32) * 2 - break; - } + yield inlength + (inlength >> 5 << 1); // (length DIV 32) * 2 + }; var outputbuffer = new byte[inlength + 3 + 1]; // 3 control bytes + 1 information byte diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer21.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer21.java index 8f9406a0481..edffe87634e 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer21.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer21.java @@ -2026,27 +2026,16 @@ public void setClockAlarm(int hours, int minutes, int seconds, int day, int alar state[0x0a] = (byte) day; - var number_0_msb = 0; // how many of the MS, MM, MH, MD bytes have - + // how many of the MS, MM, MH, MD bytes have // 0 as their ms bit??? - switch (alarmFrequency) { - case ONCE_PER_SECOND: - number_0_msb = 0; - break; - case ONCE_PER_MINUTE: - number_0_msb = 1; - break; - case ONCE_PER_HOUR: - number_0_msb = 2; - break; - case ONCE_PER_DAY: - number_0_msb = 3; - break; - default: - case ONCE_PER_WEEK: - number_0_msb = 4; - break; - } + var number_0_msb = switch (alarmFrequency) { + case ONCE_PER_SECOND -> 0; + case ONCE_PER_MINUTE -> 1; + case ONCE_PER_HOUR -> 2; + case ONCE_PER_DAY -> 3; + case ONCE_PER_WEEK -> 4; + default -> 4; + }; for (var i = 0x07; i < 0x0b; i++) { if (number_0_msb > 0) { diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer26.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer26.java index a12ed7d3923..9a5de5478ff 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer26.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer26.java @@ -662,26 +662,15 @@ public void calibrateCurrentADC() throws OneWireIOException, OneWireException, I * @throws IllegalArgumentException Bad parameters passed */ public void setThreshold(byte thresholdValue) throws OneWireIOException, OneWireException { - byte thresholdReg; byte[] data; - switch (thresholdValue) { - - case 0: - thresholdReg = 0; - break; - case 2: - thresholdReg = 64; - break; - case 4: - thresholdReg = (byte) 128; - break; - case 8: - thresholdReg = (byte) 192; - break; - default: - throw new IllegalArgumentException("OneWireContainer26-Threshold value must be 0,2,4, or 8."); - } + var thresholdReg = switch (thresholdValue) { + case 0 -> (byte) 0; + case 2 -> (byte) 64; + case 4 -> (byte) 128; + case 8 -> (byte) 192; + default -> throw new IllegalArgumentException("OneWireContainer26-Threshold value must be 0,2,4, or 8."); + }; // first save their original IAD settings so we dont change anything var IADvalue = this.getFlag(IAD_FLAG); diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer28.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer28.java index 6b2ba98c326..15cb9c17954 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer28.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer28.java @@ -361,8 +361,6 @@ public double getMinTemperature() { */ @Override public void doTemperatureConvert(byte[] state) throws OneWireIOException, OneWireException { - var msDelay = 750; // in milliseconds - // select the device if (!this.adapter.select(this.address)) { @@ -376,23 +374,13 @@ public void doTemperatureConvert(byte[] state) throws OneWireIOException, OneWir this.adapter.putByte(CONVERT_TEMPERATURE_COMMAND); // calculate duration of delay according to resolution desired - switch (state[4]) { - - case RESOLUTION_9_BIT: - msDelay = 94; - break; - case RESOLUTION_10_BIT: - msDelay = 188; - break; - case RESOLUTION_11_BIT: - msDelay = 375; - break; - case RESOLUTION_12_BIT: - msDelay = 750; - break; - default: - msDelay = 750; - } // switch + var msDelay = switch (state[4]) { + case RESOLUTION_9_BIT -> 94; + case RESOLUTION_10_BIT -> 188; + case RESOLUTION_11_BIT -> 375; + case RESOLUTION_12_BIT -> 750; + default -> 750; + }; // delay for specified amount of time try { @@ -502,28 +490,14 @@ public double getTemperatureAlarm(int alarmType, byte[] state) { */ @Override public double getTemperatureResolution(byte[] state) { - var tempres = 0.0; - // calculate temperature resolution according to configuration byte - switch (state[4]) { - - case RESOLUTION_9_BIT: - tempres = 0.5; - break; - case RESOLUTION_10_BIT: - tempres = 0.25; - break; - case RESOLUTION_11_BIT: - tempres = 0.125; - break; - case RESOLUTION_12_BIT: - tempres = 0.0625; - break; - default: - tempres = 0.0; - } // switch - - return tempres; + return switch (state[4]) { + case RESOLUTION_9_BIT -> 0.5; + case RESOLUTION_10_BIT -> 0.25; + case RESOLUTION_11_BIT -> 0.125; + case RESOLUTION_12_BIT -> 0.0625; + default -> 0.0; + }; } // -------- diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer2C.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer2C.java index 4ff3518aecf..a908b173c66 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer2C.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer2C.java @@ -271,17 +271,12 @@ public int numberOfPotentiometers(byte[] state) { */ @Override public int numberOfWiperSettings(byte[] state) { - switch (state[0] & 0x30) { - - case 0x00: - return 32; - case 0x10: - return 64; - case 0x20: - return 128; - default: - return 256; - } + return switch (state[0] & 0x30) { + case 0x00 -> 32; + case 0x10 -> 64; + case 0x20 -> 128; + default -> 256; + }; } /** @@ -293,17 +288,12 @@ public int numberOfWiperSettings(byte[] state) { */ @Override public int potentiometerResistance(byte[] state) { - switch (state[0] & 0xc0) { - - case 0x00: - return 5; - case 0x40: - return 10; - case 0x80: - return 50; - default: - return 100; - } + return switch (state[0] & 0xc0) { + case 0x00 -> 5; + case 0x40 -> 10; + case 0x80 -> 50; + default -> 100; + }; } /** diff --git a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer42.java b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer42.java index 31f26a7390b..83c93eb277f 100644 --- a/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer42.java +++ b/io.openems.edge.bridge.onewire/src/com/dalsemi/onewire/container/OneWireContainer42.java @@ -449,8 +449,6 @@ public double getMinTemperature() { */ @Override public void doTemperatureConvert(byte[] state) throws OneWireIOException, OneWireException { - var msDelay = 750; // in milliseconds - // select the device if (!this.adapter.select(this.address)) { @@ -464,23 +462,13 @@ public void doTemperatureConvert(byte[] state) throws OneWireIOException, OneWir this.adapter.putByte(CONVERT_TEMPERATURE_COMMAND); // calculate duration of delay according to resolution desired - switch (state[4]) { - - case RESOLUTION_9_BIT: - msDelay = 94; - break; - case RESOLUTION_10_BIT: - msDelay = 188; - break; - case RESOLUTION_11_BIT: - msDelay = 375; - break; - case RESOLUTION_12_BIT: - msDelay = 750; - break; - default: - msDelay = 750; - } // switch + var msDelay = switch (state[4]) { + case RESOLUTION_9_BIT -> 94; + case RESOLUTION_10_BIT -> 188; + case RESOLUTION_11_BIT -> 375; + case RESOLUTION_12_BIT -> 750; + default -> 750; + }; // delay for specified amount of time try { @@ -589,28 +577,14 @@ public double getTemperatureAlarm(int alarmType, byte[] state) { */ @Override public double getTemperatureResolution(byte[] state) { - var tempres = 0.0; - // calculate temperature resolution according to configuration byte - switch (state[4]) { - - case RESOLUTION_9_BIT: - tempres = 0.5; - break; - case RESOLUTION_10_BIT: - tempres = 0.25; - break; - case RESOLUTION_11_BIT: - tempres = 0.125; - break; - case RESOLUTION_12_BIT: - tempres = 0.0625; - break; - default: - tempres = 0.0; - } // switch - - return tempres; + return switch (state[4]) { + case RESOLUTION_9_BIT -> 0.5; + case RESOLUTION_10_BIT -> 0.25; + case RESOLUTION_11_BIT -> 0.125; + case RESOLUTION_12_BIT -> 0.0625; + default -> 0.0; + }; } // -------- diff --git a/io.openems.edge.bridge.onewire/src/io/openems/edge/bridge/onewire/jsonrpc/GetDeviceResponse.java b/io.openems.edge.bridge.onewire/src/io/openems/edge/bridge/onewire/jsonrpc/GetDeviceResponse.java index 04549846a09..b98337c68e7 100644 --- a/io.openems.edge.bridge.onewire/src/io/openems/edge/bridge/onewire/jsonrpc/GetDeviceResponse.java +++ b/io.openems.edge.bridge.onewire/src/io/openems/edge/bridge/onewire/jsonrpc/GetDeviceResponse.java @@ -50,10 +50,9 @@ public static class Device { public static Device from(OneWireContainer owc) { final var details = new JsonObject(); - if (owc instanceof TemperatureContainer) { + if (owc instanceof TemperatureContainer tc) { details.addProperty("type", "TemperatureContainer"); try { - var tc = (TemperatureContainer) owc; var state = tc.readDevice(); tc.doTemperatureConvert(state); state = tc.readDevice(); diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/BooleanDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/BooleanDoc.java index 86b591e5263..f2187b13a16 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/BooleanDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/BooleanDoc.java @@ -19,15 +19,12 @@ protected BooleanDoc self() { @SuppressWarnings("unchecked") @Override public BooleanReadChannel createChannelInstance(OpenemsComponent component, ChannelId channelId) { - switch (this.getAccessMode()) { - case READ_ONLY: - return new BooleanReadChannel(component, channelId, this, this.debounce, this.debounceMode); - case READ_WRITE: - case WRITE_ONLY: - return new BooleanWriteChannel(component, channelId, this); - } - throw new IllegalArgumentException( - "AccessMode [" + this.getAccessMode() + "] is unhandled. This should never happen."); + return switch (this.getAccessMode()) { + case READ_ONLY // + -> new BooleanReadChannel(component, channelId, this, this.debounce, this.debounceMode); + case READ_WRITE, WRITE_ONLY // + -> new BooleanWriteChannel(component, channelId, this); + }; } /** diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/DoubleDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/DoubleDoc.java index 22c0185cc29..3e45b9ed7d0 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/DoubleDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/DoubleDoc.java @@ -18,14 +18,11 @@ protected DoubleDoc self() { @SuppressWarnings("unchecked") @Override public DoubleReadChannel createChannelInstance(OpenemsComponent component, ChannelId channelId) { - switch (this.getAccessMode()) { - case READ_ONLY: - return new DoubleReadChannel(component, channelId, this); - case READ_WRITE: - case WRITE_ONLY: - return new DoubleWriteChannel(component, channelId, this); - } - throw new IllegalArgumentException( - "AccessMode [" + this.getAccessMode() + "] is unhandled. This should never happen."); + return switch (this.getAccessMode()) { + case READ_ONLY // + -> new DoubleReadChannel(component, channelId, this); + case READ_WRITE, WRITE_ONLY // + -> new DoubleWriteChannel(component, channelId, this); + }; } } diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/EnumDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/EnumDoc.java index 92306580030..854a4de096e 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/EnumDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/EnumDoc.java @@ -60,15 +60,12 @@ public EnumDoc initialValue(OptionsEnum initialValue) { @Override public EnumReadChannel createChannelInstance(OpenemsComponent component, io.openems.edge.common.channel.ChannelId channelId) { - switch (this.getAccessMode()) { - case READ_ONLY: - return new EnumReadChannel(component, channelId, this, this.getUndefinedOption(), this.getDebounce()); - case READ_WRITE: - case WRITE_ONLY: - return new EnumWriteChannel(component, channelId, this, this.getUndefinedOption()); - } - throw new IllegalArgumentException( - "Unable to initialize Channel-ID [" + channelId.id() + "] from OptionsEnumDoc!"); + return switch (this.getAccessMode()) { + case READ_ONLY // + -> new EnumReadChannel(component, channelId, this, this.getUndefinedOption(), this.getDebounce()); + case READ_WRITE, WRITE_ONLY // + -> new EnumWriteChannel(component, channelId, this, this.getUndefinedOption()); + }; } /** diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/FloatDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/FloatDoc.java index 3a1e89d4597..8ea3c035129 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/FloatDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/FloatDoc.java @@ -18,14 +18,11 @@ protected FloatDoc self() { @SuppressWarnings("unchecked") @Override public FloatReadChannel createChannelInstance(OpenemsComponent component, ChannelId channelId) { - switch (this.getAccessMode()) { - case READ_ONLY: - return new FloatReadChannel(component, channelId, this); - case READ_WRITE: - case WRITE_ONLY: - return new FloatWriteChannel(component, channelId, this); - } - throw new IllegalArgumentException( - "AccessMode [" + this.getAccessMode() + "] is unhandled. This should never happen."); + return switch (this.getAccessMode()) { + case READ_ONLY // + -> new FloatReadChannel(component, channelId, this); + case READ_WRITE, WRITE_ONLY // + -> new FloatWriteChannel(component, channelId, this); + }; } } diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/IntegerDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/IntegerDoc.java index e1b92cf338d..e9de3ebdcd0 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/IntegerDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/IntegerDoc.java @@ -18,14 +18,11 @@ protected IntegerDoc self() { @SuppressWarnings("unchecked") @Override public IntegerReadChannel createChannelInstance(OpenemsComponent component, ChannelId channelId) { - switch (this.getAccessMode()) { - case READ_ONLY: - return new IntegerReadChannel(component, channelId, this); - case READ_WRITE: - case WRITE_ONLY: - return new IntegerWriteChannel(component, channelId, this); - } - throw new IllegalArgumentException( - "AccessMode [" + this.getAccessMode() + "] is unhandled. This should never happen."); + return switch (this.getAccessMode()) { + case READ_ONLY // + -> new IntegerReadChannel(component, channelId, this); + case READ_WRITE, WRITE_ONLY // + -> new IntegerWriteChannel(component, channelId, this); + }; } } diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/LongDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/LongDoc.java index 2a54a98958e..398d4930386 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/LongDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/LongDoc.java @@ -18,14 +18,11 @@ protected LongDoc self() { @SuppressWarnings("unchecked") @Override public LongReadChannel createChannelInstance(OpenemsComponent component, ChannelId channelId) { - switch (this.getAccessMode()) { - case READ_ONLY: - return new LongReadChannel(component, channelId, this); - case READ_WRITE: - case WRITE_ONLY: - return new LongWriteChannel(component, channelId, this); - } - throw new IllegalArgumentException( - "AccessMode [" + this.getAccessMode() + "] is unhandled. This should never happen."); + return switch (this.getAccessMode()) { + case READ_ONLY // + -> new LongReadChannel(component, channelId, this); + case READ_WRITE, WRITE_ONLY // + -> new LongWriteChannel(component, channelId, this); + }; } } diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/ShortDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/ShortDoc.java index b4486bf388a..dd4d9e877ba 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/ShortDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/ShortDoc.java @@ -18,14 +18,11 @@ protected ShortDoc self() { @SuppressWarnings("unchecked") @Override public ShortReadChannel createChannelInstance(OpenemsComponent component, ChannelId channelId) { - switch (this.getAccessMode()) { - case READ_ONLY: - return new ShortReadChannel(component, channelId, this); - case READ_WRITE: - case WRITE_ONLY: - return new ShortWriteChannel(component, channelId, this); - } - throw new IllegalArgumentException( - "AccessMode [" + this.getAccessMode() + "] is unhandled. This should never happen."); + return switch (this.getAccessMode()) { + case READ_ONLY // + -> new ShortReadChannel(component, channelId, this); + case READ_WRITE, WRITE_ONLY // + -> new ShortWriteChannel(component, channelId, this); + }; } } diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/StringDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/StringDoc.java index b4d5f5b11c9..fe3db4ca6b1 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/StringDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/StringDoc.java @@ -18,14 +18,11 @@ protected StringDoc self() { @SuppressWarnings("unchecked") @Override public StringReadChannel createChannelInstance(OpenemsComponent component, ChannelId channelId) { - switch (this.getAccessMode()) { - case READ_ONLY: - return new StringReadChannel(component, channelId, this); - case READ_WRITE: - case WRITE_ONLY: - return new StringWriteChannel(component, channelId, this); - } - throw new IllegalArgumentException( - "AccessMode [" + this.getAccessMode() + "] is unhandled. This should never happen."); + return switch (this.getAccessMode()) { + case READ_ONLY // + -> new StringReadChannel(component, channelId, this); + case READ_WRITE, WRITE_ONLY // + -> new StringWriteChannel(component, channelId, this); + }; } } diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/internal/AbstractReadChannel.java b/io.openems.edge.common/src/io/openems/edge/common/channel/internal/AbstractReadChannel.java index 529dc6437e2..551af28eb6c 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/internal/AbstractReadChannel.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/internal/AbstractReadChannel.java @@ -270,32 +270,20 @@ protected List> getOnSetNextWrites() * @return true if validation ok */ private boolean validateType(OpenemsType expected, OpenemsType actual) { - switch (expected) { - case BOOLEAN: - case FLOAT: - case SHORT: - case STRING: - return actual == expected; - case DOUBLE: - switch (actual) { - case DOUBLE: - case FLOAT: - return true; - default: - return false; - } - case INTEGER: - case LONG: - switch (actual) { - case SHORT: - case INTEGER: - case LONG: - return true; - default: - return false; - } - } - return false; + return switch (expected) { + case BOOLEAN, FLOAT, SHORT, STRING // + -> actual == expected; + case DOUBLE // + -> switch (actual) { + case DOUBLE, FLOAT -> true; + default -> false; + }; + case INTEGER, LONG // + -> switch (actual) { + case SHORT, INTEGER, LONG -> true; + default -> false; + }; + }; } /** diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/internal/OpenemsTypeDoc.java b/io.openems.edge.common/src/io/openems/edge/common/channel/internal/OpenemsTypeDoc.java index 7f9bdcd22be..fad703f8dbd 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/internal/OpenemsTypeDoc.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/internal/OpenemsTypeDoc.java @@ -21,23 +21,15 @@ public abstract class OpenemsTypeDoc extends AbstractDoc { * @return the {@link OpenemsTypeDoc} */ public static OpenemsTypeDoc of(OpenemsType type) { - switch (type) { - case BOOLEAN: - return new BooleanDoc(); - case DOUBLE: - return new DoubleDoc(); - case FLOAT: - return new FloatDoc(); - case INTEGER: - return new IntegerDoc(); - case LONG: - return new LongDoc(); - case SHORT: - return new ShortDoc(); - case STRING: - return new StringDoc(); - } - throw new IllegalArgumentException("OpenemsType [" + type + "] is unhandled. This should never happen."); + return switch (type) { + case BOOLEAN -> new BooleanDoc(); + case DOUBLE -> new DoubleDoc(); + case FLOAT -> new FloatDoc(); + case INTEGER -> new IntegerDoc(); + case LONG -> new LongDoc(); + case SHORT -> new ShortDoc(); + case STRING -> new StringDoc(); + }; } protected OpenemsTypeDoc(OpenemsType type) { diff --git a/io.openems.edge.common/src/io/openems/edge/common/channel/value/Value.java b/io.openems.edge.common/src/io/openems/edge/common/channel/value/Value.java index ca3925b6e49..7e47e9d1b2c 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/channel/value/Value.java +++ b/io.openems.edge.common/src/io/openems/edge/common/channel/value/Value.java @@ -215,10 +215,10 @@ public JsonElement asJson() { * enum */ private EnumDoc isEnumValue() { - if (this.parent.channelDoc() instanceof EnumDoc) { - return (EnumDoc) this.parent.channelDoc(); - } - return null; + return switch (this.parent.channelDoc()) { + case EnumDoc ed -> ed; + default -> null; + }; } /** diff --git a/io.openems.edge.common/src/io/openems/edge/common/converter/StaticConverters.java b/io.openems.edge.common/src/io/openems/edge/common/converter/StaticConverters.java index 08ecb837ce1..48c95d69fdd 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/converter/StaticConverters.java +++ b/io.openems.edge.common/src/io/openems/edge/common/converter/StaticConverters.java @@ -2,112 +2,40 @@ import java.util.function.Function; -import io.openems.common.types.OpenemsType; - public class StaticConverters { /** * Converts only positive values from Element to Channel. */ public static final Function KEEP_POSITIVE = value -> { - if (value == null) { - return null; - } - for (OpenemsType openemsType : OpenemsType.values()) { - // this 'for' + 'switch' is only utilized to get an alert by Eclipse IDE if a - // new OpenemsType was added. ("The enum constant XX needs a corresponding case - // label in this enum switch on OpenemsType") - switch (openemsType) { - case BOOLEAN: - case SHORT: - case INTEGER: - case LONG: - case FLOAT: - case DOUBLE: - case STRING: - if (value instanceof Boolean || value instanceof String) { - return value; // impossible - } - if (value instanceof Short) { - short shortValue = (Short) value; - if (shortValue > 0) { - return shortValue; - } else { - return 0; - } - } else if (value instanceof Integer) { - int intValue = (Integer) value; - if (intValue > 0) { - return intValue; - } else { - return 0; - } - } else if (value instanceof Long) { - long longValue = (Long) value; - if (longValue > 0) { - return longValue; - } else { - return 0; - } - } else if (value instanceof Float) { - float floatValue = (Float) value; - if (floatValue > 0) { - return floatValue; - } else { - return 0; - } - } else if (value instanceof Double) { - double doubleValue = (Double) value; - if (doubleValue > 0) { - return doubleValue; - } else { - return 0; - } - } - } - break; - } - throw new IllegalArgumentException("Converter KEEP_POSITIVE does not accept the type of [" + value + "]"); + return switch (value) { + case null -> null; + case Boolean b -> b; + case String s -> s; + case Short s -> s > 0 ? s : 0; + case Integer i -> i > 0 ? i : 0; + case Long l -> l > 0 ? l : 0; + case Float f -> f > 0 ? f : 0; + case Double d -> d > 0 ? d : 0; + default -> + throw new IllegalArgumentException("Converter KEEP_POSITIVE does not accept the type of [" + value + "]"); + }; }; /** * Invert a value. */ public static final Function INVERT = value -> { - if (value == null) { - return null; - } - for (OpenemsType openemsType : OpenemsType.values()) { - // this 'for' + 'switch' is only utilized to get an alert by Eclipse IDE if a - // new OpenemsType was added. ("The enum constant XX needs a corresponding case - // label in this enum switch on OpenemsType") - switch (openemsType) { - case BOOLEAN: - case SHORT: - case INTEGER: - case LONG: - case FLOAT: - case DOUBLE: - case STRING: - if (value instanceof String) { - return value; // impossible - } - if (value instanceof Boolean) { - return Boolean.valueOf(!(boolean) value); - } else if (value instanceof Short) { - return Short.valueOf((short) ((short) value * -1)); - } else if (value instanceof Integer) { - return Integer.valueOf((int) value * -1); - } else if (value instanceof Long) { - return Long.valueOf((long) value * -1); - } else if (value instanceof Float) { - return Float.valueOf((float) value * -1); - } else if (value instanceof Double) { - return Double.valueOf((double) value * -1); - } - } - break; - } - throw new IllegalArgumentException("Converter INVERT does not accept the type of [" + value + "]"); + return switch (value) { + case null -> null; + case Boolean b -> !b; + case String s -> s; // impossible + case Short s -> s * -1; + case Integer i -> i * -1; + case Long l -> l * -1; + case Float f -> f * -1; + case Double d -> d * -1; + default -> throw new IllegalArgumentException("Converter INVERT does not accept the type of [" + value + "]"); + }; }; } diff --git a/io.openems.edge.common/src/io/openems/edge/common/jsonapi/JsonApiBuilder.java b/io.openems.edge.common/src/io/openems/edge/common/jsonapi/JsonApiBuilder.java index e1c1cae8031..fef18e45bf0 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/jsonapi/JsonApiBuilder.java +++ b/io.openems.edge.common/src/io/openems/edge/common/jsonapi/JsonApiBuilder.java @@ -531,11 +531,12 @@ private JsonrpcResponseError handleException(Call new JsonrpcResponseError(call.getRequest().getId(), ex); + default // + -> new JsonrpcResponseError(call.getRequest().getId(), t.getMessage()); + }; } private static final Key DEPTH = new Key("depth", Integer.class); diff --git a/io.openems.edge.common/src/io/openems/edge/common/jsonapi/SingleJsonApiBinder.java b/io.openems.edge.common/src/io/openems/edge/common/jsonapi/SingleJsonApiBinder.java index e13e2838e9e..941e9e6cec2 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/jsonapi/SingleJsonApiBinder.java +++ b/io.openems.edge.common/src/io/openems/edge/common/jsonapi/SingleJsonApiBinder.java @@ -1,5 +1,8 @@ package io.openems.edge.common.jsonapi; +import static java.util.concurrent.CompletableFuture.completedFuture; +import static java.util.concurrent.CompletableFuture.failedFuture; + import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; @@ -83,13 +86,14 @@ public CompletableFuture handleRequest(// throw new OpenemsException("No response"); } - if (response instanceof JsonrpcResponseSuccess success) { - return CompletableFuture - .completedFuture(new GenericJsonrpcResponseSuccess(request.getId(), success.getResult())); - } else if (response instanceof JsonrpcResponseError error) { - return CompletableFuture.failedFuture(error.getOpenemsError().exception(error.getParamsAsObjectArray())); - } - throw new OpenemsException("Unhandled response"); + return switch (response) { + case JsonrpcResponseSuccess success // + -> completedFuture(new GenericJsonrpcResponseSuccess(request.getId(), success.getResult())); + case JsonrpcResponseError error // + -> failedFuture(error.getOpenemsError().exception(error.getParamsAsObjectArray())); + default // + -> throw new OpenemsException("Unhandled response"); + }; } public void setDebug(boolean debug) { diff --git a/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint16.java b/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint16.java index 3e2e751cde0..0c6801f6b84 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint16.java +++ b/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint16.java @@ -3,6 +3,7 @@ import java.nio.ByteBuffer; import io.openems.common.types.OpenemsType; +import io.openems.common.types.OptionsEnum; import io.openems.edge.common.type.TypeUtils; public class ModbusRecordUint16 extends ModbusRecordConstant { @@ -40,8 +41,7 @@ public static byte[] toByteArray(short value) { * @return the byte array */ public static byte[] toByteArray(Object value) { - if (value == null || value instanceof io.openems.common.types.OptionsEnum - && ((io.openems.common.types.OptionsEnum) value).isUndefined()) { + if (value == null || (value instanceof OptionsEnum oe && oe.isUndefined())) { return UNDEFINED_VALUE; } return toByteArray((short) TypeUtils.getAsType(OpenemsType.SHORT, value)); diff --git a/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint32.java b/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint32.java index 23bae440c32..a7b7f19539f 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint32.java +++ b/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint32.java @@ -3,6 +3,7 @@ import java.nio.ByteBuffer; import io.openems.common.types.OpenemsType; +import io.openems.common.types.OptionsEnum; import io.openems.edge.common.type.TypeUtils; public class ModbusRecordUint32 extends ModbusRecordConstant { @@ -40,8 +41,7 @@ public static byte[] toByteArray(int value) { * @return the byte array */ public static byte[] toByteArray(Object value) { - if (value == null || value instanceof io.openems.common.types.OptionsEnum - && ((io.openems.common.types.OptionsEnum) value).isUndefined()) { + if (value == null || (value instanceof OptionsEnum oe && oe.isUndefined())) { return UNDEFINED_VALUE; } return toByteArray((int) TypeUtils.getAsType(OpenemsType.INTEGER, value)); diff --git a/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint64.java b/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint64.java index 87ccc8e779d..c0f893e56f5 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint64.java +++ b/io.openems.edge.common/src/io/openems/edge/common/modbusslave/ModbusRecordUint64.java @@ -3,6 +3,7 @@ import java.nio.ByteBuffer; import io.openems.common.types.OpenemsType; +import io.openems.common.types.OptionsEnum; import io.openems.edge.common.type.TypeUtils; public class ModbusRecordUint64 extends ModbusRecordConstant { @@ -42,8 +43,7 @@ public static byte[] toByteArray(long value) { * @return the byte array */ public static byte[] toByteArray(Object value) { - if (value == null || value instanceof io.openems.common.types.OptionsEnum - && ((io.openems.common.types.OptionsEnum) value).isUndefined()) { + if (value == null || (value instanceof OptionsEnum oe && oe.isUndefined())) { return UNDEFINED_VALUE; } return toByteArray((long) TypeUtils.getAsType(OpenemsType.LONG, value)); diff --git a/io.openems.edge.common/src/io/openems/edge/common/test/AbstractComponentTest.java b/io.openems.edge.common/src/io/openems/edge/common/test/AbstractComponentTest.java index fc7b59be4aa..07e2f9201d3 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/test/AbstractComponentTest.java +++ b/io.openems.edge.common/src/io/openems/edge/common/test/AbstractComponentTest.java @@ -1,5 +1,6 @@ package io.openems.edge.common.test; +import static io.openems.common.utils.FunctionUtils.doNothing; import static io.openems.common.utils.ReflectionUtils.invokeMethodViaReflection; import static io.openems.common.utils.ReflectionUtils.invokeMethodWithoutArgumentsViaReflection; import static io.openems.common.utils.ReflectionUtils.setAttributeViaReflection; @@ -30,7 +31,6 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; -import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.service.component.ComponentContext; import org.osgi.service.event.Event; @@ -549,8 +549,7 @@ protected void validateOutputs(AbstractComponentTest act) throws Exception readWriteInfo = "ReadValue"; } // Try to parse an Enum - if (channel.channelDoc() instanceof EnumDoc) { - var enumDoc = (EnumDoc) channel.channelDoc(); + if (channel.channelDoc() instanceof EnumDoc enumDoc) { var intGot = TypeUtils.getAsType(OpenemsType.INTEGER, got); got = enumDoc.getOption(intGot); } @@ -576,25 +575,22 @@ private OpenemsComponent getComponent(Map components, private Channel getChannel(AbstractComponentTest act, ChannelValue cv) throws IllegalArgumentException { - if (cv instanceof ChannelAddressValue cav) { + return switch (cv) { + case ChannelAddressValue cav -> { var component = this.getComponent(act.components, cav.address.getComponentId()); - return component.channel(cav.address.getChannelId()); + yield component.channel(cav.address.getChannelId()); } - - if (cv instanceof ChannelIdValue civ) { - return act.sut.channel(civ.channelId); - } - - if (cv instanceof ChannelNameValue civ2) { - return act.sut.channel(civ2.channelName); - } - - if (cv instanceof ComponentChannelIdValue cciv) { + case ChannelIdValue civ // + -> act.sut.channel(civ.channelId); + case ChannelNameValue civ2 // + -> act.sut.channel(civ2.channelName); + case ComponentChannelIdValue cciv -> { var component = this.getComponent(act.components, cciv.componentId()); - return component.channel(cciv.channelId()); + yield component.channel(cciv.channelId()); } - - throw new IllegalArgumentException("Unhandled subtype of ChannelValue"); + default // + -> throw new IllegalArgumentException("Unhandled subtype of ChannelValue"); + }; } } @@ -695,23 +691,25 @@ public SELF addReference(String memberName, Object object) throws Exception { // Store reference this.references.add(object); - // If this is a DummyComponentManager -> fill it with existing Components - if (object instanceof DummyComponentManager) { - for (OpenemsComponent component : this.components.values()) { - ((DummyComponentManager) object).addComponent(component); - } - } - // If this is an OpenemsComponent -> store it for later - if (object instanceof OpenemsComponent) { - this.addComponent((OpenemsComponent) object); - } - if (object instanceof Collection) { - for (Object o : (Collection) object) { - if (o instanceof OpenemsComponent) { - this.addComponent((OpenemsComponent) o); - } - } + switch (object) { + case DummyComponentManager dcm -> + // If this is a DummyComponentManager -> fill it with existing Components + this.components.values() // + .forEach(dcm::addComponent); + + case OpenemsComponent oc -> + // If this is an OpenemsComponent -> store it for later + this.addComponent(oc); + + case Collection os -> // + os.stream() // + .filter(OpenemsComponent.class::isInstance) // + .map(OpenemsComponent.class::cast) // + .forEach(this::addComponent); + + case null, default -> doNothing(); } + return this.self(); } @@ -748,11 +746,11 @@ public SELF addComponent(OpenemsComponent component) { this.components.put(component.id(), component); // Is a DummyComponentManager present -> add this Component - for (Object object : this.references) { - if (object instanceof DummyComponentManager) { - ((DummyComponentManager) object).addComponent(component); - } - } + this.references.stream() // + .filter(DummyComponentManager.class::isInstance) // + .map(DummyComponentManager.class::cast) // + .forEach(dcm -> dcm.addComponent(component)); + return this.self(); } @@ -770,8 +768,7 @@ public SELF addComponent(OpenemsComponent component) { public SELF activate(AbstractComponentConfig config) throws Exception { // Add the configuration to ConfigurationAdmin for (Object object : this.references) { - if (object instanceof DummyConfigurationAdmin) { - var cm = (DummyConfigurationAdmin) object; + if (object instanceof DummyConfigurationAdmin cm) { cm.addConfig(config); } } @@ -802,11 +799,9 @@ public SELF deactivate() throws Exception { private int getConfigChangeCount() throws IOException, InvalidSyntaxException { var result = 0; - for (Object object : this.references) { - if (object instanceof ConfigurationAdmin) { - var cm = (ConfigurationAdmin) object; - var configs = cm.listConfigurations(null); - for (Configuration config : configs) { + for (var object : this.references) { + if (object instanceof ConfigurationAdmin cm) { + for (var config : cm.listConfigurations(null)) { result += config.getChangeCount(); } } diff --git a/io.openems.edge.common/src/io/openems/edge/common/test/DummyComponentManager.java b/io.openems.edge.common/src/io/openems/edge/common/test/DummyComponentManager.java index 45bf636acd1..63c3ba3d539 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/test/DummyComponentManager.java +++ b/io.openems.edge.common/src/io/openems/edge/common/test/DummyComponentManager.java @@ -29,7 +29,6 @@ import io.openems.common.jsonrpc.request.DeleteComponentConfigRequest; import io.openems.common.jsonrpc.request.GetEdgeConfigRequest; import io.openems.common.jsonrpc.request.UpdateComponentConfigRequest; -import io.openems.common.jsonrpc.request.UpdateComponentConfigRequest.Property; import io.openems.common.jsonrpc.response.GetEdgeConfigResponse; import io.openems.common.types.EdgeConfig; import io.openems.common.utils.JsonUtils; @@ -204,9 +203,9 @@ public void handleCreateComponentConfigRequest(User user, CreateComponentConfigR var config = this.configurationAdmin.createFactoryConfiguration(request.getFactoryPid(), null); // set properties - for (Property property : request.getProperties()) { + for (var property : request.getProperties()) { var value = JsonUtils.getAsBestType(property.getValue()); - if (value instanceof Object[] && ((Object[]) value).length == 0) { + if (value instanceof Object[] os && os.length == 0) { value = new String[0]; } config.getProperties().put(property.getName(), value); diff --git a/io.openems.edge.common/src/io/openems/edge/common/test/Plot.java b/io.openems.edge.common/src/io/openems/edge/common/test/Plot.java index d6a73e22d47..e54440b033d 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/test/Plot.java +++ b/io.openems.edge.common/src/io/openems/edge/common/test/Plot.java @@ -1022,24 +1022,16 @@ else if (vAlign == VertAlign.CENTER) } public static String formatDouble(double d, AxisFormat format) { - switch (format) { - case TIME_HM: - return String.format("%tR", new java.util.Date((long) d)); - case TIME_HMS: - return String.format("%tT", new java.util.Date((long) d)); - case DATE: - return String.format("%tF", new java.util.Date((long) d)); - case DATETIME_HM: - return String.format("%tF %1$tR", new java.util.Date((long) d)); - case DATETIME_HMS: - return String.format("%tF %1$tT", new java.util.Date((long) d)); - case NUMBER_KGM: - return formatDoubleAsNumber(d, true); - case NUMBER_INT: - return Integer.toString((int) d); - default: - return formatDoubleAsNumber(d, false); - } + return switch (format) { + case TIME_HM -> String.format("%tR", new java.util.Date((long) d)); + case TIME_HMS -> String.format("%tT", new java.util.Date((long) d)); + case DATE -> String.format("%tF", new java.util.Date((long) d)); + case DATETIME_HM -> String.format("%tF %1$tR", new java.util.Date((long) d)); + case DATETIME_HMS -> String.format("%tF %1$tT", new java.util.Date((long) d)); + case NUMBER_KGM -> formatDoubleAsNumber(d, true); + case NUMBER_INT -> Integer.toString((int) d); + default -> formatDoubleAsNumber(d, false); + }; } private static String formatDoubleAsNumber(double d, boolean useKGM) { diff --git a/io.openems.edge.common/src/io/openems/edge/common/type/TypeUtils.java b/io.openems.edge.common/src/io/openems/edge/common/type/TypeUtils.java index d43a8bc6716..a468d55e6a7 100644 --- a/io.openems.edge.common/src/io/openems/edge/common/type/TypeUtils.java +++ b/io.openems.edge.common/src/io/openems/edge/common/type/TypeUtils.java @@ -43,16 +43,16 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu } // Extract OptionsEnum if (value instanceof OptionsEnum oe) { - value = oe.getValue(); + return getAsType(type, oe.getValue()); } // Extract Enum (lower priority than OptionsEnum) if (value instanceof Enum e) { - value = e.ordinal(); + return getAsType(type, e.ordinal()); } // Extract value from Array if (type != OpenemsType.STRING && value != null && value.getClass().isArray()) { if (Array.getLength(value) == 1) { - return TypeUtils.getAsType(type, Array.get(value, 0)); + return getAsType(type, Array.get(value, 0)); } return null; } @@ -66,26 +66,15 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu } return (T) switch (type) { - case BOOLEAN -> { - if (value instanceof Boolean b) { - yield b; - - } else if (value instanceof Short s) { - yield s == 0 ? Boolean.FALSE : Boolean.TRUE; - - } else if (value instanceof Integer i) { - yield i == 0 ? Boolean.FALSE : Boolean.TRUE; - - } else if (value instanceof Long l) { - yield l == 0 ? Boolean.FALSE : Boolean.TRUE; - - } else if (value instanceof Float f) { - yield f == 0 ? Boolean.FALSE : Boolean.TRUE; - - } else if (value instanceof Double d) { - yield d == 0 ? Boolean.FALSE : Boolean.TRUE; - - } else if (value instanceof String s) { + case BOOLEAN // + -> switch (value) { + case Boolean b -> b; + case Short s -> s == 0 ? Boolean.FALSE : Boolean.TRUE; + case Integer i -> i == 0 ? Boolean.FALSE : Boolean.TRUE; + case Long l -> l == 0 ? Boolean.FALSE : Boolean.TRUE; + case Float f -> f == 0 ? Boolean.FALSE : Boolean.TRUE; + case Double d -> d == 0 ? Boolean.FALSE : Boolean.TRUE; + case String s -> { if (s.isEmpty()) { yield null; } else if (s.equalsIgnoreCase("false")) { @@ -96,17 +85,14 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException("Cannot convert String [" + s + "] to Boolean."); } } - throw converterIsNotImplemented(type, value); - } - - case SHORT -> { - if (value instanceof Boolean b) { - yield Short.valueOf(b ? (short) 1 : (short) 0); - - } else if (value instanceof Short s) { - yield s; - - } else if (value instanceof Integer i) { + default -> throw converterIsNotImplemented(type, value); + }; + + case SHORT // + -> switch (value) { + case Boolean b -> Short.valueOf(b ? (short) 1 : (short) 0); + case Short s -> s; + case Integer i -> { var intValue = i.intValue(); if (intValue >= Short.MIN_VALUE && intValue <= Short.MAX_VALUE) { yield Short.valueOf((short) intValue); @@ -114,8 +100,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Integer [" + value + "] is not fitting in Short range."); } - - } else if (value instanceof Long l) { + } + case Long l -> { var longValue = l.longValue(); if (longValue >= Short.MIN_VALUE && longValue <= Short.MAX_VALUE) { yield Short.valueOf((short) longValue); @@ -123,8 +109,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Long [" + value + "] is not fitting in Short range."); } - - } else if (value instanceof Float f) { + } + case Float f -> { var intValue = Math.round(f.floatValue()); if (intValue >= Short.MIN_VALUE && intValue <= Short.MAX_VALUE) { yield Short.valueOf((short) intValue); @@ -132,8 +118,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Float [" + value + "] is not fitting in Short range."); } - - } else if (value instanceof Double d) { + } + case Double d -> { var longValue = Math.round(d.doubleValue()); if (longValue >= Short.MIN_VALUE && longValue <= Short.MAX_VALUE) { yield Short.valueOf((short) longValue); @@ -141,8 +127,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Double [" + value + "] is not fitting in Short range."); } - - } else if (value instanceof String s) { + } + case String s -> { if (s.isEmpty()) { yield null; } @@ -152,20 +138,15 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException("Cannot convert String [" + s + "] to Short."); } } - throw converterIsNotImplemented(type, value); - } - - case INTEGER -> { - if (value instanceof Boolean b) { - yield Integer.valueOf(b ? 1 : 0); - - } else if (value instanceof Short s) { - yield Integer.valueOf(s); - - } else if (value instanceof Integer i) { - yield i; - - } else if (value instanceof Long l) { + default -> throw converterIsNotImplemented(type, value); + }; + + case INTEGER // + -> switch (value) { + case Boolean b -> Integer.valueOf(b ? 1 : 0); + case Short s -> Integer.valueOf(s); + case Integer i -> i; + case Long l -> { var longValue = l.longValue(); if (longValue >= Integer.MIN_VALUE && longValue <= Integer.MAX_VALUE) { yield Integer.valueOf((int) longValue); @@ -173,8 +154,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Long [" + value + "] is not fitting in Integer range."); } - - } else if (value instanceof Float f) { + } + case Float f -> { var floatValue = f.floatValue(); if (floatValue >= Integer.MIN_VALUE && floatValue <= Integer.MAX_VALUE) { yield Integer.valueOf((int) floatValue); @@ -182,8 +163,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Float [" + value + "] is not fitting in Integer range."); } - - } else if (value instanceof Double d) { + } + case Double d -> { var longValue = Math.round(d.doubleValue()); if (longValue >= Integer.MIN_VALUE && longValue <= Integer.MAX_VALUE) { yield Integer.valueOf((int) longValue); @@ -191,8 +172,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Double [" + value + "] is not fitting in Integer range."); } - - } else if (value instanceof String s) { + } + case String s -> { if (s.isEmpty()) { yield null; } @@ -202,23 +183,16 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException("Cannot convert String [" + s + "] to Integer."); } } - throw converterIsNotImplemented(type, value); - } - - case LONG -> { - if (value instanceof Boolean b) { - yield Long.valueOf(b ? 1L : 0L); - - } else if (value instanceof Short s) { - yield (Long) s.longValue(); - - } else if (value instanceof Integer i) { - yield (Long) i.longValue(); - - } else if (value instanceof Long l) { - yield l; - - } else if (value instanceof Float f) { + default -> throw converterIsNotImplemented(type, value); + }; + + case LONG // + -> switch (value) { + case Boolean b -> Long.valueOf(b ? 1L : 0L); + case Short s -> (Long) s.longValue(); + case Integer i -> (Long) i.longValue(); + case Long l -> l; + case Float f -> { var floatValue = f.floatValue(); if (floatValue >= Long.MIN_VALUE && floatValue <= Long.MAX_VALUE) { yield Long.valueOf((long) floatValue); @@ -226,8 +200,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Float [" + value + "] is not fitting in Long range."); } - - } else if (value instanceof Double d) { + } + case Double d -> { var doubleValue = d.doubleValue(); if (doubleValue >= Long.MIN_VALUE && doubleValue <= Long.MAX_VALUE) { yield (Long) Math.round(d.doubleValue()); @@ -235,8 +209,8 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException( "Cannot convert. Double [" + value + "] is not fitting in Long range."); } - - } else if (value instanceof String s) { + } + case String s -> { if (s.isEmpty()) { yield null; } @@ -246,31 +220,21 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException("Cannot convert String [" + s + "] to Long."); } } - throw converterIsNotImplemented(type, value); - } - - case FLOAT -> { - if (value instanceof Boolean b) { - yield Float.valueOf(b ? 1f : 0f); - - } else if (value instanceof Short s) { - yield (Float) s.floatValue(); - - } else if (value instanceof Integer i) { - yield (Float) i.floatValue(); - - } else if (value instanceof Long l) { - yield (Float) l.floatValue(); - - } else if (value instanceof Float f) { - yield f; - - } else if (value instanceof Double d) { + default -> throw converterIsNotImplemented(type, value); + }; + + case FLOAT // + -> switch (value) { + case Boolean b -> Float.valueOf(b ? 1f : 0f); + case Short s -> (Float) s.floatValue(); + case Integer i -> (Float) i.floatValue(); + case Long l -> (Float) l.floatValue(); + case Float f -> f; + case Double d -> // Returns the value of this Double as a float after a narrowing primitive // conversion. - yield Float.valueOf(d.floatValue()); - - } else if (value instanceof String s) { + Float.valueOf(d.floatValue()); + case String s -> { if (s.isEmpty()) { yield null; } @@ -280,29 +244,18 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException("Cannot convert String [" + s + "] to Float."); } } - throw converterIsNotImplemented(type, value); - } - - case DOUBLE -> { - if (value instanceof Boolean b) { - yield Double.valueOf(b ? 1L : 0L); - - } else if (value instanceof Short s) { - yield Double.valueOf(s); - - } else if (value instanceof Integer i) { - yield Double.valueOf(i); - - } else if (value instanceof Long l) { - yield Double.valueOf(l); - - } else if (value instanceof Float f) { - yield Double.valueOf(f); - - } else if (value instanceof Double d) { - yield d; - - } else if (value instanceof String s) { + default -> throw converterIsNotImplemented(type, value); + }; + + case DOUBLE // + -> switch (value) { + case Boolean b -> Double.valueOf(b ? 1L : 0L); + case Short s -> Double.valueOf(s); + case Integer i -> Double.valueOf(i); + case Long l -> Double.valueOf(l); + case Float f -> Double.valueOf(f); + case Double d -> d; + case String s -> { if (s.isEmpty()) { yield null; } @@ -312,33 +265,25 @@ public static T getAsType(OpenemsType type, Object value) throws IllegalArgu throw new IllegalArgumentException("Cannot convert String [" + s + "] to Double."); } } - throw converterIsNotImplemented(type, value); - } + default -> throw converterIsNotImplemented(type, value); + }; case STRING -> { - if (value instanceof Object[]) { - yield Arrays.deepToString((Object[]) value); + if (value instanceof Object[] os) { + yield Arrays.deepToString(os); } else if (value.getClass().isArray()) { - if (value instanceof boolean[]) { - yield Arrays.toString((boolean[]) value); - } else if (value instanceof byte[]) { - yield Arrays.toString((byte[]) value); - } else if (value instanceof char[]) { - yield Arrays.toString((char[]) value); - } else if (value instanceof double[]) { - yield Arrays.toString((double[]) value); - } else if (value instanceof float[]) { - yield Arrays.toString((float[]) value); - } else if (value instanceof int[]) { - yield Arrays.toString((int[]) value); - } else if (value instanceof long[]) { - yield Arrays.toString((long[]) value); - } else if (value instanceof short[]) { - yield Arrays.toString((short[]) value); - } else { - yield value.toString(); - } + yield switch (value) { + case boolean[] bs -> Arrays.toString(bs); + case byte[] bs -> Arrays.toString(bs); + case char[] cs -> Arrays.toString(cs); + case double[] ds -> Arrays.toString(ds); + case float[] fs -> Arrays.toString(fs); + case int[] is -> Arrays.toString(is); + case long[] ls -> Arrays.toString(ls); + case short[] ss -> Arrays.toString(ss); + default -> value.toString(); + }; } else { yield value.toString(); diff --git a/io.openems.edge.controller.api.backend/src/io/openems/edge/controller/api/backend/handler/AuthenticatedRequestHandler.java b/io.openems.edge.controller.api.backend/src/io/openems/edge/controller/api/backend/handler/AuthenticatedRequestHandler.java index e95c94ad568..6b2c0807ce2 100644 --- a/io.openems.edge.controller.api.backend/src/io/openems/edge/controller/api/backend/handler/AuthenticatedRequestHandler.java +++ b/io.openems.edge.controller.api.backend/src/io/openems/edge/controller/api/backend/handler/AuthenticatedRequestHandler.java @@ -49,12 +49,15 @@ public void buildJsonApiRoutes(JsonApiBuilder b) { final var authenticatedRpcRequest = AuthenticatedRpcRequest.from(t.getRequest(), User::from); t.put(EdgeKeys.USER_KEY, authenticatedRpcRequest.getUser()); return authenticatedRpcRequest.getPayload(); + }, c -> this.binder.getJsonApiBuilder(), response -> { // wrap response in a AuthenticatedRpcResponse if successful - if (response instanceof JsonrpcResponseSuccess success) { - return new AuthenticatedRpcResponse(response.getId(), success); - } - return response; + return switch (response) { + case JsonrpcResponseSuccess success // + -> new AuthenticatedRpcResponse(response.getId(), success); + default -> response; + }; + }, () -> { final var subrequest = new Subrequest(JsonUtils.buildJsonObject().build()); subrequest.addRpcBuilderFor(this.binder.getJsonApiBuilder(), "payload"); diff --git a/io.openems.edge.controller.api.common/src/io/openems/edge/controller/api/common/ApiWorker.java b/io.openems.edge.controller.api.common/src/io/openems/edge/controller/api/common/ApiWorker.java index 4e15cd6d476..492326b2e24 100644 --- a/io.openems.edge.controller.api.common/src/io/openems/edge/controller/api/common/ApiWorker.java +++ b/io.openems.edge.controller.api.common/src/io/openems/edge/controller/api/common/ApiWorker.java @@ -140,8 +140,7 @@ public CompletableFuture handleSetChannelValueRequest(Co value = null; } else { value = JsonUtils.getAsBestType(request.getValue()); - if (value instanceof String && ((String) value).isEmpty() - && channel.channelId().doc().getType() != OpenemsType.STRING) { + if (value instanceof String s && s.isEmpty() && channel.channelId().doc().getType() != OpenemsType.STRING) { // Allow non-string Channels to be set to 'UNDEFINED' using an empty string value = null; } diff --git a/io.openems.edge.controller.api.common/src/io/openems/edge/controller/api/common/handler/RoutesJsonApiHandler.java b/io.openems.edge.controller.api.common/src/io/openems/edge/controller/api/common/handler/RoutesJsonApiHandler.java index 4cceb550d83..13741e20121 100644 --- a/io.openems.edge.controller.api.common/src/io/openems/edge/controller/api/common/handler/RoutesJsonApiHandler.java +++ b/io.openems.edge.controller.api.common/src/io/openems/edge/controller/api/common/handler/RoutesJsonApiHandler.java @@ -86,11 +86,10 @@ private static final List getAllRequests(List parent .map(Tag.serializer()::serialize) // .collect(toJsonArray())) .add("guards", def.getGuards().stream() // - .map(t -> { - if (t instanceof JsonrpcRoleEndpointGuard a) { - return JsonrpcRoleEndpointGuard.serializer().serialize(a); - } - return null; + .map(t -> switch (t) { + case JsonrpcRoleEndpointGuard a // + -> JsonrpcRoleEndpointGuard.serializer().serialize(a); + default -> null; }) // .filter(Objects::nonNull) // .collect(toJsonArray())) diff --git a/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusApi.java b/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusApi.java index 6ffd1472af7..be3b15d2f4f 100644 --- a/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusApi.java +++ b/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusApi.java @@ -1,8 +1,8 @@ package io.openems.edge.controller.api.modbus; import java.util.List; -import java.util.TreeMap; import java.util.Map.Entry; +import java.util.TreeMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Consumer; @@ -20,7 +20,6 @@ import io.openems.common.utils.ConfigUtils; import io.openems.common.utils.FunctionUtils; import io.openems.common.worker.AbstractWorker; -import io.openems.edge.common.channel.Channel; import io.openems.edge.common.channel.WriteChannel; import io.openems.edge.common.component.AbstractOpenemsComponent; import io.openems.edge.common.component.OpenemsComponent; @@ -38,10 +37,10 @@ import io.openems.edge.common.modbusslave.ModbusSlaveNatureTable; import io.openems.edge.controller.api.Controller; import io.openems.edge.controller.api.common.ApiWorker; +import io.openems.edge.controller.api.common.ApiWorker.WriteHandler; import io.openems.edge.controller.api.common.Status; import io.openems.edge.controller.api.common.WriteObject; import io.openems.edge.controller.api.common.WritePojo; -import io.openems.edge.controller.api.common.ApiWorker.WriteHandler; import io.openems.edge.controller.api.modbus.jsonrpc.GetModbusProtocolExportXlsxRequest; import io.openems.edge.controller.api.modbus.jsonrpc.GetModbusProtocolExportXlsxResponse; import io.openems.edge.controller.api.modbus.jsonrpc.GetModbusProtocolRequest; @@ -237,13 +236,13 @@ protected synchronized void updateComponents() { } protected synchronized void addComponent(OpenemsComponent component) { - if (!(component instanceof ModbusSlave)) { + if (!(component instanceof ModbusSlave ms)) { this.logError(this.log, "Component [" + component.id() + "] does not implement ModbusSlave"); this.invalidComponents.add(component); this._setComponentNoModbusApiFault(true); return; } - this._components.add((ModbusSlave) component); + this._components.add(ms); this.updateComponents(); } @@ -266,10 +265,10 @@ protected synchronized void removeComponent(OpenemsComponent component) { protected void updateCycleValues() { this.records.values() // .stream() // - .filter(r -> r instanceof ModbusRecordCycleValue) // - .map(r -> (ModbusRecordCycleValue) r) // + .filter(ModbusRecordCycleValue.class::isInstance) // + .map(ModbusRecordCycleValue.class::cast) // .forEach(r -> { - OpenemsComponent component = this.getPossiblyDisabledComponent(r.getComponentId()); + var component = this.getPossiblyDisabledComponent(r.getComponentId()); if (component != null && component.isEnabled()) { r.updateValue(component); } else { @@ -332,16 +331,14 @@ private int addRecordToProcessImage(int address, ModbusRecord record, OpenemsCom record.setComponentId(component.id()); // Handle writes to the Channel; limited to ModbusRecordChannels - if (record instanceof ModbusRecordChannel) { - var r = (ModbusRecordChannel) record; + if (record instanceof ModbusRecordChannel r) { r.onWriteValue(value -> { - Channel readChannel = component.channel(r.getChannelId()); - if (!(readChannel instanceof WriteChannel)) { + var readChannel = component.channel(r.getChannelId()); + if (!(readChannel instanceof WriteChannel wc)) { this.logWarn(this.log, "Unable to write to Read-Only-Channel [" + readChannel.address() + "]"); return; } - WriteChannel channel = (WriteChannel) readChannel; - this.apiWorker.addValue(channel, new WritePojo(value)); + this.apiWorker.addValue(wc, new WritePojo(value)); }); } diff --git a/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusRtuApi.java b/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusRtuApi.java index b93209a5702..4781e65aa2d 100644 --- a/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusRtuApi.java +++ b/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusRtuApi.java @@ -84,10 +84,9 @@ public boolean equals(Object other) { if (!super.equals(other)) { return false; } - if (!(other instanceof RtuConfig)) { + if (!(other instanceof RtuConfig config)) { return false; } - RtuConfig config = (RtuConfig) other; return this.baudRate == config.baudRate // && this.databits == config.databits // && this.stopbits == config.stopbits // diff --git a/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusTcpApi.java b/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusTcpApi.java index 066ae09248f..fa5cbb2d909 100644 --- a/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusTcpApi.java +++ b/io.openems.edge.controller.api.modbus/src/io/openems/edge/controller/api/modbus/AbstractModbusTcpApi.java @@ -33,10 +33,9 @@ public boolean equals(Object other) { if (!super.equals(other)) { return false; } - if (!(other instanceof TcpConfig)) { + if (!(other instanceof TcpConfig config)) { return false; } - TcpConfig config = (TcpConfig) other; return this.port == config.port; } diff --git a/io.openems.edge.controller.api.modbus/test/io/openems/edge/controller/api/modbus/readonly/rtu/ControllerApiModbusRtuReadOnlyImplTest.java b/io.openems.edge.controller.api.modbus/test/io/openems/edge/controller/api/modbus/readonly/rtu/ControllerApiModbusRtuReadOnlyImplTest.java index 251a9bf8145..c183e8f9529 100644 --- a/io.openems.edge.controller.api.modbus/test/io/openems/edge/controller/api/modbus/readonly/rtu/ControllerApiModbusRtuReadOnlyImplTest.java +++ b/io.openems.edge.controller.api.modbus/test/io/openems/edge/controller/api/modbus/readonly/rtu/ControllerApiModbusRtuReadOnlyImplTest.java @@ -2,9 +2,9 @@ import org.junit.Test; -import io.openems.edge.common.test.AbstractComponentTest.TestCase; import io.openems.edge.bridge.modbus.api.Parity; import io.openems.edge.bridge.modbus.api.Stopbit; +import io.openems.edge.common.test.AbstractComponentTest.TestCase; import io.openems.edge.common.test.DummyConfigurationAdmin; import io.openems.edge.controller.test.ControllerTest; diff --git a/io.openems.edge.controller.api.modbus/test/io/openems/edge/controller/api/modbus/readwrite/rtu/ControllerApiModbusRtuReadWriteImplTest.java b/io.openems.edge.controller.api.modbus/test/io/openems/edge/controller/api/modbus/readwrite/rtu/ControllerApiModbusRtuReadWriteImplTest.java index 2a3e244447c..26dc37018c0 100644 --- a/io.openems.edge.controller.api.modbus/test/io/openems/edge/controller/api/modbus/readwrite/rtu/ControllerApiModbusRtuReadWriteImplTest.java +++ b/io.openems.edge.controller.api.modbus/test/io/openems/edge/controller/api/modbus/readwrite/rtu/ControllerApiModbusRtuReadWriteImplTest.java @@ -2,9 +2,9 @@ import org.junit.Test; -import io.openems.edge.common.test.AbstractComponentTest.TestCase; import io.openems.edge.bridge.modbus.api.Parity; import io.openems.edge.bridge.modbus.api.Stopbit; +import io.openems.edge.common.test.AbstractComponentTest.TestCase; import io.openems.edge.common.test.DummyConfigurationAdmin; import io.openems.edge.controller.test.ControllerTest; diff --git a/io.openems.edge.controller.api.mqtt/src/io/openems/edge/controller/api/mqtt/MqttUtils.java b/io.openems.edge.controller.api.mqtt/src/io/openems/edge/controller/api/mqtt/MqttUtils.java index f245063471a..b208a16b28e 100644 --- a/io.openems.edge.controller.api.mqtt/src/io/openems/edge/controller/api/mqtt/MqttUtils.java +++ b/io.openems.edge.controller.api.mqtt/src/io/openems/edge/controller/api/mqtt/MqttUtils.java @@ -115,22 +115,15 @@ private static X509Certificate loadCertificate(String cert) throws IOException, */ private static PrivateKey loadPrivateKey(String privateKey) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException { - try (PEMParser pemParser = new PEMParser( - new InputStreamReader(new ByteArrayInputStream(privateKey.getBytes())))) { - Object obj = pemParser.readObject(); - if (obj instanceof PEMKeyPair) { - // Handle RSA private key - PEMKeyPair pemKeyPair = (PEMKeyPair) obj; - JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); - return converter.getPrivateKey(pemKeyPair.getPrivateKeyInfo()); - } else if (obj instanceof PrivateKeyInfo) { - // Handle other private key formats - PrivateKeyInfo privateKeyInfo = (PrivateKeyInfo) obj; - JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); - return converter.getPrivateKey(privateKeyInfo); - } else { - throw new InvalidKeySpecException("Invalid private key format"); - } + try (var pemParser = new PEMParser(new InputStreamReader(new ByteArrayInputStream(privateKey.getBytes())))) { + var converter = new JcaPEMKeyConverter().setProvider("BC"); + return switch (pemParser.readObject()) { + case PEMKeyPair pemKeyPair // Handle RSA private key + -> converter.getPrivateKey(pemKeyPair.getPrivateKeyInfo()); + case PrivateKeyInfo privateKeyInfo // Handle other private key formats + -> converter.getPrivateKey(privateKeyInfo); + default -> throw new InvalidKeySpecException("Invalid private key format"); + }; } } } \ No newline at end of file diff --git a/io.openems.edge.controller.api.rest/src/io/openems/edge/controller/api/rest/RestHandler.java b/io.openems.edge.controller.api.rest/src/io/openems/edge/controller/api/rest/RestHandler.java index 1819afa7696..9fa0a35258b 100644 --- a/io.openems.edge.controller.api.rest/src/io/openems/edge/controller/api/rest/RestHandler.java +++ b/io.openems.edge.controller.api.rest/src/io/openems/edge/controller/api/rest/RestHandler.java @@ -148,13 +148,12 @@ private boolean handleRest(User user, List targets, Request baseRequest, var thisTarget = targets.get(0); var remainingTargets = targets.subList(1, targets.size()); - switch (thisTarget) { - case "channel": - return this.handleChannel(user, remainingTargets, baseRequest, request, response); - - default: - throw new OpenemsException("Unhandled REST target [" + thisTarget + "]"); - } + return switch (thisTarget) { + case "channel"// + -> this.handleChannel(user, remainingTargets, baseRequest, request, response); + default // + -> throw new OpenemsException("Unhandled REST target [" + thisTarget + "]"); + }; } private boolean handleChannel(User user, List targets, Request baseRequest, HttpServletRequest request, @@ -167,23 +166,21 @@ private boolean handleChannel(User user, List targets, Request baseReque var channelAddress = new ChannelAddress(targets.get(0), targets.get(1)); // call handler methods - switch (request.getMethod()) { - case "GET": - return this.handleGet(user, channelAddress, baseRequest, request, response); - - case "POST": - // Validate API Access-Mode - switch (this.parent.getAccessMode()) { - case READ_ONLY: - throw new OpenemsException("REST-Api is in Read-Only mode"); - case READ_WRITE: - case WRITE_ONLY: - return this.handlePost(user, channelAddress, baseRequest, request, response); - } - - default: - throw new OpenemsException("Unhandled REST Channel request method [" + request.getMethod() + "]"); - } + return switch (request.getMethod()) { + case "GET" // + -> this.handleGet(user, channelAddress, baseRequest, request, response); + + case "POST" // + -> switch (this.parent.getAccessMode()) { + case READ_ONLY // + -> throw new OpenemsException("REST-Api is in Read-Only mode"); + case READ_WRITE, WRITE_ONLY // + -> this.handlePost(user, channelAddress, baseRequest, request, response); + }; + + default // + -> throw new OpenemsException("Unhandled REST Channel request method [" + request.getMethod() + "]"); + }; } /** @@ -271,19 +268,20 @@ private void sendErrorResponse(Request baseRequest, HttpServletResponse response response.setContentType("application/json"); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); baseRequest.setHandled(true); - JsonrpcResponseError message; - if (ex instanceof OpenemsNamedException) { + var message = switch (ex) { + case OpenemsNamedException one -> { // Check for authentication error and set more specific response code // accordingly - if (((OpenemsNamedException) ex).getError() == OpenemsError.COMMON_AUTHENTICATION_FAILED) { + if (one.getError() == OpenemsError.COMMON_AUTHENTICATION_FAILED) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); } // Get Named Exception error response - message = new JsonrpcResponseError(jsonrpcId, (OpenemsNamedException) ex); - } else { - // Get GENERIC error response - message = new JsonrpcResponseError(jsonrpcId, ex.getMessage()); + yield new JsonrpcResponseError(jsonrpcId, one); } + default -> + // Get GENERIC error response + new JsonrpcResponseError(jsonrpcId, ex.getMessage()); + }; response.getWriter().write(message.toString()); } catch (IOException e) { this.parent.logWarn(this.log, "Unable to send Error-Response: " + e.getMessage()); @@ -411,10 +409,9 @@ private void handleJsonRpc(User user, Request baseRequest, HttpServletRequest ht // parse JSON-RPC Request var message = JsonrpcMessage.from(json); - if (!(message instanceof JsonrpcRequest)) { + if (!(message instanceof JsonrpcRequest request)) { throw new OpenemsException("Only JSON-RPC Request is supported here."); } - var request = (JsonrpcRequest) message; requestId = request.getId(); // handle the request diff --git a/io.openems.edge.controller.api.websocket/src/io/openems/edge/controller/api/websocket/handler/EdgeRpcRequestHandler.java b/io.openems.edge.controller.api.websocket/src/io/openems/edge/controller/api/websocket/handler/EdgeRpcRequestHandler.java index 8aa5e780c95..aea61333a15 100644 --- a/io.openems.edge.controller.api.websocket/src/io/openems/edge/controller/api/websocket/handler/EdgeRpcRequestHandler.java +++ b/io.openems.edge.controller.api.websocket/src/io/openems/edge/controller/api/websocket/handler/EdgeRpcRequestHandler.java @@ -45,14 +45,18 @@ public void buildJsonApiRoutes(JsonApiBuilder builder) { }, call -> { return EdgeRpcRequest.from(call.getRequest()).getPayload(); + }, b -> { return this.binder.getJsonApiBuilder(); + }, response -> { // wrap response in a EdgeRpcResponse if successful - if (response instanceof JsonrpcResponseSuccess success) { - return new EdgeRpcResponse(response.getId(), success); - } - return response; + return switch (response) { + case JsonrpcResponseSuccess success // + -> new EdgeRpcResponse(response.getId(), success); + default -> response; + }; + }, () -> { final var subrequest = new Subrequest(JsonUtils.buildJsonObject() // .addProperty("edgeId", ControllerApiWebsocket.EDGE_ID) // diff --git a/io.openems.edge.controller.chp.soc/src/io/openems/edge/controller/chp/soc/ControllerChpSocImpl.java b/io.openems.edge.controller.chp.soc/src/io/openems/edge/controller/chp/soc/ControllerChpSocImpl.java index 8affca4f438..85016e592d4 100644 --- a/io.openems.edge.controller.chp.soc/src/io/openems/edge/controller/chp/soc/ControllerChpSocImpl.java +++ b/io.openems.edge.controller.chp.soc/src/io/openems/edge/controller/chp/soc/ControllerChpSocImpl.java @@ -90,21 +90,20 @@ protected void deactivate() { public void run() throws OpenemsNamedException { boolean modeChanged; do { - modeChanged = false; - switch (this.mode) { - case MANUAL_ON: + modeChanged = switch (this.mode) { + case MANUAL_ON -> { this.setOutput(true); - modeChanged = this.changeMode(Mode.MANUAL_ON); - break; - case MANUAL_OFF: + yield this.changeMode(Mode.MANUAL_ON); + } + case MANUAL_OFF -> { this.setOutput(false); - modeChanged = this.changeMode(Mode.MANUAL_OFF); - break; - case AUTOMATIC: + yield this.changeMode(Mode.MANUAL_OFF); + } + case AUTOMATIC -> { this.automaticMode(); - modeChanged = this.changeMode(Mode.AUTOMATIC); - break; + yield this.changeMode(Mode.AUTOMATIC); } + }; } while (modeChanged); this.channel(ControllerChpSoc.ChannelId.MODE).setNextValue(this.mode); diff --git a/io.openems.edge.controller.debug.detailedlog/src/io/openems/edge/controller/debug/detailedlog/ControllerDebugDetailedLogImpl.java b/io.openems.edge.controller.debug.detailedlog/src/io/openems/edge/controller/debug/detailedlog/ControllerDebugDetailedLogImpl.java index 629a04e491b..44f3a79261d 100644 --- a/io.openems.edge.controller.debug.detailedlog/src/io/openems/edge/controller/debug/detailedlog/ControllerDebugDetailedLogImpl.java +++ b/io.openems.edge.controller.debug.detailedlog/src/io/openems/edge/controller/debug/detailedlog/ControllerDebugDetailedLogImpl.java @@ -109,10 +109,8 @@ public void run() throws OpenemsNamedException { /* * create descriptive text */ - var channelText = ""; - switch (channel.channelDoc().getAccessMode()) { - case READ_ONLY: - case READ_WRITE: + var channelText = switch (channel.channelDoc().getAccessMode()) { + case READ_ONLY, READ_WRITE -> { var description = ""; if (channel instanceof EnumReadChannel) { try { @@ -122,29 +120,26 @@ public void run() throws OpenemsNamedException { description += "ERROR: " + e.getMessage(); } } - if (channel instanceof StateChannel - && ((StateChannel) channel).value().orElse(false) == true) { + if (channel instanceof StateChannel sc && sc.value().orElse(false) == true) { if (!description.isEmpty()) { description += "; "; } - description += ((StateChannel) channel).channelDoc().getText(); + description += sc.channelDoc().getText(); } - if (channel instanceof StateCollectorChannel - && ((StateCollectorChannel) channel).value().orElse(0) != 0) { + if (channel instanceof StateCollectorChannel scc && scc.value().orElse(0) != 0) { if (!description.isEmpty()) { description += "; "; } - description += ((StateCollectorChannel) channel).listStates(); + description += scc.listStates(); } - channelText = String.format("%15s %-3s %s", // + yield String.format("%15s %-3s %s", // channel.value().asStringWithoutUnit(), // unit, // description.isEmpty() ? "" : "(" + description + ")"); - break; - - case WRITE_ONLY: - channelText += "WRITE_ONLY"; } + case WRITE_ONLY // + -> "WRITE_ONLY"; + }; // Build complete line var line = String.format("%-" + WIDTH_FIRST + "s : %s", channel.channelId().id(), channelText); // Print the line only if is not equal to the last printed line diff --git a/io.openems.edge.controller.ess.cycle/src/io/openems/edge/controller/ess/cycle/statemachine/Context.java b/io.openems.edge.controller.ess.cycle/src/io/openems/edge/controller/ess/cycle/statemachine/Context.java index a97c045451b..6b2d7a93438 100644 --- a/io.openems.edge.controller.ess.cycle/src/io/openems/edge/controller/ess/cycle/statemachine/Context.java +++ b/io.openems.edge.controller.ess.cycle/src/io/openems/edge/controller/ess/cycle/statemachine/Context.java @@ -55,11 +55,13 @@ protected int getAcPower(ManagedSymmetricEss ess, HybridEssMode hybridEssMode, i return switch (this.config.hybridEssMode()) { case TARGET_AC -> this.config.power(); case TARGET_DC -> { - if (ess instanceof HybridEss) { - var pv = ess.getActivePower().orElse(0) - ((HybridEss) ess).getDcDischargePower().orElse(0); + yield switch (ess) { + case HybridEss he -> { + var pv = ess.getActivePower().orElse(0) - he.getDcDischargePower().orElse(0); yield pv + this.config.power(); } - yield this.config.power(); + default -> this.config.power(); + }; } }; } diff --git a/io.openems.edge.controller.ess.fixactivepower/src/io/openems/edge/controller/ess/fixactivepower/ControllerEssFixActivePowerImpl.java b/io.openems.edge.controller.ess.fixactivepower/src/io/openems/edge/controller/ess/fixactivepower/ControllerEssFixActivePowerImpl.java index 32c9fb30834..79e7acf8f15 100644 --- a/io.openems.edge.controller.ess.fixactivepower/src/io/openems/edge/controller/ess/fixactivepower/ControllerEssFixActivePowerImpl.java +++ b/io.openems.edge.controller.ess.fixactivepower/src/io/openems/edge/controller/ess/fixactivepower/ControllerEssFixActivePowerImpl.java @@ -133,20 +133,18 @@ public void run() throws OpenemsNamedException { * @return the AC power set-point */ protected static Integer getAcPower(ManagedSymmetricEss ess, HybridEssMode hybridEssMode, int power) { - switch (hybridEssMode) { - case TARGET_AC: - return power; - - case TARGET_DC: - if (ess instanceof HybridEss) { - var pv = ess.getActivePower().orElse(0) - ((HybridEss) ess).getDcDischargePower().orElse(0); - return pv + power; // Charge or Discharge - } else { - return power; + return switch (hybridEssMode) { + case TARGET_AC -> power; + + case TARGET_DC -> // + switch (ess) { + case HybridEss he -> { + var pv = ess.getActivePower().orElse(0) - he.getDcDischargePower().orElse(0); + yield pv + power; // Charge or Discharge } - } - - return null; /* should never happen */ + default -> power; + }; + }; } @Override diff --git a/io.openems.edge.controller.ess.fixstateofcharge/src/io/openems/edge/controller/ess/fixstateofcharge/api/AbstractFixStateOfCharge.java b/io.openems.edge.controller.ess.fixstateofcharge/src/io/openems/edge/controller/ess/fixstateofcharge/api/AbstractFixStateOfCharge.java index 5849daf0e9d..45ebdffbf6f 100644 --- a/io.openems.edge.controller.ess.fixstateofcharge/src/io/openems/edge/controller/ess/fixstateofcharge/api/AbstractFixStateOfCharge.java +++ b/io.openems.edge.controller.ess.fixstateofcharge/src/io/openems/edge/controller/ess/fixstateofcharge/api/AbstractFixStateOfCharge.java @@ -203,6 +203,7 @@ private Context handleStateMachine() { */ private void applyTargetPower(Float targetPower, float rampPower, int maxApparentPower) throws OpenemsNamedException { + final var ess = this.getEss(); var activePower = this.rampFilter.getFilteredValueAsInteger(targetPower, rampPower); this._setDebugSetActivePowerRaw(activePower); @@ -221,21 +222,16 @@ private void applyTargetPower(Float targetPower, float rampPower, int maxApparen activePower = this.calculateAcLimit(activePower); // Fit into min/max "EssPower" - if (this.getEss() instanceof ManagedSymmetricEss) { - var e = (ManagedSymmetricEss) this.getEss(); - var maxCharge = e.getPower().getMinPower(e, Phase.ALL, Pwr.ACTIVE); - var maxDischarge = e.getPower().getMaxPower(e, Phase.ALL, Pwr.ACTIVE); - activePower = TypeUtils.fitWithin(maxCharge, maxDischarge, activePower); - } else { - activePower = TypeUtils.fitWithin(maxApparentPower * -1, maxApparentPower, activePower); - } + var maxCharge = ess.getPower().getMinPower(ess, Phase.ALL, Pwr.ACTIVE); + var maxDischarge = ess.getPower().getMaxPower(ess, Phase.ALL, Pwr.ACTIVE); + activePower = TypeUtils.fitWithin(maxCharge, maxDischarge, activePower); if (activePower > 0) { - this.getEss().setActivePowerEquals(activePower); + ess.setActivePowerEquals(activePower); } else if (activePower < 0) { - this.getEss().setActivePowerEquals(activePower); + ess.setActivePowerEquals(activePower); } else { - this.getEss().setActivePowerEquals(activePower); + ess.setActivePowerEquals(activePower); } // Set debug channels diff --git a/io.openems.edge.controller.ess.fixstateofcharge/src/io/openems/edge/controller/ess/fixstateofcharge/statemachine/StateMachine.java b/io.openems.edge.controller.ess.fixstateofcharge/src/io/openems/edge/controller/ess/fixstateofcharge/statemachine/StateMachine.java index 7017b970771..627a2c2f4d1 100644 --- a/io.openems.edge.controller.ess.fixstateofcharge/src/io/openems/edge/controller/ess/fixstateofcharge/statemachine/StateMachine.java +++ b/io.openems.edge.controller.ess.fixstateofcharge/src/io/openems/edge/controller/ess/fixstateofcharge/statemachine/StateMachine.java @@ -78,23 +78,15 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case IDLE: - return new IdleHander(); - case NOT_STARTED: - return new NotStartedHandler(); - case ABOVE_TARGET_SOC: - return new AboveTargetSocHandler(); - case BELOW_TARGET_SOC: - return new BelowTargetSocHandler(); - case AT_TARGET_SOC: - return new AtTargetSocHandler(); - case WITHIN_LOWER_TARGET_SOC_BOUNDARIES: - return new WithinLowerTargetSocBoundariesHandler(); - case WITHIN_UPPER_TARGET_SOC_BOUNDARIES: - return new WithinUpperTargetSocBoundariesHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case IDLE -> new IdleHander(); + case NOT_STARTED -> new NotStartedHandler(); + case ABOVE_TARGET_SOC -> new AboveTargetSocHandler(); + case BELOW_TARGET_SOC -> new BelowTargetSocHandler(); + case AT_TARGET_SOC -> new AtTargetSocHandler(); + case WITHIN_LOWER_TARGET_SOC_BOUNDARIES -> new WithinLowerTargetSocBoundariesHandler(); + case WITHIN_UPPER_TARGET_SOC_BOUNDARIES -> new WithinUpperTargetSocBoundariesHandler(); + }; } } \ No newline at end of file diff --git a/io.openems.edge.controller.ess.standby/src/io/openems/edge/controller/ess/standby/statemachine/StateMachine.java b/io.openems.edge.controller.ess.standby/src/io/openems/edge/controller/ess/standby/statemachine/StateMachine.java index e0c53185f05..2570a45be3c 100644 --- a/io.openems.edge.controller.ess.standby/src/io/openems/edge/controller/ess/standby/statemachine/StateMachine.java +++ b/io.openems.edge.controller.ess.standby/src/io/openems/edge/controller/ess/standby/statemachine/StateMachine.java @@ -48,20 +48,13 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case DISCHARGE: - return new DischargeHandler(); - case SLOW_CHARGE_1: - return new SlowCharge1Handler(); - case FAST_CHARGE: - return new FastChargeHandler(); - case SLOW_CHARGE_2: - return new SlowCharge2Handler(); - case FINISHED: - return new FinishedHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case DISCHARGE -> new DischargeHandler(); + case SLOW_CHARGE_1 -> new SlowCharge1Handler(); + case FAST_CHARGE -> new FastChargeHandler(); + case SLOW_CHARGE_2 -> new SlowCharge2Handler(); + case FINISHED -> new FinishedHandler(); + }; } } diff --git a/io.openems.edge.controller.ess.timeofusetariff/src/io/openems/edge/controller/ess/timeofusetariff/TimeOfUseTariffController.java b/io.openems.edge.controller.ess.timeofusetariff/src/io/openems/edge/controller/ess/timeofusetariff/TimeOfUseTariffController.java index b241b53977a..b05feebdff4 100644 --- a/io.openems.edge.controller.ess.timeofusetariff/src/io/openems/edge/controller/ess/timeofusetariff/TimeOfUseTariffController.java +++ b/io.openems.edge.controller.ess.timeofusetariff/src/io/openems/edge/controller/ess/timeofusetariff/TimeOfUseTariffController.java @@ -11,7 +11,6 @@ import io.openems.edge.controller.ess.timeofusetariff.v1.EnergyScheduleHandlerV1; import io.openems.edge.energy.api.EnergySchedulable; -@SuppressWarnings("deprecation") public interface TimeOfUseTariffController extends Controller, EnergySchedulable, OpenemsComponent { public enum ChannelId implements io.openems.edge.common.channel.ChannelId { diff --git a/io.openems.edge.controller.ess.timeofusetariff/src/io/openems/edge/controller/ess/timeofusetariff/Utils.java b/io.openems.edge.controller.ess.timeofusetariff/src/io/openems/edge/controller/ess/timeofusetariff/Utils.java index 8c945077d45..45976c1da10 100644 --- a/io.openems.edge.controller.ess.timeofusetariff/src/io/openems/edge/controller/ess/timeofusetariff/Utils.java +++ b/io.openems.edge.controller.ess.timeofusetariff/src/io/openems/edge/controller/ess/timeofusetariff/Utils.java @@ -234,13 +234,14 @@ public static Integer calculateMaxChargeProductionPower(Sum sum) { * @return the set-point */ public static int calculateDelayDischargePower(ManagedSymmetricEss ess) { - if (ess instanceof HybridEss e) { + return switch (ess) { + case HybridEss e -> // Limit discharge to DC-PV power - return max(0, ess.getActivePower().orElse(0) - e.getDcDischargePower().orElse(0)); - } else { + max(0, ess.getActivePower().orElse(0) - e.getDcDischargePower().orElse(0)); + default -> // Limit discharge to 0 - return 0; - } + 0; + }; } /** diff --git a/io.openems.edge.controller.highloadtimeslot/src/io/openems/edge/controller/highloadtimeslot/ControllerHighLoadTimeslotImpl.java b/io.openems.edge.controller.highloadtimeslot/src/io/openems/edge/controller/highloadtimeslot/ControllerHighLoadTimeslotImpl.java index 98c81d8c854..1fab94396a7 100644 --- a/io.openems.edge.controller.highloadtimeslot/src/io/openems/edge/controller/highloadtimeslot/ControllerHighLoadTimeslotImpl.java +++ b/io.openems.edge.controller.highloadtimeslot/src/io/openems/edge/controller/highloadtimeslot/ControllerHighLoadTimeslotImpl.java @@ -121,8 +121,8 @@ private int getPower(ManagedSymmetricEss ess) { /* * We are in a Charge period */ - switch (this.chargeState) { - case NORMAL: + return switch (this.chargeState) { + case NORMAL -> { /* * charge with configured charge-power */ @@ -133,9 +133,9 @@ private int getPower(ManagedSymmetricEss ess) { // activate Charge-hysteresis if no charge power (i.e. >= 0) is allowed this.chargeState = ChargeState.HYSTERESIS; } - return this.chargePower; - - case HYSTERESIS: + yield this.chargePower; + } + case HYSTERESIS -> { /* * block charging till configured hysteresisSoc */ @@ -145,17 +145,16 @@ private int getPower(ManagedSymmetricEss ess) { + "]. Switch to Charge-Normal state."); this.chargeState = ChargeState.NORMAL; } - return 0; - - case FORCE_CHARGE: + yield 0; + } + case FORCE_CHARGE -> { /* * force full charging just before the high-load timeslot starts */ this.logInfo(this.log, "Just before High-Load timeslot. Charge with [" + this.chargePower + "]"); - return this.chargePower; + yield this.chargePower; } - // we should never come here... - return 0; + }; } /** @@ -186,16 +185,11 @@ private boolean isHighLoadTimeslot(LocalDateTime dateTime) { * @return true on yes */ protected static boolean isActiveWeekday(WeekdayFilter activeDayFilter, LocalDateTime dateTime) { - switch (activeDayFilter) { - case EVERDAY: - return true; - case ONLY_WEEKDAYS: - return !isWeekend(dateTime); - case ONLY_WEEKEND: - return isWeekend(dateTime); - } - // should never happen - return false; + return switch (activeDayFilter) { + case EVERDAY -> true; + case ONLY_WEEKDAYS -> !isWeekend(dateTime); + case ONLY_WEEKEND -> isWeekend(dateTime); + }; } protected static boolean isActiveDate(LocalDate startDate, LocalDate endDate, LocalDateTime dateTime) { diff --git a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Config.java b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Config.java similarity index 98% rename from io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Config.java rename to io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Config.java index 375398a3a66..b2360ac3c13 100644 --- a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Config.java +++ b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Config.java @@ -1,4 +1,4 @@ -package io.openems.edge.controller.heating.room; +package io.openems.edge.controller.io.heating.room; import org.osgi.service.metatype.annotations.AttributeDefinition; import org.osgi.service.metatype.annotations.ObjectClassDefinition; diff --git a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/RoomHeatingController.java b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeating.java similarity index 96% rename from io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/RoomHeatingController.java rename to io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeating.java index f2481a48229..c2b48e2dfb4 100644 --- a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/RoomHeatingController.java +++ b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeating.java @@ -1,4 +1,4 @@ -package io.openems.edge.controller.heating.room; +package io.openems.edge.controller.io.heating.room; import io.openems.common.types.OpenemsType; import io.openems.edge.common.channel.Doc; @@ -8,7 +8,7 @@ import io.openems.edge.controller.api.Controller; import io.openems.edge.meter.api.ElectricityMeter; -public interface RoomHeatingController extends Controller, ElectricityMeter, OpenemsComponent { +public interface ControllerIoRoomHeating extends Controller, ElectricityMeter, OpenemsComponent { public enum ChannelId implements io.openems.edge.common.channel.ChannelId { FLOOR_ACTUAL(Doc.of(OpenemsType.INTEGER)), // diff --git a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/RoomHeatingControllerImpl.java b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeatingImpl.java similarity index 95% rename from io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/RoomHeatingControllerImpl.java rename to io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeatingImpl.java index 22e08ec6215..ec20d7451b3 100644 --- a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/RoomHeatingControllerImpl.java +++ b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeatingImpl.java @@ -1,6 +1,6 @@ -package io.openems.edge.controller.heating.room; +package io.openems.edge.controller.io.heating.room; -import static io.openems.edge.controller.heating.room.Utils.getNextHighPeriod; +import static io.openems.edge.controller.io.heating.room.Utils.getNextHighPeriod; import static java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME; import java.time.Clock; @@ -38,7 +38,7 @@ import io.openems.edge.common.component.AbstractOpenemsComponent; import io.openems.edge.common.component.OpenemsComponent; import io.openems.edge.controller.api.Controller; -import io.openems.edge.controller.heating.room.Utils.HighPeriod; +import io.openems.edge.controller.io.heating.room.Utils.HighPeriod; import io.openems.edge.io.api.DigitalOutput; import io.openems.edge.meter.api.ElectricityMeter; import io.openems.edge.thermometer.api.Thermometer; @@ -52,12 +52,12 @@ immediate = true, // configurationPolicy = ConfigurationPolicy.REQUIRE // ) -public class RoomHeatingControllerImpl extends AbstractOpenemsComponent - implements RoomHeatingController, Controller, ElectricityMeter, OpenemsComponent, TimedataProvider { +public class ControllerIoRoomHeatingImpl extends AbstractOpenemsComponent + implements ControllerIoRoomHeating, Controller, ElectricityMeter, OpenemsComponent, TimedataProvider { private static final int MINIMUM_SWITCHING_TIME = 180; // [s] - private final Logger log = LoggerFactory.getLogger(RoomHeatingControllerImpl.class); + private final Logger log = LoggerFactory.getLogger(ControllerIoRoomHeatingImpl.class); private final Clock clock; private final CalculateEnergyFromPower calculateEnergy = new CalculateEnergyFromPower(this, ElectricityMeter.ChannelId.ACTIVE_PRODUCTION_ENERGY); @@ -89,12 +89,12 @@ public class RoomHeatingControllerImpl extends AbstractOpenemsComponent private RelayState lastFloorRelayState = null; private RelayState lastInfraredRelayState = null; - public RoomHeatingControllerImpl(Clock clock) { + public ControllerIoRoomHeatingImpl(Clock clock) { super(// OpenemsComponent.ChannelId.values(), // ElectricityMeter.ChannelId.values(), // Controller.ChannelId.values(), // - RoomHeatingController.ChannelId.values() // + ControllerIoRoomHeating.ChannelId.values() // ); this.clock = clock; @@ -103,7 +103,7 @@ public RoomHeatingControllerImpl(Clock clock) { this._setReactivePower(0); } - public RoomHeatingControllerImpl() { + public ControllerIoRoomHeatingImpl() { this(Clock.systemDefaultZone()); } diff --git a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Mode.java b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Mode.java similarity index 91% rename from io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Mode.java rename to io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Mode.java index af978519d8f..d248aeb2ecf 100644 --- a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Mode.java +++ b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Mode.java @@ -1,4 +1,4 @@ -package io.openems.edge.controller.heating.room; +package io.openems.edge.controller.io.heating.room; import io.openems.common.types.OptionsEnum; diff --git a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Utils.java b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Utils.java similarity index 93% rename from io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Utils.java rename to io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Utils.java index 1041ceae199..18a92ea9ff1 100644 --- a/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/heating/room/Utils.java +++ b/io.openems.edge.controller.io.heating.room/src/io/openems/edge/controller/io/heating/room/Utils.java @@ -1,4 +1,4 @@ -package io.openems.edge.controller.heating.room; +package io.openems.edge.controller.io.heating.room; import java.time.Instant; import java.time.ZonedDateTime; diff --git a/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/RoomHeatingControllerImplTest.java b/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeatingImplTest.java similarity index 93% rename from io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/RoomHeatingControllerImplTest.java rename to io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeatingImplTest.java index 6f790a32a6f..9d548b7b8e3 100644 --- a/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/RoomHeatingControllerImplTest.java +++ b/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/ControllerIoRoomHeatingImplTest.java @@ -1,9 +1,9 @@ -package io.openems.edge.controller.heating.room; +package io.openems.edge.controller.io.heating.room; import static io.openems.common.test.TestUtils.createDummyClock; -import static io.openems.edge.controller.heating.room.Mode.AUTOMATIC; -import static io.openems.edge.controller.heating.room.Mode.MANUAL_LOW; -import static io.openems.edge.controller.heating.room.Mode.OFF; +import static io.openems.edge.controller.io.heating.room.Mode.AUTOMATIC; +import static io.openems.edge.controller.io.heating.room.Mode.MANUAL_LOW; +import static io.openems.edge.controller.io.heating.room.Mode.OFF; import static java.time.temporal.ChronoUnit.HOURS; import static java.time.temporal.ChronoUnit.MINUTES; import static org.junit.Assert.assertEquals; @@ -21,13 +21,13 @@ import io.openems.edge.thermometer.api.Thermometer; import io.openems.edge.thermometer.test.DummyThermometer; -public class RoomHeatingControllerImplTest { +public class ControllerIoRoomHeatingImplTest { @Test public void testLow() throws Exception { final var clock = createDummyClock(); final var io = new DummyInputOutput("io0"); - final var sut = new RoomHeatingControllerImpl(clock); + final var sut = new ControllerIoRoomHeatingImpl(clock); new ControllerTest(sut) // .addReference("cm", new DummyConfigurationAdmin()) // .addReference("floorThermometer", new DummyThermometer("temp0")) // @@ -129,7 +129,7 @@ public void testLow() throws Exception { public void testAuto() throws Exception { final var clock = createDummyClock(); final var io = new DummyInputOutput("io0"); - final var sut = new RoomHeatingControllerImpl(clock); + final var sut = new ControllerIoRoomHeatingImpl(clock); new ControllerTest(sut) // .addReference("cm", new DummyConfigurationAdmin()) // .addReference("floorThermometer", new DummyThermometer("temp0")) // @@ -183,7 +183,7 @@ public void testAuto() throws Exception { public void testAutoWrong() throws Exception { final var clock = createDummyClock(); final var io = new DummyInputOutput("io0"); - final var sut = new RoomHeatingControllerImpl(clock); + final var sut = new ControllerIoRoomHeatingImpl(clock); new ControllerTest(sut) // .addReference("cm", new DummyConfigurationAdmin()) // .addReference("floorThermometer", new DummyThermometer("temp0")) // @@ -208,7 +208,7 @@ public void testAutoWrong() throws Exception { public void testOff() throws Exception { final var clock = createDummyClock(); final var io = new DummyInputOutput("io0"); - final var sut = new RoomHeatingControllerImpl(clock); + final var sut = new ControllerIoRoomHeatingImpl(clock); new ControllerTest(sut) // .addReference("cm", new DummyConfigurationAdmin()) // .addReference("floorThermometer", new DummyThermometer("temp0")) // @@ -228,7 +228,7 @@ public void testOff() throws Exception { .onAfterProcessImage(assertLog(sut, "Off"))); } - private static ThrowingRunnable assertLog(RoomHeatingControllerImpl sut, String message) { + private static ThrowingRunnable assertLog(ControllerIoRoomHeatingImpl sut, String message) { return () -> assertEquals(message, sut.debugLog()); } } diff --git a/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/MyConfig.java b/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/MyConfig.java similarity index 98% rename from io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/MyConfig.java rename to io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/MyConfig.java index 794fa29a591..e4222cc9504 100644 --- a/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/MyConfig.java +++ b/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/MyConfig.java @@ -1,4 +1,4 @@ -package io.openems.edge.controller.heating.room; +package io.openems.edge.controller.io.heating.room; import static io.openems.common.utils.ConfigUtils.generateReferenceTargetFilter; diff --git a/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/UtilsTest.java b/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/UtilsTest.java similarity index 93% rename from io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/UtilsTest.java rename to io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/UtilsTest.java index 200e1297cc7..a29c84299f5 100644 --- a/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/heating/room/UtilsTest.java +++ b/io.openems.edge.controller.io.heating.room/test/io/openems/edge/controller/io/heating/room/UtilsTest.java @@ -1,6 +1,6 @@ -package io.openems.edge.controller.heating.room; +package io.openems.edge.controller.io.heating.room; -import static io.openems.edge.controller.heating.room.Utils.getNextHighPeriod; +import static io.openems.edge.controller.io.heating.room.Utils.getNextHighPeriod; import static org.junit.Assert.assertEquals; import java.time.ZoneId; diff --git a/io.openems.edge.controller.io.heatingelement/src/io/openems/edge/controller/io/heatingelement/ControllerIoHeatingElementImpl.java b/io.openems.edge.controller.io.heatingelement/src/io/openems/edge/controller/io/heatingelement/ControllerIoHeatingElementImpl.java index 3fddd82d2b0..ff717380cb4 100644 --- a/io.openems.edge.controller.io.heatingelement/src/io/openems/edge/controller/io/heatingelement/ControllerIoHeatingElementImpl.java +++ b/io.openems.edge.controller.io.heatingelement/src/io/openems/edge/controller/io/heatingelement/ControllerIoHeatingElementImpl.java @@ -118,24 +118,19 @@ private void updateConfig(Config config) { @Override public void run() throws OpenemsNamedException { - Status runState = Status.UNDEFINED; - // Handle Mode AUTOMATIC, MANUAL_OFF or MANUAL_ON - switch (this.config.mode()) { - case AUTOMATIC: - runState = this.modeAutomatic(); - break; - - case MANUAL_OFF: + var runState = switch (this.config.mode()) { + case AUTOMATIC // + -> this.modeAutomatic(); + case MANUAL_OFF -> { this.modeManualOff(); - runState = Status.INACTIVE; - break; - - case MANUAL_ON: + yield Status.INACTIVE; + } + case MANUAL_ON -> { this.modeManualOn(); - runState = Status.ACTIVE; - break; + yield Status.ACTIVE; } + }; // Calculate Phase Time var phase1Time = (int) this.phase1.getTotalDuration().getSeconds(); @@ -269,23 +264,16 @@ protected Status modeAutomatic() throws IllegalArgumentException, OpenemsNamedEx * @return the minimum total phase time [s] */ private static long calculateMinimumTotalPhaseTime(Config config) { - switch (config.workMode()) { - case TIME: - switch (config.defaultLevel()) { - case LEVEL_0: - return 0; - case LEVEL_1: - return config.minTime() * 3600; - case LEVEL_2: - return config.minTime() * 3600 * 2; - case LEVEL_3: - return config.minTime() * 3600 * 3; - } - case NONE: - return 0; - } - assert true; - return 0; + return switch (config.workMode()) { + case TIME // + -> switch (config.defaultLevel()) { + case LEVEL_0 -> 0; + case LEVEL_1 -> config.minTime() * 3600; + case LEVEL_2 -> config.minTime() * 3600 * 2; + case LEVEL_3 -> config.minTime() * 3600 * 3; + }; + case NONE -> 0; + }; } /** @@ -333,26 +321,26 @@ public void applyLevel(Level level) throws IllegalArgumentException, OpenemsName // Set phases accordingly switch (level) { - case LEVEL_0: + case LEVEL_0 -> { this.phase1.switchOff(); this.phase2.switchOff(); this.phase3.switchOff(); - break; - case LEVEL_1: + } + case LEVEL_1 -> { this.phase1.switchOn(); this.phase2.switchOff(); this.phase3.switchOff(); - break; - case LEVEL_2: + } + case LEVEL_2 -> { this.phase1.switchOn(); this.phase2.switchOn(); this.phase3.switchOff(); - break; - case LEVEL_3: + } + case LEVEL_3 -> { this.phase1.switchOn(); this.phase2.switchOn(); this.phase3.switchOn(); - break; + } } } @@ -418,16 +406,12 @@ protected void setOutput(Phase phase, boolean value) throws IllegalArgumentExcep * @throws OpenemsNamedException on error */ private ChannelAddress getChannelAddressForPhase(Phase phase) throws OpenemsNamedException { - switch (phase) { - case L1: - return ChannelAddress.fromString(this.config.outputChannelPhaseL1()); - case L2: - return ChannelAddress.fromString(this.config.outputChannelPhaseL2()); - case L3: - return ChannelAddress.fromString(this.config.outputChannelPhaseL3()); - } - assert true; // can never happen - return null; + return ChannelAddress.fromString(// + switch (phase) { + case L1 -> this.config.outputChannelPhaseL1(); + case L2 -> this.config.outputChannelPhaseL2(); + case L3 -> this.config.outputChannelPhaseL3(); + }); } /** diff --git a/io.openems.edge.core/src/io/openems/edge/core/appmanager/AppCenterBackendUtilImpl.java b/io.openems.edge.core/src/io/openems/edge/core/appmanager/AppCenterBackendUtilImpl.java index d27333d5d14..99cc5a0d44d 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/appmanager/AppCenterBackendUtilImpl.java +++ b/io.openems.edge.core/src/io/openems/edge/core/appmanager/AppCenterBackendUtilImpl.java @@ -143,8 +143,8 @@ private static final OpenemsNamedException getOpenemsException(Throwable e) { } private static final OpenemsNamedException getOpenemsException(Throwable e, boolean isRootException) { - if (e instanceof OpenemsNamedException) { - return (OpenemsNamedException) e; + if (e instanceof OpenemsNamedException one) { + return one; } if (e.getCause() != null) { diff --git a/io.openems.edge.core/src/io/openems/edge/core/appmanager/AppManagerImpl.java b/io.openems.edge.core/src/io/openems/edge/core/appmanager/AppManagerImpl.java index 0cb83d8f684..647ff98b42c 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/appmanager/AppManagerImpl.java +++ b/io.openems.edge.core/src/io/openems/edge/core/appmanager/AppManagerImpl.java @@ -22,7 +22,6 @@ import java.util.function.BiFunction; import java.util.function.Predicate; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.service.component.ComponentContext; @@ -64,7 +63,6 @@ import io.openems.edge.core.appmanager.dependency.AppManagerAppHelper; import io.openems.edge.core.appmanager.dependency.Dependency; import io.openems.edge.core.appmanager.dependency.UpdateValues; -import io.openems.edge.core.appmanager.flag.Flag; import io.openems.edge.core.appmanager.flag.Flags; import io.openems.edge.core.appmanager.jsonrpc.AddAppInstance; import io.openems.edge.core.appmanager.jsonrpc.DeleteAppInstance; @@ -73,8 +71,8 @@ import io.openems.edge.core.appmanager.jsonrpc.GetAppDescriptor; import io.openems.edge.core.appmanager.jsonrpc.GetAppInstances; import io.openems.edge.core.appmanager.jsonrpc.GetApps; -import io.openems.edge.core.appmanager.jsonrpc.UpdateAppConfig; import io.openems.edge.core.appmanager.jsonrpc.GetEstimatedConfiguration; +import io.openems.edge.core.appmanager.jsonrpc.UpdateAppConfig; import io.openems.edge.core.appmanager.jsonrpc.UpdateAppInstance; import io.openems.edge.core.appmanager.validator.Validator; diff --git a/io.openems.edge.core/src/io/openems/edge/core/appmanager/Type.java b/io.openems.edge.core/src/io/openems/edge/core/appmanager/Type.java index 3bf4fb6585d..b463729eb7d 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/appmanager/Type.java +++ b/io.openems.edge.core/src/io/openems/edge/core/appmanager/Type.java @@ -156,10 +156,10 @@ public GetParameterValues(APP app, Language language) { */ public default Function translationBundleSupplier() { return p -> { - if (p instanceof BundleParameter) { - return ((BundleParameter) p).bundle; - } - return null; + return switch (p) { + case BundleParameter bp -> bp.bundle; + default -> null; + }; }; } diff --git a/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/AppManagerAppHelperImpl.java b/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/AppManagerAppHelperImpl.java index 3dd1c7d21c2..a7b7028d2f9 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/AppManagerAppHelperImpl.java +++ b/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/AppManagerAppHelperImpl.java @@ -821,11 +821,11 @@ public AppIdKey(String appId, String key) { @Override public boolean equals(Object other) { - if (!(other instanceof AppIdKey)) { + if (!(other instanceof AppIdKey aik)) { return false; } - return ((AppIdKey) other).compareTo(this) == 0; + return aik.compareTo(this) == 0; } @Override diff --git a/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/DependencyUtil.java b/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/DependencyUtil.java index d29de120956..21903923df7 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/DependencyUtil.java +++ b/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/DependencyUtil.java @@ -150,10 +150,10 @@ private void setCurrentlyRunning(boolean isCurrentlyRunning) { private static final AppManagerImpl getAppManagerImpl(ComponentManager componentManager) { var appManager = componentManager.getEnabledComponentsOfType(AppManager.class); - if (appManager.size() == 0 || !(appManager.get(0) instanceof AppManagerImpl)) { + if (appManager.size() == 0 || !(appManager.get(0) instanceof AppManagerImpl ami)) { return null; } - return (AppManagerImpl) appManager.get(0); + return ami; } private static final AppManagerAppHelper getAppManagerAppHelper() { diff --git a/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/aggregatetask/SchedulerByCentralOrderAggregateTaskImpl.java b/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/aggregatetask/SchedulerByCentralOrderAggregateTaskImpl.java index 6d608d70b4d..4e500cbffdc 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/aggregatetask/SchedulerByCentralOrderAggregateTaskImpl.java +++ b/io.openems.edge.core/src/io/openems/edge/core/appmanager/dependency/aggregatetask/SchedulerByCentralOrderAggregateTaskImpl.java @@ -1,5 +1,6 @@ package io.openems.edge.core.appmanager.dependency.aggregatetask; +import static io.openems.common.utils.FunctionUtils.doNothing; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.mapping; import static java.util.stream.Collectors.toList; @@ -104,7 +105,7 @@ public ProductionSchedulerOrderDefinition() { .filterByFactoryId("Controller.Api.ModbusTcp.ReadWrite") // .thenByCreatedAppId("App.Ess.GeneratingPlantController") // .rest()) // - .thenByFactoryId("Controller.Api.ModbusRtu.ReadWrite") // + .thenByFactoryId("Controller.Api.ModbusRtu.ReadWrite") // .thenByFactoryId("Controller.Api.Rest.ReadWrite") // .thenByFactoryId("Controller.Ess.GridOptimizedCharge") // .thenByFactoryId("Controller.Ess.Hybrid.Surplus-Feed-To-Grid") // @@ -135,7 +136,7 @@ public static class SchedulerOrderDefinition implements Comparator doNothing(); + + case PositionReturnType.Remove remove -> { return EMPTY_INT_ARRAY; } - if (result instanceof PositionReturnType.Right right) { + case PositionReturnType.Right right -> { final var array = new int[right.index.length + 1]; array[0] = index; System.arraycopy(right.index, 0, array, 1, right.index.length); return array; } + } } return EMPTY_INT_ARRAY; } diff --git a/io.openems.edge.core/src/io/openems/edge/core/appmanager/validator/CheckAppsNotInstalled.java b/io.openems.edge.core/src/io/openems/edge/core/appmanager/validator/CheckAppsNotInstalled.java index 352f8c2433e..978dd49be85 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/appmanager/validator/CheckAppsNotInstalled.java +++ b/io.openems.edge.core/src/io/openems/edge/core/appmanager/validator/CheckAppsNotInstalled.java @@ -57,10 +57,10 @@ public boolean check() { } private AppManagerImpl getAppManagerImpl() { - if (this.appManager == null || !(this.appManager instanceof AppManagerImpl)) { + if (this.appManager == null || !(this.appManager instanceof AppManagerImpl ami)) { return null; } - return (AppManagerImpl) this.appManager; + return ami; } @Override diff --git a/io.openems.edge.core/src/io/openems/edge/core/appmanager/validator/CheckCardinality.java b/io.openems.edge.core/src/io/openems/edge/core/appmanager/validator/CheckCardinality.java index 58508a84ac1..c13bc5cd574 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/appmanager/validator/CheckCardinality.java +++ b/io.openems.edge.core/src/io/openems/edge/core/appmanager/validator/CheckCardinality.java @@ -64,12 +64,11 @@ public boolean check() { this.errorType = ErrorType.OTHER; return false; } - if (!(this.appManager instanceof AppManagerImpl)) { + if (!(this.appManager instanceof AppManagerImpl appManagerImpl)) { this.errorMessage = "Wrong AppManager active!"; this.errorType = ErrorType.OTHER; return false; } - var appManagerImpl = (AppManagerImpl) this.appManager; var instantiatedApps = appManagerImpl.getInstantiatedApps(); switch (this.openemsApp.getCardinality()) { @@ -118,20 +117,15 @@ private OpenemsAppCategory getMatchingCategorie(AppManagerUtil appManagerUtil, @Override public String getErrorMessage(Language language) { - switch (this.errorType) { - case SAME_APP: - return AbstractCheckable.getTranslation(language, "Validator.Checkable.CheckCardinality.Message.Single", - this.openemsApp.getAppId()); - case SAME_CATEGORIE: - return AbstractCheckable.getTranslation(language, - "Validator.Checkable.CheckCardinality.Message.SingleInCategorie", - this.matchingCategory.getReadableName(language)); - case OTHER: - return this.errorMessage; - case NONE: - return null; - } - return null; + return switch (this.errorType) { + case SAME_APP -> getTranslation(language, // + "Validator.Checkable.CheckCardinality.Message.Single", this.openemsApp.getAppId()); + case SAME_CATEGORIE -> getTranslation(language, // + "Validator.Checkable.CheckCardinality.Message.SingleInCategorie", + this.matchingCategory.getReadableName(language)); + case OTHER -> this.errorMessage; + case NONE -> null; + }; } @Override diff --git a/io.openems.edge.core/src/io/openems/edge/core/componentmanager/ComponentManagerImpl.java b/io.openems.edge.core/src/io/openems/edge/core/componentmanager/ComponentManagerImpl.java index 90494546d22..957637540c4 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/componentmanager/ComponentManagerImpl.java +++ b/io.openems.edge.core/src/io/openems/edge/core/componentmanager/ComponentManagerImpl.java @@ -11,7 +11,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.Dictionary; -import java.util.HashMap; import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -555,7 +554,7 @@ public void handleCreateComponentConfigRequest(User user, CreateComponentConfigR Dictionary properties = new Hashtable<>(); for (Property property : request.getProperties()) { var value = JsonUtils.getAsBestType(property.getValue()); - if (value instanceof Object[] && ((Object[]) value).length == 0) { + if (value instanceof Object[] os && os.length == 0) { value = new String[0]; } properties.put(property.getName(), value); @@ -600,7 +599,7 @@ public void handleUpdateComponentConfigRequest(User user, UpdateComponentConfigR } else { // Add updated Property var value = JsonUtils.getAsBestType(property.getValue()); - if (value instanceof Object[] && ((Object[]) value).length == 0) { + if (value instanceof Object[] os && os.length == 0) { value = new String[0]; } properties.put(property.getName(), value); diff --git a/io.openems.edge.core/src/io/openems/edge/core/componentmanager/EdgeConfigWorker.java b/io.openems.edge.core/src/io/openems/edge/core/componentmanager/EdgeConfigWorker.java index 6c90e120dab..d47ed1d4bff 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/componentmanager/EdgeConfigWorker.java +++ b/io.openems.edge.core/src/io/openems/edge/core/componentmanager/EdgeConfigWorker.java @@ -1,5 +1,7 @@ package io.openems.edge.core.componentmanager; +import static io.openems.common.utils.JsonUtils.getAsOptionalString; + import java.io.IOException; import java.util.ArrayDeque; import java.util.Dictionary; @@ -261,22 +263,16 @@ private boolean readConfigurations(EdgeConfig.ActualEdgeConfig.Builder builder, this.log.warn(config.getPid() + ": Properties is 'null'"); continue; } - // Read Component-ID - String componentId = null; - var componentIdObj = properties.get("id"); - if (componentIdObj instanceof String) { - // Read 'id' property - componentId = (String) componentIdObj; - } else { - // Singleton - for (OpenemsComponent component : this.parent.getAllComponents()) { - if (config.getPid().equals(component.serviceFactoryPid())) { - componentId = component.id(); - break; - } - } - } + // Read Component-ID + var componentId = switch (properties.get("id")) { + case String s -> s; // Read 'id' property + case null, default -> // + this.parent.getAllComponents().stream() // + .filter(c -> config.getPid().equals(c.serviceFactoryPid())) // + .map(c -> c.id()) // + .findFirst().orElse(null); + }; if (componentId == null) { // Use default value for 'id' property @@ -286,7 +282,7 @@ private boolean readConfigurations(EdgeConfig.ActualEdgeConfig.Builder builder, } var factory = builder.getFactories().get(factoryPid); if (factory != null) { - var defaultValue = JsonUtils.getAsOptionalString(factory.getPropertyDefaultValue("id")); + var defaultValue = getAsOptionalString(factory.getPropertyDefaultValue("id")); if (defaultValue.isPresent()) { componentId = defaultValue.get(); } @@ -304,19 +300,14 @@ private boolean readConfigurations(EdgeConfig.ActualEdgeConfig.Builder builder, var componentAlias = componentId; { var componentAliasObj = properties.get("alias"); - if (componentAliasObj instanceof String && !((String) componentAliasObj).trim().isEmpty()) { - componentAlias = (String) componentAliasObj; + if (componentAliasObj instanceof String s && !s.trim().isEmpty()) { + componentAlias = s; } } - String factoryPid; - if (config.getFactoryPid() != null) { - // Get Factory - factoryPid = config.getFactoryPid(); - } else { - // Singleton Component - factoryPid = config.getPid(); - } + var factoryPid = config.getFactoryPid() != null // + ? config.getFactoryPid() // Get Factory + : config.getPid(); // Singleton Component // Read Factory var factory = builder.getFactories().get(factoryPid); diff --git a/io.openems.edge.core/src/io/openems/edge/core/componentmanager/jsonrpc/ChannelExportXlsxResponse.java b/io.openems.edge.core/src/io/openems/edge/core/componentmanager/jsonrpc/ChannelExportXlsxResponse.java index 6722f9c9fc0..09d77d90368 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/componentmanager/jsonrpc/ChannelExportXlsxResponse.java +++ b/io.openems.edge.core/src/io/openems/edge/core/componentmanager/jsonrpc/ChannelExportXlsxResponse.java @@ -84,19 +84,17 @@ protected static byte[] generatePayload(OpenemsComponent component) throws Opene description += "ERROR: " + e.getMessage(); } - } else if (channel instanceof StateChannel - && ((StateChannel) channel).value().orElse(false) == true) { + } else if (channel instanceof StateChannel sc && sc.value().orElse(false) == true) { if (!description.isEmpty()) { description += "; "; } - description += ((StateChannel) channel).channelDoc().getText(); + description += sc.channelDoc().getText(); - } else if (channel instanceof StateCollectorChannel - && ((StateCollectorChannel) channel).value().orElse(0) != 0) { + } else if (channel instanceof StateCollectorChannel scc && scc.value().orElse(0) != 0) { if (!description.isEmpty()) { description += "; "; } - description += ((StateCollectorChannel) channel).listStates(); + description += scc.listStates(); } ws.value(row, COL_CHANNEL_ID, channel.channelId().id()); diff --git a/io.openems.edge.core/src/io/openems/edge/core/host/OperatingSystemDebianSystemd.java b/io.openems.edge.core/src/io/openems/edge/core/host/OperatingSystemDebianSystemd.java index 46dbeb79b59..8107dd32ea0 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/host/OperatingSystemDebianSystemd.java +++ b/io.openems.edge.core/src/io/openems/edge/core/host/OperatingSystemDebianSystemd.java @@ -1,5 +1,6 @@ package io.openems.edge.core.host; +import static io.openems.common.utils.FunctionUtils.doNothing; import static java.lang.Runtime.getRuntime; import static java.util.concurrent.CompletableFuture.runAsync; import static java.util.concurrent.CompletableFuture.supplyAsync; @@ -467,7 +468,7 @@ protected static NetworkInterface parseSystemdNetworkdConfigurationFile(L // holds the latest found address final var tmpAddress = new AtomicReference(); - for (String line : lines) { + for (var line : lines) { line = line.trim(); if (line.isBlank()) { continue; @@ -477,27 +478,22 @@ protected static NetworkInterface parseSystemdNetworkdConfigurationFile(L * Find current configuration block */ if (line.startsWith("[")) { - switch (line) { - case MATCH_SECTION: - currentBlock = Block.MATCH; - break; - case NETWORK_SECTION: - currentBlock = Block.NETWORK; - break; - case ADDRESS_SECTION: + currentBlock = switch (line) { + case MATCH_SECTION // + -> Block.MATCH; + case NETWORK_SECTION // + -> Block.NETWORK; + case ADDRESS_SECTION -> { tmpAddress.set(null); - currentBlock = Block.ADDRESS; - break; - case ROUTE_SECTION: - currentBlock = Block.ROUTE; - break; - case DHCP_SECTION: - currentBlock = Block.DHCP; - break; - default: - currentBlock = Block.UNDEFINED; - break; + yield Block.ADDRESS; } + case ROUTE_SECTION // + -> Block.ROUTE; + case DHCP_SECTION // + -> Block.DHCP; + default // + -> Block.UNDEFINED; + }; continue; } @@ -505,12 +501,12 @@ protected static NetworkInterface parseSystemdNetworkdConfigurationFile(L * Parse Block */ switch (currentBlock) { - case MATCH: + case MATCH -> { onMatchString(MATCH_NAME, line, property -> { name.set(property); }); - break; - case NETWORK: + } + case NETWORK -> { onMatchString(NETWORK_DHCP, line, property -> { dhcp.set(ConfigurationProperty.of(property.toLowerCase().equals("yes"))); }); @@ -531,8 +527,8 @@ protected static NetworkInterface parseSystemdNetworkdConfigurationFile(L addressDetails.add(Inet4AddressWithSubnetmask.fromString("" /* empty default label */, property)); addresses.set(ConfigurationProperty.of(addressDetails)); }); - break; - case ADDRESS: + } + case ADDRESS -> { onMatchString(NETWORK_ADDRESS, line, property -> { // Storing here temporarily so that we can use it if when we find label. var address = Inet4AddressWithSubnetmask.fromString("" /* empty default label */, property); @@ -561,24 +557,21 @@ protected static NetworkInterface parseSystemdNetworkdConfigurationFile(L address.getSubnetmaskAsCidr()); addressDetails.add(address); }); - break; - case ROUTE: + } + case ROUTE -> { onMatchInet4Address(NETWORK_GATEWAY, line, property -> { gateway.set(ConfigurationProperty.of(property)); }); onMatchString(GATEWAY_METRIC, line, property -> { metric.set(ConfigurationProperty.of(Integer.parseInt(property))); }); - break; - case DHCP: + } + case DHCP -> { onMatchString(ROUTE_METRIC, line, property -> { metric.set(ConfigurationProperty.of(Integer.parseInt(property))); }); - break; - case UNDEFINED: - break; - default: - break; + } + case UNDEFINED -> doNothing(); } } return new NetworkInterface<>(name.get(), // diff --git a/io.openems.edge.core/src/io/openems/edge/core/predictormanager/PredictorManagerImpl.java b/io.openems.edge.core/src/io/openems/edge/core/predictormanager/PredictorManagerImpl.java index a674023dd02..6d7edc442e5 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/predictormanager/PredictorManagerImpl.java +++ b/io.openems.edge.core/src/io/openems/edge/core/predictormanager/PredictorManagerImpl.java @@ -162,26 +162,18 @@ private Prediction getPredictionSum(Sum.ChannelId channelId) { // Sum up "ActivePower" prediction of all ElectricityMeter List meters = this.componentManager.getEnabledComponentsOfType(ElectricityMeter.class) .stream() // - .filter(meter -> { - switch (meter.getMeterType()) { - case GRID: - case CONSUMPTION_METERED: - case MANAGED_CONSUMPTION_METERED: - case CONSUMPTION_NOT_METERED: - return false; - case PRODUCTION: - case PRODUCTION_AND_CONSUMPTION: - // Get only Production meters - return true; - } - // should never come here - return false; - }).toList(); + .filter(meter -> switch (meter.getMeterType()) { + case GRID, CONSUMPTION_METERED, MANAGED_CONSUMPTION_METERED, CONSUMPTION_NOT_METERED // + -> false; + case PRODUCTION, PRODUCTION_AND_CONSUMPTION // + -> true; // Get only Production meters + }) // + .toList(); var predictions = new Prediction[meters.size()]; for (var i = 0; i < meters.size(); i++) { var meter = meters.get(i); - predictions[i] = this - .getPrediction(new ChannelAddress(meter.id(), ElectricityMeter.ChannelId.ACTIVE_POWER.id())); + predictions[i] = this.getPrediction(// + new ChannelAddress(meter.id(), ElectricityMeter.ChannelId.ACTIVE_POWER.id())); } yield sum(predictions); } diff --git a/io.openems.edge.core/src/io/openems/edge/core/sum/SumImpl.java b/io.openems.edge.core/src/io/openems/edge/core/sum/SumImpl.java index 4910b1f965e..fb10de3ec36 100644 --- a/io.openems.edge.core/src/io/openems/edge/core/sum/SumImpl.java +++ b/io.openems.edge.core/src/io/openems/edge/core/sum/SumImpl.java @@ -1,5 +1,6 @@ package io.openems.edge.core.sum; +import static io.openems.common.utils.FunctionUtils.doNothing; import static io.openems.edge.core.sum.ExtremeEverValues.Range.NEGATIVE; import static io.openems.edge.core.sum.ExtremeEverValues.Range.POSTIVE; @@ -202,13 +203,12 @@ private void calculateChannelValues() { // Consumption final var managedConsumptionActivePower = new CalculateIntegerSum(); - for (OpenemsComponent component : this.componentManager.getEnabledComponents()) { - if (component instanceof SymmetricEss) { - /* - * Ess - */ - var ess = (SymmetricEss) component; - + for (var component : this.componentManager.getEnabledComponents()) { + switch (component) { + /* + * Ess + */ + case SymmetricEss ess -> { if (ess instanceof MetaEss) { // ignore this Ess continue; @@ -222,64 +222,63 @@ private void calculateChannelValues() { essActiveDischargeEnergy.addValue(ess.getActiveDischargeEnergyChannel()); essCapacity.addValue(ess.getCapacityChannel()); - if (ess instanceof AsymmetricEss) { - var e = (AsymmetricEss) ess; + switch (ess) { + case AsymmetricEss e -> { essActivePowerL1.addValue(e.getActivePowerL1Channel()); essActivePowerL2.addValue(e.getActivePowerL2Channel()); essActivePowerL3.addValue(e.getActivePowerL3Channel()); - } else { + } + default -> { essActivePowerL1.addValue(ess.getActivePowerChannel(), CalculateIntegerSum.DIVIDE_BY_THREE); essActivePowerL2.addValue(ess.getActivePowerChannel(), CalculateIntegerSum.DIVIDE_BY_THREE); essActivePowerL3.addValue(ess.getActivePowerChannel(), CalculateIntegerSum.DIVIDE_BY_THREE); } + } - if (ess instanceof HybridEss) { - var e = (HybridEss) ess; + switch (ess) { + case HybridEss e -> { essDcChargeEnergy.addValue(e.getDcChargeEnergyChannel()); essDcDischargeEnergy.addValue(e.getDcDischargeEnergyChannel()); essDcDischargePower.addValue(e.getDcDischargePowerChannel()); - } else { + } + default -> { essDcChargeEnergy.addValue(ess.getActiveChargeEnergyChannel()); essDcDischargeEnergy.addValue(ess.getActiveDischargeEnergyChannel()); essDcDischargePower.addValue(ess.getActivePowerChannel()); } + } + } - } else if (component instanceof ElectricityMeter meter) { - if (component instanceof VirtualMeter) { - if (!((VirtualMeter) component).addToSum()) { - // Ignore VirtualMeter if "addToSum" is not activated (default) - continue; - } + /* + * Meter + */ + case ElectricityMeter meter -> { + if (component instanceof VirtualMeter vm && !vm.addToSum()) { + // Ignore VirtualMeter if "addToSum" is not activated (default) + continue; } - /* - * Meter - */ switch (meter.getMeterType()) { - case PRODUCTION_AND_CONSUMPTION: - // TODO PRODUCTION_AND_CONSUMPTION + case PRODUCTION_AND_CONSUMPTION -> // TODO // Production Power is positive, Consumption is negative - break; + doNothing(); - case CONSUMPTION_METERED: - // TODO CONSUMPTION_METERED + case CONSUMPTION_METERED -> // TODO // Consumption is positive - break; + doNothing(); - case MANAGED_CONSUMPTION_METERED: // + case MANAGED_CONSUMPTION_METERED -> { if (meter instanceof MetaEvcs) { - // ignore this Evcs - } else { - managedConsumptionActivePower.addValue(meter.getActivePowerChannel()); + continue; } - break; + managedConsumptionActivePower.addValue(meter.getActivePowerChannel()); + } - case CONSUMPTION_NOT_METERED: - // TODO CONSUMPTION_NOT_METERED + case CONSUMPTION_NOT_METERED -> // TODO // Consumption is positive - break; + doNothing(); - case GRID: + case GRID -> { /* * Grid-Meter */ @@ -289,9 +288,9 @@ private void calculateChannelValues() { gridActivePowerL1.addValue(meter.getActivePowerL1Channel()); gridActivePowerL2.addValue(meter.getActivePowerL2Channel()); gridActivePowerL3.addValue(meter.getActivePowerL3Channel()); - break; + } - case PRODUCTION: + case PRODUCTION -> { /* * Production-Meter */ @@ -301,24 +300,27 @@ private void calculateChannelValues() { productionAcActivePowerL1.addValue(meter.getActivePowerL1Channel()); productionAcActivePowerL2.addValue(meter.getActivePowerL2Channel()); productionAcActivePowerL3.addValue(meter.getActivePowerL3Channel()); - break; - } + } + } - } else if (component instanceof EssDcCharger) { - /* - * Ess DC-Charger - */ - var charger = (EssDcCharger) component; + /* + * Ess DC-Charger + */ + case EssDcCharger charger -> { productionDcActualPower.addValue(charger.getActualPowerChannel()); productionDcActiveEnergy.addValue(charger.getActualEnergyChannel()); + } - } else if (component instanceof TimeOfUseTariff tou) { - /* - * Time-of-Use-Tariff - */ + /* + * Time-of-Use-Tariff + */ + case TimeOfUseTariff tou -> { gridBuyPrice.addValue(tou.getPrices().getFirst()); } + + default -> doNothing(); + } } /* @@ -431,7 +433,7 @@ private void calculateChannelValues() { private void calculateState() { var highestLevel = Level.OK; var hasIgnoredComponentStates = false; - for (OpenemsComponent component : this.componentManager.getEnabledComponents()) { + for (var component : this.componentManager.getEnabledComponents()) { if (component == this) { // ignore myself continue; diff --git a/io.openems.edge.core/test/io/openems/edge/app/TestPermissions.java b/io.openems.edge.core/test/io/openems/edge/app/TestPermissions.java index 4f560f26e8f..d24a423569b 100644 --- a/io.openems.edge.core/test/io/openems/edge/app/TestPermissions.java +++ b/io.openems.edge.core/test/io/openems/edge/app/TestPermissions.java @@ -12,7 +12,6 @@ import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Reference; -import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -23,11 +22,9 @@ import io.openems.common.session.Role; import io.openems.common.types.EdgeConfig; import io.openems.common.utils.JsonUtils; -import io.openems.common.utils.JsonUtils.JsonArrayBuilder; import io.openems.edge.app.TestPermissions.Property; import io.openems.edge.app.TestPermissions.TestPermissionsParameter; import io.openems.edge.app.common.props.CommonProps; -import io.openems.edge.app.common.props.ComponentProps; import io.openems.edge.common.component.ComponentManager; import io.openems.edge.core.appmanager.AbstractOpenemsAppWithProps; import io.openems.edge.core.appmanager.AppConfiguration; @@ -38,14 +35,11 @@ import io.openems.edge.core.appmanager.OpenemsApp; import io.openems.edge.core.appmanager.OpenemsAppCardinality; import io.openems.edge.core.appmanager.OpenemsAppCategory; -import io.openems.edge.core.appmanager.TranslationUtil; import io.openems.edge.core.appmanager.Type; import io.openems.edge.core.appmanager.Type.Parameter.BundleProvider; import io.openems.edge.core.appmanager.dependency.Tasks; import io.openems.edge.core.appmanager.formly.JsonFormlyUtil; -import io.openems.edge.core.appmanager.formly.builder.FormlyBuilder; import io.openems.edge.core.appmanager.formly.builder.ReorderArrayBuilder; -import io.openems.edge.core.appmanager.formly.builder.ReorderArrayBuilder.SelectOption; import io.openems.edge.core.appmanager.formly.enums.DisplayType; /** @@ -125,7 +119,7 @@ protected ThrowingTriFunction, L return (t, p, l) -> { final var components = new ArrayList(); - final var updateArray = this.getJsonArray(p, Property.UPDATE_ARRAY); + // final var updateArray = this.getJsonArray(p, Property.UPDATE_ARRAY); components.add(new EdgeConfig.Component(this.getId(t, p, Property.ADMIN_ONLY, "id0"), "alias", "factoryId", // new JsonObject())); components.add( diff --git a/io.openems.edge.core/test/io/openems/edge/app/integratedsystem/TestFeneconHome20.java b/io.openems.edge.core/test/io/openems/edge/app/integratedsystem/TestFeneconHome20.java index 609fd1b8a38..7fb5c681fed 100644 --- a/io.openems.edge.core/test/io/openems/edge/app/integratedsystem/TestFeneconHome20.java +++ b/io.openems.edge.core/test/io/openems/edge/app/integratedsystem/TestFeneconHome20.java @@ -57,26 +57,14 @@ public void testCreateAndUpdateHomeFullSettings() throws Exception { // check properties of created apps for (var instance : this.appManagerTestBundle.sut.getInstantiatedApps()) { - int expectedDependencies; - switch (instance.appId) { - case "App.FENECON.Home.20": - expectedDependencies = 4; - break; - case "App.PvSelfConsumption.GridOptimizedCharge": - expectedDependencies = 0; - break; - case "App.PvSelfConsumption.SelfConsumptionOptimization": - expectedDependencies = 0; - break; - case "App.Meter.Socomec": - expectedDependencies = 0; - break; - case "App.Ess.PrepareBatteryExtension": - expectedDependencies = 0; - break; - default: - throw new Exception("App with ID[" + instance.appId + "] should not have been created!"); - } + var expectedDependencies = switch (instance.appId) { + case "App.FENECON.Home.20" -> 4; + case "App.PvSelfConsumption.GridOptimizedCharge" -> 0; + case "App.PvSelfConsumption.SelfConsumptionOptimization" -> 0; + case "App.Meter.Socomec" -> 0; + case "App.Ess.PrepareBatteryExtension" -> 0; + default -> throw new Exception("App with ID[" + instance.appId + "] should not have been created!"); + }; if (expectedDependencies == 0 && instance.dependencies == null) { continue; } @@ -157,26 +145,14 @@ private final OpenemsAppInstance createFullHome() throws Exception { // check properties of created apps for (var instance : this.appManagerTestBundle.sut.getInstantiatedApps()) { - int expectedDependencies; - switch (instance.appId) { - case "App.FENECON.Home.20": - expectedDependencies = 4; - break; - case "App.PvSelfConsumption.GridOptimizedCharge": - expectedDependencies = 0; - break; - case "App.PvSelfConsumption.SelfConsumptionOptimization": - expectedDependencies = 0; - break; - case "App.Meter.Socomec": - expectedDependencies = 0; - break; - case "App.Ess.PrepareBatteryExtension": - expectedDependencies = 0; - break; - default: - throw new Exception("App with ID[" + instance.appId + "] should not have been created!"); - } + var expectedDependencies = switch (instance.appId) { + case "App.FENECON.Home.20" -> 4; + case "App.PvSelfConsumption.GridOptimizedCharge" -> 0; + case "App.PvSelfConsumption.SelfConsumptionOptimization" -> 0; + case "App.Meter.Socomec" -> 0; + case "App.Ess.PrepareBatteryExtension" -> 0; + default -> throw new Exception("App with ID[" + instance.appId + "] should not have been created!"); + }; if (expectedDependencies == 0 && instance.dependencies == null) { continue; } diff --git a/io.openems.edge.core/test/io/openems/edge/app/integratedsystem/TestFeneconHome30.java b/io.openems.edge.core/test/io/openems/edge/app/integratedsystem/TestFeneconHome30.java index 0c349b74428..f698c3a218f 100644 --- a/io.openems.edge.core/test/io/openems/edge/app/integratedsystem/TestFeneconHome30.java +++ b/io.openems.edge.core/test/io/openems/edge/app/integratedsystem/TestFeneconHome30.java @@ -67,26 +67,14 @@ public void testCreateAndUpdateHomeFullSettings() throws Exception { // check properties of created apps for (var instance : this.appManagerTestBundle.sut.getInstantiatedApps()) { - int expectedDependencies; - switch (instance.appId) { - case "App.FENECON.Home.30": - expectedDependencies = 4; - break; - case "App.PvSelfConsumption.GridOptimizedCharge": - expectedDependencies = 0; - break; - case "App.PvSelfConsumption.SelfConsumptionOptimization": - expectedDependencies = 0; - break; - case "App.Meter.Socomec": - expectedDependencies = 0; - break; - case "App.Ess.PrepareBatteryExtension": - expectedDependencies = 0; - break; - default: - throw new Exception("App with ID[" + instance.appId + "] should not have been created!"); - } + var expectedDependencies = switch (instance.appId) { + case "App.FENECON.Home.30" -> 4; + case "App.PvSelfConsumption.GridOptimizedCharge" -> 0; + case "App.PvSelfConsumption.SelfConsumptionOptimization" -> 0; + case "App.Meter.Socomec" -> 0; + case "App.Ess.PrepareBatteryExtension" -> 0; + default -> throw new Exception("App with ID[" + instance.appId + "] should not have been created!"); + }; if (expectedDependencies == 0 && instance.dependencies == null) { continue; } diff --git a/io.openems.edge.core/test/io/openems/edge/core/appmanager/AppManagerTestBundle.java b/io.openems.edge.core/test/io/openems/edge/core/appmanager/AppManagerTestBundle.java index 7701feb9a12..dc8384768c9 100644 --- a/io.openems.edge.core/test/io/openems/edge/core/appmanager/AppManagerTestBundle.java +++ b/io.openems.edge.core/test/io/openems/edge/core/appmanager/AppManagerTestBundle.java @@ -1,7 +1,11 @@ package io.openems.edge.core.appmanager; +import static io.openems.common.utils.JsonUtils.getAsJsonArray; +import static io.openems.common.utils.JsonUtils.getAsString; +import static io.openems.common.utils.JsonUtils.toJsonArray; import static io.openems.common.utils.ReflectionUtils.setAttributeViaReflection; import static io.openems.common.utils.ReflectionUtils.setStaticAttributeViaReflection; +import static java.util.stream.Collectors.joining; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -13,7 +17,6 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; -import java.util.stream.Collectors; import org.osgi.framework.Bundle; import org.osgi.framework.ServiceReference; @@ -276,7 +279,7 @@ public void assertNoValidationErrors() throws Exception { if (!this.appValidateWorker.defectiveApps.isEmpty()) { throw new Exception(this.appValidateWorker.defectiveApps.entrySet().stream() // .map(e -> e.getKey() + "[" + e.getValue() + "]") // - .collect(Collectors.joining("|"))); + .collect(joining("|"))); } } @@ -284,8 +287,10 @@ public void assertNoValidationErrors() throws Exception { * Prints out the instantiated {@link OpenemsAppInstance}s. */ public void printApps() { - JsonUtils.prettyPrint(this.sut.getInstantiatedApps().stream().map(OpenemsAppInstance::toJsonObject) - .collect(JsonUtils.toJsonArray())); + JsonUtils.prettyPrint(// + this.sut.getInstantiatedApps().stream() // + .map(OpenemsAppInstance::toJsonObject) // + .collect(toJsonArray())); } /** @@ -300,9 +305,9 @@ public JsonArray getAppsFromConfig() throws IOException, OpenemsNamedException { final var config = this.cm.getConfiguration(this.sut.servicePid()); final var configObj = config.getProperties().get("apps"); if (configObj instanceof JsonPrimitive json) { - return JsonUtils.getAsJsonArray(JsonUtils.parse(JsonUtils.getAsString(json))); + return getAsJsonArray(JsonUtils.parse(getAsString(json))); } - return JsonUtils.getAsJsonArray(JsonUtils.parse(configObj.toString())); + return getAsJsonArray(JsonUtils.parse(configObj.toString())); } /** @@ -654,7 +659,7 @@ private final void modifyWithCurrentConfig() throws OpenemsNamedException { final var config = MyConfig.create() // .setApps(this.instantiatedApps.stream() // .map(OpenemsAppInstance::toJsonObject) // - .collect(JsonUtils.toJsonArray()) // + .collect(toJsonArray()) // .toString()) .setKey("0000-0000-0000-0000") // .build(); diff --git a/io.openems.edge.energy.api/src/io/openems/edge/energy/api/simulation/EnergyFlow.java b/io.openems.edge.energy.api/src/io/openems/edge/energy/api/simulation/EnergyFlow.java index c5fe1c3774f..0f47cffd3e5 100644 --- a/io.openems.edge.energy.api/src/io/openems/edge/energy/api/simulation/EnergyFlow.java +++ b/io.openems.edge.energy.api/src/io/openems/edge/energy/api/simulation/EnergyFlow.java @@ -196,15 +196,14 @@ public static class Model { * @return a new {@link EnergyFlow.Model} */ public static EnergyFlow.Model from(OneSimulationContext osc, Period period) { - final int factor; // TODO replace with switch in Java 21 - if (period instanceof GlobalSimulationsContext.Period.Hour) { - factor = 4; - } else { - factor = 1; - } + final var factor = switch (period) { + case GlobalSimulationsContext.Period.Hour p -> 4; + case GlobalSimulationsContext.Period.Quarter p -> 1; + }; final var essGlobal = osc.global.ess(); final var essOne = osc.ess; final var grid = osc.global.grid(); + return new EnergyFlow.Model(// /* production */ period.production(), // /* consumption */ period.consumption(), // diff --git a/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/SimulationResult.java b/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/SimulationResult.java index 4928906bd03..fc4fb06e6fc 100644 --- a/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/SimulationResult.java +++ b/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/SimulationResult.java @@ -103,18 +103,23 @@ public static SimulationResult fromQuarters(GlobalSimulationsContext gsc, int[][ // Convert to Quarters final var quarterPeriods = gsc.periods().stream() // - .flatMap(period -> period instanceof GlobalSimulationsContext.Period.Hour ph // - ? ph.quarterPeriods().stream() - : Stream.of(period)) // + .flatMap(period -> switch (period) { + case GlobalSimulationsContext.Period.Hour ph // + -> ph.quarterPeriods().stream(); + case GlobalSimulationsContext.Period.Quarter pq // + -> Stream.of(period); + }) // .collect(ImmutableList.toImmutableList()); final GlobalSimulationsContext quarterGsc = new GlobalSimulationsContext(gsc.clock(), gsc.riskLevel(), gsc.startTime(), gsc.eshs(), gsc.eshsWithDifferentStates(), gsc.grid(), gsc.ess(), gsc.evcss(), quarterPeriods); final var quarterSchedule = IntStream.range(0, gsc.periods().size()) // - .flatMap(periodIndex // - -> gsc.periods().get(periodIndex) instanceof GlobalSimulationsContext.Period.Hour ph // - ? ph.quarterPeriods().stream().mapToInt(ignore -> periodIndex) // repeat - : IntStream.of(periodIndex)) // + .flatMap(periodIndex -> switch (gsc.periods().get(periodIndex)) { + case GlobalSimulationsContext.Period.Hour ph // + -> ph.quarterPeriods().stream().mapToInt(ignore -> periodIndex); // repeat + case GlobalSimulationsContext.Period.Quarter pq // + -> IntStream.of(periodIndex); + }) // .mapToObj(periodIndex // -> IntStream.range(0, gsc.eshsWithDifferentStates().size()) // .map(eshIndex -> { diff --git a/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/Simulator.java b/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/Simulator.java index fbdaa6fa30e..5e90e11eca6 100644 --- a/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/Simulator.java +++ b/io.openems.edge.energy/src/io/openems/edge/energy/optimizer/Simulator.java @@ -25,6 +25,7 @@ import io.jenetics.SinglePointCrossover; import io.jenetics.engine.Engine; import io.jenetics.engine.EvolutionStream; +import io.openems.common.utils.FunctionUtils; import io.openems.edge.energy.api.EnergyScheduleHandler; import io.openems.edge.energy.api.EnergyScheduleHandler.AbstractEnergyScheduleHandler; import io.openems.edge.energy.api.simulation.EnergyFlow; @@ -128,11 +129,11 @@ public static double simulatePeriod(OneSimulationContext simulation, int[][] sch double cost = 0.; var eshIndex = 0; for (var esh : eshs) { - if (esh instanceof EnergyScheduleHandler.WithDifferentStates e) { - // Simulate with state given by Genotype - cost += e.simulatePeriod(simulation, period, model, schedule[periodIndex][eshIndex++]); - } else if (esh instanceof EnergyScheduleHandler.WithOnlyOneState e) { - e.simulatePeriod(simulation, period, model); + switch (esh) { + case EnergyScheduleHandler.WithDifferentStates e // + -> cost += e.simulatePeriod(simulation, period, model, schedule[periodIndex][eshIndex++]); + case EnergyScheduleHandler.WithOnlyOneState e // + -> e.simulatePeriod(simulation, period, model); } } @@ -167,9 +168,12 @@ public static double simulatePeriod(OneSimulationContext simulation, int[][] sch bestScheduleCollector.allPeriods.accept(srp); eshIndex = 0; for (var esh : eshs) { - if (esh instanceof EnergyScheduleHandler.WithDifferentStates e) { - bestScheduleCollector.eshStates.accept(new EshToState(e, srp, // + switch (esh) { + case EnergyScheduleHandler.WithDifferentStates e // + -> bestScheduleCollector.eshStates.accept(new EshToState(e, srp, // e.postProcessPeriod(period, simulation, energyFlow, schedule[periodIndex][eshIndex++]))); + case EnergyScheduleHandler.WithOnlyOneState e // + -> FunctionUtils.doNothing(); } } } diff --git a/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/EssType.java b/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/EssType.java index ccb6753c0a8..8164114d4b1 100644 --- a/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/EssType.java +++ b/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/EssType.java @@ -16,15 +16,11 @@ public enum EssType { * @return the {@link EssType} */ public static EssType getEssType(ManagedSymmetricEss ess) { - if (ess instanceof MetaEss) { - return META; - } - if (ess instanceof ManagedSinglePhaseEss) { - return EssType.SINGLE_PHASE; - } else if (ess instanceof ManagedAsymmetricEss) { - return EssType.ASYMMETRIC; - } else { - return EssType.SYMMETRIC; - } + return switch (ess) { + case MetaEss me -> META; + case ManagedSinglePhaseEss mspe -> SINGLE_PHASE; + case ManagedAsymmetricEss mae -> ASYMMETRIC; + default -> SYMMETRIC; + }; } } diff --git a/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/Inverter.java b/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/Inverter.java index bcc6a2fd3a8..e89e7f7901a 100644 --- a/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/Inverter.java +++ b/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/Inverter.java @@ -17,45 +17,40 @@ public static Inverter[] of(boolean symmetricMode, ManagedSymmetricEss ess, EssT var essId = ess.id(); if (symmetricMode) { // Symmetric Mode -> always return a symmetric ThreePhaseInverter - switch (essType) { - case SINGLE_PHASE: - case ASYMMETRIC: - case SYMMETRIC: - return new Inverter[] { new ThreePhaseInverter(essId) }; - - case META: - return new Inverter[0]; - } + return switch (essType) { + case SINGLE_PHASE, ASYMMETRIC, SYMMETRIC // + -> new Inverter[] { new ThreePhaseInverter(essId) }; + case META // + -> new Inverter[0]; + }; } else { // Asymmetric Mode - switch (essType) { - case SINGLE_PHASE: + return switch (essType) { + case SINGLE_PHASE -> { var phase = ((ManagedSinglePhaseEss) ess).getPhase().getPowerApiPhase(); - return new Inverter[] { // - phase == Phase.L1 ? new SinglePhaseInverter(essId, Phase.L1) + yield new Inverter[] { // + phase == Phase.L1 // + ? new SinglePhaseInverter(essId, Phase.L1) : new DummyInverter(essId, Phase.L1), - phase == Phase.L2 ? new SinglePhaseInverter(essId, Phase.L2) + phase == Phase.L2 // + ? new SinglePhaseInverter(essId, Phase.L2) : new DummyInverter(essId, Phase.L2), - phase == Phase.L3 ? new SinglePhaseInverter(essId, Phase.L3) + phase == Phase.L3 // + ? new SinglePhaseInverter(essId, Phase.L3) : new DummyInverter(essId, Phase.L3), // }; - - case ASYMMETRIC: - return new Inverter[] { // - new SinglePhaseInverter(essId, Phase.L1), // - new SinglePhaseInverter(essId, Phase.L2), // - new SinglePhaseInverter(essId, Phase.L3) // - }; - - case META: - return new Inverter[0]; - - case SYMMETRIC: - return new Inverter[] { new ThreePhaseInverter(essId) }; } + case ASYMMETRIC -> new Inverter[] { // + new SinglePhaseInverter(essId, Phase.L1), // + new SinglePhaseInverter(essId, Phase.L2), // + new SinglePhaseInverter(essId, Phase.L3) // + }; + case META // + -> new Inverter[0]; + case SYMMETRIC // + -> new Inverter[] { new ThreePhaseInverter(essId) }; + }; } - // should never come here - return new Inverter[0]; } private final String essId; diff --git a/io.openems.edge.ess.api/src/io/openems/edge/ess/test/DummyPower.java b/io.openems.edge.ess.api/src/io/openems/edge/ess/test/DummyPower.java index c9950264502..31d845bd9e1 100644 --- a/io.openems.edge.ess.api/src/io/openems/edge/ess/test/DummyPower.java +++ b/io.openems.edge.ess.api/src/io/openems/edge/ess/test/DummyPower.java @@ -107,7 +107,7 @@ public void setMaxApparentPower(int maxApparentPower) { @Override public int getMaxPower(ManagedSymmetricEss ess, Phase phase, Pwr pwr) { var result = this.maxApparentPower; - for (ManagedSymmetricEss e : this.esss) { + for (var e : this.esss) { result = TypeUtils.min(result, e.getMaxApparentPower().get(), e.getAllowedDischargePower().get()); } return result; @@ -116,7 +116,7 @@ public int getMaxPower(ManagedSymmetricEss ess, Phase phase, Pwr pwr) { @Override public int getMinPower(ManagedSymmetricEss ess, Phase phase, Pwr pwr) { var result = this.maxApparentPower; - for (ManagedSymmetricEss e : this.esss) { + for (var e : this.esss) { result = TypeUtils.min(result, e.getMaxApparentPower().get(), TypeUtils.multiply(e.getAllowedChargePower().get(), -1)); } @@ -135,11 +135,6 @@ public PidFilter getPidFilter() { @Override public boolean isPidEnabled() { - if (this.pidFilter instanceof DisabledPidFilter) { - return false; - } - - return true; + return !(this.pidFilter instanceof DisabledPidFilter); } - } diff --git a/io.openems.edge.ess.cluster/src/io/openems/edge/ess/cluster/ChannelManager.java b/io.openems.edge.ess.cluster/src/io/openems/edge/ess/cluster/ChannelManager.java index 163b38facb9..08c3bef61c2 100644 --- a/io.openems.edge.ess.cluster/src/io/openems/edge/ess/cluster/ChannelManager.java +++ b/io.openems.edge.ess.cluster/src/io/openems/edge/ess/cluster/ChannelManager.java @@ -193,8 +193,8 @@ private void calculate(BiFunction aggregator, List es final BiConsumer, Value> callback = (oldValue, newValue) -> { T result = null; for (SymmetricEss ess : esss) { - if (ess instanceof ManagedSymmetricEss) { - Channel channel = ((ManagedSymmetricEss) ess).channel(channelId); + if (ess instanceof ManagedSymmetricEss mse) { + Channel channel = mse.channel(channelId); result = aggregator.apply(result, channel.getNextValue().get()); } } @@ -202,8 +202,8 @@ private void calculate(BiFunction aggregator, List es channel.setNextValue(result); }; for (SymmetricEss ess : esss) { - if (ess instanceof ManagedSymmetricEss) { - this.addOnChangeListener((ManagedSymmetricEss) ess, channelId, callback); + if (ess instanceof ManagedSymmetricEss mse) { + this.addOnChangeListener(mse, channelId, callback); } } } @@ -225,8 +225,8 @@ private void calculate(BiFunction aggregator, List es final BiConsumer, Value> callback = (oldValue, newValue) -> { T result = null; for (SymmetricEss ess : esss) { - if (ess instanceof AsymmetricEss) { - Channel channel = ((AsymmetricEss) ess).channel(asymmetricChannelId); + if (ess instanceof AsymmetricEss ae) { + Channel channel = ae.channel(asymmetricChannelId); result = aggregator.apply(result, channel.getNextValue().get()); } else { // SymmetricEss @@ -238,8 +238,8 @@ private void calculate(BiFunction aggregator, List es channel.setNextValue(result); }; for (SymmetricEss ess : esss) { - if (ess instanceof AsymmetricEss) { - this.addOnChangeListener((AsymmetricEss) ess, asymmetricChannelId, callback); + if (ess instanceof AsymmetricEss ae) { + this.addOnChangeListener(ae, asymmetricChannelId, callback); } else { this.addOnChangeListener(ess, symmetricChannelId, callback); } diff --git a/io.openems.edge.ess.cluster/src/io/openems/edge/ess/cluster/EssClusterImpl.java b/io.openems.edge.ess.cluster/src/io/openems/edge/ess/cluster/EssClusterImpl.java index 1f97b086105..12fa10d57e4 100644 --- a/io.openems.edge.ess.cluster/src/io/openems/edge/ess/cluster/EssClusterImpl.java +++ b/io.openems.edge.ess.cluster/src/io/openems/edge/ess/cluster/EssClusterImpl.java @@ -131,8 +131,8 @@ public void applyPower(int activePowerL1, int reactivePowerL1, int activePowerL2 public int getPowerPrecision() { Integer result = null; for (var ess : this.esss) { - if (ess instanceof ManagedSymmetricEss) { - result = TypeUtils.min(result, ((ManagedSymmetricEss) ess).getPowerPrecision()); + if (ess instanceof ManagedSymmetricEss ase) { + result = TypeUtils.min(result, ase.getPowerPrecision()); } } return TypeUtils.orElse(result, 1); diff --git a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/EssPowerImpl.java b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/EssPowerImpl.java index 3cea0e39de1..b5d6b38deb9 100644 --- a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/EssPowerImpl.java +++ b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/EssPowerImpl.java @@ -1,5 +1,7 @@ package io.openems.edge.ess.core.power; +import static io.openems.edge.ess.core.power.data.LogUtil.debugLogConstraints; + import java.util.List; import org.apache.commons.math3.optim.nonlinear.scalar.GoalType; @@ -30,7 +32,6 @@ import io.openems.edge.common.filter.PidFilter; import io.openems.edge.ess.api.ManagedSymmetricEss; import io.openems.edge.ess.core.power.data.ConstraintUtil; -import io.openems.edge.ess.core.power.data.LogUtil; import io.openems.edge.ess.core.power.solver.CalculatePowerExtrema; import io.openems.edge.ess.power.api.Coefficient; import io.openems.edge.ess.power.api.Constraint; @@ -153,11 +154,11 @@ public synchronized Constraint addConstraintAndValidate(Constraint constraint) t this.data.removeConstraint(constraint); if (this.debugMode) { var allConstraints = this.data.getConstraintsForAllInverters(); - LogUtil.debugLogConstraints(this.log, "Unable to validate with following constraints:", allConstraints); + debugLogConstraints(this.log, "Unable to validate with following constraints:", allConstraints); this.logWarn(this.log, "Failed to add Constraint: " + constraint); } - if (e instanceof PowerException) { - ((PowerException) e).setReason(constraint); + if (e instanceof PowerException pe) { + pe.setReason(constraint); } throw e; } diff --git a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/Solver.java b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/Solver.java index 2e89950ee29..6af9c0298e8 100644 --- a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/Solver.java +++ b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/Solver.java @@ -1,5 +1,10 @@ package io.openems.edge.ess.core.power; +import static io.openems.edge.ess.power.api.SolverStrategy.OPTIMIZE_BY_KEEPING_ALL_EQUAL; +import static io.openems.edge.ess.power.api.SolverStrategy.OPTIMIZE_BY_KEEPING_ALL_NEAR_EQUAL; +import static io.openems.edge.ess.power.api.SolverStrategy.OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER; +import static io.openems.edge.ess.power.api.SolverStrategy.OPTIMIZE_BY_MOVING_TOWARDS_TARGET; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -161,34 +166,27 @@ public void solve(SolverStrategy strategy) { var targetInverters = this.optimizers.reduceNumberOfUsedInverters.apply(allInverters, targetDirection, this.solveWithDisabledInverters); - switch (strategy) { - case UNDEFINED: - case ALL_CONSTRAINTS: - case NONE: - solution = this.tryStrategies(targetDirection, allInverters, targetInverters, allConstraints); - break; + solution = switch (strategy) { + case UNDEFINED, ALL_CONSTRAINTS, NONE // + -> this.tryStrategies(targetDirection, allInverters, targetInverters, allConstraints); - case OPTIMIZE_BY_MOVING_TOWARDS_TARGET: - solution = this.tryStrategies(targetDirection, allInverters, targetInverters, allConstraints, - SolverStrategy.OPTIMIZE_BY_MOVING_TOWARDS_TARGET, - SolverStrategy.OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER); - break; + case OPTIMIZE_BY_MOVING_TOWARDS_TARGET // + -> this.tryStrategies(targetDirection, allInverters, targetInverters, allConstraints, + OPTIMIZE_BY_MOVING_TOWARDS_TARGET, + OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER); - case OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER: - solution = this.tryStrategies(targetDirection, allInverters, targetInverters, allConstraints, - SolverStrategy.OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER, - SolverStrategy.OPTIMIZE_BY_MOVING_TOWARDS_TARGET); - break; + case OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER // + -> this.tryStrategies(targetDirection, allInverters, targetInverters, allConstraints, + OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER, + OPTIMIZE_BY_MOVING_TOWARDS_TARGET); - case OPTIMIZE_BY_KEEPING_ALL_EQUAL: - case OPTIMIZE_BY_KEEPING_ALL_NEAR_EQUAL: - solution = this.tryStrategies(targetDirection, allInverters, targetInverters, allConstraints, - SolverStrategy.OPTIMIZE_BY_KEEPING_ALL_EQUAL, // - SolverStrategy.OPTIMIZE_BY_KEEPING_ALL_NEAR_EQUAL, // - SolverStrategy.OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER, - SolverStrategy.OPTIMIZE_BY_MOVING_TOWARDS_TARGET); - break; - } + case OPTIMIZE_BY_KEEPING_ALL_EQUAL, OPTIMIZE_BY_KEEPING_ALL_NEAR_EQUAL // + -> this.tryStrategies(targetDirection, allInverters, targetInverters, allConstraints, + OPTIMIZE_BY_KEEPING_ALL_EQUAL, // + OPTIMIZE_BY_KEEPING_ALL_NEAR_EQUAL, // + OPTIMIZE_BY_KEEPING_TARGET_DIRECTION_AND_MAXIMIZING_IN_ORDER, + OPTIMIZE_BY_MOVING_TOWARDS_TARGET); // // + }; } catch (NoFeasibleSolutionException | UnboundedSolutionException e) { if (this.debugMode) { @@ -332,7 +330,7 @@ private void applySolution(Map finalSolution) { } } - if (ess instanceof ManagedAsymmetricEss && (invL1 != null || invL2 != null || invL3 != null)) { + if (ess instanceof ManagedAsymmetricEss e && (invL1 != null || invL2 != null || invL3 != null)) { /* * Call applyPower() of ManagedAsymmetricEss */ @@ -347,7 +345,6 @@ private void applySolution(Map finalSolution) { invL3 = new PowerTuple(); } - var e = (ManagedAsymmetricEss) ess; // set debug channels on Ess e._setDebugSetActivePower(invL1.getActivePower() + invL2.getActivePower() + invL3.getActivePower()); e._setDebugSetReactivePower( diff --git a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/data/ConstraintUtil.java b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/data/ConstraintUtil.java index f409852b23e..c6dc6e9561c 100644 --- a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/data/ConstraintUtil.java +++ b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/data/ConstraintUtil.java @@ -1,5 +1,9 @@ package io.openems.edge.ess.core.power.data; +import static io.openems.edge.ess.core.power.data.ApparentPowerConstraintUtil.generateConstraints; +import static io.openems.edge.ess.power.api.EssType.SYMMETRIC; +import static io.openems.edge.ess.power.api.EssType.getEssType; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -19,14 +23,13 @@ import io.openems.edge.ess.power.api.Coefficients; import io.openems.edge.ess.power.api.Constraint; import io.openems.edge.ess.power.api.DummyInverter; -import io.openems.edge.ess.power.api.EssType; import io.openems.edge.ess.power.api.Inverter; import io.openems.edge.ess.power.api.LinearCoefficient; import io.openems.edge.ess.power.api.Phase; import io.openems.edge.ess.power.api.Pwr; import io.openems.edge.ess.power.api.Relationship; -public class ConstraintUtil { +public final class ConstraintUtil { private static final Logger LOG = LoggerFactory.getLogger(ConstraintUtil.class); @@ -66,11 +69,11 @@ public static Constraint createSimpleConstraint(Coefficients coefficients, Strin public static List createDisableConstraintsForInactiveInverters(Coefficients coefficients, Collection inverters) throws OpenemsException { List result = new ArrayList<>(); - for (Inverter inv : inverters) { + for (var inv : inverters) { var essId = inv.getEssId(); var phase = inv.getPhase(); for (Pwr pwr : Pwr.values()) { - result.add(ConstraintUtil.createSimpleConstraint(coefficients, // + result.add(createSimpleConstraint(coefficients, // essId + ": Disable " + pwr.getSymbol() + phase.getSymbol(), // essId, phase, pwr, Relationship.EQUALS, 0)); } @@ -91,7 +94,7 @@ public static List createDisableConstraintsForInactiveInverters(Coef public static List createGenericEssConstraints(Coefficients coefficients, List esss, boolean symmetricMode) throws OpenemsException { List result = new ArrayList<>(); - for (ManagedSymmetricEss ess : esss) { + for (var ess : esss) { if (ess instanceof MetaEss) { // ignore @@ -99,12 +102,12 @@ public static List createGenericEssConstraints(Coefficients coeffici } // Allowed Charge Power - result.add(ConstraintUtil.createSimpleConstraint(coefficients, ess.id() + ": Allowed Charge", // + result.add(createSimpleConstraint(coefficients, ess.id() + ": Allowed Charge", // ess.id(), Phase.ALL, Pwr.ACTIVE, Relationship.GREATER_OR_EQUALS, // ess.getAllowedChargePower().orElse(0))); // Allowed Charge Power - result.add(ConstraintUtil.createSimpleConstraint(coefficients, ess.id() + ": Allowed Discharge", // + result.add(createSimpleConstraint(coefficients, ess.id() + ": Allowed Discharge", // ess.id(), Phase.ALL, Pwr.ACTIVE, Relationship.LESS_OR_EQUALS, // ess.getAllowedDischargePower().orElse(0))); @@ -112,16 +115,14 @@ public static List createGenericEssConstraints(Coefficients coeffici int maxApparentPower = ess.getMaxApparentPower().orElse(0); if (ess instanceof ManagedAsymmetricEss && !symmetricMode && !(ess instanceof ManagedSinglePhaseEss)) { var maxApparentPowerPerPhase = maxApparentPower / 3d; - for (Phase phase : Phase.values()) { + for (var phase : Phase.values()) { if (phase == Phase.ALL) { continue; // do not add Max Apparent Power Constraint for ALL phases } - result.addAll(ApparentPowerConstraintUtil.generateConstraints(coefficients, ess.id(), phase, - maxApparentPowerPerPhase)); + result.addAll(generateConstraints(coefficients, ess.id(), phase, maxApparentPowerPerPhase)); } } else { - result.addAll(ApparentPowerConstraintUtil.generateConstraints(coefficients, ess.id(), Phase.ALL, - maxApparentPower)); + result.addAll(generateConstraints(coefficients, ess.id(), Phase.ALL, maxApparentPower)); } } return result; @@ -140,7 +141,7 @@ public static List createStaticEssConstraints(List onStaticConstraintsFailed) { List result = new ArrayList<>(); var isFailed = false; - for (ManagedSymmetricEss ess : esss) { + for (var ess : esss) { try { Collections.addAll(result, ess.getStaticConstraints()); } catch (OpenemsNamedException e) { @@ -173,8 +174,8 @@ public static List createSumOfPhasesConstraints(Coefficients coeffic // Symmetric Mode } else { // Asymmetric Mode - for (ManagedSymmetricEss ess : esss) { - for (Pwr pwr : Pwr.values()) { + for (var ess : esss) { + for (var pwr : Pwr.values()) { // creates two constraint of the form // 1*P - 1*L1 - 1*L2 - 1*L3 = 0 // 1*Q - 1*L1 - 1*L2 - 1*L3 = 0 @@ -203,14 +204,14 @@ public static List createSumOfPhasesConstraints(Coefficients coeffic public static List createSymmetricEssConstraints(Coefficients coefficients, List esss, boolean symmetricMode) throws OpenemsException { List result = new ArrayList<>(); - for (ManagedSymmetricEss ess : esss) { - var essType = EssType.getEssType(ess); - if (!symmetricMode && essType == EssType.SYMMETRIC) { + for (var ess : esss) { + var essType = getEssType(ess); + if (!symmetricMode && essType == SYMMETRIC) { /* * Symmetric-Mode is deactivated and this is a Symmetric ESS: Add Symmetric * Constraints */ - for (Pwr pwr : Pwr.values()) { + for (var pwr : Pwr.values()) { // creates two constraint of the form // 1*L1 - 1*L2 = 0 // 1*L1 - 1*L3 = 0 @@ -248,10 +249,10 @@ public static List createSinglePhaseEssConstraints(Coefficients coef // Symmetric Mode } else { // Asymmetric Mode - for (Inverter inv : inverters) { + for (var inv : inverters) { if (inv instanceof DummyInverter) { - for (Pwr pwr : Pwr.values()) { - result.add(ConstraintUtil.createSimpleConstraint(coefficients, // + for (var pwr : Pwr.values()) { + result.add(createSimpleConstraint(coefficients, // inv.getEssId() + ": Dummy " + pwr.getSymbol() + inv.getPhase().getSymbol(), inv.getEssId(), inv.getPhase(), pwr, Relationship.EQUALS, 0)); } @@ -274,19 +275,18 @@ public static List createSinglePhaseEssConstraints(Coefficients coef public static List createMetaEssConstraints(Coefficients coefficients, List esss, boolean symmetricMode) throws OpenemsException { List result = new ArrayList<>(); - for (ManagedSymmetricEss ess : esss) { - if (ess instanceof MetaEss) { - var e = (MetaEss) ess; + for (var ess : esss) { + if (ess instanceof MetaEss e) { if (symmetricMode) { // Symmetric Mode - for (Pwr pwr : Pwr.values()) { - result.add(ConstraintUtil.createOneClusterConstraint(coefficients, e, Phase.ALL, pwr)); + for (var pwr : Pwr.values()) { + result.add(createOneClusterConstraint(coefficients, e, Phase.ALL, pwr)); } } else { // Asymmetric Mode - for (Phase phase : Phase.values()) { + for (var phase : Phase.values()) { for (Pwr pwr : Pwr.values()) { - result.add(ConstraintUtil.createOneClusterConstraint(coefficients, e, phase, pwr)); + result.add(createOneClusterConstraint(coefficients, e, phase, pwr)); } } } @@ -309,10 +309,9 @@ private static Constraint createOneClusterConstraint(Coefficients coefficients, throws OpenemsException { List cos = new ArrayList<>(); cos.add(new LinearCoefficient(coefficients.of(e.id(), phase, pwr), 1)); - for (String subEssId : e.getEssIds()) { + for (var subEssId : e.getEssIds()) { cos.add(new LinearCoefficient(coefficients.of(subEssId, phase, pwr), -1)); } return new Constraint(e.id() + ": Sum of " + pwr.getSymbol() + phase.getSymbol(), cos, Relationship.EQUALS, 0); } - } diff --git a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/optimizers/KeepAllNearEqual.java b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/optimizers/KeepAllNearEqual.java index c78b33fda9d..7df5bd305a6 100644 --- a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/optimizers/KeepAllNearEqual.java +++ b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/optimizers/KeepAllNearEqual.java @@ -167,7 +167,7 @@ private static double getPowerSetPoint(List esss, List ess instanceof MetaEss)// + .filter(MetaEss.class::isInstance)// .findFirst().get().id(); var noPowerSetPoint = Double.NaN; diff --git a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/optimizers/KeepTargetDirectionAndMaximizeInOrder.java b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/optimizers/KeepTargetDirectionAndMaximizeInOrder.java index cece7eb2643..65e86fece72 100644 --- a/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/optimizers/KeepTargetDirectionAndMaximizeInOrder.java +++ b/io.openems.edge.ess.core/src/io/openems/edge/ess/core/power/optimizers/KeepTargetDirectionAndMaximizeInOrder.java @@ -1,15 +1,20 @@ package io.openems.edge.ess.core.power.optimizers; +import static io.openems.edge.ess.core.power.data.ConstraintUtil.createSimpleConstraint; +import static io.openems.edge.ess.power.api.Relationship.EQUALS; +import static io.openems.edge.ess.power.api.Relationship.GREATER_OR_EQUALS; +import static io.openems.edge.ess.power.api.Relationship.LESS_OR_EQUALS; +import static org.apache.commons.math3.optim.nonlinear.scalar.GoalType.MAXIMIZE; +import static org.apache.commons.math3.optim.nonlinear.scalar.GoalType.MINIMIZE; + import java.util.ArrayList; import java.util.List; import org.apache.commons.math3.optim.PointValuePair; import org.apache.commons.math3.optim.linear.NoFeasibleSolutionException; import org.apache.commons.math3.optim.linear.UnboundedSolutionException; -import org.apache.commons.math3.optim.nonlinear.scalar.GoalType; import io.openems.common.exceptions.OpenemsException; -import io.openems.edge.ess.core.power.data.ConstraintUtil; import io.openems.edge.ess.core.power.data.TargetDirection; import io.openems.edge.ess.core.power.solver.CalculatePowerExtrema; import io.openems.edge.ess.core.power.solver.ConstraintSolver; @@ -17,7 +22,6 @@ import io.openems.edge.ess.power.api.Constraint; import io.openems.edge.ess.power.api.Inverter; import io.openems.edge.ess.power.api.Pwr; -import io.openems.edge.ess.power.api.Relationship; public class KeepTargetDirectionAndMaximizeInOrder { @@ -41,39 +45,32 @@ public static PointValuePair apply(Coefficients coefficients, List all // Add Zero-Constraint for all Inverters that are not Target for (Inverter inv : allInverters) { if (!targetInverters.contains(inv)) { - constraints.add(ConstraintUtil.createSimpleConstraint(coefficients, // + constraints.add(createSimpleConstraint(coefficients, // inv.toString() + ": is not a target inverter", // - inv.getEssId(), inv.getPhase(), Pwr.ACTIVE, Relationship.EQUALS, 0)); - constraints.add(ConstraintUtil.createSimpleConstraint(coefficients, // + inv.getEssId(), inv.getPhase(), Pwr.ACTIVE, EQUALS, 0)); + constraints.add(createSimpleConstraint(coefficients, // inv.toString() + ": is not a target inverter", // - inv.getEssId(), inv.getPhase(), Pwr.REACTIVE, Relationship.EQUALS, 0)); + inv.getEssId(), inv.getPhase(), Pwr.REACTIVE, EQUALS, 0)); } } var result = ConstraintSolver.solve(coefficients, constraints); - var relationship = Relationship.EQUALS; - switch (targetDirection) { - case CHARGE: - relationship = Relationship.LESS_OR_EQUALS; - break; - case DISCHARGE: - relationship = Relationship.GREATER_OR_EQUALS; - break; - case KEEP_ZERO: - relationship = Relationship.EQUALS; - break; - } + var relationship = switch (targetDirection) { + case CHARGE -> LESS_OR_EQUALS; + case DISCHARGE -> GREATER_OR_EQUALS; + case KEEP_ZERO -> EQUALS; + }; - for (Inverter inv : targetInverters) { + for (var inv : targetInverters) { // Create Constraint to force Ess positive/negative/zero according to // targetDirection result = addContraintIfProblemStillSolves(result, constraints, coefficients, - ConstraintUtil.createSimpleConstraint(coefficients, // + createSimpleConstraint(coefficients, // inv.toString() + ": Force ActivePower " + targetDirection.name(), // inv.getEssId(), inv.getPhase(), Pwr.ACTIVE, relationship, 0)); result = addContraintIfProblemStillSolves(result, constraints, coefficients, - ConstraintUtil.createSimpleConstraint(coefficients, // + createSimpleConstraint(coefficients, // inv.toString() + ": Force ReactivePower " + targetDirection.name(), // inv.getEssId(), inv.getPhase(), Pwr.REACTIVE, relationship, 0)); } @@ -83,27 +80,25 @@ public static PointValuePair apply(Coefficients coefficients, List all } // Try maximizing all inverters in order in target direction - for (Inverter inv : targetInverters) { - GoalType goal; - if (targetDirection == TargetDirection.CHARGE) { - goal = GoalType.MINIMIZE; - } else { - goal = GoalType.MAXIMIZE; - } + for (var inv : targetInverters) { + var goal = switch (targetDirection) { + case CHARGE -> MINIMIZE; + case DISCHARGE, KEEP_ZERO -> MAXIMIZE; + }; var activePowerTarget = CalculatePowerExtrema.from(coefficients, allConstraints, inv.getEssId(), inv.getPhase(), Pwr.ACTIVE, goal); result = addContraintIfProblemStillSolves(result, constraints, coefficients, - ConstraintUtil.createSimpleConstraint(coefficients, // + createSimpleConstraint(coefficients, // inv.toString() + ": Set ActivePower " + goal.name() + " value", // - inv.getEssId(), inv.getPhase(), Pwr.ACTIVE, Relationship.EQUALS, activePowerTarget)); + inv.getEssId(), inv.getPhase(), Pwr.ACTIVE, EQUALS, activePowerTarget)); var reactivePowerTarget = CalculatePowerExtrema.from(coefficients, allConstraints, inv.getEssId(), inv.getPhase(), Pwr.REACTIVE, goal); result = addContraintIfProblemStillSolves(result, constraints, coefficients, - ConstraintUtil.createSimpleConstraint(coefficients, // + createSimpleConstraint(coefficients, // inv.toString() + ": Set ReactivePower " + goal.name() + " value", // - inv.getEssId(), inv.getPhase(), Pwr.REACTIVE, Relationship.EQUALS, reactivePowerTarget)); + inv.getEssId(), inv.getPhase(), Pwr.REACTIVE, EQUALS, reactivePowerTarget)); } return result; diff --git a/io.openems.edge.ess.fenecon.commercial40/src/io/openems/edge/ess/fenecon/commercial40/SurplusFeedInHandler.java b/io.openems.edge.ess.fenecon.commercial40/src/io/openems/edge/ess/fenecon/commercial40/SurplusFeedInHandler.java index fc10921573d..fa03794f847 100644 --- a/io.openems.edge.ess.fenecon.commercial40/src/io/openems/edge/ess/fenecon/commercial40/SurplusFeedInHandler.java +++ b/io.openems.edge.ess.fenecon.commercial40/src/io/openems/edge/ess/fenecon/commercial40/SurplusFeedInHandler.java @@ -58,13 +58,13 @@ protected Integer run(List chargers, Config config, Co } // State-Machine - switch (this.state) { - case UNDEFINED: - case DEACTIVATED: + return switch (this.state) { + case UNDEFINED, DEACTIVATED -> { this.applyPvPowerLimit(chargers, config, false); - return null; + yield null; + } - case ACTIVATED: { + case ACTIVATED -> { if (areSurplusConditionsMet) { this.startedGoingDeactivated = null; } else { @@ -74,10 +74,10 @@ protected Integer run(List chargers, Config config, Co var pvPower = this.getPvPower(chargers); var power = pvPower + this.getIncreasePower(config, pvPower); this.applyPvPowerLimit(chargers, config, true); - return power; + yield power; } - case GOING_DEACTIVATED: { + case GOING_DEACTIVATED -> { var goingDeactivatedSinceMinutes = Duration.between(this.startedGoingDeactivated, LocalDateTime.now()) .toMinutes(); // slowly reduce the surplus-feed-in-power from 100 to 0 % @@ -89,19 +89,17 @@ protected Integer run(List chargers, Config config, Co this.setState(SurplusFeedInStateMachine.PASSED_OFF_TIME); } this.applyPvPowerLimit(chargers, config, false); - return power; + yield power; } - case PASSED_OFF_TIME: + case PASSED_OFF_TIME -> { if (LocalTime.now().isBefore(offTime)) { this.setState(SurplusFeedInStateMachine.DEACTIVATED); } this.applyPvPowerLimit(chargers, config, false); - return null; + yield null; } - - // should never come here - return null; + }; } /** diff --git a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/common/AbstractChannelManager.java b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/common/AbstractChannelManager.java index c77a5496cc1..987886bd258 100644 --- a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/common/AbstractChannelManager.java +++ b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/common/AbstractChannelManager.java @@ -66,28 +66,30 @@ private void addBatteryInverterListener(ManagedSymmetricBatteryInverter batteryI SymmetricBatteryInverter.ChannelId.REACTIVE_POWER, // SymmetricEss.ChannelId.REACTIVE_POWER); - if (batteryInverter instanceof HybridManagedSymmetricBatteryInverter) { - this.addCopyListener(batteryInverter, // + switch (batteryInverter) { + case HybridManagedSymmetricBatteryInverter hmsbi -> { + this.addCopyListener(hmsbi, // HybridManagedSymmetricBatteryInverter.ChannelId.DC_CHARGE_ENERGY, // HybridEss.ChannelId.DC_CHARGE_ENERGY); - this.addCopyListener(batteryInverter, // + this.addCopyListener(hmsbi, // HybridManagedSymmetricBatteryInverter.ChannelId.DC_DISCHARGE_ENERGY, // HybridEss.ChannelId.DC_DISCHARGE_ENERGY); - this.addCopyListener(batteryInverter, // + this.addCopyListener(hmsbi, // HybridManagedSymmetricBatteryInverter.ChannelId.DC_DISCHARGE_POWER, // HybridEss.ChannelId.DC_DISCHARGE_POWER); - - } else { - this.addCopyListener(batteryInverter, // + } + case ManagedSymmetricBatteryInverter msbi -> { + this.addCopyListener(msbi, // SymmetricBatteryInverter.ChannelId.ACTIVE_CHARGE_ENERGY, // HybridEss.ChannelId.DC_CHARGE_ENERGY); - this.addCopyListener(batteryInverter, // + this.addCopyListener(msbi, // SymmetricBatteryInverter.ChannelId.ACTIVE_DISCHARGE_ENERGY, // HybridEss.ChannelId.DC_DISCHARGE_ENERGY); - this.addCopyListener(batteryInverter, // + this.addCopyListener(msbi, // SymmetricBatteryInverter.ChannelId.ACTIVE_POWER, // HybridEss.ChannelId.DC_DISCHARGE_POWER); } + } } private void addBatteryListener(ClockProvider clockProvider, Battery battery, SymmetricBatteryInverter inverter) { diff --git a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/common/AbstractGenericManagedEss.java b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/common/AbstractGenericManagedEss.java index 669ceaa08f0..3bf694c2da1 100644 --- a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/common/AbstractGenericManagedEss.java +++ b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/common/AbstractGenericManagedEss.java @@ -114,8 +114,8 @@ protected void genericDebugLog(StringBuilder sb) { // Get DC-PV-Power for Hybrid ESS Integer dcPvPower = null; var batteryInverter = this.getBatteryInverter(); - if (batteryInverter instanceof HybridManagedSymmetricBatteryInverter) { - dcPvPower = ((HybridManagedSymmetricBatteryInverter) batteryInverter).getDcPvPower(); + if (batteryInverter instanceof HybridManagedSymmetricBatteryInverter hybrid) { + dcPvPower = hybrid.getDcPvPower(); } sb // @@ -124,9 +124,8 @@ protected void genericDebugLog(StringBuilder sb) { // For HybridEss show actual Battery charge power and PV production power if (dcPvPower != null) { - HybridEss me = this; sb // - .append("|Battery:").append(me.getDcDischargePower().asString()) // + .append("|Battery:").append(this.getDcDischargePower().asString()) // .append("|PV:").append(dcPvPower); } @@ -190,12 +189,11 @@ public Constraint[] getStaticConstraints() throws OpenemsNamedException { } @Override - public Integer getSurplusPower() { - var batteryInverter = this.getBatteryInverter(); - if (batteryInverter instanceof HybridManagedSymmetricBatteryInverter) { - return ((HybridManagedSymmetricBatteryInverter) batteryInverter).getSurplusPower(); - } - return null; + public final Integer getSurplusPower() { + return switch (this.getBatteryInverter()) { + case HybridManagedSymmetricBatteryInverter hybrid -> hybrid.getSurplusPower(); + case null, default -> null; + }; } @Override diff --git a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/offgrid/statemachine/StateMachine.java b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/offgrid/statemachine/StateMachine.java index 693fcfbff3f..1d2ba20135f 100644 --- a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/offgrid/statemachine/StateMachine.java +++ b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/offgrid/statemachine/StateMachine.java @@ -62,32 +62,19 @@ public StateMachine(OffGridState initialState) { @Override public StateHandler getStateHandler(OffGridState state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case STARTED_IN_OFF_GRID: - return new StartedInOffGridHandler(); - case STARTED_IN_ON_GRID: - return new StartedInOnGridHandler(); - case START_BATTERY_INVERTER_IN_OFF_GRID: - return new StartBatteryInverterInOffGridHandler(); - case START_BATTERY_INVERTER_IN_ON_GRID: - return new StartBatteryInverterInOnGridHandler(); - case START_BATTERY_IN_OFF_GRID: - return new StartBatteryInOffGridHandler(); - case START_BATTERY_IN_ON_GRID: - return new StartBatteryInOnGridHandler(); - case STOPPED: - return new StoppedHandler(); - case STOP_BATTERY: - return new StopBatteryHandler(); - case STOP_BATTERY_INVERTER: - return new StopBatteryInverterHandler(); - case ERROR: - return new ErrorHandler(); - case GRID_SWITCH: - return new GridSwitchHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case STARTED_IN_OFF_GRID -> new StartedInOffGridHandler(); + case STARTED_IN_ON_GRID -> new StartedInOnGridHandler(); + case START_BATTERY_INVERTER_IN_OFF_GRID -> new StartBatteryInverterInOffGridHandler(); + case START_BATTERY_INVERTER_IN_ON_GRID -> new StartBatteryInverterInOnGridHandler(); + case START_BATTERY_IN_OFF_GRID -> new StartBatteryInOffGridHandler(); + case START_BATTERY_IN_ON_GRID -> new StartBatteryInOnGridHandler(); + case STOPPED -> new StoppedHandler(); + case STOP_BATTERY -> new StopBatteryHandler(); + case STOP_BATTERY_INVERTER -> new StopBatteryInverterHandler(); + case ERROR -> new ErrorHandler(); + case GRID_SWITCH -> new GridSwitchHandler(); + }; } } diff --git a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/offgrid/statemachine/UndefinedHandler.java b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/offgrid/statemachine/UndefinedHandler.java index f0d391e24d4..cfa9ad194d5 100644 --- a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/offgrid/statemachine/UndefinedHandler.java +++ b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/offgrid/statemachine/UndefinedHandler.java @@ -11,28 +11,20 @@ public OffGridState runAndGetNextState(Context context) { var ess = context.getParent(); ess._setStartStop(StartStop.UNDEFINED); - switch (ess.getStartStopTarget()) { - case UNDEFINED: - // Stuck in UNDEFINED State - return OffGridState.UNDEFINED; - - case START: - // force START - if (ess.hasFaults()) { - // Has Faults -> error handling - return OffGridState.ERROR; - } else { - // No Faults -> Check the Relay States - return OffGridState.GRID_SWITCH; - } - - case STOP: - // force STOP - return OffGridState.STOP_BATTERY_INVERTER; - } - - assert false; - return OffGridState.UNDEFINED; // can never happen + return switch (ess.getStartStopTarget()) { + case UNDEFINED // Stuck in UNDEFINED State + -> OffGridState.UNDEFINED; + + case START// force START + -> ess.hasFaults() + // Has Faults -> error handling + ? OffGridState.ERROR + // No Faults -> Check the Relay States + : OffGridState.GRID_SWITCH; + + case STOP // force STOP + -> OffGridState.STOP_BATTERY_INVERTER; + }; } } diff --git a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/ChannelManager.java b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/ChannelManager.java index ffbccd9ea76..266a7bd3997 100644 --- a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/ChannelManager.java +++ b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/ChannelManager.java @@ -20,27 +20,29 @@ public void activate(ClockProvider clockProvider, Battery battery, ManagedSymmetricBatteryInverter batteryInverter) { super.activate(clockProvider, battery, batteryInverter); - if (batteryInverter instanceof HybridManagedSymmetricBatteryInverter) { - this.addCopyListener(batteryInverter, // + switch (batteryInverter) { + case HybridManagedSymmetricBatteryInverter hmsbi -> { + this.addCopyListener(hmsbi, // HybridManagedSymmetricBatteryInverter.ChannelId.DC_CHARGE_ENERGY, // HybridEss.ChannelId.DC_CHARGE_ENERGY); - this.addCopyListener(batteryInverter, // + this.addCopyListener(hmsbi, // HybridManagedSymmetricBatteryInverter.ChannelId.DC_DISCHARGE_ENERGY, // HybridEss.ChannelId.DC_DISCHARGE_ENERGY); - this.addCopyListener(batteryInverter, // + this.addCopyListener(hmsbi, // HybridManagedSymmetricBatteryInverter.ChannelId.DC_DISCHARGE_POWER, // HybridEss.ChannelId.DC_DISCHARGE_POWER); - - } else { - this.addCopyListener(batteryInverter, // + } + case ManagedSymmetricBatteryInverter msbi -> { + this.addCopyListener(msbi, // SymmetricBatteryInverter.ChannelId.ACTIVE_CHARGE_ENERGY, // HybridEss.ChannelId.DC_CHARGE_ENERGY); - this.addCopyListener(batteryInverter, // + this.addCopyListener(msbi, // SymmetricBatteryInverter.ChannelId.ACTIVE_DISCHARGE_ENERGY, // HybridEss.ChannelId.DC_DISCHARGE_ENERGY); - this.addCopyListener(batteryInverter, // + this.addCopyListener(msbi, // SymmetricBatteryInverter.ChannelId.ACTIVE_POWER, // HybridEss.ChannelId.DC_DISCHARGE_POWER); } + } } } diff --git a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/EssGenericManagedSymmetricImpl.java b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/EssGenericManagedSymmetricImpl.java index c13369e663c..621bab75ec0 100644 --- a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/EssGenericManagedSymmetricImpl.java +++ b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/EssGenericManagedSymmetricImpl.java @@ -23,7 +23,6 @@ import io.openems.common.exceptions.OpenemsError.OpenemsNamedException; import io.openems.edge.battery.api.Battery; -import io.openems.edge.batteryinverter.api.HybridManagedSymmetricBatteryInverter; import io.openems.edge.batteryinverter.api.ManagedSymmetricBatteryInverter; import io.openems.edge.common.component.ComponentManager; import io.openems.edge.common.component.OpenemsComponent; @@ -156,14 +155,6 @@ protected ManagedSymmetricBatteryInverter getBatteryInverter() { return this.batteryInverter; } - @Override - public Integer getSurplusPower() { - if (this.batteryInverter instanceof HybridManagedSymmetricBatteryInverter) { - return ((HybridManagedSymmetricBatteryInverter) this.batteryInverter).getSurplusPower(); - } - return null; - } - @Override protected ComponentManager getComponentManager() { return this.componentManager; diff --git a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/statemachine/StateMachine.java b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/statemachine/StateMachine.java index 166e52771cf..dd38b350814 100644 --- a/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/statemachine/StateMachine.java +++ b/io.openems.edge.ess.generic/src/io/openems/edge/ess/generic/symmetric/statemachine/StateMachine.java @@ -55,24 +55,15 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - case START_BATTERY: - return new StartBatteryHandler(); - case START_BATTERY_INVERTER: - return new StartBatteryInverterHandler(); - case STARTED: - return new StartedHandler(); - case STOP_BATTERY_INVERTER: - return new StopBatteryInverterHandler(); - case STOP_BATTERY: - return new StopBatteryHandler(); - case STOPPED: - return new StoppedHandler(); - case ERROR: - return new ErrorHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + case START_BATTERY -> new StartBatteryHandler(); + case START_BATTERY_INVERTER -> new StartBatteryInverterHandler(); + case STARTED -> new StartedHandler(); + case STOP_BATTERY_INVERTER -> new StopBatteryInverterHandler(); + case STOP_BATTERY -> new StopBatteryHandler(); + case STOPPED -> new StoppedHandler(); + case ERROR -> new ErrorHandler(); + }; } } \ No newline at end of file diff --git a/io.openems.edge.evcs.api/src/io/openems/edge/evcs/api/ManagedEvcs.java b/io.openems.edge.evcs.api/src/io/openems/edge/evcs/api/ManagedEvcs.java index 160f71c0591..4ced0ba38ad 100644 --- a/io.openems.edge.evcs.api/src/io/openems/edge/evcs/api/ManagedEvcs.java +++ b/io.openems.edge.evcs.api/src/io/openems/edge/evcs/api/ManagedEvcs.java @@ -263,8 +263,8 @@ public enum ChannelId implements io.openems.edge.common.channel.ChannelId { evcs.setChargePowerLimit(filterOutput); - if (evcs instanceof ManagedEvcs) { - ((ManagedEvcs) evcs).logDebug("Filter: " + value + " -> " + filterOutput); + if (evcs instanceof ManagedEvcs me) { + me.logDebug("Filter: " + value + " -> " + filterOutput); } } })), // diff --git a/io.openems.edge.evcs.cluster/src/io/openems/edge/evcs/cluster/EvcsClusterPeakShavingImpl.java b/io.openems.edge.evcs.cluster/src/io/openems/edge/evcs/cluster/EvcsClusterPeakShavingImpl.java index ef62076353d..d5e768efef3 100644 --- a/io.openems.edge.evcs.cluster/src/io/openems/edge/evcs/cluster/EvcsClusterPeakShavingImpl.java +++ b/io.openems.edge.evcs.cluster/src/io/openems/edge/evcs/cluster/EvcsClusterPeakShavingImpl.java @@ -193,9 +193,9 @@ private synchronized void updateSortedEvcss() { * @param evcs Electric Vehicle Charging Station */ private void resetClusteredState(Evcs evcs) { - if (evcs instanceof ManagedEvcs) { - ((ManagedEvcs) evcs)._setIsClustered(false); - ((ManagedEvcs) evcs)._setSetChargePowerRequest(null); + if (evcs instanceof ManagedEvcs me) { + me._setIsClustered(false); + me._setSetChargePowerRequest(null); } evcs._setMaximumPower(null); } @@ -206,8 +206,8 @@ private void resetClusteredState(Evcs evcs) { * @param evcs Electric Vehicle Charging Station */ private void setClusteredState(Evcs evcs) { - if (evcs instanceof ManagedEvcs) { - ((ManagedEvcs) evcs)._setIsClustered(true); + if (evcs instanceof ManagedEvcs me) { + me._setIsClustered(true); } } @@ -259,8 +259,8 @@ private void calculateChannelValues() { minFixedHardwarePower.addValue(evcs.getFixedMinimumHardwarePowerChannel()); maxFixedHardwarePower.addValue(evcs.getFixedMaximumHardwarePowerChannel()); minPower.addValue(evcs.getMinimumPowerChannel()); - if (evcs instanceof ManagedEvcs) { - evcsClusterStatus.addValue(((ManagedEvcs) evcs).getChargeState().asEnum()); + if (evcs instanceof ManagedEvcs me) { + evcsClusterStatus.addValue(me.getChargeState().asEnum()); } } @@ -336,8 +336,7 @@ protected void limitEvcss() { */ List activeEvcss = new ArrayList<>(); for (var evcs : this.getSortedEvcss()) { - if (evcs instanceof ManagedEvcs) { - var managedEvcs = (ManagedEvcs) evcs; + if (evcs instanceof ManagedEvcs managedEvcs) { int requestedPower = managedEvcs.getSetChargePowerRequestChannel().getNextWriteValue().orElse(0); // Ignore evcs with no request @@ -572,11 +571,11 @@ private void logInfoInDebugmode(String string) { @Override public void run() throws OpenemsNamedException { // Read maximum ESS Discharge power at the current position in the Cycle - if (this.ess instanceof ManagedSymmetricEss e) { - this.maxEssDischargePower = e.getPower().getMaxPower(e, Phase.ALL, Pwr.ACTIVE); - - } else { - this.maxEssDischargePower = this.ess.getMaxApparentPower().orElse(0); - } + this.maxEssDischargePower = switch (this.ess) { + case ManagedSymmetricEss e // + -> e.getPower().getMaxPower(e, Phase.ALL, Pwr.ACTIVE); + case SymmetricEss e // + -> e.getMaxApparentPower().orElse(0); + }; } } diff --git a/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/AvailableState.java b/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/AvailableState.java deleted file mode 100644 index 9a2f1d227b0..00000000000 --- a/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/AvailableState.java +++ /dev/null @@ -1,45 +0,0 @@ -package io.openems.edge.evcs.mennekes; - -import io.openems.common.types.OptionsEnum; - -/** - * Shows the status of the Mennekes charger. - */ -public enum AvailableState implements OptionsEnum { - UNDEFINED(-1, "Undefined"), // - AVAILABLE(0, "Available"), // - PREPARING_TAG_ID_READY(1, "Ready to prepare the tag ID"), // - PREPARING_EV_READY(2, "Charging"), // - CHARGING(3, "Charging"), // - SUSPENDED_EV(4, "Suspended electric vehicle"), // - SUSPENDED_EV_SE(5, "Suspended electric vehicle se"), // - FINISHING(6, "Finishing"), // - RESERVED(7, "Reseved"), // - UNAVAILABLE(8, "Unavailable"), // - UNAVAILABLE_FW_UPDATE(9, "Unavailable firmware update"), // - FAULTED(10, "Faulted"), // - UNAVAILABLE_CONNECTION_OBJECT(11, "Unavailable connection"); - - private final int value; - private final String name; - - private AvailableState(int value, String name) { - this.value = value; - this.name = name; - } - - @Override - public int getValue() { - return this.value; - } - - @Override - public String getName() { - return this.name; - } - - @Override - public OptionsEnum getUndefined() { - return UNDEFINED; - } -} diff --git a/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/EvcsMennekes.java b/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/EvcsMennekes.java index cc43b4f95cd..67b40e48ad9 100644 --- a/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/EvcsMennekes.java +++ b/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/EvcsMennekes.java @@ -6,14 +6,9 @@ import io.openems.common.channel.Unit; import io.openems.common.exceptions.OpenemsError.OpenemsNamedException; import io.openems.common.types.OpenemsType; -import io.openems.edge.common.channel.BooleanReadChannel; -import io.openems.edge.common.channel.Channel; import io.openems.edge.common.channel.Doc; -import io.openems.edge.common.channel.IntegerReadChannel; import io.openems.edge.common.channel.IntegerWriteChannel; import io.openems.edge.common.channel.StateChannel; -import io.openems.edge.common.channel.StringReadChannel; -import io.openems.edge.common.channel.value.Value; import io.openems.edge.common.component.OpenemsComponent; /** @@ -27,14 +22,14 @@ public interface EvcsMennekes extends OpenemsComponent { public enum ChannelId implements io.openems.edge.common.channel.ChannelId { /** - * Apply charge power limit. + * Apply charge current limit. * *

* WriteChannel for the modbus register to apply the charge power given by the * applyChargePowerLimit method */ APPLY_CURRENT_LIMIT(Doc.of(OpenemsType.INTEGER) // - .unit(Unit.WATT) // + .unit(Unit.AMPERE) // .accessMode(AccessMode.READ_WRITE)), // FIRMWARE_VERSION(Doc.of(OpenemsType.STRING)// @@ -306,18 +301,6 @@ public enum ChannelId implements io.openems.edge.common.channel.ChannelId { VEHICLE_STATE(Doc.of(VehicleState.values())// .initialValue(VehicleState.UNDEFINED)), // - /** - * CP AVAILABILITY. - * - *

    - *
  • Interface: MennekesAmtron - *
  • Type: Boolean - *
  • Unit: None - *
- */ - CP_AVAILABILITY(Doc.of(OpenemsType.BOOLEAN)// - .unit(Unit.NONE)), // - /** * SAFE_CURRENT. * @@ -414,36 +397,6 @@ public default void setApplyCurrentLimit(Integer value) throws OpenemsNamedExcep this.getApplyCurrentLimitChannel().setNextWriteValue(value); } - /** - * Gets the Channel for {@link ChannelId#FIRMWARE_VERSION}. - * - * @return returns the channel - * - */ - public default StringReadChannel getFirmwareVersionChannel() { - return this.channel(ChannelId.FIRMWARE_VERSION); - } - - /** - * Internal method to get the 'nextValue' of {@link ChannelId#FIRMWARE_VERSION} - * Channel. - * - * @return value of firmware version value - */ - public default Value getFirmwareVersionValue() { - return this.getFirmwareVersionChannel().getNextValue(); - } - - /** - * Internal method to set the 'nextValue' on {@link ChannelId#FIRMWARE_VERSION} - * Channel. - * - * @param value the next value - */ - public default void _setFirmwareVersion(String value) { - this.getFirmwareVersionChannel().setNextValue(value); - } - /** * Gets the Channel for {@link ChannelId#RAW_FIRMWARE_VERSION}. * @@ -452,95 +405,4 @@ public default void _setFirmwareVersion(String value) { public default StateChannel getFirmwareOutdatedChannel() { return this.channel(ChannelId.FIRMWARE_OUTDATED); } - - /** - * Gets the Channel for {@link ChannelId#OCPP_CP_STATUS}. - * - * @return the Channel - */ - public default Channel getOcppCpStatusChannel() { - return this.channel(ChannelId.OCPP_CP_STATUS); - } - - /** - * Gets the OCPP Status of the EVCS charging station. See - * {@link ChannelId#OCPP_CP_STATUS}. - * - * @return the Channel {@link Value} - */ - public default MennekesOcppState getOcppCpStatus() { - return this.getOcppCpStatusChannel().value().asEnum(); - } - - /** - * Gets the Channel for {@link ChannelId#CP_AVAILABILITY}. - * - * @return the Channel - */ - - public default BooleanReadChannel getCpAvailabilityChannel() { - return this.channel(ChannelId.CP_AVAILABILITY); - } - - /** - * Gets the Channel for {@link ChannelId#MAX_CURRENT_EV}. - * - * @return the Channel - */ - - public default IntegerReadChannel getMaxCurrentEvChannel() { - return this.channel(ChannelId.MAX_CURRENT_EV); - } - - /** - * Gets the Channel for {@link ChannelId#VEHICLE_STATE}. - * - * @return the Channel - */ - - public default Channel getVehicleStateChannel() { - return this.channel(ChannelId.VEHICLE_STATE); - } - - /** - * Gets the Channel for {@link ChannelId#MIN_CURRENT_LIMIT}. - * - * @return the Channel - */ - - public default IntegerReadChannel getMinCurrentLimitChannel() { - return this.channel(ChannelId.MIN_CURRENT_LIMIT); - } - - /** - * Gets the Minimum current limit in [A] of the AC charger. See - * {@link ChannelId#MIN_CURRENT_LIMIT}. - * - * @return the Channel {@link Value} - */ - - public default Value getMinCurrentLimit() { - return this.getMinCurrentLimitChannel().value(); - } - - /** - * Internal method to set the 'nextValue' on {@link ChannelId#EMS_CURRENT_LIMIT} - * Channel. Sets the value in Ampere as an Integer-Value. - * - * @return returns the EMS current limit - */ - - public default Value getEmsCurrentLimit() { - return this.getEmsCurrentLimitChannel().value(); - } - - /** - * Gets the Channel for {@link ChannelId#EMS_CURRENT_LIMIT}. - * - * @return the Channel - */ - public default IntegerReadChannel getEmsCurrentLimitChannel() { - return this.channel(ChannelId.EMS_CURRENT_LIMIT); - } - } diff --git a/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/MennekesErrorStates.java b/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/MennekesErrorStates.java deleted file mode 100644 index 1aa8dbf96c1..00000000000 --- a/io.openems.edge.evcs.mennekes/src/io/openems/edge/evcs/mennekes/MennekesErrorStates.java +++ /dev/null @@ -1,84 +0,0 @@ -package io.openems.edge.evcs.mennekes; - -import io.openems.common.types.OptionsEnum; -import io.openems.edge.evcs.mennekes.EvcsMennekes.ChannelId; - -public enum MennekesErrorStates implements OptionsEnum { - UNDEFINED(0x0, // - "Undefined", null), // - ERR_RCMB_TRIGGERED(0x1, // - "Residual current detected via sensor", ChannelId.ERR_RCMB_TRIGGERED), // - ERR_VEHICLE_STATE_E(0x2, // - "Vehicle signals error", ChannelId.ERR_VEHICLE_STATE_E), // - ERR_MODE3_DIDE_CHECK(0x4, // - "ReseVehicle diode check failed - tamper detection", ChannelId.ERR_MODE3_DIODE_CHECK), // - ERR_MCB_TYPE2_TRIGGERED(0x8, // - "MCB of type 2 socket triggered", ChannelId.ERR_MCB_TYPE2_TRIGGERED), // - ERR_MCB_SCHUKO_TRIGGERED(0x10, // - "MCB of domestic socket triggered", ChannelId.ERR_MCB_SCHUKO_TRIGGERED), // - ERR_RCD_TRIGGERED(0x20, // - "RCD triggered", ChannelId.ERR_RCD_TRIGGERED), // - ERR_CONTACTOR_WELD(0x40, // - "Contactor welded", ChannelId.ERR_CONTACTOR_WELD), // - ERR_BACKEND_DISCONNECTED(0x80, // - "Backend disconnected", ChannelId.ERR_BACKEND_DISCONNECTED), // - ERR_ACTUATOR_LOCKING_FAILED(0x100, // - "Plug locking failed", ChannelId.ERR_ACTUATOR_LOCKING_FAILED), // - ERR_ACTUATOR_LOCKING_WITHOUT_PLUG_FAILED(0x200, // - "Locking without plug error", ChannelId.ERR_ACTUATOR_LOCKING_WITHOUT_PLUG_FAILED), // - ERR_ACTUATOR_STUCK(0x400, // - "Actuator stuck cannot unlock", ChannelId.ERR_ACTUATOR_STUCK), // - ERR_ACTUATOR_DETECTION_FAILED(0x800, // - "Actuator detection failed", ChannelId.ERR_ACTUATOR_DETECTION_FAILED), // - ERR_FW_UPDATE_RUNNING(0x1000, // - "FW Update in progress", ChannelId.ERR_FW_UPDATE_RUNNING), // - ERR_TILT(0x2000, // - "The charge point is tilted", ChannelId.ERR_TILT), // - ERR_WRONG_CP_PR_WIRING(0x4000, // - "CP/PR wiring issue", ChannelId.ERR_WRONG_CP_PR_WIRING), // - ERR_TYPE2_OVERLOAD_THR_2(0x8000, // - "Car current overload, charging stopped", ChannelId.ERR_TYPE2_OVERLOAD_THR_2), // - ERR_ACTUATOR_UNLOCKED_WHILE_CHARGING(0x10000, // - "Actuator unlocked while charging", ChannelId.ERR_ACTUATOR_UNLOCKED_WHILE_CHARGING), // - ERR_TILT_PREVENT_CHARGING_UNTIL_REBOOT(0x20000, // - "The charge point was tilted and it is not allowed to charge until the charge point is rebooted", - ChannelId.ERR_TILT_PREVENT_CHARGING_UNTIL_REBOOT), // - ERR_PIC24(0x40000, // - "PIC24 error", ChannelId.ERR_PIC24), // - ERR_USB_STICK_HANDLING(0x80000, // - "USB stick handling in progress", ChannelId.ERR_USB_STICK_HANDLING), // - ERR_INCORRECT_PHASE_INSTALLATION(0x100000, // - "Incorrect phase rotation direction detected", ChannelId.ERR_INCORRECT_PHASE_INSTALLATION), // - ERR_NO_POWER(0x200000, // - "No power on mains detected", ChannelId.ERR_NO_POWER) // - ; - - private final int value; - private final String name; - private final ChannelId channel; - - private MennekesErrorStates(int value, String name, ChannelId channel) { - this.value = value; - this.name = name; - this.channel = channel; - } - - public ChannelId getChannel() { - return this.channel; - } - - @Override - public int getValue() { - return this.value; - } - - @Override - public String getName() { - return this.name; - } - - @Override - public OptionsEnum getUndefined() { - return UNDEFINED; - } -} diff --git a/io.openems.edge.evcs.ocpp.server/src/io/openems/edge/evcs/ocpp/server/EvcsOcppServer.java b/io.openems.edge.evcs.ocpp.server/src/io/openems/edge/evcs/ocpp/server/EvcsOcppServer.java index cabfb8d0540..043edb7f164 100644 --- a/io.openems.edge.evcs.ocpp.server/src/io/openems/edge/evcs/ocpp/server/EvcsOcppServer.java +++ b/io.openems.edge.evcs.ocpp.server/src/io/openems/edge/evcs/ocpp/server/EvcsOcppServer.java @@ -76,10 +76,9 @@ public class EvcsOcppServer extends AbstractOpenemsComponent implements OpenemsC */ @Reference(policy = ReferencePolicy.DYNAMIC, policyOption = ReferencePolicyOption.GREEDY, cardinality = ReferenceCardinality.MULTIPLE) protected void addEvcs(Evcs evcs) { - if (!(evcs instanceof AbstractManagedOcppEvcsComponent) || evcs == null) { + if (!(evcs instanceof AbstractManagedOcppEvcsComponent ocppEvcs) || evcs == null) { return; } - var ocppEvcs = (AbstractManagedOcppEvcsComponent) evcs; var presentEvcss = this.ocppEvcss.get(ocppEvcs.getConfiguredOcppId()); if (presentEvcss == null) { @@ -106,10 +105,9 @@ protected void addEvcs(Evcs evcs) { * @param evcs Evcs that should be removed */ protected void removeEvcs(Evcs evcs) { - if (!(evcs instanceof AbstractManagedOcppEvcsComponent) || evcs == null) { + if (!(evcs instanceof AbstractManagedOcppEvcsComponent ocppEvcs) || evcs == null) { return; } - var ocppEvcs = (AbstractManagedOcppEvcsComponent) evcs; var evcss = this.activeEvcsSessions.get(ocppEvcs.getSessionId()); if (evcss != null) { if (evcss.size() < 2) { diff --git a/io.openems.edge.fenecon.mini/src/io/openems/edge/fenecon/mini/ess/statemachine/StateMachine.java b/io.openems.edge.fenecon.mini/src/io/openems/edge/fenecon/mini/ess/statemachine/StateMachine.java index 4eb5fea90f6..9ddb8911efc 100644 --- a/io.openems.edge.fenecon.mini/src/io/openems/edge/fenecon/mini/ess/statemachine/StateMachine.java +++ b/io.openems.edge.fenecon.mini/src/io/openems/edge/fenecon/mini/ess/statemachine/StateMachine.java @@ -59,36 +59,22 @@ public StateMachine(State initialState) { @Override public StateHandler getStateHandler(State state) { - switch (state) { - case UNDEFINED: - return new UndefinedHandler(); - - case GO_READONLY_MODE: - return new GoReadonlyModeHandler(); - case ACTIVATE_ECONOMIC_MODE_1: - return new ActivateEconomicMode1Handler(); - case ACTIVATE_ECONOMIC_MODE_2: - return new ActivateEconomicMode2Handler(); - case ACTIVATE_ECONOMIC_MODE_3: - return new ActivateEconomicMode3Handler(); - case ACTIVATE_ECONOMIC_MODE_4: - return new ActivateEconomicMode4Handler(); - case READONLY_MODE: - return new ReadonlyModeHandler(); - - case GO_WRITE_MODE: - return new GoWriteModeHandler(); - case ACTIVATE_DEBUG_MODE_1: - return new ActivateDebugMode1Handler(); - case ACTIVATE_DEBUG_MODE_2: - return new ActivateDebugMode2Handler(); - case ACTIVATE_DEBUG_MODE_3: - return new ActivateDebugMode3Handler(); - case ACTIVATE_DEBUG_MODE_4: - return new ActivateDebugMode4Handler(); - case WRITE_MODE: - return new WriteModeHandler(); - } - throw new IllegalArgumentException("Unknown State [" + state + "]"); + return switch (state) { + case UNDEFINED -> new UndefinedHandler(); + + case GO_READONLY_MODE -> new GoReadonlyModeHandler(); + case ACTIVATE_ECONOMIC_MODE_1 -> new ActivateEconomicMode1Handler(); + case ACTIVATE_ECONOMIC_MODE_2 -> new ActivateEconomicMode2Handler(); + case ACTIVATE_ECONOMIC_MODE_3 -> new ActivateEconomicMode3Handler(); + case ACTIVATE_ECONOMIC_MODE_4 -> new ActivateEconomicMode4Handler(); + case READONLY_MODE -> new ReadonlyModeHandler(); + + case GO_WRITE_MODE -> new GoWriteModeHandler(); + case ACTIVATE_DEBUG_MODE_1 -> new ActivateDebugMode1Handler(); + case ACTIVATE_DEBUG_MODE_2 -> new ActivateDebugMode2Handler(); + case ACTIVATE_DEBUG_MODE_3 -> new ActivateDebugMode3Handler(); + case ACTIVATE_DEBUG_MODE_4 -> new ActivateDebugMode4Handler(); + case WRITE_MODE -> new WriteModeHandler(); + }; } } diff --git a/io.openems.edge.goodwe/src/io/openems/edge/goodwe/common/ApplyPowerHandler.java b/io.openems.edge.goodwe/src/io/openems/edge/goodwe/common/ApplyPowerHandler.java index fc446b1febd..8fe1f0330e9 100644 --- a/io.openems.edge.goodwe/src/io/openems/edge/goodwe/common/ApplyPowerHandler.java +++ b/io.openems.edge.goodwe/src/io/openems/edge/goodwe/common/ApplyPowerHandler.java @@ -55,32 +55,21 @@ public synchronized void apply(AbstractGoodWe goodWe, int setActivePower, Contro emsPowerModeChannel.setNextWriteValue(apply.emsPowerMode); } - private static class Result { - - protected EmsPowerMode emsPowerMode; - protected int emsPowerSet; - - public Result(EmsPowerMode emsPowerMode, int emsPowerSet) { - this.emsPowerMode = emsPowerMode; - this.emsPowerSet = emsPowerSet; - } - + private static record Result(EmsPowerMode emsPowerMode, int emsPowerSet) { } private static ApplyPowerHandler.Result calculate(AbstractGoodWe goodWe, int activePowerSetPoint, int pvProduction, ControlMode controlMode, int gridActivePower, int essActivePower, int maxAcImport, int maxAcExport) throws OpenemsNamedException { - switch (controlMode) { - case INTERNAL: - return handleInternalMode(); - case SMART: - return handleSmartMode(goodWe, activePowerSetPoint, pvProduction, gridActivePower, essActivePower, - maxAcImport, maxAcExport); - case REMOTE: - return handleRemoteMode(activePowerSetPoint, pvProduction); - default: - return handleInternalMode(); - } + return switch (controlMode) { + case INTERNAL // + -> handleInternalMode(); + case SMART // + -> handleSmartMode(goodWe, activePowerSetPoint, pvProduction, gridActivePower, essActivePower, maxAcImport, + maxAcExport); + case REMOTE // + -> handleRemoteMode(activePowerSetPoint, pvProduction); + }; } private static Result handleInternalMode() { @@ -158,35 +147,26 @@ private void checkControlModeRequiresSmartMeter(AbstractGoodWe goodWe, ControlMo EnumReadChannel meterCommunicateStatusChannel = goodWe.channel(GoodWe.ChannelId.METER_COMMUNICATE_STATUS); MeterCommunicateStatus meterCommunicateStatus = meterCommunicateStatusChannel.value().asEnum(); - var enableWarning = false; - switch (meterCommunicateStatus) { - case UNDEFINED: + var enableWarning = switch (meterCommunicateStatus) { + case UNDEFINED -> // // We don't know if GoodWe Smart Meter is connected. Either not read yet (on // startup) or DSP version too low. - enableWarning = false; - break; + false; - case OK: + case OK -> // GoodWe Smart Meter is connected. - enableWarning = false; - break; + false; - case NG: - // GoodWe Smart Meter is NOT connected. - switch (controlMode) { - case REMOTE: + case NG // + -> switch (controlMode) { + case REMOTE -> // REMOTE mode is ok without GoodWe Smart Meter - enableWarning = false; - break; - - case INTERNAL: - case SMART: + false; + case INTERNAL, SMART -> // INTERNAL and SMART mode require a GoodWe Smart Meter - enableWarning = true; - break; - } - break; - } + true; + }; + }; goodWe.channel(GoodWe.ChannelId.NO_SMART_METER_DETECTED).setNextValue(enableWarning); } diff --git a/io.openems.edge.goodwe/src/io/openems/edge/goodwe/gridmeter/GoodWeGridMeterImpl.java b/io.openems.edge.goodwe/src/io/openems/edge/goodwe/gridmeter/GoodWeGridMeterImpl.java index d6574501518..7058fda6422 100644 --- a/io.openems.edge.goodwe/src/io/openems/edge/goodwe/gridmeter/GoodWeGridMeterImpl.java +++ b/io.openems.edge.goodwe/src/io/openems/edge/goodwe/gridmeter/GoodWeGridMeterImpl.java @@ -339,17 +339,12 @@ protected void convertMeterConnectStatus(Integer value) { * @return connection information of the given phase */ protected static Integer getPhaseConnectionValue(Phase phase, int value) { - switch (phase) { - case L1: - return value & 0xF; - case L2: - return value >> 4 & 0xF; - case L3: - return value >> 8 & 0xF; - case ALL: - default: - return null; - } + return switch (phase) { + case L1 -> value & 0xF; + case L2 -> value >> 4 & 0xF; + case L3 -> value >> 8 & 0xF; + case ALL -> null; + }; } /** diff --git a/io.openems.edge.goodwe/src/io/openems/edge/goodwe/gridmeter/IgnoreZeroConverter.java b/io.openems.edge.goodwe/src/io/openems/edge/goodwe/gridmeter/IgnoreZeroConverter.java index 6539a6ea96f..c44b7f538b0 100644 --- a/io.openems.edge.goodwe/src/io/openems/edge/goodwe/gridmeter/IgnoreZeroConverter.java +++ b/io.openems.edge.goodwe/src/io/openems/edge/goodwe/gridmeter/IgnoreZeroConverter.java @@ -34,10 +34,10 @@ private IgnoreZeroConverter(GoodWeGridMeter parent) { if (value == null) { return null; } - if (value instanceof Integer && (Integer) value != 0) { + if (value instanceof Integer i && i != 0) { return value; } - if (value instanceof Long && (Long) value != 0L) { + if (value instanceof Long l && l != 0L) { return value; } var hasNoMeter = parent.getHasNoMeter(); diff --git a/io.openems.edge.io.offgridswitch/src/io/openems/edge/iooffgridswitch/IoOffGridSwitchImpl.java b/io.openems.edge.io.offgridswitch/src/io/openems/edge/iooffgridswitch/IoOffGridSwitchImpl.java index 5ada4158ed6..f46880e569b 100644 --- a/io.openems.edge.io.offgridswitch/src/io/openems/edge/iooffgridswitch/IoOffGridSwitchImpl.java +++ b/io.openems.edge.io.offgridswitch/src/io/openems/edge/iooffgridswitch/IoOffGridSwitchImpl.java @@ -144,29 +144,18 @@ private void setOutput(ChannelAddress channelAddress, Contactor operation, Relay BooleanWriteChannel channel = this.componentManager.getChannel(channelAddress); // Get Target Value - Boolean targetValue = null; - switch (operation) { - case OPEN: - switch (relay) { - case NORMALLY_CLOSED: - targetValue = true; - break; - case NORMALLY_OPEN: - targetValue = false; - break; - } - break; - case CLOSE: - switch (relay) { - case NORMALLY_CLOSED: - targetValue = false; - break; - case NORMALLY_OPEN: - targetValue = true; - break; - } - break; - } + var targetValue = switch (operation) { + case OPEN // + -> switch (relay) { + case NORMALLY_CLOSED -> true; + case NORMALLY_OPEN -> false; + }; + case CLOSE // + -> switch (relay) { + case NORMALLY_CLOSED -> false; + case NORMALLY_OPEN -> true; + }; + }; if (Objects.equal(channel.value().get(), targetValue)) { // it is already in the desired state diff --git a/io.openems.edge.io.wago/src/io/openems/edge/wago/IoWagoImpl.java b/io.openems.edge.io.wago/src/io/openems/edge/wago/IoWagoImpl.java index fae2ebd405d..5bb4e89a85b 100644 --- a/io.openems.edge.io.wago/src/io/openems/edge/wago/IoWagoImpl.java +++ b/io.openems.edge.io.wago/src/io/openems/edge/wago/IoWagoImpl.java @@ -304,8 +304,8 @@ public String debugLog() { @Override public BooleanReadChannel[] digitalInputChannels() { - List channels = new ArrayList<>(); - for (FieldbusModule module : this.modules) { + var channels = new ArrayList(); + for (var module : this.modules) { Collections.addAll(channels, module.getChannels()); } var result = new BooleanReadChannel[channels.size()]; @@ -317,11 +317,11 @@ public BooleanReadChannel[] digitalInputChannels() { @Override public BooleanWriteChannel[] digitalOutputChannels() { - List channels = new ArrayList<>(); - for (FieldbusModule module : this.modules) { - for (BooleanReadChannel channel : module.getChannels()) { - if (channel instanceof BooleanWriteChannel) { - channels.add((BooleanWriteChannel) channel); + var channels = new ArrayList(); + for (var module : this.modules) { + for (var channel : module.getChannels()) { + if (channel instanceof BooleanWriteChannel bwc) { + channels.add(bwc); } } } diff --git a/io.openems.edge.kaco.blueplanet.hybrid10/src/io/openems/edge/kaco/blueplanet/hybrid10/core/KacoBlueplanetHybrid10CoreImpl.java b/io.openems.edge.kaco.blueplanet.hybrid10/src/io/openems/edge/kaco/blueplanet/hybrid10/core/KacoBlueplanetHybrid10CoreImpl.java index 6317332ec38..eda9ad22a28 100644 --- a/io.openems.edge.kaco.blueplanet.hybrid10/src/io/openems/edge/kaco/blueplanet/hybrid10/core/KacoBlueplanetHybrid10CoreImpl.java +++ b/io.openems.edge.kaco.blueplanet.hybrid10/src/io/openems/edge/kaco/blueplanet/hybrid10/core/KacoBlueplanetHybrid10CoreImpl.java @@ -312,15 +312,10 @@ private void initClient(Config config, InetAddress inverterAddress) throws Excep Float comVersion = TypeUtils.getAsType(OpenemsType.FLOAT, this._bpData.systemInfo.getComVersion()); this.stableVersion = StableVersion.getCurrentStableVersion(comVersion); - switch (this.stableVersion) { - case VERSION_7_OR_OLDER: - availInitResponse = this.initVersion7(); - break; - case UNDEFINED: - case VERSION_8: - availInitResponse = this.initVersion8(); - break; - } + availInitResponse = switch (this.stableVersion) { + case VERSION_7_OR_OLDER -> this.initVersion7(); + case UNDEFINED, VERSION_8 -> this.initVersion8(); + }; if (!availInitResponse) { Thread.sleep(1000); // try again after 1 second diff --git a/io.openems.edge.katek.edcom/src/com/ed/data/DemoData.java b/io.openems.edge.katek.edcom/src/com/ed/data/DemoData.java index 8b564c3601b..bc8e85247d8 100644 --- a/io.openems.edge.katek.edcom/src/com/ed/data/DemoData.java +++ b/io.openems.edge.katek.edcom/src/com/ed/data/DemoData.java @@ -86,21 +86,12 @@ public DemoData() throws Exception { * @return AC RMS Voltage [V] (~ 20ms, grid synchronized measurement) */ public float getAcVoltage(int phaseIx) throws RuntimeException { - float f; - switch (phaseIx) { - default: - throw new RuntimeException("bad index"); - case 0: - f = uL1.getFloat(0); - break; - case 1: - f = uL2.getFloat(0); - break; - case 2: - f = uL3.getFloat(0); - break; - } - return f; + return switch (phaseIx) { + default -> throw new RuntimeException("bad index"); + case 0 -> uL1.getFloat(0); + case 1 -> uL2.getFloat(0); + case 2 -> uL3.getFloat(0); + }; } /** @@ -110,18 +101,11 @@ public float getAcVoltage(int phaseIx) throws RuntimeException { * @return PV Voltage [V] */ public float getPvVoltage(int pvIx) throws RuntimeException { - float f; - switch (pvIx) { - default: - throw new RuntimeException("wrong index"); - case 0: - f = uSg1.getFloat(0); - break; - case 1: - f = uSg2.getFloat(0); - break; - } - return f; + return switch (pvIx) { + default -> throw new RuntimeException("wrong index"); + case 0 -> uSg1.getFloat(0); + case 1 -> uSg2.getFloat(0); + }; } /** diff --git a/io.openems.edge.katek.edcom/src/com/ed/data/EnergyMeter.java b/io.openems.edge.katek.edcom/src/com/ed/data/EnergyMeter.java index 331614a4850..a6f00d3c625 100644 --- a/io.openems.edge.katek.edcom/src/com/ed/data/EnergyMeter.java +++ b/io.openems.edge.katek.edcom/src/com/ed/data/EnergyMeter.java @@ -61,24 +61,15 @@ public EnergyMeter() throws Exception { * @throws Exception wrong parameters or no inverter data available */ public float getEInverterFeedIn(int timePeriod) throws Exception { - float r = 0.0f; if (e_inverter_feed_in.refreshTime() == 0) { throw new RuntimeException("no data"); } - switch (timePeriod) { - default: - throw new RuntimeException("wrong parameters"); - case EnergyMeter.DAY: - r = qXToFloat(e_inverter_feed_in.getLong(timePeriod), 16, 240000.0f); - break; - case EnergyMeter.MONTH: - r = qXToFloat(e_inverter_feed_in.getLong(timePeriod), 16, 7200000.0f); - break; - case EnergyMeter.YEAR: - r = qXToFloat(e_inverter_feed_in.getLong(timePeriod), 32, 87600000.0f); - break; - } - return r; + return switch (timePeriod) { + default -> throw new RuntimeException("wrong parameters"); + case EnergyMeter.DAY -> qXToFloat(e_inverter_feed_in.getLong(timePeriod), 16, 240000.0f); + case EnergyMeter.MONTH -> qXToFloat(e_inverter_feed_in.getLong(timePeriod), 16, 7200000.0f); + case EnergyMeter.YEAR -> qXToFloat(e_inverter_feed_in.getLong(timePeriod), 32, 87600000.0f); + }; } /** @@ -90,24 +81,15 @@ public float getEInverterFeedIn(int timePeriod) throws Exception { * @throws Exception wrong parameters or no inverter data available */ public float getEInverterCons(int timePeriod) throws Exception { - float r = 0.0f; if (e_inverter_cons.refreshTime() == 0) { throw new RuntimeException("no data"); } - switch (timePeriod) { - default: - throw new RuntimeException("wrong parameters"); - case EnergyMeter.DAY: - r = qXToFloat(e_inverter_cons.getLong(timePeriod), 16, 240000.0f); - break; - case EnergyMeter.MONTH: - r = qXToFloat(e_inverter_cons.getLong(timePeriod), 16, 7200000.0f); - break; - case EnergyMeter.YEAR: - r = qXToFloat(e_inverter_cons.getLong(timePeriod), 32, 87600000.0f); - break; - } - return r; + return switch (timePeriod) { + default -> throw new RuntimeException("wrong parameters"); + case EnergyMeter.DAY -> qXToFloat(e_inverter_cons.getLong(timePeriod), 16, 240000.0f); + case EnergyMeter.MONTH -> qXToFloat(e_inverter_cons.getLong(timePeriod), 16, 7200000.0f); + case EnergyMeter.YEAR -> qXToFloat(e_inverter_cons.getLong(timePeriod), 32, 87600000.0f); + }; } /** @@ -119,24 +101,15 @@ public float getEInverterCons(int timePeriod) throws Exception { * @throws Exception wrong parameters or no inverter data available */ public float getEGridFeedIn(int timePeriod) throws Exception { - float r = 0.0f; if (e_grid_feed_in.refreshTime() == 0) { throw new RuntimeException("no data"); } - switch (timePeriod) { - default: - throw new RuntimeException("wrong parameters"); - case EnergyMeter.DAY: - r = qXToFloat(e_grid_feed_in.getLong(timePeriod), 16, 2400000.0f); - break; - case EnergyMeter.MONTH: - r = qXToFloat(e_grid_feed_in.getLong(timePeriod), 16, 72000000.0f); - break; - case EnergyMeter.YEAR: - r = qXToFloat(e_grid_feed_in.getLong(timePeriod), 32, 876000000.0f); - break; - } - return r; + return switch (timePeriod) { + default -> throw new RuntimeException("wrong parameters"); + case EnergyMeter.DAY -> qXToFloat(e_grid_feed_in.getLong(timePeriod), 16, 2400000.0f); + case EnergyMeter.MONTH -> qXToFloat(e_grid_feed_in.getLong(timePeriod), 16, 72000000.0f); + case EnergyMeter.YEAR -> qXToFloat(e_grid_feed_in.getLong(timePeriod), 32, 876000000.0f); + }; } /** @@ -148,24 +121,15 @@ public float getEGridFeedIn(int timePeriod) throws Exception { * @throws Exception wrong parameters or no inverter data available */ public float getEConsFromGrid(int timePeriod) throws Exception { - float r = 0.0f; if (e_consumption_from_grid.refreshTime() == 0) { throw new RuntimeException("no data"); } - switch (timePeriod) { - default: - throw new RuntimeException("wrong parameters"); - case EnergyMeter.DAY: - r = qXToFloat(e_consumption_from_grid.getLong(timePeriod), 16, 2400000.0f); - break; - case EnergyMeter.MONTH: - r = qXToFloat(e_consumption_from_grid.getLong(timePeriod), 16, 72000000.0f); - break; - case EnergyMeter.YEAR: - r = qXToFloat(e_consumption_from_grid.getLong(timePeriod), 32, 876000000.0f); - break; - } - return r; + return switch (timePeriod) { + default -> throw new RuntimeException("wrong parameters"); + case EnergyMeter.DAY -> qXToFloat(e_consumption_from_grid.getLong(timePeriod), 16, 2400000.0f); + case EnergyMeter.MONTH -> qXToFloat(e_consumption_from_grid.getLong(timePeriod), 16, 72000000.0f); + case EnergyMeter.YEAR -> qXToFloat(e_consumption_from_grid.getLong(timePeriod), 32, 876000000.0f); + }; } /** @@ -177,24 +141,15 @@ public float getEConsFromGrid(int timePeriod) throws Exception { * @throws Exception wrong parameters or no inverter data available */ public float getESelfConsumption(int timePeriod) throws Exception { - float r = 0.0f; if (e_self_consumption.refreshTime() == 0) { throw new RuntimeException("no data"); } - switch (timePeriod) { - default: - throw new RuntimeException("wrong parameters"); - case EnergyMeter.DAY: - r = qXToFloat(e_self_consumption.getLong(timePeriod), 16, 240000.0f); - break; - case EnergyMeter.MONTH: - r = qXToFloat(e_self_consumption.getLong(timePeriod), 16, 7200000.0f); - break; - case EnergyMeter.YEAR: - r = qXToFloat(e_self_consumption.getLong(timePeriod), 32, 87600000.0f); - break; - } - return r; + return switch (timePeriod) { + default -> throw new RuntimeException("wrong parameters"); + case EnergyMeter.DAY -> qXToFloat(e_self_consumption.getLong(timePeriod), 16, 240000.0f); + case EnergyMeter.MONTH -> qXToFloat(e_self_consumption.getLong(timePeriod), 16, 7200000.0f); + case EnergyMeter.YEAR -> qXToFloat(e_self_consumption.getLong(timePeriod), 32, 87600000.0f); + }; } /** @@ -206,29 +161,19 @@ public float getESelfConsumption(int timePeriod) throws Exception { * @throws Exception wrong parameters or no inverter data available */ public float getAhBattery(int timePeriod) throws Exception { - float r = 0.0f; if (ah_battery.refreshTime() == 0) { throw new RuntimeException("no data"); } - switch (timePeriod) { - default: - throw new RuntimeException("wrong parameters"); - case EnergyMeter.DAY: - r = qXToFloat(ah_battery.getLong(timePeriod), 16, 600.0f); - break; - case EnergyMeter.MONTH: - r = qXToFloat(ah_battery.getLong(timePeriod), 16, 18000.0f); - break; - case EnergyMeter.YEAR: - r = qXToFloat(ah_battery.getLong(timePeriod), 32, 219000.0f); - break; - } - return r; + return switch (timePeriod) { + default -> throw new RuntimeException("wrong parameters"); + case EnergyMeter.DAY -> qXToFloat(ah_battery.getLong(timePeriod), 16, 600.0f); + case EnergyMeter.MONTH -> qXToFloat(ah_battery.getLong(timePeriod), 16, 18000.0f); + case EnergyMeter.YEAR -> qXToFloat(ah_battery.getLong(timePeriod), 32, 219000.0f); + }; } protected static float qXToFloat(long qx, int fractBitsCnt, float fMax) { - float f = (float) (((double) fMax * qx) / (float) ((long) 1 << fractBitsCnt)); - return f; + return (float) (((double) fMax * qx) / (float) ((long) 1 << fractBitsCnt)); } @Override diff --git a/io.openems.edge.katek.edcom/src/com/ed/data/InverterData.java b/io.openems.edge.katek.edcom/src/com/ed/data/InverterData.java index 036a8813064..aaf62f50461 100644 --- a/io.openems.edge.katek.edcom/src/com/ed/data/InverterData.java +++ b/io.openems.edge.katek.edcom/src/com/ed/data/InverterData.java @@ -103,21 +103,12 @@ public InverterData() throws Exception { * @return AC RMS Voltage [V] (~ 20ms, grid synchronized measurement) */ public float getAcVoltage(int phaseIx) throws RuntimeException { - float f; - switch (phaseIx) { - default: - throw new RuntimeException("bad index"); - case 0: - f = uL1.getFloat(0); - break; - case 1: - f = uL2.getFloat(0); - break; - case 2: - f = uL3.getFloat(0); - break; - } - return f; + return switch (phaseIx) { + default -> throw new RuntimeException("bad index"); + case 0 -> uL1.getFloat(0); + case 1 -> uL2.getFloat(0); + case 2 -> uL3.getFloat(0); + }; } /** @@ -128,21 +119,12 @@ public float getAcVoltage(int phaseIx) throws RuntimeException { * consumption */ public float getAcPower(int phaseIx) throws RuntimeException { - float f; - switch (phaseIx) { - default: - throw new RuntimeException("bad index"); - case 0: - f = pL1.getFloat(0); - break; - case 1: - f = pL2.getFloat(0); - break; - case 2: - f = pL3.getFloat(0); - break; - } - return f; + return switch (phaseIx) { + default -> throw new RuntimeException("bad index"); + case 0 -> pL1.getFloat(0); + case 1 -> pL2.getFloat(0); + case 2 -> pL3.getFloat(0); + }; } /** @@ -164,18 +146,11 @@ public float getReactivPower(int phaseIx) throws RuntimeException { * @return PV Voltage [V] */ public float getPvVoltage(int pvIx) throws RuntimeException { - float f; - switch (pvIx) { - default: - throw new RuntimeException("wrong index"); - case 0: - f = uSg1.getFloat(0); - break; - case 1: - f = uSg2.getFloat(0); - break; - } - return f; + return switch (pvIx) { + default -> throw new RuntimeException("wrong index"); + case 0 -> uSg1.getFloat(0); + case 1 -> uSg2.getFloat(0); + }; } /** diff --git a/io.openems.edge.katek.edcom/src/com/ed/data/history/ADataItem.java b/io.openems.edge.katek.edcom/src/com/ed/data/history/ADataItem.java index ddba22d73e6..fd4b3bbc94d 100644 --- a/io.openems.edge.katek.edcom/src/com/ed/data/history/ADataItem.java +++ b/io.openems.edge.katek.edcom/src/com/ed/data/history/ADataItem.java @@ -181,8 +181,8 @@ boolean isCS() throws Exception { @Override public boolean equals(Object o) { boolean b = false; - if (o instanceof ADataItem) { - b = Arrays.equals(((ADataItem) o).bytes, this.bytes); + if (o instanceof ADataItem adi) { + b = Arrays.equals(adi.bytes, this.bytes); } return b; } diff --git a/io.openems.edge.katek.edcom/src/com/ed/edcom/Client.java b/io.openems.edge.katek.edcom/src/com/ed/edcom/Client.java index 3e39681b187..c3c7c9c97e4 100644 --- a/io.openems.edge.katek.edcom/src/com/ed/edcom/Client.java +++ b/io.openems.edge.katek.edcom/src/com/ed/edcom/Client.java @@ -940,21 +940,21 @@ private int createMessage() { } } } - switch (tel_type) { + tel_len = switch (tel_type) { default: - case 0: // dsp data request + case 0: { // dsp data request out_buf[2] = (byte) 0x34; - tel_len = putIds(out_buf); - break; - case 1: // dsp parameters senden + yield putIds(out_buf); + } + case 1: { // dsp parameters senden out_buf[2] = (byte) 0x33; - tel_len = putParams(out_buf); - break; - case 2: // pic dara request + yield putParams(out_buf); + } + case 2: { // pic dara request out_buf[2] = (byte) 0x30; - tel_len = putPicMsg(out_buf); - break; + yield putPicMsg(out_buf); } + }; lastMsgType = tel_type; } if (tel_len < 10) { diff --git a/io.openems.edge.katek.edcom/src/com/ed/edcom/DspVar.java b/io.openems.edge.katek.edcom/src/com/ed/edcom/DspVar.java index f2b51e9f712..fb7646c889a 100644 --- a/io.openems.edge.katek.edcom/src/com/ed/edcom/DspVar.java +++ b/io.openems.edge.katek.edcom/src/com/ed/edcom/DspVar.java @@ -317,49 +317,48 @@ public synchronized void setValue(Object in, int n) { return; } setModifiedNow(); - if (in instanceof Float) { - bufWrite.putFloat(n * 4, ((Float) in).floatValue()); + if (in instanceof Float f) { + bufWrite.putFloat(n * 4, f.floatValue()); } - if (in instanceof Long) { + if (in instanceof Long l) { switch (type) { case TYPE_UINT32: case TYPE_INT32: - bufWrite.putInt(n * 4, ((Long) in).intValue()); + bufWrite.putInt(n * 4, l.intValue()); break; case TYPE_UINT16: case TYPE_INT16: - bufWrite.putShort(n * 2, ((Long) in).shortValue()); + bufWrite.putShort(n * 2, l.shortValue()); break; case TYPE_UINT8: case TYPE_INT8: - bufWrite.put(n, ((Long) in).byteValue()); + bufWrite.put(n, l.byteValue()); break; } } - if (in instanceof Integer) { + if (in instanceof Integer i) { switch (type) { case TYPE_UINT32: case TYPE_INT32: - bufWrite.putInt(n * 4, ((Integer) in).intValue()); + bufWrite.putInt(n * 4, i.intValue()); break; case TYPE_UINT16: case TYPE_INT16: - bufWrite.putShort(n * 2, ((Integer) in).shortValue()); + bufWrite.putShort(n * 2, i.shortValue()); break; case TYPE_UINT8: case TYPE_INT8: - bufWrite.put(n, ((Integer) in).byteValue()); + bufWrite.put(n, i.byteValue()); break; } } - if (in instanceof ByteBuffer) { - ByteBuffer bf = (ByteBuffer) in; + if (in instanceof ByteBuffer bf) { for (int i = 0; i < data_set.length && i < bf.capacity(); i++) { data_set[i] = bf.get(i); } } - if (in instanceof String) { - str = (String) in; + if (in instanceof String ins) { + str = ins; str = str.replace("[", ""); str = str.replace("]", ""); str = str.replace(" ", ""); @@ -458,28 +457,15 @@ synchronized float getFloat(byte b[], int ix) throws IndexOutOfBoundsException { } private static int getVarLen(int vType, int vArrayLen) throws RuntimeException { - int vLen = 0; if (vArrayLen == 0) { vArrayLen = 1; } - switch (vType) { - default: - throw new RuntimeException("wrong variable type"); - case TYPE_FLOAT: - case TYPE_UINT32: - case TYPE_INT32: - vLen = 4 * vArrayLen; - break; - case TYPE_UINT16: - case TYPE_INT16: - vLen = 2 * vArrayLen; - break; - case TYPE_UINT8: - case TYPE_INT8: - vLen = vArrayLen; - break; - } - return vLen; + return switch (vType) { + default -> throw new RuntimeException("wrong variable type"); + case TYPE_FLOAT, TYPE_UINT32, TYPE_INT32 -> 4 * vArrayLen; + case TYPE_UINT16, TYPE_INT16 -> 2 * vArrayLen; + case TYPE_UINT8, TYPE_INT8 -> vArrayLen; + }; } } //CHECKSTYLE:ON diff --git a/io.openems.edge.meter.virtual/src/io/openems/edge/meter/virtual/subtract/SubtractChannelManager.java b/io.openems.edge.meter.virtual/src/io/openems/edge/meter/virtual/subtract/SubtractChannelManager.java index 2752b4e8cd9..c2939c012b0 100644 --- a/io.openems.edge.meter.virtual/src/io/openems/edge/meter/virtual/subtract/SubtractChannelManager.java +++ b/io.openems.edge.meter.virtual/src/io/openems/edge/meter/virtual/subtract/SubtractChannelManager.java @@ -1,5 +1,7 @@ package io.openems.edge.meter.virtual.subtract; +import static io.openems.common.utils.FunctionUtils.doNothing; + import java.util.List; import java.util.function.Consumer; @@ -60,28 +62,30 @@ private void activateSubtractInteger(OpenemsComponent minuend /* nullable */, Li // Subtrahends Integer subtrahendsSum = null; for (OpenemsComponent subtrahend : subtrahends) { - if (subtrahend instanceof ElectricityMeter meter) { + switch (subtrahend) { + case ElectricityMeter meter -> { IntegerReadChannel channel = meter.channel(meterChannelId); subtrahendsSum = TypeUtils.sum(subtrahendsSum, channel.getNextValue().get()); - } else if (subtrahend instanceof SymmetricEss) { - IntegerReadChannel channel = ((SymmetricEss) subtrahend).channel(essChannelId); + } + case SymmetricEss ess -> { + IntegerReadChannel channel = ess.channel(essChannelId); subtrahendsSum = TypeUtils.sum(subtrahendsSum, channel.getNextValue().get()); } + default -> doNothing(); + } } - final Integer minuendValue; - if (minuend == null) { - minuendValue = 0; - } else if (minuend instanceof ElectricityMeter meter) { + final Integer minuendValue = switch (minuend) { + case ElectricityMeter meter -> { IntegerReadChannel channel = meter.channel(meterChannelId); - minuendValue = channel.getNextValue().get(); - } else if (minuend instanceof SymmetricEss) { - IntegerReadChannel channel = ((SymmetricEss) minuend).channel(essChannelId); - minuendValue = channel.getNextValue().get(); - } else { - // should not happen - minuendValue = null; + yield channel.getNextValue().get(); + } + case SymmetricEss ess -> { + IntegerReadChannel channel = ess.channel(essChannelId); + yield channel.getNextValue().get(); } + case null, default -> 0; + }; final Integer result; // Minuend @@ -96,20 +100,22 @@ private void activateSubtractInteger(OpenemsComponent minuend /* nullable */, Li }; // Minuend - if (minuend == null) { - // no listener for minuend - } else if (minuend instanceof ElectricityMeter) { - this.addOnSetNextValueListener(minuend, meterChannelId, callback); - } else if (minuend instanceof SymmetricEss) { - this.addOnSetNextValueListener(minuend, essChannelId, callback); + switch (minuend) { + case ElectricityMeter meter // + -> this.addOnSetNextValueListener(minuend, meterChannelId, callback); + case SymmetricEss ess // + -> this.addOnSetNextValueListener(minuend, essChannelId, callback); + case null, default -> doNothing(); } // Subtrahends for (OpenemsComponent subtrahend : subtrahends) { - if (subtrahend instanceof ElectricityMeter) { - this.addOnSetNextValueListener(subtrahend, meterChannelId, callback); - } else if (subtrahend instanceof SymmetricEss) { - this.addOnSetNextValueListener(subtrahend, essChannelId, callback); + switch (subtrahend) { + case ElectricityMeter meter // + -> this.addOnSetNextValueListener(subtrahend, meterChannelId, callback); + case SymmetricEss ess // + -> this.addOnSetNextValueListener(subtrahend, essChannelId, callback); + default -> doNothing(); } } } @@ -117,28 +123,32 @@ private void activateSubtractInteger(OpenemsComponent minuend /* nullable */, Li private void activateSubtractLong(OpenemsComponent minuend /* nullable */, List subtrahends, ElectricityMeter.ChannelId meterChannelId, SymmetricEss.ChannelId essChannelId) { final Consumer> callback = (ignore) -> { - Long result = null; - // Minuend - if (minuend == null) { - result = 0L; - } else if (minuend instanceof ElectricityMeter meter) { + Long result = switch (minuend) { + case ElectricityMeter meter -> { LongReadChannel channel = meter.channel(meterChannelId); - result = channel.getNextValue().get(); - } else if (minuend instanceof SymmetricEss) { - LongReadChannel channel = ((SymmetricEss) minuend).channel(essChannelId); - result = channel.getNextValue().get(); + yield channel.getNextValue().get(); + } + case SymmetricEss ess -> { + LongReadChannel channel = ess.channel(essChannelId); + yield channel.getNextValue().get(); } + case null, default -> 0L; + }; // Subtrahends for (OpenemsComponent subtrahend : subtrahends) { - if (subtrahend instanceof ElectricityMeter meter) { + switch (subtrahend) { + case ElectricityMeter meter -> { LongReadChannel channel = meter.channel(meterChannelId); result = TypeUtils.subtract(result, channel.getNextValue().get()); - } else if (subtrahend instanceof SymmetricEss) { - LongReadChannel channel = ((SymmetricEss) subtrahend).channel(essChannelId); + } + case SymmetricEss ess -> { + LongReadChannel channel = ess.channel(essChannelId); result = TypeUtils.subtract(result, channel.getNextValue().get()); } + default -> doNothing(); + } } LongReadChannel channel = this.parent.channel(meterChannelId); @@ -146,20 +156,22 @@ private void activateSubtractLong(OpenemsComponent minuend /* nullable */, List< }; // Minuend - if (minuend == null) { - // no listener for minuend - } else if (minuend instanceof ElectricityMeter) { - this.addOnSetNextValueListener(minuend, meterChannelId, callback); - } else if (minuend instanceof SymmetricEss) { - this.addOnSetNextValueListener(minuend, essChannelId, callback); + switch (minuend) { + case ElectricityMeter meter // + -> this.addOnSetNextValueListener(minuend, meterChannelId, callback); + case SymmetricEss ess // + -> this.addOnSetNextValueListener(minuend, essChannelId, callback); + case null, default -> doNothing(); } // Subtrahends for (OpenemsComponent subtrahend : subtrahends) { - if (subtrahend instanceof ElectricityMeter) { - this.addOnSetNextValueListener(subtrahend, meterChannelId, callback); - } else if (subtrahend instanceof SymmetricEss) { - this.addOnSetNextValueListener(subtrahend, essChannelId, callback); + switch (subtrahend) { + case ElectricityMeter meter // + -> this.addOnSetNextValueListener(subtrahend, meterChannelId, callback); + case SymmetricEss ess // + -> this.addOnSetNextValueListener(subtrahend, essChannelId, callback); + default -> doNothing(); } } } diff --git a/io.openems.edge.onewire.thermometer/src/io/openems/edge/onewire/thermometer/OneWireThermometerImpl.java b/io.openems.edge.onewire.thermometer/src/io/openems/edge/onewire/thermometer/OneWireThermometerImpl.java index 2f941cc0d7e..2a6886e790d 100644 --- a/io.openems.edge.onewire.thermometer/src/io/openems/edge/onewire/thermometer/OneWireThermometerImpl.java +++ b/io.openems.edge.onewire.thermometer/src/io/openems/edge/onewire/thermometer/OneWireThermometerImpl.java @@ -18,7 +18,6 @@ import com.dalsemi.onewire.OneWireException; import com.dalsemi.onewire.adapter.DSPortAdapter; -import com.dalsemi.onewire.container.OneWireContainer; import com.dalsemi.onewire.container.TemperatureContainer; import io.openems.common.exceptions.OpenemsException; @@ -104,10 +103,9 @@ private TemperatureContainer getDeviceContainer(DSPortAdapter adapter) throws Op return this._container; } var owc = adapter.getDeviceContainer(this.config.address()); - if (!(owc instanceof OneWireContainer)) { + if (!(owc instanceof TemperatureContainer container)) { throw new OpenemsException("This is not a OneWire Temperature Container"); } - var container = (TemperatureContainer) owc; this._container = container; return this._container; } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessing/DataModification.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessing/DataModification.java index 47d107b9843..8e9324e6922 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessing/DataModification.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessing/DataModification.java @@ -227,13 +227,13 @@ public static double standardize(double inputData, double mean, double standerdD * @param hyperParameters instance of {@link HyperParameters} * @return The reverse standardized value in the original data's scale. */ - public static double reverseStandrize(double zvalue, double mean, double standardDeviation, + public static double reverseStandardize(double zvalue, double mean, double standardDeviation, HyperParameters hyperParameters) { double reverseStand = 0; double meanTarget = hyperParameters.getMean(); double standardDeviationTarget = hyperParameters.getStandardDeviation(); - reverseStand = ((zvalue - meanTarget) * (standardDeviation / standardDeviationTarget) + mean); + reverseStand = (zvalue - meanTarget) * (standardDeviation / standardDeviationTarget) + mean; return reverseStand; } @@ -252,11 +252,11 @@ public static double reverseStandrize(double zvalue, double mean, double standar * and standard deviation. * @return A new list containing the reverse standardized values. */ - public static double[] reverseStandrize(ArrayList data, ArrayList mean, + public static double[] reverseStandardize(ArrayList data, ArrayList mean, ArrayList standDeviation, HyperParameters hyperParameters) { var revNorm = new double[data.size()]; for (int i = 0; i < data.size(); i++) { - revNorm[i] = (reverseStandrize(data.get(i), mean.get(i), standDeviation.get(i), hyperParameters)); + revNorm[i] = reverseStandardize(data.get(i), mean.get(i), standDeviation.get(i), hyperParameters); } return revNorm; } @@ -276,11 +276,11 @@ public static double[] reverseStandrize(ArrayList data, ArrayList data, double mean, double standDeviation, + public static double[] reverseStandardize(ArrayList data, double mean, double standDeviation, HyperParameters hyperParameters) { var revNorm = new double[data.size()]; for (int i = 0; i < data.size(); i++) { - revNorm[i] = (reverseStandrize(data.get(i), mean, standDeviation, hyperParameters)); + revNorm[i] = reverseStandardize(data.get(i), mean, standDeviation, hyperParameters); } return revNorm; } @@ -324,11 +324,11 @@ public static double[] reverseStandrize(ArrayList data, double mean, dou * and standard deviation. * @return A new list containing the reverse standardized values. */ - public static double[] reverseStandrize(double[] data, double mean, double standDeviation, + public static double[] reverseStandardize(double[] data, double mean, double standDeviation, HyperParameters hyperParameters) { var revNorm = new double[data.length]; for (int i = 0; i < data.length; i++) { - revNorm[i] = (reverseStandrize(data[i], mean, standDeviation, hyperParameters)); + revNorm[i] = reverseStandardize(data[i], mean, standDeviation, hyperParameters); } return revNorm; } @@ -354,7 +354,7 @@ public static ArrayList>> groupDataByHourAndMinute(A groupByHour.hour(); for (int i = 0; i < groupByHour.getGroupedDataByHour().size(); i++) { - GroupBy groupByMinute = new GroupBy(groupByHour.getGroupedDataByHour().get(i), + var groupByMinute = new GroupBy(groupByHour.getGroupedDataByHour().get(i), groupByHour.getGroupedDateByHour().get(i)); groupByMinute.minute(); diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ConstantScalingPipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ConstantScalingPipe.java index 49e6b6147a4..a2386fab884 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ConstantScalingPipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ConstantScalingPipe.java @@ -12,7 +12,7 @@ public ConstantScalingPipe(double factor) { @Override public Object execute(Object input) { - return (input instanceof double[] in) // + return input instanceof double[] in // ? constantScaling(in, this.scalingFactor) // : new IllegalArgumentException("Input must be an instance of double[]"); } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/DifferencingPipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/DifferencingPipe.java index eda1d0963cf..b4c68ab8100 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/DifferencingPipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/DifferencingPipe.java @@ -6,7 +6,7 @@ public class DifferencingPipe implements Stage { @Override public Object execute(Object input) { - return (input instanceof double[] in) // + return input instanceof double[] in // ? Differencing.firstOrderDifferencing(in) // : new IllegalArgumentException("Input must be an instance of double[]"); } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/FilterOutliersPipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/FilterOutliersPipe.java index e6ec17f578a..c0b40da77fa 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/FilterOutliersPipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/FilterOutliersPipe.java @@ -6,7 +6,7 @@ public class FilterOutliersPipe implements Stage { @Override public Object execute(Object input) { - return (input instanceof double[] in) // + return input instanceof double[] in // ? FilterOutliers.filterOutlier(in) // : new IllegalArgumentException("Input must be an instance of double[]"); } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/MovingAveragePipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/MovingAveragePipe.java index 4ac0ba16f18..b37f9976a4d 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/MovingAveragePipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/MovingAveragePipe.java @@ -6,7 +6,7 @@ public class MovingAveragePipe implements Stage { @Override public Object execute(Object input) { - return (input instanceof double[] in) // + return input instanceof double[] in // ? MovingAverage.movingAverage(in) // : new IllegalArgumentException("Input must be an instance of double[]"); } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/NormalizePipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/NormalizePipe.java index 6ee14e728bd..78c19f83c1b 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/NormalizePipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/NormalizePipe.java @@ -16,25 +16,26 @@ public NormalizePipe(HyperParameters hyper) { @Override public Object execute(Object input) { try { - if (input instanceof double[][][] inputArray) { - + return switch (input) { + case double[][][] inputArray -> { double[][] trainData = inputArray[0]; double[] targetData = inputArray[1][0]; double[][] normalizedTrainData = normalizeData(trainData, this.hyperParameters); double[] normalizedTargetData = normalizeData(trainData, targetData, this.hyperParameters); - return new double[][][] { normalizedTrainData, { normalizedTargetData } }; + yield new double[][][] { normalizedTrainData, { normalizedTargetData } }; + } - } else if (input instanceof double[][] inputArray) { - return normalizeData(inputArray, this.hyperParameters); + case double[][] inputArray // + -> normalizeData(inputArray, this.hyperParameters); - } else if (input instanceof double[] inputArray) { - return standardize(inputArray, this.hyperParameters); + case double[] inputArray // + -> standardize(inputArray, this.hyperParameters); - } else { - throw new IllegalArgumentException("Illegal Argument encountered during normalization"); - } + default // + -> throw new IllegalArgumentException("Illegal Argument encountered during normalization"); + }; } catch (Exception e) { throw new RuntimeException("Illegal Argument encountered during normalization"); } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/RemoveNegativesPipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/RemoveNegativesPipe.java index 10f9d492f27..1498a30765d 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/RemoveNegativesPipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/RemoveNegativesPipe.java @@ -6,7 +6,7 @@ public class RemoveNegativesPipe implements Stage { @Override public Object execute(Object input) { - return (input instanceof double[] in) // + return input instanceof double[] in // ? removeNegatives(in) // : new IllegalArgumentException("Input must be an instance of double[]"); } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ReverseNormalizationPipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ReverseNormalizationPipe.java index 210774461c1..48f2c7895aa 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ReverseNormalizationPipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ReverseNormalizationPipe.java @@ -1,7 +1,8 @@ package io.openems.edge.predictor.lstm.preprocessingpipeline; +import static io.openems.edge.predictor.lstm.preprocessing.DataModification.reverseStandardize; + import io.openems.edge.predictor.lstm.common.HyperParameters; -import io.openems.edge.predictor.lstm.preprocessing.DataModification; public class ReverseNormalizationPipe implements Stage { private Object mean; @@ -17,28 +18,31 @@ public ReverseNormalizationPipe(Object average, Object std, HyperParameters hyp) @Override public Object execute(Object input) { try { - if (input instanceof double[] inputArray) { + return switch (input) { + case double[] inputArray -> { if (this.mean instanceof double[] meanArray // && this.stdDeviation instanceof double[] sdArray) { - return DataModification.reverseStandrize(inputArray, meanArray, sdArray, this.hyperParameters); + yield reverseStandardize(inputArray, meanArray, sdArray, this.hyperParameters); } else if (this.mean instanceof Double meanValue // && this.stdDeviation instanceof Double sdValue) { - return DataModification.reverseStandrize(inputArray, meanValue, sdValue, this.hyperParameters); + yield reverseStandardize(inputArray, meanValue, sdValue, this.hyperParameters); } else { throw new IllegalArgumentException("Input must be an instance of double[]"); } + } - } else if (input instanceof Double inputArray) { + case Double inputArray -> { double mean = (double) this.mean; double std = (double) this.stdDeviation; - return DataModification.reverseStandrize(inputArray, mean, std, this.hyperParameters); - - } else { - throw new IllegalArgumentException("Input must be an instance of double[]"); + yield reverseStandardize(inputArray, mean, std, this.hyperParameters); } + default // + -> throw new IllegalArgumentException("Input must be an instance of double[]"); + }; + } catch (Exception e) { throw new RuntimeException("Error processing input data", e); } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ReverseScalingPipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ReverseScalingPipe.java index 065562807c8..380aa6884e4 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ReverseScalingPipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ReverseScalingPipe.java @@ -13,7 +13,7 @@ public ReverseScalingPipe(HyperParameters hyperParameters) { @Override public Object execute(Object input) { - return (input instanceof double[] inputArray) // + return input instanceof double[] inputArray // ? scaleBack(inputArray, this.hype.getScalingMin(), this.hype.getScalingMax()) // : new IllegalArgumentException("Input must be an instance of double[]"); } diff --git a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ScalingPipe.java b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ScalingPipe.java index 7f958983bc1..9dac330ae18 100644 --- a/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ScalingPipe.java +++ b/io.openems.edge.predictor.lstm/src/io/openems/edge/predictor/lstm/preprocessingpipeline/ScalingPipe.java @@ -17,15 +17,14 @@ public ScalingPipe(HyperParameters hyperParameters) { @Override public Object execute(Object value) { - if (value instanceof double[][] v) { - return this.scaleSecondCase(v); - - } else if (value instanceof double[] v) { - return (this.scaleFirstCase(v)); - - } else { - throw new IllegalArgumentException("Input must be an instance of double[]"); - } + return switch (value) { + case double[][] v // + -> this.scaleSecondCase(v); + case double[] v // + -> this.scaleFirstCase(v); + default // + -> throw new IllegalArgumentException("Input must be an instance of double[]"); + }; } /** diff --git a/io.openems.edge.scheduler.allalphabetically/src/io/openems/edge/scheduler/allalphabetically/SchedulerAllAlphabeticallyImpl.java b/io.openems.edge.scheduler.allalphabetically/src/io/openems/edge/scheduler/allalphabetically/SchedulerAllAlphabeticallyImpl.java index aaa2f05c9ae..bc7b98d9b6f 100644 --- a/io.openems.edge.scheduler.allalphabetically/src/io/openems/edge/scheduler/allalphabetically/SchedulerAllAlphabeticallyImpl.java +++ b/io.openems.edge.scheduler.allalphabetically/src/io/openems/edge/scheduler/allalphabetically/SchedulerAllAlphabeticallyImpl.java @@ -59,8 +59,8 @@ public LinkedHashSet getControllers() { var result = new LinkedHashSet(); // add sorted controllers - for (String id : this.config.controllers_ids()) { - if (id.equals("")) { + for (var id : this.config.controllers_ids()) { + if (id.isBlank()) { continue; } result.add(id); @@ -68,7 +68,7 @@ public LinkedHashSet getControllers() { // add remaining controllers this.componentManager.getEnabledComponents().stream() // - .filter(c -> c instanceof Controller) // + .filter(Controller.class::isInstance) // .sorted(Comparator.comparing(OpenemsComponent::id)) // .forEach(c -> result.add(c.id())); diff --git a/io.openems.edge.timeofusetariff.groupe/src/io/openems/edge/timeofusetariff/groupe/TimeOfUseTariffGroupeImpl.java b/io.openems.edge.timeofusetariff.groupe/src/io/openems/edge/timeofusetariff/groupe/TimeOfUseTariffGroupeImpl.java index 3a644d09fd9..77f7f344dc7 100644 --- a/io.openems.edge.timeofusetariff.groupe/src/io/openems/edge/timeofusetariff/groupe/TimeOfUseTariffGroupeImpl.java +++ b/io.openems.edge.timeofusetariff.groupe/src/io/openems/edge/timeofusetariff/groupe/TimeOfUseTariffGroupeImpl.java @@ -166,10 +166,10 @@ private void handleEndpointResponse(HttpResponse response) throws Openem } private void handleEndpointError(HttpError error) { - var httpStatusCode = INTERNAL_ERROR; - if (error instanceof HttpError.ResponseError re) { - httpStatusCode = re.status.code(); - } + var httpStatusCode = switch (error) { + case HttpError.ResponseError re -> re.status.code(); + default -> INTERNAL_ERROR; + }; this.channel(TimeOfUseTariffGroupe.ChannelId.HTTP_STATUS_CODE).setNextValue(httpStatusCode); this.log.error(error.getMessage(), error); diff --git a/io.openems.edge.timeofusetariff.hassfurt/src/io/openems/edge/timeofusetariff/hassfurt/TimeOfUseTariffHassfurtImpl.java b/io.openems.edge.timeofusetariff.hassfurt/src/io/openems/edge/timeofusetariff/hassfurt/TimeOfUseTariffHassfurtImpl.java index 322f2081ff4..0090a0a324c 100644 --- a/io.openems.edge.timeofusetariff.hassfurt/src/io/openems/edge/timeofusetariff/hassfurt/TimeOfUseTariffHassfurtImpl.java +++ b/io.openems.edge.timeofusetariff.hassfurt/src/io/openems/edge/timeofusetariff/hassfurt/TimeOfUseTariffHassfurtImpl.java @@ -184,10 +184,10 @@ private void handleEndpointResponse(HttpResponse response) throws Openem } private void handleEndpointError(HttpError error) { - var httpStatusCode = INTERNAL_ERROR; - if (error instanceof HttpError.ResponseError re) { - httpStatusCode = re.status.code(); - } + var httpStatusCode = switch (error) { + case HttpError.ResponseError re -> re.status.code(); + default -> INTERNAL_ERROR; + }; this.channel(TimeOfUseTariffHassfurt.ChannelId.HTTP_STATUS_CODE).setNextValue(httpStatusCode); this.log.error(error.getMessage(), error); diff --git a/io.openems.edge.timeofusetariff.rabotcharge/src/io/openems/edge/timeofusetariff/rabotcharge/TimeOfUseTariffRabotChargeImpl.java b/io.openems.edge.timeofusetariff.rabotcharge/src/io/openems/edge/timeofusetariff/rabotcharge/TimeOfUseTariffRabotChargeImpl.java index 37afa08b64d..7ef68ad176a 100644 --- a/io.openems.edge.timeofusetariff.rabotcharge/src/io/openems/edge/timeofusetariff/rabotcharge/TimeOfUseTariffRabotChargeImpl.java +++ b/io.openems.edge.timeofusetariff.rabotcharge/src/io/openems/edge/timeofusetariff/rabotcharge/TimeOfUseTariffRabotChargeImpl.java @@ -1,10 +1,12 @@ package io.openems.edge.timeofusetariff.rabotcharge; +import static io.openems.common.types.HttpStatus.UNAUTHORIZED; import static io.openems.common.utils.JsonUtils.getAsDouble; import static io.openems.common.utils.JsonUtils.getAsJsonArray; import static io.openems.common.utils.JsonUtils.getAsString; import static io.openems.common.utils.JsonUtils.parseToJsonObject; import static io.openems.edge.timeofusetariff.api.utils.TimeOfUseTariffUtils.generateDebugLog; +import static java.time.temporal.ChronoUnit.SECONDS; import java.time.Clock; import java.time.Duration; @@ -150,8 +152,11 @@ private CompletableFuture refreshToken() { tokenFuture.complete(token); }, error -> { this.log.error("Unable to get token", error); - this._setHttpStatusCode( - error instanceof HttpError.ResponseError r ? r.status.code() : INTERNAL_ERROR); + this._setHttpStatusCode(// + switch (error) { + case HttpError.ResponseError re -> re.status.code(); + default -> INTERNAL_ERROR; + }); this._setStatusAuthenticationFailed(true); }); @@ -176,8 +181,11 @@ private void scheduleRequest() { }).whenComplete((priceComponent, error) -> { if (priceComponent == null) { this.log.error("Unable to get price components", error); - this._setHttpStatusCode( - error instanceof HttpError.ResponseError r ? r.status.code() : INTERNAL_ERROR); + this._setHttpStatusCode(// + switch (error) { + case HttpError.ResponseError re -> re.status.code(); + default -> INTERNAL_ERROR; + }); return; } this._setHttpStatusCode(HttpStatus.OK.code()); @@ -210,23 +218,24 @@ public Delay onFirstRunDelay() { @Override public Delay onSuccessRunDelay(HttpResponse result) { return DelayTimeProviderChain.fixedAtEveryFull(this.clock, DurationUnit.ofDays(1)) // - .plusRandomDelay(60, ChronoUnit.SECONDS) // + .plusRandomDelay(60, SECONDS) // .getDelay(); } @Override public Delay onErrorRunDelay(HttpError error) { - if (error instanceof HttpError.ResponseError r && r.status.equals(HttpStatus.UNAUTHORIZED)) { + return switch (error) { + case HttpError.ResponseError r when r.status.equals(UNAUTHORIZED) -> { // reschedule after authenticated TimeOfUseTariffRabotChargeImpl.this.scheduleRequest(); - return Delay.infinite(); + yield Delay.infinite(); } - - return DelayTimeProviderChain.fixedDelay(Duration.ofHours(1))// - .plusRandomDelay(60, ChronoUnit.SECONDS) // - .getDelay(); + default // + -> DelayTimeProviderChain.fixedDelay(Duration.ofHours(1))// + .plusRandomDelay(60, SECONDS) // + .getDelay(); + }; } - } private Endpoint createRabotChargeEndpoint(String accessToken) { @@ -257,15 +266,14 @@ private void handleEndpointResponse(HttpResponse response, PriceComponen } private void handleEndpointError(HttpError error) { - var httpStatusCode = INTERNAL_ERROR; - if (error instanceof HttpError.ResponseError re) { - httpStatusCode = re.status.code(); - - this._setStatusAuthenticationFailed(httpStatusCode == HttpStatus.UNAUTHORIZED.code()); - this._setStatusBadRequest(httpStatusCode == HttpStatus.BAD_REQUEST.code()); - } - - this.channel(TimeOfUseTariffRabotCharge.ChannelId.HTTP_STATUS_CODE).setNextValue(httpStatusCode); + var httpStatusCode = switch (error) { + case HttpError.ResponseError re -> re.status.code(); + default -> INTERNAL_ERROR; + }; + + this._setHttpStatusCode(httpStatusCode); + this._setStatusAuthenticationFailed(httpStatusCode == UNAUTHORIZED.code()); + this._setStatusBadRequest(httpStatusCode == HttpStatus.BAD_REQUEST.code()); this.log.error(error.getMessage(), error); } diff --git a/io.openems.edge.timeofusetariff.swisspower/src/io/openems/edge/timeofusetariff/swisspower/TimeOfUseTariffSwisspowerImpl.java b/io.openems.edge.timeofusetariff.swisspower/src/io/openems/edge/timeofusetariff/swisspower/TimeOfUseTariffSwisspowerImpl.java index 4fd7c4a7b82..edc0f145d8f 100644 --- a/io.openems.edge.timeofusetariff.swisspower/src/io/openems/edge/timeofusetariff/swisspower/TimeOfUseTariffSwisspowerImpl.java +++ b/io.openems.edge.timeofusetariff.swisspower/src/io/openems/edge/timeofusetariff/swisspower/TimeOfUseTariffSwisspowerImpl.java @@ -197,11 +197,13 @@ private void handleEndpointResponse(HttpResponse response) throws Openem } private void handleEndpointError(HttpError error) { - var httpStatusCode = (error instanceof HttpError.ResponseError re) ? re.status.code() : INTERNAL_ERROR; - var serverError = (httpStatusCode == SERVER_ERROR_CODE); - var badRequest = (httpStatusCode == BAD_REQUEST_ERROR_CODE); - var timeoutError = (error instanceof HttpError.UnknownError e - && e.getCause() instanceof SocketTimeoutException); + var httpStatusCode = switch (error) { + case HttpError.ResponseError re -> re.status.code(); + default -> INTERNAL_ERROR; + }; + var serverError = httpStatusCode == SERVER_ERROR_CODE; + var badRequest = httpStatusCode == BAD_REQUEST_ERROR_CODE; + var timeoutError = error instanceof HttpError.UnknownError e && e.getCause() instanceof SocketTimeoutException; this.setChannelValues(httpStatusCode, serverError, badRequest, timeoutError); this.log.error("HTTP Error [{}]: {}", httpStatusCode, error.getMessage()); diff --git a/io.openems.shared.influxdb/src/io/openems/shared/influxdb/proxy/FluxProxy.java b/io.openems.shared.influxdb/src/io/openems/shared/influxdb/proxy/FluxProxy.java index f0039e1ad1d..112d07be0bf 100644 --- a/io.openems.shared.influxdb/src/io/openems/shared/influxdb/proxy/FluxProxy.java +++ b/io.openems.shared.influxdb/src/io/openems/shared/influxdb/proxy/FluxProxy.java @@ -1,5 +1,7 @@ package io.openems.shared.influxdb.proxy; +import static io.openems.common.utils.CollectorUtils.toDoubleMap; + import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; @@ -25,7 +27,6 @@ import io.openems.common.exceptions.OpenemsException; import io.openems.common.timedata.Resolution; import io.openems.common.types.ChannelAddress; -import io.openems.common.utils.CollectorUtils; import io.openems.shared.influxdb.InfluxConnector.InfluxConnection; /** @@ -327,14 +328,14 @@ private static SortedMap> timestamp = resolution.revertInfluxDbOffset(timestamp); var valueObj = record.getValue(); - final JsonElement value; - if (valueObj == null) { - value = JsonNull.INSTANCE; - } else if (valueObj instanceof Number) { - value = new JsonPrimitive((Number) valueObj); - } else { - value = new JsonPrimitive(valueObj.toString()); - } + var value = switch (valueObj) { + case null // + -> JsonNull.INSTANCE; + case Number n // + -> new JsonPrimitive(n); + default // + -> new JsonPrimitive(valueObj.toString()); + }; var channelAddresss = ChannelAddress.fromString(record.getField()); @@ -367,21 +368,21 @@ private static SortedMap convertHistoricEnergyResul for (FluxRecord record : fluxTable.getRecords()) { var valueObj = record.getValue(); - final JsonElement value; - if (valueObj == null) { - value = JsonNull.INSTANCE; - } else if (valueObj instanceof Number) { - var number = (Number) valueObj; + var value = switch (valueObj) { + case null // + -> JsonNull.INSTANCE; + case Number number -> { if (number.intValue() < 0) { // do not consider negative values LOG.warn("Got negative Energy value [" + number + "] for query: " + query); - value = JsonNull.INSTANCE; + yield JsonNull.INSTANCE; } else { - value = new JsonPrimitive(number); + yield new JsonPrimitive(number); } - } else { - value = new JsonPrimitive(valueObj.toString()); } + default // + -> new JsonPrimitive(valueObj.toString()); + }; var channelAddresss = ChannelAddress.fromString(record.getField()); @@ -421,15 +422,14 @@ private static SortedMap convertFirstValueBeforeQue for (FluxRecord record : fluxTable.getRecords()) { var valueObj = record.getValue(); - JsonElement value; - - if (valueObj == null) { - value = JsonNull.INSTANCE; - } else if (valueObj instanceof Number) { - value = new JsonPrimitive((Number) valueObj); - } else { - value = new JsonPrimitive(valueObj.toString()); - } + var value = switch (valueObj) { + case null // + -> JsonNull.INSTANCE; + case Number number // + -> new JsonPrimitive(number); + default // + -> new JsonPrimitive(valueObj.toString()); + }; var channelAddresss = ChannelAddress.fromString(record.getField()); latestValues.put(channelAddresss, value); @@ -447,7 +447,7 @@ private static Map> convertAvailableSinceQueryResult( } return queryResult.stream() // .flatMap(t -> t.getRecords().stream()) // - .collect(CollectorUtils.toDoubleMap(// + .collect(toDoubleMap(// record -> Integer.parseInt((String) record.getValueByKey(tag)), // record -> (String) record.getValueByKey(QueryProxy.CHANNEL_TAG), // record -> (Long) record.getValue()) // diff --git a/io.openems.shared.influxdb/src/io/openems/shared/influxdb/proxy/InfluxQlProxy.java b/io.openems.shared.influxdb/src/io/openems/shared/influxdb/proxy/InfluxQlProxy.java index bdd64fb4cb5..79ee9dc5bea 100644 --- a/io.openems.shared.influxdb/src/io/openems/shared/influxdb/proxy/InfluxQlProxy.java +++ b/io.openems.shared.influxdb/src/io/openems/shared/influxdb/proxy/InfluxQlProxy.java @@ -616,21 +616,16 @@ private static SortedMap> } private static JsonElement convertToJsonElement(Object valueObj) { - if (valueObj == null) { - return JsonNull.INSTANCE; - } - if (valueObj instanceof Number) { - return new JsonPrimitive((Number) valueObj); - } - - final String str; - if (valueObj instanceof String) { - str = (String) valueObj; - } else { - str = valueObj.toString(); - } - - return parseToJsonElement(str); + return switch (valueObj) { + case null // + -> JsonNull.INSTANCE; + case Number n // + -> new JsonPrimitive(n); + case String s // + -> parseToJsonElement(s); + default // + -> parseToJsonElement(valueObj.toString()); + }; } private static SortedMap convertHistoricEnergyResultSingleValueInDay(// @@ -677,20 +672,17 @@ private static SortedMap convertHistoricEnergyResul continue; } var valueObj = record.getValueByKey(column); - final JsonElement value; - if (valueObj == null) { - value = JsonNull.INSTANCE; - } else if (valueObj instanceof Number n) { - value = new JsonPrimitive(n); - } else { - final String str; - if (valueObj instanceof String) { - str = (String) valueObj; - } else { - str = valueObj.toString(); - } - value = parseToJsonElement(str); - } + var value = switch (valueObj) { + case null // + -> JsonNull.INSTANCE; + case Number n // + -> new JsonPrimitive(n); + case String str // + -> parseToJsonElement(str); + default // + -> parseToJsonElement(valueObj.toString()); + }; + try { m.accept(new Pair<>(ChannelAddress.fromString(column), value)); } catch (OpenemsNamedException e) { @@ -730,20 +722,17 @@ private static SortedMap convertHistoricEnergyResul continue; } var valueObj = record.getValueByKey(column); - JsonElement value; - if (valueObj == null) { - value = JsonNull.INSTANCE; - } else if (valueObj instanceof Number) { - value = assertPositive((Number) valueObj, influxEdgeId, channels); - } else { - final String str; - if (valueObj instanceof String) { - str = (String) valueObj; - } else { - str = valueObj.toString(); - } - value = parseToJsonElement(str); - } + var value = switch (valueObj) { + case null // + -> JsonNull.INSTANCE; + case Number n // + -> assertPositive(n, influxEdgeId, channels); + case String s // + -> parseToJsonElement(s); + default // + -> parseToJsonElement(valueObj.toString()); + }; + map.put(ChannelAddress.fromString(column), value); } } diff --git a/ui/src/app/edge/live/Controller/ModbusTcpApi/modal/modal.ts b/ui/src/app/edge/live/Controller/ModbusTcpApi/modal/modal.ts index e55c75f18a4..98d58510605 100644 --- a/ui/src/app/edge/live/Controller/ModbusTcpApi/modal/modal.ts +++ b/ui/src/app/edge/live/Controller/ModbusTcpApi/modal/modal.ts @@ -91,13 +91,14 @@ export class ModalComponent extends AbstractModal { private getFormatChannelNames(): void { this.formattedWriteChannels = []; this.writeChannels.forEach(channel => { + let formattedString = `(${channel.channelId})`; for (const registerName in ChannelRegister) { - if (channel.channelId.includes(registerName)) { - // If channelId is included in ChannelRegister, get key/value e.g. SetActivePowerEquals/706 - const formattedString = `(${registerName}/${ChannelRegister[registerName]})`; - this.formattedWriteChannels.push(formattedString); + if (channel.channelId.includes(registerName) && channel.channelId.startsWith("Ess0")) { + formattedString = `(${registerName}/${ChannelRegister[registerName]})`; + break; } } + this.formattedWriteChannels.push(formattedString); }); } } diff --git a/ui/src/app/shared/components/edge/edgeconfig.ts b/ui/src/app/shared/components/edge/edgeconfig.ts index 92412cc06ae..8b70bd09775 100644 --- a/ui/src/app/shared/components/edge/edgeconfig.ts +++ b/ui/src/app/shared/components/edge/edgeconfig.ts @@ -546,6 +546,7 @@ export class EdgeConfig { } switch (component.factoryId) { case "GoodWe.EmergencyPowerMeter": + case "Controller.IO.Heating.Room": return true; } const natures = this.getNatureIdsByFactoryId(component.factoryId); diff --git a/ui/src/app/shared/components/pickdate/popover/popover.component.ts b/ui/src/app/shared/components/pickdate/popover/popover.component.ts index 43d3f9e555a..7796d28efa3 100644 --- a/ui/src/app/shared/components/pickdate/popover/popover.component.ts +++ b/ui/src/app/shared/components/pickdate/popover/popover.component.ts @@ -57,7 +57,7 @@ export class PickDatePopoverComponent implements OnInit { .dp1 .myDpSelectedDay, .dp1 .myDpSelectedMonth, .dp1 .myDpSelectedYear { - background-color: #93c47d; + background-color: var(--ion-color-primary); } .dp1 .myDpTableSingleDay:hover, .dp1 .myDpTableSingleMonth:hover, @@ -69,10 +69,10 @@ export class PickDatePopoverComponent implements OnInit { .dp1 .myDpMarkCurrMonth, .dp1 .myDpMarkCurrYear { border-bottom: 2px solid #2d8fab; - color: #2d8fab; + color: var(--ion-color-text); } .dp1 .myDpRangeColor { - background-color: #dbeaff; + background-color: var(--ion-color-primary); } .ng-mydp * { @@ -117,8 +117,7 @@ export class PickDatePopoverComponent implements OnInit { this.locale = (Language.getByKey(localStorage.LANGUAGE) ?? Language.DEFAULT).key; // Restrict user to pick date before ibn-date - this.myDpOptions.disableUntil = { day: Utils.subtractSafely(getDate(this.edge?.firstSetupProtocol), 1) ?? 1, month: Utils.addSafely(getMonth(this.edge?.firstSetupProtocol), 1) ?? 1, year: this.edge?.firstSetupProtocol?.getFullYear() ?? 2013 }, - this.locale = this.translate.getBrowserLang(); + this.myDpOptions.disableUntil = { day: Utils.subtractSafely(getDate(this.edge?.firstSetupProtocol), 1) ?? 1, month: Utils.addSafely(getMonth(this.edge?.firstSetupProtocol), 1) ?? 1, year: this.edge?.firstSetupProtocol?.getFullYear() ?? 2013 }; // Filter out custom due to different on click event this.periods = EdgePermission.getAllowedHistoryPeriods(this.edge, this.historyPeriods).filter(period => period !== DefaultTypes.PeriodString.CUSTOM); diff --git a/ui/src/app/shared/type/language.ts b/ui/src/app/shared/type/language.ts index 6d1e022059e..2b6b08b8a61 100644 --- a/ui/src/app/shared/type/language.ts +++ b/ui/src/app/shared/type/language.ts @@ -1,3 +1,4 @@ +import localCS from "@angular/common/locales/cs"; import localDE from "@angular/common/locales/de"; import localEN from "@angular/common/locales/en"; import localES from "@angular/common/locales/es"; @@ -35,13 +36,13 @@ export class Language { public static readonly DE: Language = new Language("German", "de", "de", de, localDE); public static readonly EN: Language = new Language("English", "en", "en", en, localEN); - public static readonly CZ: Language = new Language("Czech", "cz", "de", cz, localDE /* NOTE: there is no locale in @angular/common for Czech */); + public static readonly CS: Language = new Language("Czech", "cs", "de", cz, localCS /* NOTE: there is no locale in @angular/common for Czech */); public static readonly NL: Language = new Language("Dutch", "nl", "nl", nl, localNL); public static readonly ES: Language = new Language("Spanish", "es", "es", es, localES); public static readonly FR: Language = new Language("French", "fr", "fr", fr, localFR); public static readonly JA: Language = new Language("Japanese", "ja", "ja", ja, localJA); - public static readonly ALL = [Language.DE, Language.EN, Language.CZ, Language.NL, Language.ES, Language.FR, Language.JA]; + public static readonly ALL = [Language.DE, Language.EN, Language.CS, Language.NL, Language.ES, Language.FR, Language.JA]; public static readonly DEFAULT = Language.getByKey(environment.defaultLanguage) as Language; constructor( @@ -74,7 +75,7 @@ export class Language { return Language.EN; case "es": return Language.ES; case "nl": return Language.NL; - case "cz": return Language.CZ; + case "cs": return Language.CS; case "fr": return Language.FR; case "ja": return Language.JA; default: return null; @@ -87,7 +88,7 @@ export class Language { case Language.EN.key: return Language.EN.locale; case Language.ES.key: return Language.ES.locale; case Language.NL.key: return Language.NL.locale; - case Language.CZ.key: return Language.CZ.locale; + case Language.CS.key: return Language.CS.locale; case Language.FR.key: return Language.FR.locale; case Language.JA.key: return Language.JA.locale; default: return Language.DEFAULT.locale;