2 * Copyright (c) 2010-2020 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
14 package org.openhab.binding.touchwand.internal.dto;
16 import java.lang.reflect.Type;
17 import java.util.Map.Entry;
19 import org.openhab.binding.touchwand.internal.dto.TouchWandAlarmSensorCurrentStatus.Alarm;
20 import org.openhab.binding.touchwand.internal.dto.TouchWandAlarmSensorCurrentStatus.BinarySensor;
22 import com.google.gson.Gson;
23 import com.google.gson.GsonBuilder;
24 import com.google.gson.JsonDeserializationContext;
25 import com.google.gson.JsonDeserializer;
26 import com.google.gson.JsonElement;
27 import com.google.gson.JsonObject;
28 import com.google.gson.JsonParseException;
31 * The {@link AlarmSensorUnitDataDeserializer} implements AlarmSensorUnitData unit
34 * @author Roie Geron - Initial contribution
36 public class AlarmSensorUnitDataDeserializer implements JsonDeserializer<TouchWandUnitDataAlarmSensor> {
38 static final Gson gson = new Gson();
39 static GsonBuilder builder = new GsonBuilder();
42 public TouchWandUnitDataAlarmSensor deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
43 throws JsonParseException {
45 TouchWandUnitDataAlarmSensor touchWandUnitDataAlarmSensor = new TouchWandUnitDataAlarmSensor();
47 JsonObject jsonObject = json.getAsJsonObject();
48 touchWandUnitDataAlarmSensor.setId(jsonObject.get("id").getAsInt());
49 touchWandUnitDataAlarmSensor.setName(jsonObject.get("name").getAsString());
50 touchWandUnitDataAlarmSensor.setConnectivity(jsonObject.get("connectivity").getAsString());
51 touchWandUnitDataAlarmSensor.setType(jsonObject.get("type").getAsString());
52 touchWandUnitDataAlarmSensor.setHasBattery(jsonObject.get("hasBattery").getAsBoolean());
53 JsonElement powerMeterElement = jsonObject.get("hasPowerMeter");
54 if (powerMeterElement != null && !powerMeterElement.isJsonNull()) {
55 touchWandUnitDataAlarmSensor.setHasPowerMeter(powerMeterElement.getAsBoolean());
57 touchWandUnitDataAlarmSensor.setHasPowerMeter(false);
60 JsonElement status = jsonObject.get("status");
61 if (status != null && !status.isJsonNull()) { // Sometimes status is null
62 touchWandUnitDataAlarmSensor.setStatus(jsonObject.get("status").getAsString());
65 JsonObject currentStatusObj = builder.create().fromJson(jsonObject.get("currStatus").getAsJsonObject(),
68 if (currentStatusObj != null) {
70 TouchWandAlarmSensorCurrentStatus touchWandUnitDataAlarmSensorCurrentStatus = touchWandUnitDataAlarmSensor
73 for (Entry<String, JsonElement> entry : currentStatusObj.entrySet()) {
74 String key = entry.getKey();
75 String splits[] = key.split("_"); // the key is xxxx_n where xxx is sensor type and n is
76 String keyName = splits[0];
79 if (splits.length > 1 && !splits[1].isEmpty()) {
81 index = Integer.parseInt(splits[1]);
82 } catch (final NumberFormatException e) {
89 touchWandUnitDataAlarmSensorCurrentStatus.setBatt(entry.getValue().getAsInt());
92 Alarm alarm = gson.fromJson(entry.getValue().getAsJsonObject(), Alarm.class);
93 TouchWandAlarmSensorCurrentStatus.AlarmEvent alarmEvent = new TouchWandAlarmSensorCurrentStatus.AlarmEvent();
95 alarmEvent.alarm = alarm;
96 alarmEvent.alarmType = index;
98 touchWandUnitDataAlarmSensor.getCurrStatus().getAlarmsStatus().add(alarmEvent);
101 TouchWandAlarmSensorCurrentStatus.Sensor sensor = new TouchWandAlarmSensorCurrentStatus.Sensor();
102 sensor.value = entry.getValue().getAsFloat();
104 touchWandUnitDataAlarmSensor.getCurrStatus().getSensorsStatus().add(sensor);
107 BinarySensor bsensor = gson.fromJson(entry.getValue().getAsJsonObject(), BinarySensor.class);
108 TouchWandAlarmSensorCurrentStatus.BinarySensorEvent bsensorevent = new TouchWandAlarmSensorCurrentStatus.BinarySensorEvent();
109 if (bsensor != null) {
110 bsensorevent.sensor = bsensor;
111 bsensorevent.sensorType = index;
113 touchWandUnitDataAlarmSensor.getCurrStatus().getbSensorsStatus().add(bsensorevent);
120 return touchWandUnitDataAlarmSensor;