[pushover] Added exception handling and synchronized (#10437)

Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
This commit is contained in:
Christoph Weitkamp
2021-04-04 18:58:16 +02:00
committed by GitHub
parent aad3641368
commit 15f69b9011
6 changed files with 36 additions and 13 deletions

View File

@@ -37,7 +37,7 @@ import org.openhab.core.cache.ExpiringCacheMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@@ -130,7 +130,7 @@ public class PushoverAPIConnection {
return executeRequest(HttpMethod.POST, url, body);
}
private String executeRequest(HttpMethod httpMethod, String url, @Nullable ContentProvider body)
private synchronized String executeRequest(HttpMethod httpMethod, String url, @Nullable ContentProvider body)
throws PushoverCommunicationException, PushoverConfigurationException {
logger.trace("Pushover request: {} - URL = '{}'", httpMethod, url);
try {
@@ -169,13 +169,11 @@ public class PushoverAPIConnection {
private String getMessageError(String content) {
final JsonObject json = JsonParser.parseString(content).getAsJsonObject();
if (json.has("errors")) {
final JsonArray errors = json.get("errors").getAsJsonArray();
if (errors != null) {
return errors.toString();
}
final JsonElement errorsElement = json.get("errors");
if (errorsElement != null && errorsElement.isJsonArray()) {
return errorsElement.getAsJsonArray().toString();
}
return "Unknown error occured.";
return "@text/offline.conf-error-unknown";
}
private boolean getMessageStatus(String content) {

View File

@@ -31,8 +31,7 @@ import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* The {@link PushoverHandlerFactory} is responsible for creating things and thing
* handlers.
* The {@link PushoverHandlerFactory} is responsible for creating things and thing handlers.
*
* @author Christoph Weitkamp - Initial contribution
*/

View File

@@ -134,7 +134,14 @@ public class PushoverAccountHandler extends BaseThingHandler {
public boolean sendMessage(PushoverMessageBuilder messageBuilder) {
if (connection != null) {
return connection.sendMessage(messageBuilder);
try {
return connection.sendMessage(messageBuilder);
} catch (PushoverCommunicationException e) {
// do nothing, causing exception is already logged
} catch (PushoverConfigurationException e) {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage());
}
return false;
} else {
throw new IllegalArgumentException("PushoverAPIConnection is null!");
}
@@ -142,7 +149,14 @@ public class PushoverAccountHandler extends BaseThingHandler {
public String sendPriorityMessage(PushoverMessageBuilder messageBuilder) {
if (connection != null) {
return connection.sendPriorityMessage(messageBuilder);
try {
return connection.sendPriorityMessage(messageBuilder);
} catch (PushoverCommunicationException e) {
// do nothing, causing exception is already logged
} catch (PushoverConfigurationException e) {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage());
}
return "";
} else {
throw new IllegalArgumentException("PushoverAPIConnection is null!");
}
@@ -150,12 +164,20 @@ public class PushoverAccountHandler extends BaseThingHandler {
public boolean cancelPriorityMessage(String receipt) {
if (connection != null) {
return connection.cancelPriorityMessage(receipt);
try {
return connection.cancelPriorityMessage(receipt);
} catch (PushoverCommunicationException e) {
// do nothing, causing exception is already logged
} catch (PushoverConfigurationException e) {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, e.getMessage());
}
return false;
} else {
throw new IllegalArgumentException("PushoverAPIConnection is null!");
}
}
@SuppressWarnings("null")
private void asyncValidateUser() {
try {
connection.validateUser();

View File

@@ -1,6 +1,7 @@
# user defined messages
offline.conf-error-missing-apikey = The 'apikey' parameter must be configured.
offline.conf-error-missing-user = The 'user' parameter must be configured.
offline.conf-error-unknown = An unknown error occurred.
# actions
sendMessageActionLabel = send a plain text message

View File

@@ -24,6 +24,7 @@ thing-type.config.pushover.pushover-account.expire.description = Dieser Paramete
# user defined messages
offline.conf-error-missing-apikey = Der Parameter 'apikey' muss konfiguriert werden.
offline.conf-error-missing-user = Der Parameter 'user' muss konfiguriert werden.
offline.conf-error-unknown = Ein unbekannter Fehler ist aufgetreten.
# actions
sendMessageActionLabel = eine Textnachricht senden