From d3f48f4cb542eddfd90a683e88c41395980c8a4d Mon Sep 17 00:00:00 2001 From: Lavender Shannon Date: Tue, 28 Mar 2023 19:33:19 -0500 Subject: [PATCH] Inspection fixes, recommended changes for upgraded Java versions --- README.md | 2 +- .../node/environment/VariableEnvironment.java | 1 + .../actions/command/AlterManagerAction.java | 1 + .../EnvironmentUpdaterMultiplexer.java | 3 +- .../MultiRoverModbusEnvironment.java | 2 +- .../MultiTracerModbusEnvironment.java | 2 +- .../chatbot/ChatBotHandlerMultiplexer.java | 4 +- .../chatbot/FlagCommandChatBotHandler.java | 2 +- .../InfluxDbDatabaseSettings.java | 2 +- .../options/AutomationProgramOptions.java | 1 + .../options/DatabaseTimeZoneOptionBase.java | 1 + .../config/options/MateProgramOptions.java | 1 + .../options/PVOutputUploadProgramOptions.java | 2 +- .../options/PacketHandlingOptionBase.java | 2 +- .../options/RequestProgramOptionsBase.java | 1 + .../options/RoverSetupProgramOptions.java | 1 + .../retention/RetentionPolicySetting.java | 1 + .../message/MessageSenderMultiplexer.java | 4 +- .../message/event/TemperatureEvent.java | 6 +-- .../program/SecurityPacketReceiver.java | 2 +- .../program/pvoutput/PVOutputUploadMain.java | 49 +++++++++---------- ...ksonTestUtil.java => JacksonUtilTest.java} | 2 +- .../solarthing/program/DatabaseConfig.java | 3 +- .../couchdb/CouchDbAlterDatabase.java | 2 +- .../device/CelsiusCpuTemperaturePacket.java | 2 +- .../ImmutableAuthNewSenderPacket.java | 6 ++- .../security/ImmutableIntegrityPacket.java | 6 ++- .../ImmutableLargeIntegrityPacket.java | 8 +-- .../outback/mx/ImmutableMXStatusPacket.java | 2 +- .../translators/json/JsonNodeTranslator.java | 3 +- other/grafana/graphql_queries.md | 2 +- .../rest/cache/CacheController.java | 4 +- .../rest/graphql/AnnotationUtil.java | 7 ++- .../solarthing/rest/graphql/PacketFinder.java | 3 +- .../graphql/SolarThingExceptionHandler.java | 27 +++++----- .../graphql/SolarThingGraphQLMetaService.java | 3 +- .../graphql/packets/IdentifierFilter.java | 28 ++++------- .../packets/PacketFilterMultiplexer.java | 4 +- .../SolarThingGraphQLDailyService.java | 3 +- .../SolarThingGraphQLLongTermService.java | 4 +- .../service/SolarThingGraphQLService.java | 1 + .../service/web/SolarThingAdminService.java | 32 +++--------- .../solarthing/pvoutput/SimpleDate.java | 18 ------- 43 files changed, 107 insertions(+), 153 deletions(-) rename client/src/test/java/me/retrodaredevil/solarthing/{JacksonTestUtil.java => JacksonUtilTest.java} (93%) diff --git a/README.md b/README.md index ac28f160..a0dfa95f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Stores solar data in a database to view on Android, Grafana, or PVOutput -

+

