2 * Copyright (c) 2010-2024 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.tapocontrol.internal.helpers;
15 import static org.openhab.binding.tapocontrol.internal.constants.TapoErrorCode.*;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
19 import org.openhab.binding.tapocontrol.internal.constants.TapoErrorCode;
21 import com.google.gson.Gson;
22 import com.google.gson.JsonObject;
25 * Class Handling TapoErrors
27 * @author Christian Wild - Initial contribution
30 public class TapoErrorHandler extends Exception {
31 private TapoErrorCode errorCode = TapoErrorCode.NO_ERROR;
32 private static final long serialVersionUID = 0L;
33 private String infoMessage = "";
34 private Gson gson = new Gson();
40 public TapoErrorHandler() {
46 * @param errorCode error code (number)
48 public TapoErrorHandler(Integer errorCode) {
49 raiseError(errorCode);
55 * @param errorCode error code (number)
56 * @param infoMessage optional info-message
58 public TapoErrorHandler(Integer errorCode, String infoMessage) {
59 raiseError(errorCode, infoMessage);
67 public TapoErrorHandler(Exception ex) {
75 * @param infoMessage optional info-message
77 public TapoErrorHandler(Exception ex, String infoMessage) {
78 raiseError(ex, infoMessage);
82 * Constructor TapoErrorCodeEnum
84 * @param errorCode error code (TapoErrorCodeEnum)
86 public TapoErrorHandler(TapoErrorCode errorCode) {
87 raiseError(errorCode);
93 * @param errorCode error code (TapoErrorCodeEnum)
94 * @param infoMessage optional info-message
96 public TapoErrorHandler(TapoErrorCode errorCode, String infoMessage) {
97 raiseError(errorCode, infoMessage);
100 /***********************************
104 ************************************/
109 * @param errCode error Number (or constant ERR_API_CODE )
110 * @return error-message if code found in i18n, else return code
112 private String getErrorMessage(Integer errCode) {
113 String key = TapoErrorCode.fromCode(errCode).name().replace("ERR_", "error-").replace("_", "-").toLowerCase();
114 return String.format("@text/%s [ \"%s\" ]", key, errCode.toString());
117 /***********************************
121 ************************************/
126 * @param errorCode error code (number)
128 public void raiseError(Integer errorCode) {
129 raiseError(errorCode, "");
135 * @param errorCode error code (number)
136 * @param infoMessage optional info-message
138 public void raiseError(Integer errorCode, String infoMessage) {
139 raiseError(TapoErrorCode.fromCode(errorCode), infoMessage);
145 * @param ex Exception
147 public void raiseError(Exception ex) {
154 * @param ex Exception
155 * @param infoMessage optional info-message
157 public void raiseError(Exception ex, String infoMessage) {
158 raiseError(TapoErrorCode.fromCode(ex.hashCode()), infoMessage);
164 * @param errorCode error code (TapoErrorCodeEnum)
166 public void raiseError(TapoErrorCode errorCode) {
167 raiseError(errorCode, "");
173 * @param errorCode error code (TapoErrorCodeEnum)
174 * @param infoMessage optional info-message
176 public void raiseError(TapoErrorCode errorCode, String infoMessage) {
177 this.errorCode = errorCode;
178 this.infoMessage = infoMessage;
182 * Take over tapoError
186 public void set(TapoErrorHandler tapoError) {
187 this.errorCode = TapoErrorCode.fromCode(tapoError.getCode());
188 this.infoMessage = tapoError.getExtendedInfo();
194 public void reset() {
195 this.errorCode = NO_ERROR;
196 this.infoMessage = "";
199 /***********************************
203 ************************************/
212 public String getMessage() {
213 return getErrorMessage(errorCode.getCode());
217 * Get Error Message directly by error-number
220 * @return error message
222 public String getMessage(Integer errorCode) {
223 return getErrorMessage(errorCode);
229 * @return error code (integer)
231 public Integer getCode() {
232 return this.errorCode.getCode();
238 * @return error extended info
240 public String getExtendedInfo() {
241 return this.infoMessage;
249 public TapoErrorCode getError() {
250 return this.errorCode;
256 * @return true if has error
258 public Boolean hasError() {
259 return this.errorCode != NO_ERROR;
263 * Get JSON-Object with errror
265 * @return JsonObject with error-informations
267 public JsonObject getJson() {
269 json = gson.fromJson(
270 "{'error_code': '" + errorCode + "', 'error_message':'" + getErrorMessage(getCode()) + "'}",
273 json = new JsonObject();