/* * Copyright 2016 Baidu, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ package com.baidubce.services.iotdm; import com.baidubce.AbstractBceClient; import com.baidubce.BceClientConfiguration; import com.baidubce.http.HttpMethodName; import com.baidubce.internal.InternalRequest; import com.baidubce.model.AbstractBceRequest; import com.baidubce.model.AbstractBceResponse; import com.baidubce.model.GenericAccountRequest; import com.baidubce.services.iotdm.model.CreateDevicesRequest; import com.baidubce.services.iotdm.model.CreateDevicesResponse; import com.baidubce.services.iotdm.model.CreateGroupRequest; import com.baidubce.services.iotdm.model.DeviceAccessDetail; import com.baidubce.services.iotdm.model.DeviceOperationRequest; import com.baidubce.services.iotdm.model.DeviceProfileResponse; import com.baidubce.services.iotdm.model.DeviceQueryRequest; import com.baidubce.services.iotdm.model.DeviceQueryResponse; import com.baidubce.services.iotdm.model.GroupInfoResponse; import com.baidubce.services.iotdm.model.GroupListResponse; import com.baidubce.services.iotdm.model.RemoveDevicesRequest; import com.baidubce.services.iotdm.model.UpdateDeviceProfileRequest; import com.baidubce.services.iotdm.model.UpdateDeviceRegistryRequest; import com.baidubce.services.iotdm.model.UpdateGroupRequest; import com.google.common.base.Preconditions; /** * Provides the client for accessing the iot device management. */ public class IotDmClient extends AbstractBceClient { private static final String DEVICE = "device"; private static final String GROUP = "group"; private static final String CHILDREN = "children"; private static final String ACCESS_DETAIL = "accessDetail"; private static final String CLIENT_TOKEN = "clientToken"; private static final String DISABLE = "disable"; private static final String ENABLE = "enable"; private static final String QUERY = "query"; private static final String REBOOT = "reboot"; private static final String REMOVE = "remove"; private static final String ROOT = "root"; private static final String UPDATE_PROFILE = "updateProfile"; private static final String UPDATE_REGISTRY = "updateRegistry"; public IotDmClient(BceClientConfiguration config) { super(config, IotDmClientHelper.IOT_DM_HANDLERS); } public CreateDevicesResponse createDevices(CreateDevicesRequest createDevicesRequest, String clientToken) { return doCreation(createDevicesRequest, clientToken, DEVICE, CreateDevicesResponse.class); } public void removeDevices(RemoveDevicesRequest removeDevicesRequest) { deviceBatchOperation(removeDevicesRequest, REMOVE); } public DeviceProfileResponse getDeviceProfile(String deviceName) { Preconditions.checkNotNull(deviceName, "device name should not be null."); InternalRequest internalRequest = createRequest(new GenericAccountRequest(), HttpMethodName.GET, DEVICE, deviceName); return this.invokeHttpClient(internalRequest, DeviceProfileResponse.class); } public DeviceQueryResponse getDeviceProfiles(DeviceQueryRequest deviceQueryRequest) { Preconditions.checkNotNull(deviceQueryRequest, "request should not be null."); InternalRequest internalRequest = createRequest(deviceQueryRequest, HttpMethodName.PUT, DEVICE); internalRequest.addParameter(QUERY, null); return this.invokeHttpClient(internalRequest, DeviceQueryResponse.class); } public DeviceAccessDetail getDeviceAccessDetail(String deviceName) { Preconditions.checkNotNull(deviceName, "device name should not be null."); InternalRequest internalRequest = createRequest(new GenericAccountRequest(), HttpMethodName.GET, DEVICE, deviceName, ACCESS_DETAIL); return this.invokeHttpClient(internalRequest, DeviceAccessDetail.class); } public void updateDeviceProfile(UpdateDeviceProfileRequest updateDeviceProfileRequest) { deviceBatchOperation(updateDeviceProfileRequest, UPDATE_PROFILE); } public void updateDeviceRegistry(UpdateDeviceRegistryRequest updateDeviceRegistryRequest) { deviceBatchOperation(updateDeviceRegistryRequest, UPDATE_REGISTRY); } public void disableDevices(DeviceOperationRequest deviceOperationRequest) { deviceBatchOperation(deviceOperationRequest, DISABLE); } public void enableDevices(DeviceOperationRequest deviceOperationRequest) { deviceBatchOperation(deviceOperationRequest, ENABLE); } public void rebootDevices(DeviceOperationRequest deviceOperationRequest) { deviceBatchOperation(deviceOperationRequest, REBOOT); } public GroupInfoResponse createGroup(CreateGroupRequest createGroupRequest, String clientToken) { return doCreation(createGroupRequest, clientToken, GROUP, GroupInfoResponse.class); } public void removeGroup(String groupId) { Preconditions.checkNotNull(groupId, "groupId should not be null."); InternalRequest internalRequest = createRequest(new GenericAccountRequest(), HttpMethodName.DELETE, GROUP, groupId); this.invokeHttpClient(internalRequest, AbstractBceResponse.class); } public void updateGroup(String groupId, UpdateGroupRequest updateGroupRequest) { Preconditions.checkNotNull(groupId, "groupId should not be null."); Preconditions.checkNotNull(updateGroupRequest, "request should not be null."); InternalRequest internalRequest = createRequest(updateGroupRequest, HttpMethodName.PUT, GROUP, groupId); this.invokeHttpClient(internalRequest, AbstractBceResponse.class); } public GroupInfoResponse getGroup(String groupId) { Preconditions.checkNotNull(groupId, "groupId should not be null."); InternalRequest internalRequest = createRequest(new GenericAccountRequest(), HttpMethodName.GET, GROUP, groupId); return this.invokeHttpClient(internalRequest, GroupInfoResponse.class); } public GroupListResponse getChildGroups(String groupId) { Preconditions.checkNotNull(groupId, "groupId should not be null."); InternalRequest internalRequest = createRequest(new GenericAccountRequest(), HttpMethodName.GET, GROUP, groupId, CHILDREN); return this.invokeHttpClient(internalRequest, GroupListResponse.class); } public GroupListResponse getRootGroups() { return getGroups(ROOT); } public GroupListResponse getDeviceGroups() { return getGroups(DEVICE); } private <T extends AbstractBceResponse> T doCreation(AbstractBceRequest request, String clientToken, String objectPath, Class<T> responseClass) { Preconditions.checkNotNull(request, "request should not be null."); Preconditions.checkNotNull(clientToken, "client token should not be null"); InternalRequest internalRequest = createRequest(request, HttpMethodName.POST, objectPath); internalRequest.addParameter(CLIENT_TOKEN, clientToken); return this.invokeHttpClient(internalRequest, responseClass); } private void deviceBatchOperation(AbstractBceRequest request, String parameter) { Preconditions.checkNotNull(request, "request should not be null."); InternalRequest internalRequest = createRequest(request, HttpMethodName.PUT, DEVICE); internalRequest.addParameter(parameter, null); this.invokeHttpClient(internalRequest, AbstractBceResponse.class); } private GroupListResponse getGroups(String param) { InternalRequest internalRequest = createRequest(new GenericAccountRequest(), HttpMethodName.GET, GROUP); internalRequest.addParameter(param, null); return this.invokeHttpClient(internalRequest, GroupListResponse.class); } private InternalRequest createRequest(AbstractBceRequest bceRequest, HttpMethodName httpMethod, String... pathVariables) { return IotDmClientHelper.createRequest(bceRequest, httpMethod, this.getEndpoint(), null, pathVariables); } }