Browse Source

add-device-entity-to-claim-result (#1907)

* add-device-to-claim-result

* code update

* code-update
pull/1914/head
ShvaykaD 7 years ago
committed by Andrew Shvayka
parent
commit
fa5c86f434
  1. 25
      application/src/main/java/org/thingsboard/server/controller/DeviceController.java
  2. 4
      dao/src/main/java/org/thingsboard/server/dao/device/ClaimDevicesService.java
  3. 13
      dao/src/main/java/org/thingsboard/server/dao/device/ClaimDevicesServiceImpl.java
  4. 30
      dao/src/main/java/org/thingsboard/server/dao/device/claim/ClaimResult.java

25
application/src/main/java/org/thingsboard/server/controller/DeviceController.java

@ -46,6 +46,7 @@ import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.security.DeviceCredentials;
import org.thingsboard.server.controller.claim.data.ClaimRequest;
import org.thingsboard.server.dao.device.claim.ClaimResponse;
import org.thingsboard.server.dao.device.claim.ClaimResult;
import org.thingsboard.server.dao.exception.IncorrectParameterException;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.service.security.model.SecurityUser;
@ -406,19 +407,27 @@ public class DeviceController extends BaseController {
device.getId(), device);
String secretKey = getSecretKey(claimRequest);
ListenableFuture<ClaimResponse> future = claimDevicesService.claimDevice(device, customerId, secretKey);
Futures.addCallback(future, new FutureCallback<ClaimResponse>() {
ListenableFuture<ClaimResult> future = claimDevicesService.claimDevice(device, customerId, secretKey);
Futures.addCallback(future, new FutureCallback<ClaimResult>() {
@Override
public void onSuccess(@Nullable ClaimResponse result) {
public void onSuccess(@Nullable ClaimResult result) {
HttpStatus status;
if (result.equals(ClaimResponse.SUCCESS)) {
status = HttpStatus.OK;
if (result != null) {
if (result.getResponse().equals(ClaimResponse.SUCCESS)) {
status = HttpStatus.OK;
deferredResult.setResult(new ResponseEntity<>(result, status));
} else {
status = HttpStatus.BAD_REQUEST;
if (result.getResponse().equals(ClaimResponse.FAILURE)) {
deferredResult.setResult(new ResponseEntity<>(result.getResponse(), status));
} else {
deferredResult.setResult(new ResponseEntity<>(result, status));
}
}
} else {
status = HttpStatus.BAD_REQUEST;
deferredResult.setResult(new ResponseEntity<>(HttpStatus.BAD_REQUEST));
}
deferredResult.setResult(new ResponseEntity<>(result, status));
}
@Override
public void onFailure(Throwable t) {
deferredResult.setErrorResult(t);

4
dao/src/main/java/org/thingsboard/server/dao/device/ClaimDevicesService.java

@ -20,7 +20,7 @@ import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.dao.device.claim.ClaimResponse;
import org.thingsboard.server.dao.device.claim.ClaimResult;
import java.util.List;
@ -28,7 +28,7 @@ public interface ClaimDevicesService {
ListenableFuture<Void> registerClaimingInfo(TenantId tenantId, DeviceId deviceId, String secretKey, long durationMs);
ListenableFuture<ClaimResponse> claimDevice(Device device, CustomerId customerId, String secretKey);
ListenableFuture<ClaimResult> claimDevice(Device device, CustomerId customerId, String secretKey);
ListenableFuture<List<Void>> reClaimDevice(TenantId tenantId, Device device);

13
dao/src/main/java/org/thingsboard/server/dao/device/ClaimDevicesServiceImpl.java

@ -34,6 +34,7 @@ import org.thingsboard.server.common.data.kv.BooleanDataEntry;
import org.thingsboard.server.dao.attributes.AttributesService;
import org.thingsboard.server.dao.device.claim.ClaimData;
import org.thingsboard.server.dao.device.claim.ClaimResponse;
import org.thingsboard.server.dao.device.claim.ClaimResult;
import org.thingsboard.server.dao.model.ModelConstants;
import java.util.Collections;
@ -95,7 +96,7 @@ public class ClaimDevicesServiceImpl implements ClaimDevicesService {
}
@Override
public ListenableFuture<ClaimResponse> claimDevice(Device device, CustomerId customerId, String secretKey) {
public ListenableFuture<ClaimResult> claimDevice(Device device, CustomerId customerId, String secretKey) {
List<Object> key = constructCacheKey(device.getId());
Cache cache = cacheManager.getCache(CLAIM_DEVICES_CACHE);
ClaimData claimData = cache.get(key, ClaimData.class);
@ -104,18 +105,18 @@ public class ClaimDevicesServiceImpl implements ClaimDevicesService {
if (currTs > claimData.getExpirationTime() || !secretKey.equals(claimData.getSecretKey())) {
log.warn("The claiming timeout occurred or wrong 'secretKey' provided for the device [{}]", device.getName());
cache.evict(key);
return Futures.immediateFuture(ClaimResponse.FAILURE);
return Futures.immediateFuture(new ClaimResult(null, ClaimResponse.FAILURE));
} else {
if (device.getCustomerId().getId().equals(ModelConstants.NULL_UUID)) {
device.setCustomerId(customerId);
deviceService.saveDevice(device);
return Futures.transform(removeClaimingSavedData(cache, key, device), result -> ClaimResponse.SUCCESS);
Device savedDevice = deviceService.saveDevice(device);
return Futures.transform(removeClaimingSavedData(cache, key, device), result -> new ClaimResult(savedDevice, ClaimResponse.SUCCESS));
}
return Futures.transform(removeClaimingSavedData(cache, key, device), result -> ClaimResponse.CLAIMED);
return Futures.transform(removeClaimingSavedData(cache, key, device), result -> new ClaimResult(device, ClaimResponse.CLAIMED));
}
} else {
log.warn("Failed to find the device's claiming message![{}]", device.getName());
return Futures.immediateFuture(ClaimResponse.CLAIMED);
return Futures.immediateFuture(new ClaimResult(device, ClaimResponse.CLAIMED));
}
}

30
dao/src/main/java/org/thingsboard/server/dao/device/claim/ClaimResult.java

@ -0,0 +1,30 @@
/**
* Copyright © 2016-2019 The Thingsboard Authors
*
* 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 org.thingsboard.server.dao.device.claim;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.thingsboard.server.common.data.Device;
@AllArgsConstructor
@Data
public class ClaimResult {
private Device device;
private ClaimResponse response;
}
Loading…
Cancel
Save