]> git.basschouten.com Git - openhab-addons.git/blob
d8fa4b28cefa5380dc5b54446a0521cc9bd1f300
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.tapocontrol.internal.helpers;
14
15 import static org.openhab.binding.tapocontrol.internal.constants.TapoErrorCode.*;
16
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
19 import org.openhab.binding.tapocontrol.internal.constants.TapoErrorCode;
20
21 import com.google.gson.Gson;
22 import com.google.gson.JsonObject;
23
24 /**
25  * Class Handling TapoErrors
26  *
27  * @author Christian Wild - Initial contribution
28  */
29 @NonNullByDefault
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();
35
36     /**
37      * Constructor
38      *
39      */
40     public TapoErrorHandler() {
41     }
42
43     /**
44      * Constructor
45      * 
46      * @param errorCode error code (number)
47      */
48     public TapoErrorHandler(Integer errorCode) {
49         raiseError(errorCode);
50     }
51
52     /**
53      * Constructor
54      * 
55      * @param errorCode error code (number)
56      * @param infoMessage optional info-message
57      */
58     public TapoErrorHandler(Integer errorCode, String infoMessage) {
59         raiseError(errorCode, infoMessage);
60     }
61
62     /**
63      * Constructor
64      * 
65      * @param ex Exception
66      */
67     public TapoErrorHandler(Exception ex) {
68         raiseError(ex);
69     }
70
71     /**
72      * Constructor
73      * 
74      * @param ex Exception
75      * @param infoMessage optional info-message
76      */
77     public TapoErrorHandler(Exception ex, String infoMessage) {
78         raiseError(ex, infoMessage);
79     }
80
81     /**
82      * Constructor TapoErrorCodeEnum
83      * 
84      * @param errorCode error code (TapoErrorCodeEnum)
85      */
86     public TapoErrorHandler(TapoErrorCode errorCode) {
87         raiseError(errorCode);
88     }
89
90     /**
91      * Constructor
92      * 
93      * @param errorCode error code (TapoErrorCodeEnum)
94      * @param infoMessage optional info-message
95      */
96     public TapoErrorHandler(TapoErrorCode errorCode, String infoMessage) {
97         raiseError(errorCode, infoMessage);
98     }
99
100     /***********************************
101      *
102      * Private Functions
103      *
104      ************************************/
105
106     /**
107      * GET ERROR-MESSAGE
108      * 
109      * @param errCode error Number (or constant ERR_API_CODE )
110      * @return error-message if code found in i18n, else return code
111      */
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());
115     }
116
117     /***********************************
118      *
119      * Public Functions
120      *
121      ************************************/
122
123     /**
124      * Raises new error
125      * 
126      * @param errorCode error code (number)
127      */
128     public void raiseError(Integer errorCode) {
129         raiseError(errorCode, "");
130     }
131
132     /**
133      * Raises new error
134      * 
135      * @param errorCode error code (number)
136      * @param infoMessage optional info-message
137      */
138     public void raiseError(Integer errorCode, String infoMessage) {
139         raiseError(TapoErrorCode.fromCode(errorCode), infoMessage);
140     }
141
142     /**
143      * Raises new error
144      * 
145      * @param ex Exception
146      */
147     public void raiseError(Exception ex) {
148         raiseError(ex, "");
149     }
150
151     /**
152      * Raises new error
153      * 
154      * @param ex Exception
155      * @param infoMessage optional info-message
156      */
157     public void raiseError(Exception ex, String infoMessage) {
158         raiseError(TapoErrorCode.fromCode(ex.hashCode()), infoMessage);
159     }
160
161     /**
162      * Raises new error
163      * 
164      * @param errorCode error code (TapoErrorCodeEnum)
165      */
166     public void raiseError(TapoErrorCode errorCode) {
167         raiseError(errorCode, "");
168     }
169
170     /**
171      * Raises new error
172      * 
173      * @param errorCode error code (TapoErrorCodeEnum)
174      * @param infoMessage optional info-message
175      */
176     public void raiseError(TapoErrorCode errorCode, String infoMessage) {
177         this.errorCode = errorCode;
178         this.infoMessage = infoMessage;
179     }
180
181     /**
182      * Take over tapoError
183      * 
184      * @param tapoError
185      */
186     public void set(TapoErrorHandler tapoError) {
187         this.errorCode = TapoErrorCode.fromCode(tapoError.getCode());
188         this.infoMessage = tapoError.getExtendedInfo();
189     }
190
191     /**
192      * Reset Error
193      */
194     public void reset() {
195         this.errorCode = NO_ERROR;
196         this.infoMessage = "";
197     }
198
199     /***********************************
200      *
201      * GET RESULTS
202      *
203      ************************************/
204
205     /**
206      * Get Error Message
207      * 
208      * @return error text
209      */
210     @Override
211     @Nullable
212     public String getMessage() {
213         return getErrorMessage(errorCode.getCode());
214     }
215
216     /**
217      * Get Error Message directly by error-number
218      * 
219      * @param errorCode
220      * @return error message
221      */
222     public String getMessage(Integer errorCode) {
223         return getErrorMessage(errorCode);
224     }
225
226     /**
227      * Get Error Code
228      * 
229      * @return error code (integer)
230      */
231     public Integer getCode() {
232         return this.errorCode.getCode();
233     }
234
235     /**
236      * Get Info Message
237      * 
238      * @return error extended info
239      */
240     public String getExtendedInfo() {
241         return this.infoMessage;
242     }
243
244     /**
245      * Get Error Code
246      * 
247      * @return error code
248      */
249     public TapoErrorCode getError() {
250         return this.errorCode;
251     }
252
253     /**
254      * Check if has Error
255      * 
256      * @return true if has error
257      */
258     public Boolean hasError() {
259         return this.errorCode != NO_ERROR;
260     }
261
262     /**
263      * Get JSON-Object with errror
264      * 
265      * @return JsonObject with error-informations
266      */
267     public JsonObject getJson() {
268         JsonObject json;
269         json = gson.fromJson(
270                 "{'error_code': '" + errorCode + "', 'error_message':'" + getErrorMessage(getCode()) + "'}",
271                 JsonObject.class);
272         if (json == null) {
273             json = new JsonObject();
274         }
275         return json;
276     }
277 }