Supported ProductsDocumentationFeatures • diff --git a/action-node/src/main/java/me/retrodaredevil/action/node/environment/VariableEnvironment.java b/action-node/src/main/java/me/retrodaredevil/action/node/environment/VariableEnvironment.java index 61454fa3..e30919f8 100644 --- a/action-node/src/main/java/me/retrodaredevil/action/node/environment/VariableEnvironment.java +++ b/action-node/src/main/java/me/retrodaredevil/action/node/environment/VariableEnvironment.java @@ -49,6 +49,7 @@ public void setDeclaredAction(String name, ActionEnvironment actionEnvironment, declaredActionMap.put(name, new DeclaredAction(actionEnvironment, actionNode)); } public LockSet getLockSet(String name) { + // TODO lockSetMap is never updated, so a call to this method is guaranteed to result in a NoSuchElementException if (!lockSetMap.containsKey(name)) { if (outerVariableEnvironment == null) { throw new NoSuchElementException("LockSet with name='" + name + "' not declared!"); diff --git a/client/src/main/java/me/retrodaredevil/solarthing/actions/command/AlterManagerAction.java b/client/src/main/java/me/retrodaredevil/solarthing/actions/command/AlterManagerAction.java index 969352e1..129e609e 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/actions/command/AlterManagerAction.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/actions/command/AlterManagerAction.java @@ -269,6 +269,7 @@ private void receivePacketWithIntegrity(String sender, TargetPacketGroup packetG } + // TODO put thought into how to better design the alter manager program and SolarThing database replication /** * @deprecated This method *probably* works perfectly fine, but it is untested against malicious data and the fact that we have to use this method itself shows * how we are using this as a bandaid for the real problem: We need to be sure that the solarthing_open database is secure diff --git a/client/src/main/java/me/retrodaredevil/solarthing/actions/command/EnvironmentUpdaterMultiplexer.java b/client/src/main/java/me/retrodaredevil/solarthing/actions/command/EnvironmentUpdaterMultiplexer.java index 4406f0d9..18588ed2 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/actions/command/EnvironmentUpdaterMultiplexer.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/actions/command/EnvironmentUpdaterMultiplexer.java @@ -3,7 +3,6 @@ import me.retrodaredevil.action.node.environment.InjectEnvironment; import me.retrodaredevil.solarthing.reason.ExecutionReason; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -13,7 +12,7 @@ public class EnvironmentUpdaterMultiplexer implements EnvironmentUpdater { private final List environmentUpdaterList; public EnvironmentUpdaterMultiplexer(Collection environmentUpdaters) { - this.environmentUpdaterList = Collections.unmodifiableList(new ArrayList<>(environmentUpdaters)); + this.environmentUpdaterList = List.copyOf(environmentUpdaters); } public EnvironmentUpdaterMultiplexer(EnvironmentUpdater... environmentUpdaters) { this.environmentUpdaterList = Collections.unmodifiableList(Arrays.asList(environmentUpdaters)); diff --git a/client/src/main/java/me/retrodaredevil/solarthing/actions/environment/MultiRoverModbusEnvironment.java b/client/src/main/java/me/retrodaredevil/solarthing/actions/environment/MultiRoverModbusEnvironment.java index 40b76ff5..fb0b4c4f 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/actions/environment/MultiRoverModbusEnvironment.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/actions/environment/MultiRoverModbusEnvironment.java @@ -10,7 +10,7 @@ public final class MultiRoverModbusEnvironment { private final Map map; public MultiRoverModbusEnvironment(Map map) { - this.map = Collections.unmodifiableMap(new HashMap<>(map)); + this.map = Map.copyOf(map); } public MultiRoverModbusEnvironment() { this.map = Collections.emptyMap(); diff --git a/client/src/main/java/me/retrodaredevil/solarthing/actions/environment/MultiTracerModbusEnvironment.java b/client/src/main/java/me/retrodaredevil/solarthing/actions/environment/MultiTracerModbusEnvironment.java index 9528b7a5..ee5e5ea9 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/actions/environment/MultiTracerModbusEnvironment.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/actions/environment/MultiTracerModbusEnvironment.java @@ -11,7 +11,7 @@ public final class MultiTracerModbusEnvironment { private final Map map; public MultiTracerModbusEnvironment(Map map) { - this.map = Collections.unmodifiableMap(new HashMap<>(map)); + this.map = Map.copyOf(map); } public MultiTracerModbusEnvironment() { this.map = Collections.emptyMap(); diff --git a/client/src/main/java/me/retrodaredevil/solarthing/chatbot/ChatBotHandlerMultiplexer.java b/client/src/main/java/me/retrodaredevil/solarthing/chatbot/ChatBotHandlerMultiplexer.java index 11b7d6ef..0a61989a 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/chatbot/ChatBotHandlerMultiplexer.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/chatbot/ChatBotHandlerMultiplexer.java @@ -3,8 +3,6 @@ import me.retrodaredevil.solarthing.annotations.NotNull; import me.retrodaredevil.solarthing.message.MessageSender; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -12,7 +10,7 @@ public class ChatBotHandlerMultiplexer implements ChatBotHandler { private final List chatBotHandlerList; public ChatBotHandlerMultiplexer(List chatBotHandlerList) { - this.chatBotHandlerList = Collections.unmodifiableList(new ArrayList<>(chatBotHandlerList)); + this.chatBotHandlerList = List.copyOf(chatBotHandlerList); } @Override diff --git a/client/src/main/java/me/retrodaredevil/solarthing/chatbot/FlagCommandChatBotHandler.java b/client/src/main/java/me/retrodaredevil/solarthing/chatbot/FlagCommandChatBotHandler.java index 0a8fab60..675c0810 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/chatbot/FlagCommandChatBotHandler.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/chatbot/FlagCommandChatBotHandler.java @@ -336,7 +336,7 @@ public boolean handleMessage(Message message, MessageSender messageSender) { String durationString = aliasSplit[1]; defaultDuration = TimeUtil.lenientParseDurationOrNull(durationString); if (defaultDuration == null) { - messageSender.sendMessage("Invalid duration: " + defaultDuration); + messageSender.sendMessage("Invalid duration: " + durationString); return true; } } diff --git a/client/src/main/java/me/retrodaredevil/solarthing/config/databases/implementations/InfluxDbDatabaseSettings.java b/client/src/main/java/me/retrodaredevil/solarthing/config/databases/implementations/InfluxDbDatabaseSettings.java index e8ff74a5..ccb865d0 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/config/databases/implementations/InfluxDbDatabaseSettings.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/config/databases/implementations/InfluxDbDatabaseSettings.java @@ -36,7 +36,7 @@ public InfluxDbDatabaseSettings(InfluxProperties influxProperties, OkHttpPropert this.okHttpProperties = requireNonNull(okHttpProperties); this.databaseName = databaseName; this.measurementName = measurementName; - this.frequentStatusRetentionPolicyList = Collections.unmodifiableList(new ArrayList<>(frequentRetentionPolicies)); + this.frequentStatusRetentionPolicyList = List.copyOf(frequentRetentionPolicies); this.eventRetentionPolicySetting = eventRetentionPolicySetting; } diff --git a/client/src/main/java/me/retrodaredevil/solarthing/config/options/AutomationProgramOptions.java b/client/src/main/java/me/retrodaredevil/solarthing/config/options/AutomationProgramOptions.java index da44d063..c337764d 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/config/options/AutomationProgramOptions.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/config/options/AutomationProgramOptions.java @@ -11,6 +11,7 @@ import static java.util.Objects.requireNonNull; +@SuppressWarnings("CanBeFinal") @JsonTypeName("automation") @JsonExplicit public class AutomationProgramOptions extends DatabaseTimeZoneOptionBase implements ActionsOption { diff --git a/client/src/main/java/me/retrodaredevil/solarthing/config/options/DatabaseTimeZoneOptionBase.java b/client/src/main/java/me/retrodaredevil/solarthing/config/options/DatabaseTimeZoneOptionBase.java index 618d7287..653eacbd 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/config/options/DatabaseTimeZoneOptionBase.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/config/options/DatabaseTimeZoneOptionBase.java @@ -7,6 +7,7 @@ import java.nio.file.Path; +@SuppressWarnings("CanBeFinal") @JsonExplicit public abstract class DatabaseTimeZoneOptionBase extends TimeZoneOptionBase implements DatabaseOption, TimeZoneOption { diff --git a/client/src/main/java/me/retrodaredevil/solarthing/config/options/MateProgramOptions.java b/client/src/main/java/me/retrodaredevil/solarthing/config/options/MateProgramOptions.java index 6f905c2a..25e7c2aa 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/config/options/MateProgramOptions.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/config/options/MateProgramOptions.java @@ -11,6 +11,7 @@ import static java.util.Objects.requireNonNull; +@SuppressWarnings({"FieldMayBeFinal", "CanBeFinal"}) @JsonTypeName("mate") @JsonIgnoreProperties("allow_commands") public class MateProgramOptions extends PacketHandlingOptionBase implements IOBundleOption, ProgramOptions { diff --git a/client/src/main/java/me/retrodaredevil/solarthing/config/options/PVOutputUploadProgramOptions.java b/client/src/main/java/me/retrodaredevil/solarthing/config/options/PVOutputUploadProgramOptions.java index 602a363d..a097f632 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/config/options/PVOutputUploadProgramOptions.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/config/options/PVOutputUploadProgramOptions.java @@ -17,7 +17,7 @@ import java.util.List; import java.util.Map; -@SuppressWarnings("FieldMayBeFinal") +@SuppressWarnings({"FieldMayBeFinal", "CanBeFinal"}) @JsonTypeName("pvoutput-upload") @JsonExplicit public class PVOutputUploadProgramOptions extends DatabaseTimeZoneOptionBase implements AnalyticsOption, DatabaseOption, ProgramOptions { diff --git a/client/src/main/java/me/retrodaredevil/solarthing/config/options/PacketHandlingOptionBase.java b/client/src/main/java/me/retrodaredevil/solarthing/config/options/PacketHandlingOptionBase.java index 5acbca1b..0d01bc97 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/config/options/PacketHandlingOptionBase.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/config/options/PacketHandlingOptionBase.java @@ -14,7 +14,7 @@ import static java.util.Objects.requireNonNull; -@SuppressWarnings("FieldCanBeLocal") +@SuppressWarnings({"FieldCanBeLocal", "CanBeFinal"}) abstract class PacketHandlingOptionBase extends TimeZoneOptionBase implements PacketHandlingOption, ActionsOption, CommandOption, AnalyticsOption { // private static final Logger LOGGER = LoggerFactory.getLogger(PacketHandlingOptionBase.class); diff --git a/client/src/main/java/me/retrodaredevil/solarthing/config/options/RequestProgramOptionsBase.java b/client/src/main/java/me/retrodaredevil/solarthing/config/options/RequestProgramOptionsBase.java index 0525e492..66a04443 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/config/options/RequestProgramOptionsBase.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/config/options/RequestProgramOptionsBase.java @@ -6,6 +6,7 @@ import static java.util.Objects.requireNonNull; +@SuppressWarnings({"FieldMayBeFinal", "CanBeFinal"}) public abstract class RequestProgramOptionsBase extends PacketHandlingOptionBase implements CommandOption, ActionsOption { // When defined as a Duration, Jackson will parse numbers as second values for the duration diff --git a/client/src/main/java/me/retrodaredevil/solarthing/config/options/RoverSetupProgramOptions.java b/client/src/main/java/me/retrodaredevil/solarthing/config/options/RoverSetupProgramOptions.java index 27008af3..769d3a34 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/config/options/RoverSetupProgramOptions.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/config/options/RoverSetupProgramOptions.java @@ -8,6 +8,7 @@ import static java.util.Objects.requireNonNull; +@SuppressWarnings({"FieldMayBeFinal", "CanBeFinal"}) @JsonTypeName("rover-setup") @JsonExplicit public class RoverSetupProgramOptions implements ProgramOptions, RoverOption { diff --git a/client/src/main/java/me/retrodaredevil/solarthing/influxdb/retention/RetentionPolicySetting.java b/client/src/main/java/me/retrodaredevil/solarthing/influxdb/retention/RetentionPolicySetting.java index aa2c1992..09c26cd1 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/influxdb/retention/RetentionPolicySetting.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/influxdb/retention/RetentionPolicySetting.java @@ -60,6 +60,7 @@ public boolean isIgnoreUnsuccessfulCreate() { return ignoreUnsuccessfulCreate; } + @SuppressWarnings({"FieldMayBeFinal", "CanBeFinal"}) @JsonPOJOBuilder static class Builder { @JsonProperty("name") diff --git a/client/src/main/java/me/retrodaredevil/solarthing/message/MessageSenderMultiplexer.java b/client/src/main/java/me/retrodaredevil/solarthing/message/MessageSenderMultiplexer.java index f6a28101..119229ee 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/message/MessageSenderMultiplexer.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/message/MessageSenderMultiplexer.java @@ -1,15 +1,13 @@ package me.retrodaredevil.solarthing.message; -import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; public class MessageSenderMultiplexer implements MessageSender { private final List messageSenderList; public MessageSenderMultiplexer(Collection messageSenders) { - this.messageSenderList = Collections.unmodifiableList(new ArrayList<>(messageSenders)); + this.messageSenderList = List.copyOf(messageSenders); } @Override diff --git a/client/src/main/java/me/retrodaredevil/solarthing/message/event/TemperatureEvent.java b/client/src/main/java/me/retrodaredevil/solarthing/message/event/TemperatureEvent.java index dc4e9278..2a61ffb6 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/message/event/TemperatureEvent.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/message/event/TemperatureEvent.java @@ -40,11 +40,7 @@ public TemperatureEvent( throw new IllegalArgumentException("Either celsius or fahrenheit must be defined!"); } this.timeout = Duration.parse(timeoutDurationString); - if (temperatureType == null) { - this.temperatureType = TemperatureType.BATTERY; - } else { - this.temperatureType = temperatureType; - } + this.temperatureType = temperatureType == null ? TemperatureType.BATTERY : temperatureType; } @Override diff --git a/client/src/main/java/me/retrodaredevil/solarthing/program/SecurityPacketReceiver.java b/client/src/main/java/me/retrodaredevil/solarthing/program/SecurityPacketReceiver.java index 7eb426d1..47532f50 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/program/SecurityPacketReceiver.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/program/SecurityPacketReceiver.java @@ -214,7 +214,7 @@ private void receivePacketGroup(StoredPacketGroup storedPacketGroup, TargetPacke } LargeIntegrityPacket largeIntegrityPacket = (LargeIntegrityPacket) packet; String sender = largeIntegrityPacket.getSender(); - final String invalidSenderReason = sender == null ? "sender is null!" : SenderUtil.getInvalidSenderNameReason(sender); + final String invalidSenderReason = SenderUtil.getInvalidSenderNameReason(sender); if(invalidSenderReason != null){ LOGGER.warn(SolarThingConstants.SUMMARY_MARKER, invalidSenderReason); reject(storedPacketGroup, SecurityRejectPacket.Reason.INVALID_DATA, invalidSenderReason); diff --git a/client/src/main/java/me/retrodaredevil/solarthing/program/pvoutput/PVOutputUploadMain.java b/client/src/main/java/me/retrodaredevil/solarthing/program/pvoutput/PVOutputUploadMain.java index 2fdf10be..42de08a7 100644 --- a/client/src/main/java/me/retrodaredevil/solarthing/program/pvoutput/PVOutputUploadMain.java +++ b/client/src/main/java/me/retrodaredevil/solarthing/program/pvoutput/PVOutputUploadMain.java @@ -44,9 +44,11 @@ import java.io.IOException; import java.nio.file.Path; -import java.text.ParseException; -import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDate; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.time.format.TextStyle; import java.util.ArrayList; import java.util.Arrays; @@ -63,7 +65,6 @@ public class PVOutputUploadMain { @SuppressWarnings({"SameReturnValue", "deprecation"}) public static int startPVOutputUpload(PVOutputUploadProgramOptions options, CommandOptions commandOptions, Path dataDirectory, boolean isValidate){ - final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); // Not thread safe, otherwise this would be a static field LOGGER.info(SolarThingConstants.SUMMARY_MARKER, "Starting PV Output upload program"); ZoneId zoneId = options.getZoneId(); @@ -91,13 +92,13 @@ public static int startPVOutputUpload(PVOutputUploadProgramOptions options, Comm String toDateString = commandOptions.getPVOutputToDate(); if(fromDateString != null && toDateString != null) { System.out.println("Starting range upload"); - final SimpleDate fromDate; - final SimpleDate toDate; + final LocalDate fromDate; + final LocalDate toDate; try { // TODO Don't use SimpleDateFormat anymore and remove supress warnings for deprecation - fromDate = SimpleDate.fromDate(DATE_FORMAT.parse(fromDateString)); - toDate = SimpleDate.fromDate(DATE_FORMAT.parse(toDateString)); - } catch (ParseException e) { + fromDate = LocalDate.parse(fromDateString, DateTimeFormatter.ISO_LOCAL_DATE); + toDate = LocalDate.parse(toDateString, DateTimeFormatter.ISO_LOCAL_DATE); + } catch (DateTimeParseException e) { e.printStackTrace(); System.err.println("Unable to parser either from date or to date. Use the yyyy-MM-dd format"); return SolarThingConstants.EXIT_CODE_INVALID_OPTIONS; @@ -123,61 +124,57 @@ public static int startPVOutputUpload(PVOutputUploadProgramOptions options, Comm } @SuppressWarnings("CatchAndPrintStackTrace") private static int startRangeUpload( - SimpleDate fromDate, SimpleDate toDate, + LocalDate fromDate, LocalDate toDate, PVOutputUploadProgramOptions options, SolarThingDatabase database, PVOutputHandler handler, PVOutputService service, ZoneId zoneId ) { List addOutputParameters = new ArrayList<>(); - SimpleDate date = fromDate; - while(date.compareTo(toDate) <= 0) { + for(LocalDate date = fromDate; !date.isAfter(toDate); date = date.plusDays(1)) { // toDate is inclusive System.out.println("Doing " + date); - SimpleDate tomorrow = date.tomorrow(); - long dayStart = date.getDayStartDateMillis(zoneId); - long dayEnd = tomorrow.getDayStartDateMillis(zoneId); + Instant dayStart = date.atStartOfDay(zoneId).toInstant(); + Instant dayEnd = date.plusDays(1).atStartOfDay(zoneId).toInstant(); List rawPacketGroups = null; try { rawPacketGroups = database.getStatusDatabase().query(new MillisQueryBuilder() - .startKey(dayStart) - .endKey(dayEnd) + .startKey(dayStart.toEpochMilli()) + .endKey(dayEnd.toEpochMilli()) .inclusiveEnd(false) .build() ); - System.out.println("Got " + rawPacketGroups.size() + " packets for date: " + date.toPVOutputString()); + System.out.println("Got " + rawPacketGroups.size() + " packets for date: " + date); } catch (SolarThingDatabaseException e) { e.printStackTrace(); - System.err.println("Couldn't query packets. Skipping " + date.toPVOutputString()); + System.err.println("Couldn't query packets. Skipping " + date); } if (rawPacketGroups != null) { List packetGroups = PacketUtil.getPacketGroups(options.getSourceId(), options.getDefaultInstanceOptions(), rawPacketGroups); if (packetGroups != null) { - if (!handler.checkPackets(dayStart, packetGroups)) { - System.err.println("Unsuccessfully checked packets for " + date.toPVOutputString()); + if (!handler.checkPackets(dayStart.toEpochMilli(), packetGroups)) { + System.err.println("Unsuccessfully checked packets for " + date); try { System.out.println(MAPPER.writeValueAsString(packetGroups.get(packetGroups.size() - 1))); } catch (JsonProcessingException e) { e.printStackTrace(); } } else { - AddStatusParameters statusParameters = handler.getStatus(dayStart, packetGroups); + AddStatusParameters statusParameters = handler.getStatus(dayStart.toEpochMilli(), packetGroups); AddOutputParametersBuilder outputParametersBuilder = new AddOutputParametersBuilder(statusParameters.getDate()) .setGenerated(statusParameters.getEnergyGeneration()) .setConsumption(statusParameters.getEnergyConsumption()); - PVOutputHandler.setImportedExported(outputParametersBuilder, packetGroups, AccumulationConfig.createDefault(dayStart), options.isIncludeImport(), options.isIncludeExport()); + PVOutputHandler.setImportedExported(outputParametersBuilder, packetGroups, AccumulationConfig.createDefault(dayStart.toEpochMilli()), options.isIncludeImport(), options.isIncludeExport()); AddOutputParameters outputParameters = outputParametersBuilder.build(); addOutputParameters.add(outputParameters); - System.out.println("Added parameters for " + date.toPVOutputString() + " to queue."); + System.out.println("Added parameters for " + date + " to queue."); System.out.println("Generated: " + statusParameters.getEnergyGeneration()); System.out.println(Arrays.toString(outputParameters.toCsvArray())); System.out.println(CsvUtil.toCsvString(outputParameters.toCsvArray())); } } else { - System.err.println("Didn't find any packets with source: " + options.getSourceId() + " for date: " + date.toPVOutputString()); + System.err.println("Didn't find any packets with source: " + options.getSourceId() + " for date: " + date); } } - - date = tomorrow; } System.out.println("Going to upload in batches of 30..."); for (int i = 0; i < addOutputParameters.size(); i += 30) { diff --git a/client/src/test/java/me/retrodaredevil/solarthing/JacksonTestUtil.java b/client/src/test/java/me/retrodaredevil/solarthing/JacksonUtilTest.java similarity index 93% rename from client/src/test/java/me/retrodaredevil/solarthing/JacksonTestUtil.java rename to client/src/test/java/me/retrodaredevil/solarthing/JacksonUtilTest.java index c99dac07..b539cafc 100644 --- a/client/src/test/java/me/retrodaredevil/solarthing/JacksonTestUtil.java +++ b/client/src/test/java/me/retrodaredevil/solarthing/JacksonUtilTest.java @@ -7,7 +7,7 @@ import java.time.Duration; -public class JacksonTestUtil { +public class JacksonUtilTest { @Test void testDefaultMapper() throws JsonProcessingException { ObjectMapper mapper = JacksonUtil.defaultMapper(); diff --git a/common/src/main/java/me/retrodaredevil/solarthing/program/DatabaseConfig.java b/common/src/main/java/me/retrodaredevil/solarthing/program/DatabaseConfig.java index 762d5897..df505db7 100644 --- a/common/src/main/java/me/retrodaredevil/solarthing/program/DatabaseConfig.java +++ b/common/src/main/java/me/retrodaredevil/solarthing/program/DatabaseConfig.java @@ -8,7 +8,6 @@ import me.retrodaredevil.solarthing.config.databases.IndividualSettings; import java.util.Collections; -import java.util.HashMap; import java.util.Map; @JsonExplicit @@ -34,7 +33,7 @@ private DatabaseConfig(){ public DatabaseConfig(DatabaseSettings settings, Map frequencySettingsMap) { this.settings = settings; - this.individualSettingsMap = Collections.unmodifiableMap(new HashMap<>(frequencySettingsMap)); + this.individualSettingsMap = Map.copyOf(frequencySettingsMap); type = settings.getDatabaseType().getName(); } diff --git a/core/src/main/java/me/retrodaredevil/solarthing/database/couchdb/CouchDbAlterDatabase.java b/core/src/main/java/me/retrodaredevil/solarthing/database/couchdb/CouchDbAlterDatabase.java index 350f66c5..e871c768 100644 --- a/core/src/main/java/me/retrodaredevil/solarthing/database/couchdb/CouchDbAlterDatabase.java +++ b/core/src/main/java/me/retrodaredevil/solarthing/database/couchdb/CouchDbAlterDatabase.java @@ -85,7 +85,7 @@ public CouchDbAlterDatabase(CouchDbDatabase database, ObjectMapper mapper) { ObjectNode objectNode = (ObjectNode) jsonNode; final StoredAlterPacket storedAlterPacket; try { - storedAlterPacket = mapper.treeToValue(objectNode, StoredAlterPacket.class);; + storedAlterPacket = mapper.treeToValue(objectNode, StoredAlterPacket.class); } catch (JsonProcessingException e) { throw new SolarThingDatabaseException("Could not parse. JsonData: " + jsonData.getJson(), e); } diff --git a/core/src/main/java/me/retrodaredevil/solarthing/misc/device/CelsiusCpuTemperaturePacket.java b/core/src/main/java/me/retrodaredevil/solarthing/misc/device/CelsiusCpuTemperaturePacket.java index 0803b488..1fc68672 100644 --- a/core/src/main/java/me/retrodaredevil/solarthing/misc/device/CelsiusCpuTemperaturePacket.java +++ b/core/src/main/java/me/retrodaredevil/solarthing/misc/device/CelsiusCpuTemperaturePacket.java @@ -56,7 +56,7 @@ public float getCpuTemperatureFahrenheit() { } @Override - public List getCores() { + public @NotNull List getCores() { return cores; } diff --git a/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableAuthNewSenderPacket.java b/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableAuthNewSenderPacket.java index 667a1df1..7cf25678 100644 --- a/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableAuthNewSenderPacket.java +++ b/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableAuthNewSenderPacket.java @@ -8,6 +8,8 @@ import java.security.PublicKey; +import static java.util.Objects.requireNonNull; + public final class ImmutableAuthNewSenderPacket implements AuthNewSenderPacket { private final String sender; @@ -19,8 +21,8 @@ public ImmutableAuthNewSenderPacket( @JsonProperty(value = "sender", required = true) String sender, @JsonProperty(value = "publicKey", required = true) String publicKey ) throws InvalidKeyException { - this.sender = sender; - this.publicKey = publicKey; + this.sender = requireNonNull(sender); + this.publicKey = requireNonNull(publicKey); publicKeyObject = KeyUtil.decodePublicKey(publicKey); } diff --git a/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableIntegrityPacket.java b/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableIntegrityPacket.java index 18f9d5a1..68d2d729 100644 --- a/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableIntegrityPacket.java +++ b/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableIntegrityPacket.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import me.retrodaredevil.solarthing.annotations.NotNull; +import static java.util.Objects.requireNonNull; + public final class ImmutableIntegrityPacket implements IntegrityPacket { private final String sender; private final String encryptedData; @@ -13,8 +15,8 @@ public ImmutableIntegrityPacket( @JsonProperty(value = "sender", required = true) String sender, @JsonProperty(value = "encryptedData", required = true) String encryptedData ) { - this.sender = sender; - this.encryptedData = encryptedData; + this.sender = requireNonNull(sender); + this.encryptedData = requireNonNull(encryptedData); } @Override diff --git a/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableLargeIntegrityPacket.java b/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableLargeIntegrityPacket.java index aa3d5b22..c8f0584c 100644 --- a/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableLargeIntegrityPacket.java +++ b/core/src/main/java/me/retrodaredevil/solarthing/packets/security/ImmutableLargeIntegrityPacket.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import me.retrodaredevil.solarthing.annotations.NotNull; +import static java.util.Objects.requireNonNull; + public class ImmutableLargeIntegrityPacket implements LargeIntegrityPacket { private final String sender; @@ -15,9 +17,9 @@ public ImmutableLargeIntegrityPacket( @JsonProperty(value = "sender", required = true) String sender, @JsonProperty(value = "encryptedHash", required = true) String encryptedHash, @JsonProperty(value = "payload", required = true) String payload) { - this.sender = sender; - this.encryptedHash = encryptedHash; - this.payload = payload; + this.sender = requireNonNull(sender); + this.encryptedHash = requireNonNull(encryptedHash); + this.payload = requireNonNull(payload); } @Override diff --git a/core/src/main/java/me/retrodaredevil/solarthing/solar/outback/mx/ImmutableMXStatusPacket.java b/core/src/main/java/me/retrodaredevil/solarthing/solar/outback/mx/ImmutableMXStatusPacket.java index 5e99fc32..3933cb83 100644 --- a/core/src/main/java/me/retrodaredevil/solarthing/solar/outback/mx/ImmutableMXStatusPacket.java +++ b/core/src/main/java/me/retrodaredevil/solarthing/solar/outback/mx/ImmutableMXStatusPacket.java @@ -32,7 +32,7 @@ final class ImmutableMXStatusPacket implements MXStatusPacket { @JsonCreator ImmutableMXStatusPacket( - @JsonProperty("packetVersion") Integer packetVersion, + @JsonProperty("packetVersion") @Nullable Integer packetVersion, @JsonProperty(value = "address", required = true) int address, @JsonProperty(value = "chargerCurrent", required = true) int chargerCurrent, @JsonProperty(value = "pvCurrent", required = true) int pvCurrent, @JsonProperty(value = "inputVoltage", required = true) int inputVoltage, @JsonProperty(value = "dailyKWH", required = true) float dailyKWH, @JsonProperty(value = "ampChargerCurrent", required = true) float ampChargerCurrent, diff --git a/notation-script/src/main/java/me/retrodaredevil/notation/translators/json/JsonNodeTranslator.java b/notation-script/src/main/java/me/retrodaredevil/notation/translators/json/JsonNodeTranslator.java index f01fbc35..9f21d264 100644 --- a/notation-script/src/main/java/me/retrodaredevil/notation/translators/json/JsonNodeTranslator.java +++ b/notation-script/src/main/java/me/retrodaredevil/notation/translators/json/JsonNodeTranslator.java @@ -77,8 +77,7 @@ private JsonNode translateData(Node node) { } Map namedArguments = node.getNamedArguments(); Map fieldMap = new HashMap<>(); - namedArguments.entrySet() - .forEach(entry -> fieldMap.put(entry.getKey(), translateArgument(entry.getValue()))); + namedArguments.forEach((key, value) -> fieldMap.put(key, translateArgument(value))); return new ObjectNode(JsonNodeFactory.instance, fieldMap); } diff --git a/other/grafana/graphql_queries.md b/other/grafana/graphql_queries.md index 049edd78..d119ed6e 100644 --- a/other/grafana/graphql_queries.md +++ b/other/grafana/graphql_queries.md @@ -56,7 +56,7 @@ query { Time: dateMillis packet { productModelString - chargingStateName + solarModeName controllerTemperatureCelsius } } diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/cache/CacheController.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/cache/CacheController.java index f0abc59b..8c2e78b9 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/cache/CacheController.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/cache/CacheController.java @@ -28,7 +28,7 @@ public CacheController(CacheHandler cacheHandler) { produces = "application/json" ) public @NotNull List<@NotNull IdentificationCacheDataPacket> getChargeControllerAccumulation(String sourceId, long startMillis, long endMillis) { - final TypeReference> typeReference = new TypeReference>() {}; + final TypeReference> typeReference = new TypeReference<>() {}; return cacheHandler.getCachesFromDateMillis(typeReference, ChargeControllerAccumulationDataCache.CACHE_NAME, sourceId, startMillis, endMillis); } @GetMapping( @@ -36,7 +36,7 @@ public CacheController(CacheHandler cacheHandler) { produces = "application/json" ) public @NotNull List<@NotNull IdentificationCacheDataPacket> getFXAccumulation(String sourceId, long startMillis, long endMillis) { - final TypeReference> typeReference = new TypeReference>() {}; + final TypeReference> typeReference = new TypeReference<>() {}; return cacheHandler.getCachesFromDateMillis(typeReference, FXAccumulationDataCache.CACHE_NAME, sourceId, startMillis, endMillis); } @GetMapping( diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/AnnotationUtil.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/AnnotationUtil.java index 11f4ad1e..566757fd 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/AnnotationUtil.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/AnnotationUtil.java @@ -49,11 +49,10 @@ public static T getAnnotation(Class annotationClass, M return getAnnotation(annotationClass, method, method.getDeclaringClass()); } public static T getAnnotation(Class annotationClass, Member member) { - if (member instanceof Method) { - return getAnnotation(annotationClass, (Method) member); + if (member instanceof Method method) { + return getAnnotation(annotationClass, method); } - if (member instanceof Field) { - Field field = (Field) member; + if (member instanceof Field field) { return field.getAnnotation(annotationClass); } throw new UnsupportedOperationException("Unsupported type: " + member.getClass()); diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/PacketFinder.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/PacketFinder.java index 6bd24430..73ee63d6 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/PacketFinder.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/PacketFinder.java @@ -38,8 +38,7 @@ private void updateWithRange(long queryStart, long queryEnd) { for (InstancePacketGroup instancePacketGroup : rawPackets) { int fragmentId = instancePacketGroup.getFragmentId(); for (Packet packet : instancePacketGroup.getPackets()) { - if (packet instanceof Identifiable) { - Identifiable identifiable = (Identifiable) packet; + if (packet instanceof Identifiable identifiable) { IdentifierFragment packetIdentifierFragment = IdentifierFragment.create(fragmentId, identifiable.getIdentifier()); cacheMap.putIfAbsent(packetIdentifierFragment, identifiable); } diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/SolarThingExceptionHandler.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/SolarThingExceptionHandler.java index 21d7644c..e1841ef9 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/SolarThingExceptionHandler.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/SolarThingExceptionHandler.java @@ -10,6 +10,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.concurrent.CompletableFuture; + public class SolarThingExceptionHandler implements DataFetcherExceptionHandler { private static final Logger LOGGER = LoggerFactory.getLogger(SolarThingExceptionHandler.class); @@ -19,19 +21,20 @@ public class SolarThingExceptionHandler implements DataFetcherExceptionHandler { */ @Override - public DataFetcherExceptionHandlerResult onException(DataFetcherExceptionHandlerParameters handlerParameters) { - - Throwable exception = handlerParameters.getException(); - SourceLocation sourceLocation = handlerParameters.getSourceLocation(); - ResultPath path = handlerParameters.getPath(); + public CompletableFuture handleException(DataFetcherExceptionHandlerParameters handlerParameters) { + return CompletableFuture.supplyAsync(() -> { + Throwable exception = handlerParameters.getException(); + SourceLocation sourceLocation = handlerParameters.getSourceLocation(); + ResultPath path = handlerParameters.getPath(); - if (exception instanceof DatabaseException) { // this is the most common exception, usually caused by a timeout - LOGGER.info("Got database exception", exception); - } else { - LOGGER.warn("Got uncommon exception", exception); - } + if (exception instanceof DatabaseException) { // this is the most common exception, usually caused by a timeout + LOGGER.info("Got database exception", exception); + } else { + LOGGER.warn("Got uncommon exception", exception); + } - ExceptionWhileDataFetching error = new ExceptionWhileDataFetching(path, exception, sourceLocation); - return DataFetcherExceptionHandlerResult.newResult().error(error).build(); + ExceptionWhileDataFetching error = new ExceptionWhileDataFetching(path, exception, sourceLocation); + return DataFetcherExceptionHandlerResult.newResult().error(error).build(); + }); } } diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/SolarThingGraphQLMetaService.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/SolarThingGraphQLMetaService.java index 53d41941..330064cd 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/SolarThingGraphQLMetaService.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/SolarThingGraphQLMetaService.java @@ -28,8 +28,7 @@ public SolarThingGraphQLMetaService(SimpleQueryHandler simpleQueryHandler) { int dataId = packetNode.getPacket().getDataId(); MetaDatabase metaDatabase = simpleQueryHandler.queryMeta(); for (TargetedMetaPacket targetedMetaPacket : metaDatabase.getMeta(packetNode.getDateMillis(), fragmentId)) { - if (targetedMetaPacket instanceof DataMetaPacket) { - DataMetaPacket dataMetaPacket = (DataMetaPacket) targetedMetaPacket; + if (targetedMetaPacket instanceof DataMetaPacket dataMetaPacket) { if (dataMetaPacket.getDataId() == dataId) { return dataMetaPacket; } diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/packets/IdentifierFilter.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/packets/IdentifierFilter.java index 4b85f99c..fdddec6d 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/packets/IdentifierFilter.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/packets/IdentifierFilter.java @@ -28,24 +28,16 @@ public IdentifierFilter(String identifierRepresentation, boolean acceptSupplemen @Override public boolean keep(PacketNode packetNode) { Object packet = packetNode.getPacket(); - if (packet instanceof Identifiable) { - if (acceptSupplementary && packet instanceof SupplementaryIdentifiable) { - SupplementaryIdentifiable supplementaryIdentifiable = (SupplementaryIdentifiable) packet; - if (supplementaryIdentifiable.getIdentifier().getSupplementaryTo().getRepresentation().equals(identifierRepresentation)) { - return true; - } - } - return ((Identifiable) packet).getIdentifier().getRepresentation().equals(identifierRepresentation); - } - switch (defaultAction) { - case KEEP: - return true; - case NO_KEEP: - return false; - case ERROR: - throw new IllegalArgumentException("packet in packetNode wasn't Identifiable! packetNode: " + packetNode); - default: - throw new AssertionError("unknown defaultAction=" + defaultAction); + if (packet instanceof Identifiable identifiable) { + return (acceptSupplementary + && packet instanceof SupplementaryIdentifiable supplementaryIdentifiable + && supplementaryIdentifiable.getIdentifier().getSupplementaryTo().getRepresentation().equals(identifierRepresentation)) + || identifiable.getIdentifier().getRepresentation().equals(identifierRepresentation); } + return switch (defaultAction) { + case KEEP -> true; + case NO_KEEP -> false; + case ERROR -> throw new IllegalArgumentException("packet in packetNode wasn't Identifiable! packetNode: " + packetNode); + }; } } diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/packets/PacketFilterMultiplexer.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/packets/PacketFilterMultiplexer.java index 496911b5..7c5a6bc7 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/packets/PacketFilterMultiplexer.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/packets/PacketFilterMultiplexer.java @@ -2,16 +2,14 @@ import me.retrodaredevil.solarthing.rest.graphql.packets.nodes.PacketNode; -import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; public class PacketFilterMultiplexer implements PacketFilter { private final List packetFilterList; public PacketFilterMultiplexer(Collection packetFilterList) { - this.packetFilterList = Collections.unmodifiableList(new ArrayList<>(packetFilterList)); + this.packetFilterList = List.copyOf(packetFilterList); } @Override diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLDailyService.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLDailyService.java index 510cadcc..60bc6643 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLDailyService.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLDailyService.java @@ -143,9 +143,8 @@ private void addDayPoints(Collection>> identifierMap = map.computeIfAbsent(date, (_date) -> new HashMap<>()); identifierMap.computeIfAbsent(identifierFragment, (_identifier) -> new ArrayList<>()).add(new TimestampedPacket<>(dailyChargeController, dateMillis)); diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLLongTermService.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLLongTermService.java index 41100ebe..33173f16 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLLongTermService.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLLongTermService.java @@ -72,9 +72,7 @@ public SolarThingLongTermQuery(String sourceId, long startMillis, long endMillis if (result == null) { result = packet; } else { - @SuppressWarnings("unchecked") - IdentificationCacheDataPacket newResult = (IdentificationCacheDataPacket) result.combine(packet); - result = newResult; + result = result.combine(packet); } } return result; diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLService.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLService.java index 767ea5f5..62549c05 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLService.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/SolarThingGraphQLService.java @@ -183,6 +183,7 @@ public SolarThingStatusQuery(PacketGetter packetGetter, List> temperature() { + // TODO the filtering of packets should not be based on POSSIBLE_BAD_VALUES, but should instead be based on sudden spikes in the data List> packetNodes = packetGetter.getPackets(TemperaturePacket.class); packetNodes.removeIf(node -> TemperaturePacket.POSSIBLE_BAD_VALUES.contains(node.getPacket().getTemperatureCelsius())); return packetNodes; diff --git a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/web/SolarThingAdminService.java b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/web/SolarThingAdminService.java index 82c34cc8..00a7779f 100644 --- a/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/web/SolarThingAdminService.java +++ b/server/src/main/java/me/retrodaredevil/solarthing/rest/graphql/service/web/SolarThingAdminService.java @@ -1,6 +1,5 @@ package me.retrodaredevil.solarthing.rest.graphql.service.web; -import graphql.AssertException; import io.leangen.graphql.annotations.GraphQLArgument; import io.leangen.graphql.annotations.GraphQLMutation; import io.leangen.graphql.annotations.GraphQLQuery; @@ -183,29 +182,14 @@ private SolarThingDatabaseSystemStatus(SolarThingDatabase database) { } @Override public @NotNull DatabaseStatus getStatus(@NotNull SolarThingDatabaseType databaseType) { - final DatabaseSource source; - switch (requireNonNull(databaseType)) { - case STATUS: - source = database.getStatusDatabase().getDatabaseSource(); - break; - case EVENT: - source = database.getEventDatabase().getDatabaseSource(); - break; - case CLOSED: - source = database.getClosedDatabaseSource(); - break; - case OPEN: - source = database.getOpenDatabase().getDatabaseSource(); - break; - case CACHE: - source = database.getCacheDatabaseSource(); - break; - case ALTER: - source = database.getAlterDatabase().getDatabaseSource(); - break; - default: - throw new AssertException("Unknown database type: " + databaseType); - } + final DatabaseSource source = switch (requireNonNull(databaseType)) { + case STATUS -> database.getStatusDatabase().getDatabaseSource(); + case EVENT -> database.getEventDatabase().getDatabaseSource(); + case CLOSED -> database.getClosedDatabaseSource(); + case OPEN -> database.getOpenDatabase().getDatabaseSource(); + case CACHE -> database.getCacheDatabaseSource(); + case ALTER -> database.getAlterDatabase().getDatabaseSource(); + }; try { boolean exists = source.exists(); if (!exists) { diff --git a/serviceapi/src/main/java/me/retrodaredevil/solarthing/pvoutput/SimpleDate.java b/serviceapi/src/main/java/me/retrodaredevil/solarthing/pvoutput/SimpleDate.java index de26b5ff..1826d618 100644 --- a/serviceapi/src/main/java/me/retrodaredevil/solarthing/pvoutput/SimpleDate.java +++ b/serviceapi/src/main/java/me/retrodaredevil/solarthing/pvoutput/SimpleDate.java @@ -16,9 +16,6 @@ import java.time.temporal.ChronoField; import java.time.temporal.Temporal; import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.TimeZone; import java.util.Objects; /** @@ -48,25 +45,10 @@ public static SimpleDate fromCalendar(Calendar calendar){ public static SimpleDate fromTemporal(Temporal instant){ return new SimpleDate(instant.get(ChronoField.YEAR), instant.get(ChronoField.MONTH_OF_YEAR), instant.get(ChronoField.DAY_OF_MONTH)); } - @Deprecated - public static SimpleDate fromDate(Date date) { - Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC")); - calendar.setTime(date); - return fromCalendar(calendar); - } public static SimpleDate fromDateMillis(long dateMillis, ZoneId zoneId) { LocalDateTime localDateTime = Instant.ofEpochMilli(dateMillis).atZone(zoneId).toLocalDateTime(); return fromTemporal(localDateTime); } - @Deprecated - public Calendar toCalendar(TimeZone timeZone) { - Calendar calendar = new GregorianCalendar(timeZone); - // Java Calender stuff is between 0 and 11 for months - //noinspection MagicConstant - calendar.set(year, month - 1, day, 0, 0, 0); - calendar.set(Calendar.MILLISECOND, 0); - return calendar; - } public LocalDate toLocalDate() { return LocalDate.of(year, month, day); }