use of org.eclipse.leshan.core.LwM2m in project thingsboard by thingsboard.
the class DefaultLwM2mDownlinkMsgHandler method sendCreateRequest.
public void sendCreateRequest(LwM2mClient client, TbLwM2MCreateRequest request, DownlinkRequestCallback<CreateRequest, CreateResponse> callback) {
validateVersionedId(client, request);
CreateRequest downlink = null;
LwM2mPath resultIds = new LwM2mPath(request.getObjectId());
ObjectModel objectModel = client.getObjectModel(request.getVersionedId(), modelProvider);
// POST /{Object ID}/{Object Instance ID} && Resources is Mandatory
if (objectModel != null) {
if (objectModel.multiple) {
// LwM2M CBOR, SenML CBOR, SenML JSON, or TLV (see [LwM2M-CORE])
ContentFormat contentFormat = getWriteRequestContentFormat(client, request, modelProvider);
if (resultIds.isObject() || resultIds.isObjectInstance()) {
Collection<LwM2mResource> resources;
if (resultIds.isObject()) {
if (request.getValue() != null) {
resources = client.getNewResourcesForInstance(request.getVersionedId(), request.getValue(), modelProvider, this.converter);
downlink = new CreateRequest(contentFormat, resultIds.getObjectId(), resources);
} else if (request.getNodes() != null && request.getNodes().size() > 0) {
Set<LwM2mObjectInstance> instances = ConcurrentHashMap.newKeySet();
request.getNodes().forEach((key, value) -> {
Collection<LwM2mResource> resourcesForInstance = client.getNewResourcesForInstance(request.getVersionedId(), value, modelProvider, this.converter);
LwM2mObjectInstance instance = new LwM2mObjectInstance(Integer.parseInt(key), resourcesForInstance);
instances.add(instance);
});
LwM2mObjectInstance[] instanceArrays = instances.toArray(new LwM2mObjectInstance[instances.size()]);
downlink = new CreateRequest(contentFormat, resultIds.getObjectId(), instanceArrays);
}
} else {
resources = client.getNewResourcesForInstance(request.getVersionedId(), request.getValue(), modelProvider, this.converter);
LwM2mObjectInstance instance = new LwM2mObjectInstance(resultIds.getObjectInstanceId(), resources);
downlink = new CreateRequest(contentFormat, resultIds.getObjectId(), instance);
}
}
if (downlink != null) {
sendSimpleRequest(client, downlink, request.getTimeout(), callback);
} else {
callback.onValidationError(toString(request), "Path " + request.getVersionedId() + ". Object must be Multiple !");
}
} else {
throw new IllegalArgumentException("Path " + request.getVersionedId() + ". Object must be Multiple !");
}
} else {
callback.onValidationError(toString(request), "Resource " + request.getVersionedId() + " is not configured in the device profile!");
}
}
Aggregations