From 34459b3a483244516b4b34dce33b25a8d4b0e5fe Mon Sep 17 00:00:00 2001 From: Laurent ARNAL Date: Fri, 2 Feb 2024 09:49:52 +0100 Subject: [PATCH] review null annotation and null pointer warning Signed-off-by: Laurent ARNAL --- .../linky/internal/LinkyAuthServlet.java | 25 +++--- .../linky/internal/LinkyHandlerFactory.java | 9 +- .../linky/internal/api/EnedisHttpApi.java | 16 +--- .../linky/internal/dto/TempoResponse.java | 2 + .../linky/internal/handler/LinkyHandler.java | 87 +++++++++---------- 5 files changed, 64 insertions(+), 75 deletions(-) diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java index a1c1e42303d..50fc4fab286 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyAuthServlet.java @@ -51,8 +51,6 @@ public class LinkyAuthServlet extends HttpServlet { private static final String HTML_USER_AUTHORIZED = "

Addon authorized for %s.

"; private static final String HTML_ERROR = "

Call to Enedis failed with error: %s

"; - private static final String HTML_META_REFRESH_CONTENT = ""; - // Keys present in the index.html private static final String KEY_AUTHORIZE_URI = "authorize.uri"; private static final String KEY_RETRIEVE_TOKEN_URI = "retrieveToken.uri"; @@ -72,16 +70,17 @@ public class LinkyAuthServlet extends HttpServlet { } @Override - protected void doGet(@Nullable HttpServletRequest req, @Nullable HttpServletResponse resp) - throws ServletException, IOException { + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { logger.debug("Linky auth callback servlet received GET request {}.", req.getRequestURI()); final Map replaceMap = new HashMap<>(); - final String servletBaseURL = req.getRequestURL().toString(); + String servletBaseURL = ""; + StringBuffer requestURL = req.getRequestURL(); + if (requestURL != null) { + servletBaseURL = requestURL.toString(); + } String servletBaseURLSecure = servletBaseURL; - // .replace("http://", "https://"); - // .replace("8080", "8443"); handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString()); @@ -91,15 +90,19 @@ public class LinkyAuthServlet extends HttpServlet { StringBuffer optionBuffer = new StringBuffer(); - String[] prmIds = accountHandler.getAllPrmId(); - for (String prmId : prmIds) { - optionBuffer.append(""); + if (accountHandler != null) { + String[] prmIds = accountHandler.getAllPrmId(); + for (String prmId : prmIds) { + optionBuffer.append(""); + } } replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString()); replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure); replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK"); - replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure)); + if (accountHandler != null) { + replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure)); + } resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap)); resp.getWriter().close(); } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java index f7e9d83d422..5fa56ed77e8 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/LinkyHandlerFactory.java @@ -100,7 +100,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link private final LocaleProvider localeProvider; private final HttpClient httpClient; - private final OAuthFactory oAuthFactory; private final LinkyAuthService authService; private final boolean oAuthSupport = false; private @Nullable OAuthClientService oAuthService; @@ -126,8 +125,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory); httpClient.setFollowRedirects(false); httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE); - httpClient.setResponseBufferSize(RESPONSE_BUFFER_SIZE); - this.oAuthFactory = oAuthFactory; this.authService = authService; this.oAuthService = oAuthFactory.createOAuthClientService("Linky", LinkyBindingConstants.LINKY_API_TOKEN_URL, @@ -165,7 +162,7 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link protected @Nullable ThingHandler createHandler(Thing thing) { if (supportsThingType(thing.getThingTypeUID())) { - LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient, oAuthFactory); + LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient); return handler; } @@ -235,7 +232,9 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link config.put("token", token); LinkyHandler handler = (LinkyHandler) thing.getHandler(); - handler.saveConfiguration(config); + if (handler != null) { + handler.saveConfiguration(config); + } } } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java index 3cc4ec6ae95..f6cbd3b9ba9 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/api/EnedisHttpApi.java @@ -24,13 +24,9 @@ import java.util.concurrent.TimeoutException; import javax.ws.rs.core.MediaType; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; -import org.eclipse.jetty.client.util.FormContentProvider; -import org.eclipse.jetty.client.util.StringContentProvider; -import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.util.Fields; @@ -80,11 +76,11 @@ public class EnedisHttpApi { private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class); private final Gson gson; private final HttpClient httpClient; - private @Nullable LinkyConfiguration config; + private LinkyConfiguration config; private boolean connected = false; - public EnedisHttpApi(@Nullable LinkyConfiguration config, Gson gson, HttpClient httpClient) { + public EnedisHttpApi(LinkyConfiguration config, Gson gson, HttpClient httpClient) { this.gson = gson; this.httpClient = httpClient; this.config = config; @@ -93,10 +89,6 @@ public class EnedisHttpApi { public void initialize() throws LinkyException { } - private String getLocation(ContentResponse response) { - return response.getHeaders().get(HttpHeader.LOCATION); - } - private void disconnect() throws LinkyException { if (connected) { logger.debug("Logout process"); @@ -127,8 +119,8 @@ public class EnedisHttpApi { ContentResponse result = request.send(); if (result.getStatus() == 307) { String loc = result.getHeaders().get("Location"); - url = BASE_URL + loc.substring(1); - request = httpClient.newRequest(url); + String newUrl = BASE_URL + loc.substring(1); + request = httpClient.newRequest(newUrl); request = request.method(HttpMethod.GET); result = request.send(); diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java index 509772ddacf..f799ef7f391 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/dto/TempoResponse.java @@ -24,5 +24,7 @@ import org.eclipse.jetty.jaas.spi.UserInfo; */ public class TempoResponse extends HashMap { + @java.io.Serial + private static final long serialVersionUID = 362498820763181264L; } diff --git a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java index 402c68ad2d6..29acd0ad837 100644 --- a/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java +++ b/bundles/org.openhab.binding.linky/src/main/java/org/openhab/binding/linky/internal/handler/LinkyHandler.java @@ -18,7 +18,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; -import java.time.temporal.WeekFields; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -35,7 +34,6 @@ import org.openhab.binding.linky.internal.api.ExpiringDayCache; import org.openhab.binding.linky.internal.dto.IntervalReading; import org.openhab.binding.linky.internal.dto.MeterReading; import org.openhab.binding.linky.internal.dto.PrmInfo; -import org.openhab.core.auth.client.oauth2.OAuthFactory; import org.openhab.core.config.core.Configuration; import org.openhab.core.i18n.LocaleProvider; import org.openhab.core.library.types.QuantityType; @@ -70,17 +68,12 @@ public class LinkyHandler extends BaseThingHandler { private final Logger logger = LoggerFactory.getLogger(LinkyHandler.class); private final HttpClient httpClient; private final Gson gson; - private final WeekFields weekFields; private final ExpiringDayCache dailyConsumption; - private @Nullable LinkyConfiguration config; - private @Nullable ScheduledFuture refreshJob; private @Nullable EnedisHttpApi enedisApi; - private final OAuthFactory oAuthFactory; - private @NonNullByDefault({}) String prmId; private @NonNullByDefault({}) String userId; @@ -90,13 +83,10 @@ public class LinkyHandler extends BaseThingHandler { ALL } - public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient, - OAuthFactory oAuthFactory) { + public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient) { super(thing); this.gson = gson; this.httpClient = httpClient; - this.weekFields = WeekFields.of(localeProvider.getLocale()); - this.oAuthFactory = oAuthFactory; this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> { LocalDate today = LocalDate.now(); @@ -158,16 +148,18 @@ public class LinkyHandler extends BaseThingHandler { logger.debug("Initializing Linky handler."); updateStatus(ThingStatus.UNKNOWN); - config = getConfigAs(LinkyConfiguration.class); + LinkyConfiguration config = getConfigAs(LinkyConfiguration.class); if (config.seemsValid()) { - enedisApi = new EnedisHttpApi(config, gson, httpClient); + + EnedisHttpApi api = new EnedisHttpApi(config, gson, httpClient); + this.enedisApi = api; scheduler.submit(() -> { try { - enedisApi.initialize(); + api.initialize(); updateStatus(ThingStatus.ONLINE); - PrmInfo prmInfo = enedisApi.getPrmInfo(); + PrmInfo prmInfo = api.getPrmInfo(); updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE, prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId)); @@ -547,52 +539,53 @@ public class LinkyHandler extends BaseThingHandler { return null; } - meterReading.WeekValue = new IntervalReading[208]; - meterReading.MonthValue = new IntervalReading[48]; - meterReading.YearValue = new IntervalReading[4]; + if (meterReading != null) { + meterReading.weekValue = new IntervalReading[208]; + meterReading.monthValue = new IntervalReading[48]; + meterReading.yearValue = new IntervalReading[4]; - for (int idx = 0; idx < 208; idx++) { - meterReading.WeekValue[idx] = new IntervalReading(); - } - for (int idx = 0; idx < 48; idx++) { - meterReading.MonthValue[idx] = new IntervalReading(); - } - for (int idx = 0; idx < 4; idx++) { - meterReading.YearValue[idx] = new IntervalReading(); - } + for (int idx = 0; idx < 208; idx++) { + meterReading.weekValue[idx] = new IntervalReading(); + } + for (int idx = 0; idx < 48; idx++) { + meterReading.monthValue[idx] = new IntervalReading(); + } + for (int idx = 0; idx < 4; idx++) { + meterReading.yearValue[idx] = new IntervalReading(); + } - int size = meterReading.intervalReading.length; - int baseYear = meterReading.intervalReading[0].date.getYear(); + int size = meterReading.dayValue.length; + int baseYear = meterReading.dayValue[0].date.getYear(); - for (int idx = 0; idx < size; idx++) { - IntervalReading ir = meterReading.intervalReading[idx]; - LocalDate dt = ir.date; - double value = ir.value; + for (int idx = 0; idx < size; idx++) { + IntervalReading ir = meterReading.dayValue[idx]; + LocalDateTime dt = ir.date; + double value = ir.value; - int idxYear = dt.getYear() - baseYear; + int idxYear = dt.getYear() - baseYear; - int dayOfYear = dt.getDayOfYear(); - int week = (dayOfYear / 7) + 1; - int month = dt.getMonthValue(); + int dayOfYear = dt.getDayOfYear(); + int week = ((dayOfYear - 1) / 7) + 1; + int month = dt.getMonthValue(); - int idxMonth = (idxYear * 12) + month; - int idxWeek = (idxYear * 52) + week; + int idxMonth = (idxYear * 12) + month; + int idxWeek = (idxYear * 52) + week; - meterReading.WeekValue[idxWeek].value += value; - meterReading.MonthValue[idxMonth].value += value; - meterReading.YearValue[idxYear].value += value; + meterReading.weekValue[idxWeek].value += value; + meterReading.monthValue[idxMonth].value += value; + meterReading.yearValue[idxYear].value += value; + } } return meterReading; } private void checkData(@Nullable MeterReading meterReading) throws LinkyException { - if (meterReading.intervalReading.length == 0) { - throw new LinkyException("Invalid meterReading data: no day period"); + if (meterReading != null) { + if (meterReading.dayValue.length == 0) { + throw new LinkyException("Invalid meterReading data: no day period"); + } } - // if (meterReading.intervalReading.length != 1095) { - // throw new LinkyException("Imcomplete meterReading data < 1095 days"); - // } } /*