/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.binding.digitalstrom.internal.lib.serverConnection.impl; import java.util.LinkedList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.serverConnection.DsAPI; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.serverConnection.HttpTransport; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.serverConnection.constants.JSONApiResponseKeysEnum; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.serverConnection.constants.JSONRequestConstants; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.Apartment; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.Device; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.CachedMeteringValue; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.DSID; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.DeviceConfig; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.DeviceParameterClassEnum; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.DeviceSceneSpec; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.JSONCachedMeteringValueImpl; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.JSONDeviceConfigImpl; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.JSONDeviceSceneSpecImpl; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.MeteringTypeEnum; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.MeteringUnitsEnum; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.SensorEnum; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.deviceParameters.SensorIndexEnum; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.devices.impl.JSONDeviceImpl; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.impl.JSONApartmentImpl; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.scene.constants.Scene; import org.eclipse.smarthome.binding.digitalstrom.internal.lib.structure.scene.constants.SceneEnum; import com.google.gson.JsonArray; import com.google.gson.JsonObject; /** * The {@link DsAPIImpl} is the implementation of the {@link DsAPI}. * * @author Alexander Betker * @author Alex Maier * @author Michael Ochel - implements new methods, updates and change from SimpleJSON to GSON * @author Matthias Siegele - implements new methods, updates and change from SimpleJSON to GSON */ public class DsAPIImpl implements DsAPI { private HttpTransport transport = null; public DsAPIImpl(HttpTransport transport) { this.transport = transport; } public DsAPIImpl(String uri, int connectTimeout, int readTimeout) { this.transport = new HttpTransportImpl(uri, connectTimeout, readTimeout); } public DsAPIImpl(String uri, int connectTimeout, int readTimeout, boolean aceptAllCerts) { this.transport = new HttpTransportImpl(uri, connectTimeout, readTimeout, aceptAllCerts); } private boolean withParameterGroupId(int groupID) { return (groupID > -1); } @Override public boolean callApartmentScene(String token, int groupID, String groupName, Scene sceneNumber, boolean force) { if (sceneNumber != null && isValidApartmentSceneNumber(sceneNumber.getSceneNumber())) { String response = null; if (groupName != null) { if (withParameterGroupId(groupID)) { if (force) { response = transport.execute(JSONRequestConstants.JSON_APARTMENT_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_APARTMENT_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } else { if (force) { response = transport.execute(JSONRequestConstants.JSON_APARTMENT_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_APARTMENT_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } } else if (withParameterGroupId(groupID)) { if (force) { response = transport.execute( JSONRequestConstants.JSON_APARTMENT_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute( JSONRequestConstants.JSON_APARTMENT_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } else { if (force) { response = transport.execute( JSONRequestConstants.JSON_APARTMENT_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute( JSONRequestConstants.JSON_APARTMENT_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public boolean undoApartmentScene(String token, int groupID, String groupName, Scene sceneNumber) { if (sceneNumber != null && isValidApartmentSceneNumber(sceneNumber.getSceneNumber())) { String response = null; if (groupName != null) { if (withParameterGroupId(groupID)) { response = transport.execute( JSONRequestConstants.JSON_APARTMENT_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } else { response = transport.execute( JSONRequestConstants.JSON_APARTMENT_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } else if (withParameterGroupId(groupID)) { response = transport.execute(JSONRequestConstants.JSON_APARTMENT_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } else { response = transport.execute( JSONRequestConstants.JSON_APARTMENT_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } private boolean isValidApartmentSceneNumber(int sceneNumber) { return (sceneNumber > -1 && sceneNumber < 256); } @Override public Apartment getApartmentStructure(String token) { String response = null; response = transport.execute( JSONRequestConstants.JSON_APARTMENT_GET_STRUCTURE + JSONRequestConstants.PARAMETER_TOKEN + token); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject apartObj = JSONResponseHandler.getResultJsonObject(responseObj); if (apartObj != null && apartObj.get(JSONApiResponseKeysEnum.APARTMENT_GET_STRUCTURE.getKey()) != null) { return new JSONApartmentImpl( (JsonObject) apartObj.get(JSONApiResponseKeysEnum.APARTMENT_GET_STRUCTURE.getKey())); } } return null; } @Override public List<Device> getApartmentDevices(String token, boolean unassigned) { String response = null; if (unassigned) { response = transport .execute(JSONRequestConstants.JSON_APARTMENT_GET_DEVICES + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_UNASSIGNED_TRUE); } else { response = transport.execute( JSONRequestConstants.JSON_APARTMENT_GET_DEVICES + JSONRequestConstants.PARAMETER_TOKEN + token); } JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj) && responseObj.get(JSONApiResponseKeysEnum.APARTMENT_GET_DEVICES.getKey()) instanceof JsonArray) { JsonArray array = (JsonArray) responseObj.get(JSONApiResponseKeysEnum.APARTMENT_GET_DEVICES.getKey()); List<Device> deviceList = new LinkedList<Device>(); for (int i = 0; i < array.size(); i++) { if (array.get(i) instanceof JsonObject) { deviceList.add(new JSONDeviceImpl((JsonObject) array.get(i))); } } return deviceList; } return new LinkedList<Device>(); } private boolean withParameterZoneId(int id) { return (id > -1); } @Override public boolean callZoneScene(String token, int id, String name, int groupID, String groupName, SceneEnum sceneNumber, boolean force) { if (sceneNumber != null && (withParameterZoneId(id) || name != null)) { String response = null; if (withParameterZoneId(id)) { if (name != null) { if (withParameterGroupId(groupID)) { if (groupName != null) { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } } else { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute( JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID); } } } else if (groupName != null) { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } } else { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } } else { if (withParameterGroupId(groupID)) { if (groupName != null) { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } } else { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute( JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID); } } } else if (groupName != null) { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } } else { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + id + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } } } else if (name != null) { if (withParameterGroupId(groupID)) { if (groupName != null) { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } } else { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID); } } } else if (groupName != null) { if (force) { response = transport .execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } } else { if (force) { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public boolean undoZoneScene(String token, int zoneID, String zoneName, int groupID, String groupName, SceneEnum sceneNumber) { if (sceneNumber != null && (withParameterZoneId(zoneID) || zoneName != null)) { String response = null; if (withParameterZoneId(zoneID)) { if (zoneName != null) { if (withParameterGroupId(groupID)) { if (groupName != null) { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + zoneID + JSONRequestConstants.INFIX_PARAMETER_NAME + zoneName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + zoneID + JSONRequestConstants.INFIX_PARAMETER_NAME + zoneName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID); } } else if (groupName != null) { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + zoneID + JSONRequestConstants.INFIX_PARAMETER_NAME + zoneName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + zoneID + JSONRequestConstants.INFIX_PARAMETER_NAME + zoneName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } else { if (withParameterGroupId(groupID)) { if (groupName != null) { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + zoneID + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + zoneID + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID); } } else if (groupName != null) { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + zoneID + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_ID + zoneID + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } } else if (zoneName != null) { if (withParameterGroupId(groupID)) { if (groupName != null) { response = transport .execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + zoneName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } else { response = transport.execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + zoneName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_ID + groupID); } } else if (groupName != null) { response = transport .execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + zoneName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_GROUP_NAME + groupName); } else { response = transport .execute(JSONRequestConstants.JSON_ZONE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + zoneName + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public boolean turnDeviceOn(String token, DSID dsid, String name) { if (((dsid != null && dsid.getValue() != null) || name != null)) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_TURN_ON + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name); } else { response = transport .execute(JSONRequestConstants.JSON_DEVICE_TURN_ON + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue()); } } else if (name != null) { response = transport .execute(JSONRequestConstants.JSON_DEVICE_TURN_ON + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name); } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public boolean turnDeviceOff(String token, DSID dsid, String name) { if (((dsid != null && dsid.getValue() != null) || name != null)) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_TURN_OFF + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name); } else { response = transport .execute(JSONRequestConstants.JSON_DEVICE_TURN_OFF + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue()); } } else if (name != null) { response = transport .execute(JSONRequestConstants.JSON_DEVICE_TURN_OFF + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name); } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public DeviceConfig getDeviceConfig(String token, DSID dsid, String name, DeviceParameterClassEnum class_, int index) { if (((dsid != null && dsid.getValue() != null) || name != null) && class_ != null && withParameterIndex(index)) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_CONFIG + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_CLASS + class_.getClassIndex() + JSONRequestConstants.INFIX_PARAMETER_INDEX + index, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } else { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_CONFIG + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_CLASS + class_.getClassIndex() + JSONRequestConstants.INFIX_PARAMETER_INDEX + index, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } } else if (name != null) { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_CONFIG + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_CLASS + class_.getClassIndex() + JSONRequestConstants.INFIX_PARAMETER_INDEX + index, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject configObject = JSONResponseHandler.getResultJsonObject(responseObj); if (configObject != null) { return new JSONDeviceConfigImpl(configObject); } } } return null; } private boolean withParameterIndex(int index) { return (index > -1); } @Override public int getDeviceOutputValue(String token, DSID dsid, String name, int offset) { if (((dsid != null && dsid.getValue() != null) || name != null) && withParameterOffset(offset)) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_OUTPUT_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_OFFSET + offset, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } else { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_OUTPUT_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_OFFSET + offset, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } } else if (name != null) { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_OUTPUT_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_OFFSET + offset, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject valueObject = JSONResponseHandler.getResultJsonObject(responseObj); if (valueObject != null && valueObject.get(JSONApiResponseKeysEnum.DEVICE_GET_OUTPUT_VALUE.getKey()) != null) { int value = -1; value = valueObject.get(JSONApiResponseKeysEnum.DEVICE_GET_OUTPUT_VALUE.getKey()).getAsInt(); return value; } } } return -1; } private boolean withParameterOffset(int offset) { return (offset > -1); } private boolean withParameterValue(int value) { return (value > -1); } @Override public boolean setDeviceOutputValue(String token, DSID dsid, String name, int offset, int value) { if (((dsid != null && dsid.getValue() != null) || name != null) && offset > -1 && withParameterValue(value)) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_SET_OUTPUT_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_OFFSET + offset + JSONRequestConstants.INFIX_PARAMETER_VALUE + value); } else { response = transport.execute(JSONRequestConstants.JSON_DEVICE_SET_OUTPUT_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_OFFSET + offset + JSONRequestConstants.INFIX_PARAMETER_VALUE + value); } } else if (name != null) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_SET_OUTPUT_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_OFFSET + offset + JSONRequestConstants.INFIX_PARAMETER_VALUE + value); } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public DeviceSceneSpec getDeviceSceneMode(String token, DSID dsid, String name, short sceneID) { if (((dsid != null && dsid.getValue() != null) || name != null) && sceneID > -1) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_SCENE_MODE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_ID + sceneID, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } else { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_SCENE_MODE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_SCENE_ID + sceneID, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } } else if (name != null) { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_SCENE_MODE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_ID + sceneID, transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject sceneSpec = JSONResponseHandler.getResultJsonObject(responseObj); if (sceneSpec != null) { return new JSONDeviceSceneSpecImpl(sceneSpec); } } } return null; } @Override public short getDeviceSensorValue(String token, DSID dsid, String name, SensorEnum sensorType) { if (((dsid != null && dsid.getValue() != null) || name != null) && sensorType != null) { switch (sensorType) { case ACTIVE_POWER: return getDeviceSensorValue(token, dsid, name, SensorIndexEnum.ACTIVE_POWER); case ELECTRIC_METER: return getDeviceSensorValue(token, dsid, name, SensorIndexEnum.ELECTRIC_METER); case OUTPUT_CURRENT: return getDeviceSensorValue(token, dsid, name, SensorIndexEnum.OUTPUT_CURRENT); default: return -1; } } return -1; } @Override public short getDeviceSensorValue(String token, DSID dsid, String name, SensorIndexEnum sensorIndex) { if (((dsid != null && dsid.getValue() != null) || name != null) && sensorIndex != null) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_SENSOR_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SENSOR_INDEX + sensorIndex.getIndex(), transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } else { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_SENSOR_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_SENSOR_INDEX + sensorIndex.getIndex(), transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } } else if (name != null) { response = transport.execute( JSONRequestConstants.JSON_DEVICE_GET_SENSOR_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SENSOR_INDEX + sensorIndex.getIndex(), transport.getSensordataConnectionTimeout(), transport.getSensordataReadTimeout()); } JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject valueObject = JSONResponseHandler.getResultJsonObject(responseObj); if (valueObject != null && valueObject .get(JSONApiResponseKeysEnum.DEVICE_GET_SENSOR_VALUE_SENSOR_VALUE.getKey()) != null) { short value = -1; value = valueObject.get(JSONApiResponseKeysEnum.DEVICE_GET_SENSOR_VALUE_SENSOR_VALUE.getKey()) .getAsShort(); return value; } } } return -1; } @Override public boolean callDeviceScene(String token, DSID dsid, String name, Scene sceneNumber, boolean force) { if (((dsid != null && dsid.getValue() != null) || name != null) && sceneNumber != null) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { if (force) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_DEVICE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } else { if (force) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_DEVICE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } } else if (name != null) { if (force) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber() + JSONRequestConstants.INFIX_PARAMETER_FORCE_TRUE); } else { response = transport.execute(JSONRequestConstants.JSON_DEVICE_CALLSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public boolean undoDeviceScene(String token, DSID dsid, Scene sceneNumber) { if (((dsid != null && dsid.getValue() != null)) && sceneNumber != null) { String response = null; if (dsid != null && dsid.getValue() != null) { response = transport .execute(JSONRequestConstants.JSON_DEVICE_UNDOSCENE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_SCENE_NUMBER + sceneNumber.getSceneNumber()); } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public boolean subscribeEvent(String token, String name, int subscriptionID, int connectionTimeout, int readTimeout) { if (name != null && !name.trim().equals("") && withParameterSubscriptionID(subscriptionID)) { String response = null; response = transport.execute( JSONRequestConstants.JSON_EVENT_SUBSCRIBE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SUBSCRIPTION_ID + subscriptionID, connectionTimeout, readTimeout); if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public boolean unsubscribeEvent(String token, String name, int subscriptionID, int connectionTimeout, int readTimeout) { if (name != null && !name.trim().equals("") && withParameterSubscriptionID(subscriptionID)) { String response = null; response = transport.execute( JSONRequestConstants.JSON_EVENT_UNSUBSCRIBE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_SUBSCRIPTION_ID + subscriptionID, connectionTimeout, readTimeout); if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } private boolean withParameterSubscriptionID(int subscriptionID) { return (subscriptionID > -1); } @Override public String getEvent(String token, int subscriptionID, int timeout) { if (withParameterSubscriptionID(subscriptionID) && withParameterTimeout(timeout)) { return transport.execute(JSONRequestConstants.JSON_EVENT_GET + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_SUBSCRIPTION_ID + subscriptionID + JSONRequestConstants.INFIX_PARAMETER_TIMEOUT + timeout); } return null; } private boolean withParameterTimeout(int timeout) { return (timeout > -1); } @Override public int getTime(String token) { String response = null; response = transport .execute(JSONRequestConstants.JSON_SYSTEM_TIME + JSONRequestConstants.PARAMETER_TOKEN + token); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null && obj.get(JSONApiResponseKeysEnum.SYSTEM_GET_TIME.getKey()) != null) { int time = -1; time = obj.get(JSONApiResponseKeysEnum.SYSTEM_GET_TIME.getKey()).getAsInt(); return time; } } return -1; } private boolean valueInRange(int value) { return (value > -1 && value < 256); } @Override public List<Integer> getResolutions(String token) { String response = null; response = transport.execute( JSONRequestConstants.JSON_METERING_GET_RESOLUTIONS + JSONRequestConstants.PARAMETER_TOKEN + token); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject resObj = JSONResponseHandler.getResultJsonObject(responseObj); if (resObj != null && resObj.get(JSONApiResponseKeysEnum.METERING_GET_RESOLUTIONS.getKey()) instanceof JsonArray) { JsonArray array = (JsonArray) resObj.get(JSONApiResponseKeysEnum.METERING_GET_RESOLUTIONS.getKey()); List<Integer> resolutionList = new LinkedList<Integer>(); for (int i = 0; i < array.size(); i++) { if (array.get(i) instanceof JsonObject) { JsonObject jObject = (JsonObject) array.get(i); if (jObject.get(JSONApiResponseKeysEnum.METERING_GET_RESOLUTION.getKey()) != null) { int val = -1; val = jObject.get(JSONApiResponseKeysEnum.METERING_GET_RESOLUTION.getKey()).getAsInt(); if (val != -1) { resolutionList.add(val); } } } } return resolutionList; } } return null; } @Override public List<CachedMeteringValue> getLatest(String token, MeteringTypeEnum type, List<String> meterDSIDs, MeteringUnitsEnum unit) { if (type != null && meterDSIDs != null) { String jsonMeterList = ".meters("; for (int i = 0; i < meterDSIDs.size(); i++) { if (!meterDSIDs.get(i).isEmpty()) { jsonMeterList += meterDSIDs.get(i); if (i < meterDSIDs.size() - 1 && !meterDSIDs.get(i + 1).isEmpty()) { jsonMeterList += ","; } else { break; } } } jsonMeterList += ")"; String response = null; if (unit != null && type != MeteringTypeEnum.consumption) { response = transport.execute(JSONRequestConstants.JSON_METERING_GET_LATEST + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_TYPE + type.name() + JSONRequestConstants.INFIX_PARAMETER_FROM + jsonMeterList + JSONRequestConstants.INFIX_PARAMETER_UNIT + unit.name()); } else { response = transport.execute(JSONRequestConstants.JSON_METERING_GET_LATEST + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_TYPE + type.name() + JSONRequestConstants.INFIX_PARAMETER_FROM + jsonMeterList); } JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject latestObj = JSONResponseHandler.getResultJsonObject(responseObj); if (latestObj != null && latestObj.get(JSONApiResponseKeysEnum.METERING_GET_LATEST.getKey()) instanceof JsonArray) { JsonArray array = (JsonArray) latestObj.get(JSONApiResponseKeysEnum.METERING_GET_LATEST.getKey()); List<CachedMeteringValue> list = new LinkedList<CachedMeteringValue>(); for (int i = 0; i < array.size(); i++) { if (array.get(i) instanceof JsonObject) { list.add(new JSONCachedMeteringValueImpl((JsonObject) array.get(i))); } } return list; } } } return null; } @Override public List<CachedMeteringValue> getLatest(String token, MeteringTypeEnum type, String meterDSIDs, MeteringUnitsEnum unit) { if (type != null && meterDSIDs != null) { String response = null; if (unit != null && type != MeteringTypeEnum.consumption) { response = transport.execute(JSONRequestConstants.JSON_METERING_GET_LATEST + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_TYPE + type.name() + JSONRequestConstants.INFIX_PARAMETER_FROM + meterDSIDs + JSONRequestConstants.INFIX_PARAMETER_UNIT + unit.name()); } else { response = transport.execute(JSONRequestConstants.JSON_METERING_GET_LATEST + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_TYPE + type.name() + JSONRequestConstants.INFIX_PARAMETER_FROM + meterDSIDs); } JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject latestObj = JSONResponseHandler.getResultJsonObject(responseObj); if (latestObj != null && latestObj.get(JSONApiResponseKeysEnum.METERING_GET_LATEST.getKey()) instanceof JsonArray) { JsonArray array = (JsonArray) latestObj.get(JSONApiResponseKeysEnum.METERING_GET_LATEST.getKey()); List<CachedMeteringValue> list = new LinkedList<CachedMeteringValue>(); for (int i = 0; i < array.size(); i++) { if (array.get(i) instanceof JsonObject) { list.add(new JSONCachedMeteringValueImpl((JsonObject) array.get(i))); } } return list; } } } return null; } @Override public boolean setDeviceValue(String token, DSID dsid, String name, int value) { if (((dsid != null && dsid.getValue() != null) || name != null) && valueInRange(value)) { String response = null; if (dsid != null && dsid.getValue() != null) { if (name != null) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_SET_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_VALUE + value); } else { response = transport.execute(JSONRequestConstants.JSON_DEVICE_SET_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_DSID + dsid.getValue() + JSONRequestConstants.INFIX_PARAMETER_VALUE + value); } } else if (name != null) { response = transport.execute(JSONRequestConstants.JSON_DEVICE_SET_VALUE + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_NAME + name + JSONRequestConstants.INFIX_PARAMETER_VALUE + value); } if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } } return false; } @Override public List<String> getMeterList(String token) { List<String> meterList = new LinkedList<String>(); String response = transport .execute(JSONRequestConstants.JSON_PROPERTY_QUERY + JSONRequestConstants.PARAMETER_TOKEN + token + JSONRequestConstants.INFIX_PARAMETER_QUERY + JSONRequestConstants.QUERY_GET_METERLIST); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null && obj.get(JSONApiResponseKeysEnum.DS_METER_QUERY.getKey()) instanceof JsonArray) { JsonArray array = (JsonArray) obj.get(JSONApiResponseKeysEnum.DS_METER_QUERY.getKey()); for (int i = 0; i < array.size(); i++) { if (array.get(i) instanceof JsonObject) { meterList.add(array.get(i).getAsJsonObject().get("dSID").getAsString()); } } } } return meterList; } @Override public String loginApplication(String loginToken) { if (StringUtils.isNotBlank(loginToken)) { String response = null; response = transport.execute(JSONRequestConstants.JSON_SYSTEM_LOGIN_APPLICATION + loginToken); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); String tokenStr = null; if (obj != null && obj.get(JSONApiResponseKeysEnum.SYSTEM_LOGIN.getKey()) != null) { tokenStr = obj.get(JSONApiResponseKeysEnum.SYSTEM_LOGIN.getKey()).getAsString(); } if (tokenStr != null) { return tokenStr; } } } return null; } @Override public String login(String user, String password) { String response = null; response = transport.execute(JSONRequestConstants.JSON_SYSTEM_LOGIN + JSONRequestConstants.PARAMETER_USER + user + JSONRequestConstants.INFIX_PARAMETER_PASSWORD + password); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); String tokenStr = null; if (obj != null && obj.get(JSONApiResponseKeysEnum.SYSTEM_LOGIN.getKey()) != null) { tokenStr = obj.get(JSONApiResponseKeysEnum.SYSTEM_LOGIN.getKey()).getAsString(); } if (tokenStr != null) { return tokenStr; } } return null; } @Override public boolean logout() { String response = transport.execute(JSONRequestConstants.JSON_SYSTEM_LOGOUT); if (JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response))) { return true; } return false; } @Override public String getDSID(String token) { String response = transport.execute(JSONRequestConstants.JSON_SYSTEM_GET_DSID + token); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null) { String dsID = obj.get(JSONApiResponseKeysEnum.SYSTEM_DSID.getKey()).getAsString(); if (dsID != null) { return dsID; } } } return null; } @Override public boolean enableApplicationToken(String applicationToken, String sessionToken) { String response = null; response = transport.execute( "/json/system/enableToken?applicationToken=" + applicationToken + "&token=" + sessionToken, 60000, 60000); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); return JSONResponseHandler.checkResponse(responseObj); } @Override public String requestAppplicationToken(String applicationName) { String response = transport.execute("/json/system/requestApplicationToken?applicationName=" + applicationName); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null) { String aplicationToken = obj.get(JSONApiResponseKeysEnum.SYSTEM_APPLICATION_TOKEN.getKey()) .getAsString(); if (aplicationToken != null) { return aplicationToken; } } } return null; } @Override public boolean revokeToken(String applicationToken, String sessionToken) { String response = null; response = transport .execute("/json/system/revokeToken?applicationToken=" + applicationToken + "&token=" + sessionToken); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); return JSONResponseHandler.checkResponse(responseObj); } @Override public int checkConnection(String token) { return transport.checkConnection("/json/apartment/getName?token=" + token); } @Override public int[] getSceneValue(String token, DSID dsid, short sceneId) { String response = null; int[] value = { -1, -1 }; response = transport.execute( "/json/device/getSceneValue?dsid=" + dsid.toString() + "&sceneID=" + sceneId + "&token=" + token, 4000, 20000); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null && obj.get("value") != null) { value[0] = obj.get("value").getAsInt(); if (obj.get("angle") != null) { value[1] = obj.get("angle").getAsInt(); } return value; } } return value; } @Override public boolean increaseValue(String sessionToken, DSID dsid) { String response = null; response = transport.execute("/json/device/increaseValue?dsid=" + dsid.toString() + "&token=" + sessionToken); return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response)); } @Override public boolean decreaseValue(String sessionToken, DSID dsid) { String response = null; response = transport.execute("/json/device/decreaseValue?dsid=" + dsid.toString() + "&token=" + sessionToken); return JSONResponseHandler.checkResponse(JSONResponseHandler.toJsonObject(response)); } @Override public String getInstallationName(String sessionToken) { String response = null; response = transport.execute(" /json/apartment/getName?token=" + sessionToken); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null && obj.get("name") != null) { return obj.get("name").getAsString(); } } return null; } @Override public String getZoneName(String sessionToken, int zoneID) { String response = null; response = transport.execute(" /json/zone/getName?id=" + zoneID + "&token=" + sessionToken); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null && obj.get("name") != null) { return obj.get("name").getAsString(); } } return null; } @Override public String getDeviceName(String sessionToken, DSID dSID) { String response = null; response = transport.execute(" /json/device/getName?dsid=" + dSID.toString() + "&token=" + sessionToken); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null && obj.get("name") != null) { return obj.get("name").getAsString(); } } return null; } @Override public String getCircuitName(String sessionToken, DSID dSID) { String response = null; response = transport.execute("/json/circuit/getName?id=" + dSID.toString() + "&token=" + sessionToken); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null && obj.get("name") != null) { return obj.get("name").getAsString(); } } return null; } @Override public String getSceneName(String sessionToken, int zoneID, int groupID, short sceneID) { String response = null; response = transport.execute("/json/zone/sceneGetName?id" + zoneID + "&groupID?" + groupID + "&sceneNumber=" + sceneID + "&token=" + sessionToken); JsonObject responseObj = JSONResponseHandler.toJsonObject(response); if (JSONResponseHandler.checkResponse(responseObj)) { JsonObject obj = JSONResponseHandler.getResultJsonObject(responseObj); if (obj != null && obj.get("name") != null) { return obj.get("name").getAsString(); } } return null; } }