mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-02-05 20:04:23 +01:00
review null annotation and null pointer warning
Signed-off-by: Laurent ARNAL <laurent@clae.net>
This commit is contained in:
parent
a84023ee3c
commit
34459b3a48
@ -51,8 +51,6 @@ public class LinkyAuthServlet extends HttpServlet {
|
|||||||
private static final String HTML_USER_AUTHORIZED = "<p class='block authorized'>Addon authorized for %s.</p>";
|
private static final String HTML_USER_AUTHORIZED = "<p class='block authorized'>Addon authorized for %s.</p>";
|
||||||
private static final String HTML_ERROR = "<p class='block error'>Call to Enedis failed with error: %s</p>";
|
private static final String HTML_ERROR = "<p class='block error'>Call to Enedis failed with error: %s</p>";
|
||||||
|
|
||||||
private static final String HTML_META_REFRESH_CONTENT = "<meta http-equiv='refresh' content='10; url=%s'>";
|
|
||||||
|
|
||||||
// Keys present in the index.html
|
// Keys present in the index.html
|
||||||
private static final String KEY_AUTHORIZE_URI = "authorize.uri";
|
private static final String KEY_AUTHORIZE_URI = "authorize.uri";
|
||||||
private static final String KEY_RETRIEVE_TOKEN_URI = "retrieveToken.uri";
|
private static final String KEY_RETRIEVE_TOKEN_URI = "retrieveToken.uri";
|
||||||
@ -72,16 +70,17 @@ public class LinkyAuthServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doGet(@Nullable HttpServletRequest req, @Nullable HttpServletResponse resp)
|
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||||
throws ServletException, IOException {
|
|
||||||
logger.debug("Linky auth callback servlet received GET request {}.", req.getRequestURI());
|
logger.debug("Linky auth callback servlet received GET request {}.", req.getRequestURI());
|
||||||
final Map<String, String> replaceMap = new HashMap<>();
|
final Map<String, String> replaceMap = new HashMap<>();
|
||||||
|
|
||||||
final String servletBaseURL = req.getRequestURL().toString();
|
String servletBaseURL = "";
|
||||||
|
StringBuffer requestURL = req.getRequestURL();
|
||||||
|
if (requestURL != null) {
|
||||||
|
servletBaseURL = requestURL.toString();
|
||||||
|
}
|
||||||
|
|
||||||
String servletBaseURLSecure = servletBaseURL;
|
String servletBaseURLSecure = servletBaseURL;
|
||||||
// .replace("http://", "https://");
|
|
||||||
// .replace("8080", "8443");
|
|
||||||
|
|
||||||
handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString());
|
handleLinkyRedirect(replaceMap, servletBaseURLSecure, req.getQueryString());
|
||||||
|
|
||||||
@ -91,15 +90,19 @@ public class LinkyAuthServlet extends HttpServlet {
|
|||||||
|
|
||||||
StringBuffer optionBuffer = new StringBuffer();
|
StringBuffer optionBuffer = new StringBuffer();
|
||||||
|
|
||||||
|
if (accountHandler != null) {
|
||||||
String[] prmIds = accountHandler.getAllPrmId();
|
String[] prmIds = accountHandler.getAllPrmId();
|
||||||
for (String prmId : prmIds) {
|
for (String prmId : prmIds) {
|
||||||
optionBuffer.append("<option value=\"" + prmId + "\">" + prmId + "</option>");
|
optionBuffer.append("<option value=\"" + prmId + "\">" + prmId + "</option>");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString());
|
replaceMap.put(KEY_PRMID_OPTION, optionBuffer.toString());
|
||||||
replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure);
|
replaceMap.put(KEY_REDIRECT_URI, servletBaseURLSecure);
|
||||||
replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK");
|
replaceMap.put(KEY_RETRIEVE_TOKEN_URI, servletBaseURLSecure + "?state=OK");
|
||||||
|
if (accountHandler != null) {
|
||||||
replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure));
|
replaceMap.put(KEY_AUTHORIZE_URI, accountHandler.formatAuthorizationUrl(servletBaseURLSecure));
|
||||||
|
}
|
||||||
resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap));
|
resp.getWriter().append(replaceKeysFromMap(indexTemplate, replaceMap));
|
||||||
resp.getWriter().close();
|
resp.getWriter().close();
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link
|
|||||||
|
|
||||||
private final LocaleProvider localeProvider;
|
private final LocaleProvider localeProvider;
|
||||||
private final HttpClient httpClient;
|
private final HttpClient httpClient;
|
||||||
private final OAuthFactory oAuthFactory;
|
|
||||||
private final LinkyAuthService authService;
|
private final LinkyAuthService authService;
|
||||||
private final boolean oAuthSupport = false;
|
private final boolean oAuthSupport = false;
|
||||||
private @Nullable OAuthClientService oAuthService;
|
private @Nullable OAuthClientService oAuthService;
|
||||||
@ -126,8 +125,6 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link
|
|||||||
this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory);
|
this.httpClient = httpClientFactory.createHttpClient(LinkyBindingConstants.BINDING_ID, sslContextFactory);
|
||||||
httpClient.setFollowRedirects(false);
|
httpClient.setFollowRedirects(false);
|
||||||
httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE);
|
httpClient.setRequestBufferSize(REQUEST_BUFFER_SIZE);
|
||||||
httpClient.setResponseBufferSize(RESPONSE_BUFFER_SIZE);
|
|
||||||
this.oAuthFactory = oAuthFactory;
|
|
||||||
this.authService = authService;
|
this.authService = authService;
|
||||||
|
|
||||||
this.oAuthService = oAuthFactory.createOAuthClientService("Linky", LinkyBindingConstants.LINKY_API_TOKEN_URL,
|
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) {
|
protected @Nullable ThingHandler createHandler(Thing thing) {
|
||||||
|
|
||||||
if (supportsThingType(thing.getThingTypeUID())) {
|
if (supportsThingType(thing.getThingTypeUID())) {
|
||||||
LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient, oAuthFactory);
|
LinkyHandler handler = new LinkyHandler(thing, localeProvider, gson, httpClient);
|
||||||
return handler;
|
return handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,9 +232,11 @@ public class LinkyHandlerFactory extends BaseThingHandlerFactory implements Link
|
|||||||
|
|
||||||
config.put("token", token);
|
config.put("token", token);
|
||||||
LinkyHandler handler = (LinkyHandler) thing.getHandler();
|
LinkyHandler handler = (LinkyHandler) thing.getHandler();
|
||||||
|
if (handler != null) {
|
||||||
handler.saveConfiguration(config);
|
handler.saveConfiguration(config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
@ -24,13 +24,9 @@ import java.util.concurrent.TimeoutException;
|
|||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
|
||||||
import org.eclipse.jetty.client.HttpClient;
|
import org.eclipse.jetty.client.HttpClient;
|
||||||
import org.eclipse.jetty.client.api.ContentResponse;
|
import org.eclipse.jetty.client.api.ContentResponse;
|
||||||
import org.eclipse.jetty.client.api.Request;
|
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.HttpMethod;
|
||||||
import org.eclipse.jetty.http.HttpStatus;
|
import org.eclipse.jetty.http.HttpStatus;
|
||||||
import org.eclipse.jetty.util.Fields;
|
import org.eclipse.jetty.util.Fields;
|
||||||
@ -80,11 +76,11 @@ public class EnedisHttpApi {
|
|||||||
private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class);
|
private final Logger logger = LoggerFactory.getLogger(EnedisHttpApi.class);
|
||||||
private final Gson gson;
|
private final Gson gson;
|
||||||
private final HttpClient httpClient;
|
private final HttpClient httpClient;
|
||||||
private @Nullable LinkyConfiguration config;
|
private LinkyConfiguration config;
|
||||||
|
|
||||||
private boolean connected = false;
|
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.gson = gson;
|
||||||
this.httpClient = httpClient;
|
this.httpClient = httpClient;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
@ -93,10 +89,6 @@ public class EnedisHttpApi {
|
|||||||
public void initialize() throws LinkyException {
|
public void initialize() throws LinkyException {
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getLocation(ContentResponse response) {
|
|
||||||
return response.getHeaders().get(HttpHeader.LOCATION);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void disconnect() throws LinkyException {
|
private void disconnect() throws LinkyException {
|
||||||
if (connected) {
|
if (connected) {
|
||||||
logger.debug("Logout process");
|
logger.debug("Logout process");
|
||||||
@ -127,8 +119,8 @@ public class EnedisHttpApi {
|
|||||||
ContentResponse result = request.send();
|
ContentResponse result = request.send();
|
||||||
if (result.getStatus() == 307) {
|
if (result.getStatus() == 307) {
|
||||||
String loc = result.getHeaders().get("Location");
|
String loc = result.getHeaders().get("Location");
|
||||||
url = BASE_URL + loc.substring(1);
|
String newUrl = BASE_URL + loc.substring(1);
|
||||||
request = httpClient.newRequest(url);
|
request = httpClient.newRequest(newUrl);
|
||||||
request = request.method(HttpMethod.GET);
|
request = request.method(HttpMethod.GET);
|
||||||
result = request.send();
|
result = request.send();
|
||||||
|
|
||||||
|
@ -24,5 +24,7 @@ import org.eclipse.jetty.jaas.spi.UserInfo;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public class TempoResponse extends HashMap<String, String> {
|
public class TempoResponse extends HashMap<String, String> {
|
||||||
|
@java.io.Serial
|
||||||
|
private static final long serialVersionUID = 362498820763181264L;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ import java.time.LocalDate;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.time.temporal.WeekFields;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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.IntervalReading;
|
||||||
import org.openhab.binding.linky.internal.dto.MeterReading;
|
import org.openhab.binding.linky.internal.dto.MeterReading;
|
||||||
import org.openhab.binding.linky.internal.dto.PrmInfo;
|
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.config.core.Configuration;
|
||||||
import org.openhab.core.i18n.LocaleProvider;
|
import org.openhab.core.i18n.LocaleProvider;
|
||||||
import org.openhab.core.library.types.QuantityType;
|
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 Logger logger = LoggerFactory.getLogger(LinkyHandler.class);
|
||||||
private final HttpClient httpClient;
|
private final HttpClient httpClient;
|
||||||
private final Gson gson;
|
private final Gson gson;
|
||||||
private final WeekFields weekFields;
|
|
||||||
|
|
||||||
private final ExpiringDayCache<MeterReading> dailyConsumption;
|
private final ExpiringDayCache<MeterReading> dailyConsumption;
|
||||||
|
|
||||||
private @Nullable LinkyConfiguration config;
|
|
||||||
|
|
||||||
private @Nullable ScheduledFuture<?> refreshJob;
|
private @Nullable ScheduledFuture<?> refreshJob;
|
||||||
private @Nullable EnedisHttpApi enedisApi;
|
private @Nullable EnedisHttpApi enedisApi;
|
||||||
|
|
||||||
private final OAuthFactory oAuthFactory;
|
|
||||||
|
|
||||||
private @NonNullByDefault({}) String prmId;
|
private @NonNullByDefault({}) String prmId;
|
||||||
private @NonNullByDefault({}) String userId;
|
private @NonNullByDefault({}) String userId;
|
||||||
|
|
||||||
@ -90,13 +83,10 @@ public class LinkyHandler extends BaseThingHandler {
|
|||||||
ALL
|
ALL
|
||||||
}
|
}
|
||||||
|
|
||||||
public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient,
|
public LinkyHandler(Thing thing, LocaleProvider localeProvider, Gson gson, HttpClient httpClient) {
|
||||||
OAuthFactory oAuthFactory) {
|
|
||||||
super(thing);
|
super(thing);
|
||||||
this.gson = gson;
|
this.gson = gson;
|
||||||
this.httpClient = httpClient;
|
this.httpClient = httpClient;
|
||||||
this.weekFields = WeekFields.of(localeProvider.getLocale());
|
|
||||||
this.oAuthFactory = oAuthFactory;
|
|
||||||
|
|
||||||
this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> {
|
this.dailyConsumption = new ExpiringDayCache<>("dailyConsumption", REFRESH_FIRST_HOUR_OF_DAY, () -> {
|
||||||
LocalDate today = LocalDate.now();
|
LocalDate today = LocalDate.now();
|
||||||
@ -158,16 +148,18 @@ public class LinkyHandler extends BaseThingHandler {
|
|||||||
logger.debug("Initializing Linky handler.");
|
logger.debug("Initializing Linky handler.");
|
||||||
updateStatus(ThingStatus.UNKNOWN);
|
updateStatus(ThingStatus.UNKNOWN);
|
||||||
|
|
||||||
config = getConfigAs(LinkyConfiguration.class);
|
LinkyConfiguration config = getConfigAs(LinkyConfiguration.class);
|
||||||
if (config.seemsValid()) {
|
if (config.seemsValid()) {
|
||||||
enedisApi = new EnedisHttpApi(config, gson, httpClient);
|
|
||||||
|
EnedisHttpApi api = new EnedisHttpApi(config, gson, httpClient);
|
||||||
|
this.enedisApi = api;
|
||||||
|
|
||||||
scheduler.submit(() -> {
|
scheduler.submit(() -> {
|
||||||
try {
|
try {
|
||||||
enedisApi.initialize();
|
api.initialize();
|
||||||
updateStatus(ThingStatus.ONLINE);
|
updateStatus(ThingStatus.ONLINE);
|
||||||
|
|
||||||
PrmInfo prmInfo = enedisApi.getPrmInfo();
|
PrmInfo prmInfo = api.getPrmInfo();
|
||||||
updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE,
|
updateProperties(Map.of(USER_ID, prmInfo.customerId, PUISSANCE,
|
||||||
prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId));
|
prmInfo.contractInfo.subscribedPower, PRM_ID, prmInfo.prmId));
|
||||||
|
|
||||||
@ -547,52 +539,53 @@ public class LinkyHandler extends BaseThingHandler {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
meterReading.WeekValue = new IntervalReading[208];
|
if (meterReading != null) {
|
||||||
meterReading.MonthValue = new IntervalReading[48];
|
meterReading.weekValue = new IntervalReading[208];
|
||||||
meterReading.YearValue = new IntervalReading[4];
|
meterReading.monthValue = new IntervalReading[48];
|
||||||
|
meterReading.yearValue = new IntervalReading[4];
|
||||||
|
|
||||||
for (int idx = 0; idx < 208; idx++) {
|
for (int idx = 0; idx < 208; idx++) {
|
||||||
meterReading.WeekValue[idx] = new IntervalReading();
|
meterReading.weekValue[idx] = new IntervalReading();
|
||||||
}
|
}
|
||||||
for (int idx = 0; idx < 48; idx++) {
|
for (int idx = 0; idx < 48; idx++) {
|
||||||
meterReading.MonthValue[idx] = new IntervalReading();
|
meterReading.monthValue[idx] = new IntervalReading();
|
||||||
}
|
}
|
||||||
for (int idx = 0; idx < 4; idx++) {
|
for (int idx = 0; idx < 4; idx++) {
|
||||||
meterReading.YearValue[idx] = new IntervalReading();
|
meterReading.yearValue[idx] = new IntervalReading();
|
||||||
}
|
}
|
||||||
|
|
||||||
int size = meterReading.intervalReading.length;
|
int size = meterReading.dayValue.length;
|
||||||
int baseYear = meterReading.intervalReading[0].date.getYear();
|
int baseYear = meterReading.dayValue[0].date.getYear();
|
||||||
|
|
||||||
for (int idx = 0; idx < size; idx++) {
|
for (int idx = 0; idx < size; idx++) {
|
||||||
IntervalReading ir = meterReading.intervalReading[idx];
|
IntervalReading ir = meterReading.dayValue[idx];
|
||||||
LocalDate dt = ir.date;
|
LocalDateTime dt = ir.date;
|
||||||
double value = ir.value;
|
double value = ir.value;
|
||||||
|
|
||||||
int idxYear = dt.getYear() - baseYear;
|
int idxYear = dt.getYear() - baseYear;
|
||||||
|
|
||||||
int dayOfYear = dt.getDayOfYear();
|
int dayOfYear = dt.getDayOfYear();
|
||||||
int week = (dayOfYear / 7) + 1;
|
int week = ((dayOfYear - 1) / 7) + 1;
|
||||||
int month = dt.getMonthValue();
|
int month = dt.getMonthValue();
|
||||||
|
|
||||||
int idxMonth = (idxYear * 12) + month;
|
int idxMonth = (idxYear * 12) + month;
|
||||||
int idxWeek = (idxYear * 52) + week;
|
int idxWeek = (idxYear * 52) + week;
|
||||||
|
|
||||||
meterReading.WeekValue[idxWeek].value += value;
|
meterReading.weekValue[idxWeek].value += value;
|
||||||
meterReading.MonthValue[idxMonth].value += value;
|
meterReading.monthValue[idxMonth].value += value;
|
||||||
meterReading.YearValue[idxYear].value += value;
|
meterReading.yearValue[idxYear].value += value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return meterReading;
|
return meterReading;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkData(@Nullable MeterReading meterReading) throws LinkyException {
|
private void checkData(@Nullable MeterReading meterReading) throws LinkyException {
|
||||||
if (meterReading.intervalReading.length == 0) {
|
if (meterReading != null) {
|
||||||
|
if (meterReading.dayValue.length == 0) {
|
||||||
throw new LinkyException("Invalid meterReading data: no day period");
|
throw new LinkyException("Invalid meterReading data: no day period");
|
||||||
}
|
}
|
||||||
// if (meterReading.intervalReading.length != 1095) {
|
}
|
||||||
// throw new LinkyException("Imcomplete meterReading data < 1095 days");
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user