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.touchwand.internal.dto;
15 import static org.openhab.binding.touchwand.internal.TouchWandBindingConstants.*;
17 import java.util.Arrays;
19 import org.eclipse.jdt.annotation.NonNullByDefault;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
23 import com.google.gson.Gson;
24 import com.google.gson.GsonBuilder;
25 import com.google.gson.JsonObject;
26 import com.google.gson.JsonParseException;
27 import com.google.gson.JsonParser;
30 * The {@link TouchWandUnitFromJson} parse Json unit data
32 * @author Roie Geron - Initial contribution
35 public class TouchWandUnitFromJson {
37 private static final Logger logger = LoggerFactory.getLogger(TouchWandUnitFromJson.class);
39 public TouchWandUnitFromJson() {
42 public static TouchWandUnitData parseResponse(JsonObject jsonUnit) {
43 final Gson gson = new Gson();
44 TouchWandUnitData touchWandUnit;
45 String type = jsonUnit.get("type").getAsString();
46 if (!Arrays.asList(SUPPORTED_TOUCHWAND_TYPES).contains(type)) {
51 case TYPE_WALLCONTROLLER:
52 touchWandUnit = gson.fromJson(jsonUnit, TouchWandUnitDataWallController.class);
55 touchWandUnit = gson.fromJson(jsonUnit, TouchWandShutterSwitchUnitData.class);
58 touchWandUnit = gson.fromJson(jsonUnit, TouchWandShutterSwitchUnitData.class);
61 touchWandUnit = gson.fromJson(jsonUnit, TouchWandShutterSwitchUnitData.class);
63 case TYPE_ALARMSENSOR:
64 Gson builder = new GsonBuilder()
65 .registerTypeAdapter(TouchWandUnitDataAlarmSensor.class, new AlarmSensorUnitDataDeserializer())
67 touchWandUnit = builder.fromJson(jsonUnit, TouchWandUnitDataAlarmSensor.class);
70 touchWandUnit = gson.fromJson(jsonUnit, TouchWandBSensorUnitData.class);
73 touchWandUnit = gson.fromJson(jsonUnit, TouchWandThermostatUnitData.class);
76 touchWandUnit = new TouchWandUnknownTypeUnitData();
79 touchWandUnit = new TouchWandUnknownTypeUnitData();
82 if (touchWandUnit == null) {
83 touchWandUnit = new TouchWandUnknownTypeUnitData();
89 public static TouchWandUnitData parseResponse(String JsonUnit) {
90 TouchWandUnitData myTouchWandUnitData;
93 unitObj = JsonParser.parseString(JsonUnit).getAsJsonObject();
94 myTouchWandUnitData = parseResponse(unitObj);
95 } catch (JsonParseException | IllegalStateException e) {
96 logger.warn("Could not parse response {}", JsonUnit);
97 myTouchWandUnitData = new TouchWandUnknownTypeUnitData(); // Return unknown type
99 return myTouchWandUnitData;